@jackuait/blok 0.6.0-beta.13 → 0.6.0-beta.14

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 (246) hide show
  1. package/dist/blok.mjs +2 -2
  2. package/dist/chunks/{blok-DzeTRJ_i.mjs → blok-Cl30YOLl.mjs} +1398 -1132
  3. package/dist/chunks/{i18next-loader-CgW4H90H.mjs → i18next-loader-DbTDlMux.mjs} +1 -1
  4. package/dist/chunks/{index-BWKk7PIS.mjs → index-DJmaYswj.mjs} +1 -1
  5. package/dist/chunks/{inline-tool-convert-DrSwadw_.mjs → inline-tool-convert-MjSaP8r7.mjs} +161 -145
  6. package/dist/{messages-B1Aww8q7.mjs → chunks/messages-1mYyrppy.mjs} +1 -0
  7. package/dist/chunks/{messages-DnIhyAJk.mjs → messages-4gHfbcDp.mjs} +1 -0
  8. package/dist/{messages-CQwpzUFp.mjs → chunks/messages-6xYv-U8A.mjs} +1 -0
  9. package/dist/chunks/{messages-CMkNSDTo.mjs → messages-7jqF79FO.mjs} +1 -0
  10. package/dist/chunks/{messages-BSbjsyHY.mjs → messages-B3EUuA7o.mjs} +1 -0
  11. package/dist/{messages-LPVfA-8K.mjs → chunks/messages-B6srtRn7.mjs} +1 -0
  12. package/dist/chunks/{messages-DJDG55Vq.mjs → messages-B85OIs0E.mjs} +1 -0
  13. package/dist/{messages-_ErNTNhk.mjs → chunks/messages-BCYBBG_u.mjs} +1 -0
  14. package/dist/{messages-CZygwLwM.mjs → chunks/messages-BDLNPiaW.mjs} +1 -0
  15. package/dist/{messages-C2htQ_3F.mjs → chunks/messages-BKpNd1Zb.mjs} +1 -0
  16. package/dist/chunks/{messages-CnwibSvh.mjs → messages-BLFUid_o.mjs} +1 -0
  17. package/dist/{messages-CVw84KdI.mjs → chunks/messages-BNPTVKnc.mjs} +1 -0
  18. package/dist/{messages-BMv4xwIr.mjs → chunks/messages-BQPXSkri.mjs} +1 -0
  19. package/dist/{messages-Dz9L52ol.mjs → chunks/messages-BQu6VNDq.mjs} +1 -0
  20. package/dist/{messages-DprmQg6V.mjs → chunks/messages-BRodFKUo.mjs} +1 -0
  21. package/dist/{messages-CznZadDf.mjs → chunks/messages-BWIikA8H.mjs} +1 -0
  22. package/dist/{messages-CqWJcCbY.mjs → chunks/messages-BXQvMilx.mjs} +1 -0
  23. package/dist/chunks/{messages-Z9nEU2xK.mjs → messages-BZ92luiw.mjs} +1 -0
  24. package/dist/chunks/{messages-BC86qLvI.mjs → messages-Bg0Phlcj.mjs} +1 -0
  25. package/dist/chunks/{messages-DnXLrlHh.mjs → messages-Bh6RBIu5.mjs} +1 -0
  26. package/dist/chunks/{messages-DhLKYm2j.mjs → messages-BnFHdIpg.mjs} +1 -0
  27. package/dist/{messages-BU2nlrLK.mjs → chunks/messages-Bq82EVsw.mjs} +1 -0
  28. package/dist/chunks/{messages-Diu6jAaR.mjs → messages-BxbcTiHh.mjs} +1 -0
  29. package/dist/{messages-BoJc_p1r.mjs → chunks/messages-ByO6bSV2.mjs} +1 -0
  30. package/dist/chunks/{messages-BrPFGbM-.mjs → messages-ByUNPiQ4.mjs} +1 -0
  31. package/dist/chunks/{messages-BB5z9Uba.mjs → messages-Byw0EHyf.mjs} +1 -0
  32. package/dist/chunks/{messages-D1Hv8XGo.mjs → messages-C-aP90zq.mjs} +1 -0
  33. package/dist/chunks/{messages-DBRw-7Zc.mjs → messages-C2f44jci.mjs} +1 -0
  34. package/dist/chunks/{messages-CJdUsQ-c.mjs → messages-CKYoAmm9.mjs} +1 -0
  35. package/dist/chunks/{messages-CvGLfqmV.mjs → messages-CSQJrJ_N.mjs} +1 -0
  36. package/dist/chunks/{messages-1fC8IMyX.mjs → messages-CX_o4Cgc.mjs} +1 -0
  37. package/dist/chunks/{messages-BdeLo0N9.mjs → messages-C_tfXllT.mjs} +1 -0
  38. package/dist/chunks/{messages-DBn76jVV.mjs → messages-Cj6TZ_By.mjs} +1 -0
  39. package/dist/{messages-CLhcMlTc.mjs → chunks/messages-CjdYkfzj.mjs} +1 -0
  40. package/dist/{messages-7W4d0DwD.mjs → chunks/messages-CmvWFWR6.mjs} +1 -0
  41. package/dist/{messages-CzTufCHu.mjs → chunks/messages-CnV-kxh6.mjs} +1 -0
  42. package/dist/chunks/{messages-BMXCuEKO.mjs → messages-CpuDfpdi.mjs} +1 -0
  43. package/dist/chunks/{messages-DT4dP5uK.mjs → messages-Cspe1oXk.mjs} +1 -0
  44. package/dist/{messages-D-ZtY5v0.mjs → chunks/messages-D2_d-Jt4.mjs} +1 -0
  45. package/dist/{messages-BELRf6DU.mjs → chunks/messages-DADSbW8l.mjs} +1 -0
  46. package/dist/chunks/{messages-O5tQus_0.mjs → messages-DHSeTQ4S.mjs} +1 -0
  47. package/dist/{messages-BFG6Wlgy.mjs → chunks/messages-DKeO2RsW.mjs} +1 -0
  48. package/dist/chunks/{messages-9SihnaXQ.mjs → messages-DLdlX_dY.mjs} +1 -0
  49. package/dist/chunks/{messages-BL0tXcDf.mjs → messages-DVxlJ4DU.mjs} +1 -0
  50. package/dist/chunks/{messages-CY8_RyFE.mjs → messages-DWSxENRk.mjs} +1 -0
  51. package/dist/{messages-Q7AO_FLv.mjs → chunks/messages-D_bVNZ12.mjs} +1 -0
  52. package/dist/chunks/{messages-BYyy6Wqf.mjs → messages-DdzjVwmG.mjs} +1 -0
  53. package/dist/chunks/{messages-DLfR5bMd.mjs → messages-DhyBKTi0.mjs} +1 -0
  54. package/dist/chunks/{messages-DvFLX36Q.mjs → messages-DlC9jDXa.mjs} +1 -0
  55. package/dist/chunks/{messages-D5C3J9qr.mjs → messages-DmBGk8ed.mjs} +1 -0
  56. package/dist/chunks/{messages-R3hUSvr3.mjs → messages-Dm_VqpU6.mjs} +1 -0
  57. package/dist/chunks/{messages-w7v1GNaE.mjs → messages-Dn9hI_ER.mjs} +1 -0
  58. package/dist/{messages-uKX8WBaD.mjs → chunks/messages-Dssp4AXT.mjs} +1 -0
  59. package/dist/chunks/{messages-Xq8UmkVs.mjs → messages-DzCc0JgS.mjs} +1 -0
  60. package/dist/chunks/{messages-JELdtT6E.mjs → messages-N6THNxo0.mjs} +1 -0
  61. package/dist/chunks/{messages-DqM1LFg5.mjs → messages-OctOxF2l.mjs} +1 -0
  62. package/dist/chunks/{messages-_ncGrKHh.mjs → messages-QT3JA95K.mjs} +1 -0
  63. package/dist/{messages-C9eaarcK.mjs → chunks/messages-QqWK83BF.mjs} +1 -0
  64. package/dist/chunks/{messages-BogRq8lt.mjs → messages-RsGaDzbb.mjs} +1 -0
  65. package/dist/chunks/{messages-Dzwxv9v1.mjs → messages-c7YlI6Wm.mjs} +1 -0
  66. package/dist/{messages-D5iv1Kox.mjs → chunks/messages-lZ8aF-4r.mjs} +1 -0
  67. package/dist/chunks/{messages-7QoX8DkW.mjs → messages-uGDrchjb.mjs} +1 -0
  68. package/dist/chunks/{messages-CKI54h6O.mjs → messages-xc2yNvog.mjs} +1 -0
  69. package/dist/{messages-Bmu_S7GM.mjs → chunks/messages-y5Q-ymIx.mjs} +1 -0
  70. package/dist/{messages-BWF-zUpY.mjs → chunks/messages-yJnyedAd.mjs} +1 -0
  71. package/dist/{messages-kep5wtm4.mjs → chunks/messages-yQ_4upHh.mjs} +1 -0
  72. package/dist/chunks/{messages-C99mq906.mjs → messages-ysbWD56Q.mjs} +1 -0
  73. package/dist/full.mjs +2 -2
  74. package/dist/locales.mjs +68 -67
  75. package/dist/{chunks/messages-B1Aww8q7.mjs → messages-1mYyrppy.mjs} +1 -0
  76. package/dist/{messages-DnIhyAJk.mjs → messages-4gHfbcDp.mjs} +1 -0
  77. package/dist/{chunks/messages-CQwpzUFp.mjs → messages-6xYv-U8A.mjs} +1 -0
  78. package/dist/{messages-CMkNSDTo.mjs → messages-7jqF79FO.mjs} +1 -0
  79. package/dist/{messages-BSbjsyHY.mjs → messages-B3EUuA7o.mjs} +1 -0
  80. package/dist/{chunks/messages-LPVfA-8K.mjs → messages-B6srtRn7.mjs} +1 -0
  81. package/dist/{messages-DJDG55Vq.mjs → messages-B85OIs0E.mjs} +1 -0
  82. package/dist/{chunks/messages-_ErNTNhk.mjs → messages-BCYBBG_u.mjs} +1 -0
  83. package/dist/{chunks/messages-CZygwLwM.mjs → messages-BDLNPiaW.mjs} +1 -0
  84. package/dist/{chunks/messages-C2htQ_3F.mjs → messages-BKpNd1Zb.mjs} +1 -0
  85. package/dist/{messages-CnwibSvh.mjs → messages-BLFUid_o.mjs} +1 -0
  86. package/dist/{chunks/messages-CVw84KdI.mjs → messages-BNPTVKnc.mjs} +1 -0
  87. package/dist/{chunks/messages-BMv4xwIr.mjs → messages-BQPXSkri.mjs} +1 -0
  88. package/dist/{chunks/messages-Dz9L52ol.mjs → messages-BQu6VNDq.mjs} +1 -0
  89. package/dist/{chunks/messages-DprmQg6V.mjs → messages-BRodFKUo.mjs} +1 -0
  90. package/dist/{chunks/messages-CznZadDf.mjs → messages-BWIikA8H.mjs} +1 -0
  91. package/dist/{chunks/messages-CqWJcCbY.mjs → messages-BXQvMilx.mjs} +1 -0
  92. package/dist/{messages-Z9nEU2xK.mjs → messages-BZ92luiw.mjs} +1 -0
  93. package/dist/{messages-BC86qLvI.mjs → messages-Bg0Phlcj.mjs} +1 -0
  94. package/dist/{messages-DnXLrlHh.mjs → messages-Bh6RBIu5.mjs} +1 -0
  95. package/dist/{messages-DhLKYm2j.mjs → messages-BnFHdIpg.mjs} +1 -0
  96. package/dist/{chunks/messages-BU2nlrLK.mjs → messages-Bq82EVsw.mjs} +1 -0
  97. package/dist/{messages-Diu6jAaR.mjs → messages-BxbcTiHh.mjs} +1 -0
  98. package/dist/{chunks/messages-BoJc_p1r.mjs → messages-ByO6bSV2.mjs} +1 -0
  99. package/dist/{messages-BrPFGbM-.mjs → messages-ByUNPiQ4.mjs} +1 -0
  100. package/dist/{messages-BB5z9Uba.mjs → messages-Byw0EHyf.mjs} +1 -0
  101. package/dist/{messages-D1Hv8XGo.mjs → messages-C-aP90zq.mjs} +1 -0
  102. package/dist/{messages-DBRw-7Zc.mjs → messages-C2f44jci.mjs} +1 -0
  103. package/dist/{messages-CJdUsQ-c.mjs → messages-CKYoAmm9.mjs} +1 -0
  104. package/dist/{messages-CvGLfqmV.mjs → messages-CSQJrJ_N.mjs} +1 -0
  105. package/dist/{messages-1fC8IMyX.mjs → messages-CX_o4Cgc.mjs} +1 -0
  106. package/dist/{messages-BdeLo0N9.mjs → messages-C_tfXllT.mjs} +1 -0
  107. package/dist/{messages-DBn76jVV.mjs → messages-Cj6TZ_By.mjs} +1 -0
  108. package/dist/{chunks/messages-CLhcMlTc.mjs → messages-CjdYkfzj.mjs} +1 -0
  109. package/dist/{chunks/messages-7W4d0DwD.mjs → messages-CmvWFWR6.mjs} +1 -0
  110. package/dist/{chunks/messages-CzTufCHu.mjs → messages-CnV-kxh6.mjs} +1 -0
  111. package/dist/{messages-BMXCuEKO.mjs → messages-CpuDfpdi.mjs} +1 -0
  112. package/dist/{messages-DT4dP5uK.mjs → messages-Cspe1oXk.mjs} +1 -0
  113. package/dist/{chunks/messages-D-ZtY5v0.mjs → messages-D2_d-Jt4.mjs} +1 -0
  114. package/dist/{chunks/messages-BELRf6DU.mjs → messages-DADSbW8l.mjs} +1 -0
  115. package/dist/{messages-O5tQus_0.mjs → messages-DHSeTQ4S.mjs} +1 -0
  116. package/dist/{chunks/messages-BFG6Wlgy.mjs → messages-DKeO2RsW.mjs} +1 -0
  117. package/dist/{messages-9SihnaXQ.mjs → messages-DLdlX_dY.mjs} +1 -0
  118. package/dist/{messages-BL0tXcDf.mjs → messages-DVxlJ4DU.mjs} +1 -0
  119. package/dist/{messages-CY8_RyFE.mjs → messages-DWSxENRk.mjs} +1 -0
  120. package/dist/{chunks/messages-Q7AO_FLv.mjs → messages-D_bVNZ12.mjs} +1 -0
  121. package/dist/{messages-BYyy6Wqf.mjs → messages-DdzjVwmG.mjs} +1 -0
  122. package/dist/{messages-DLfR5bMd.mjs → messages-DhyBKTi0.mjs} +1 -0
  123. package/dist/{messages-DvFLX36Q.mjs → messages-DlC9jDXa.mjs} +1 -0
  124. package/dist/{messages-D5C3J9qr.mjs → messages-DmBGk8ed.mjs} +1 -0
  125. package/dist/{messages-R3hUSvr3.mjs → messages-Dm_VqpU6.mjs} +1 -0
  126. package/dist/{messages-w7v1GNaE.mjs → messages-Dn9hI_ER.mjs} +1 -0
  127. package/dist/{chunks/messages-uKX8WBaD.mjs → messages-Dssp4AXT.mjs} +1 -0
  128. package/dist/{messages-Xq8UmkVs.mjs → messages-DzCc0JgS.mjs} +1 -0
  129. package/dist/{messages-JELdtT6E.mjs → messages-N6THNxo0.mjs} +1 -0
  130. package/dist/{messages-DqM1LFg5.mjs → messages-OctOxF2l.mjs} +1 -0
  131. package/dist/{messages-_ncGrKHh.mjs → messages-QT3JA95K.mjs} +1 -0
  132. package/dist/{chunks/messages-C9eaarcK.mjs → messages-QqWK83BF.mjs} +1 -0
  133. package/dist/{messages-BogRq8lt.mjs → messages-RsGaDzbb.mjs} +1 -0
  134. package/dist/{messages-Dzwxv9v1.mjs → messages-c7YlI6Wm.mjs} +1 -0
  135. package/dist/{chunks/messages-D5iv1Kox.mjs → messages-lZ8aF-4r.mjs} +1 -0
  136. package/dist/{messages-7QoX8DkW.mjs → messages-uGDrchjb.mjs} +1 -0
  137. package/dist/{messages-CKI54h6O.mjs → messages-xc2yNvog.mjs} +1 -0
  138. package/dist/{chunks/messages-Bmu_S7GM.mjs → messages-y5Q-ymIx.mjs} +1 -0
  139. package/dist/{chunks/messages-BWF-zUpY.mjs → messages-yJnyedAd.mjs} +1 -0
  140. package/dist/{chunks/messages-kep5wtm4.mjs → messages-yQ_4upHh.mjs} +1 -0
  141. package/dist/{messages-C99mq906.mjs → messages-ysbWD56Q.mjs} +1 -0
  142. package/dist/tools.mjs +887 -701
  143. package/package.json +2 -1
  144. package/src/components/block/style-manager.ts +5 -1
  145. package/src/components/blocks.ts +109 -9
  146. package/src/components/i18n/locales/am/messages.json +1 -0
  147. package/src/components/i18n/locales/ar/messages.json +1 -0
  148. package/src/components/i18n/locales/az/messages.json +1 -0
  149. package/src/components/i18n/locales/bg/messages.json +1 -0
  150. package/src/components/i18n/locales/bn/messages.json +1 -0
  151. package/src/components/i18n/locales/bs/messages.json +1 -0
  152. package/src/components/i18n/locales/cs/messages.json +1 -0
  153. package/src/components/i18n/locales/da/messages.json +1 -0
  154. package/src/components/i18n/locales/de/messages.json +1 -0
  155. package/src/components/i18n/locales/dv/messages.json +1 -0
  156. package/src/components/i18n/locales/el/messages.json +1 -0
  157. package/src/components/i18n/locales/en/messages.json +1 -0
  158. package/src/components/i18n/locales/es/messages.json +1 -0
  159. package/src/components/i18n/locales/et/messages.json +1 -0
  160. package/src/components/i18n/locales/fa/messages.json +1 -0
  161. package/src/components/i18n/locales/fi/messages.json +1 -0
  162. package/src/components/i18n/locales/fil/messages.json +1 -0
  163. package/src/components/i18n/locales/fr/messages.json +1 -0
  164. package/src/components/i18n/locales/gu/messages.json +1 -0
  165. package/src/components/i18n/locales/he/messages.json +1 -0
  166. package/src/components/i18n/locales/hi/messages.json +1 -0
  167. package/src/components/i18n/locales/hr/messages.json +1 -0
  168. package/src/components/i18n/locales/hu/messages.json +1 -0
  169. package/src/components/i18n/locales/hy/messages.json +1 -0
  170. package/src/components/i18n/locales/id/messages.json +1 -0
  171. package/src/components/i18n/locales/it/messages.json +1 -0
  172. package/src/components/i18n/locales/ja/messages.json +1 -0
  173. package/src/components/i18n/locales/ka/messages.json +1 -0
  174. package/src/components/i18n/locales/km/messages.json +1 -0
  175. package/src/components/i18n/locales/kn/messages.json +1 -0
  176. package/src/components/i18n/locales/ko/messages.json +1 -0
  177. package/src/components/i18n/locales/ku/messages.json +1 -0
  178. package/src/components/i18n/locales/lo/messages.json +1 -0
  179. package/src/components/i18n/locales/lt/messages.json +1 -0
  180. package/src/components/i18n/locales/lv/messages.json +1 -0
  181. package/src/components/i18n/locales/mk/messages.json +1 -0
  182. package/src/components/i18n/locales/ml/messages.json +1 -0
  183. package/src/components/i18n/locales/mn/messages.json +1 -0
  184. package/src/components/i18n/locales/mr/messages.json +1 -0
  185. package/src/components/i18n/locales/ms/messages.json +1 -0
  186. package/src/components/i18n/locales/my/messages.json +1 -0
  187. package/src/components/i18n/locales/ne/messages.json +1 -0
  188. package/src/components/i18n/locales/nl/messages.json +1 -0
  189. package/src/components/i18n/locales/no/messages.json +1 -0
  190. package/src/components/i18n/locales/pa/messages.json +1 -0
  191. package/src/components/i18n/locales/pl/messages.json +1 -0
  192. package/src/components/i18n/locales/ps/messages.json +1 -0
  193. package/src/components/i18n/locales/pt/messages.json +1 -0
  194. package/src/components/i18n/locales/ro/messages.json +1 -0
  195. package/src/components/i18n/locales/ru/messages.json +1 -0
  196. package/src/components/i18n/locales/sd/messages.json +1 -0
  197. package/src/components/i18n/locales/si/messages.json +1 -0
  198. package/src/components/i18n/locales/sk/messages.json +1 -0
  199. package/src/components/i18n/locales/sl/messages.json +1 -0
  200. package/src/components/i18n/locales/sq/messages.json +1 -0
  201. package/src/components/i18n/locales/sr/messages.json +1 -0
  202. package/src/components/i18n/locales/sv/messages.json +1 -0
  203. package/src/components/i18n/locales/sw/messages.json +1 -0
  204. package/src/components/i18n/locales/ta/messages.json +1 -0
  205. package/src/components/i18n/locales/te/messages.json +1 -0
  206. package/src/components/i18n/locales/th/messages.json +1 -0
  207. package/src/components/i18n/locales/tr/messages.json +1 -0
  208. package/src/components/i18n/locales/ug/messages.json +1 -0
  209. package/src/components/i18n/locales/uk/messages.json +1 -0
  210. package/src/components/i18n/locales/ur/messages.json +1 -0
  211. package/src/components/i18n/locales/vi/messages.json +1 -0
  212. package/src/components/i18n/locales/yi/messages.json +1 -0
  213. package/src/components/i18n/locales/zh/messages.json +1 -0
  214. package/src/components/icons/index.ts +8 -0
  215. package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +51 -10
  216. package/src/components/modules/blockEvents/index.ts +2 -5
  217. package/src/components/modules/blockManager/blockManager.ts +10 -0
  218. package/src/components/modules/blockManager/operations.ts +11 -0
  219. package/src/components/modules/blockManager/repository.ts +22 -0
  220. package/src/components/modules/blockManager/yjs-sync.ts +148 -31
  221. package/src/components/modules/crossBlockSelection.ts +11 -3
  222. package/src/components/modules/drag/preview/DragPreview.ts +8 -0
  223. package/src/components/modules/drag/target/DropTargetDetector.ts +100 -11
  224. package/src/components/modules/paste/handlers/base.ts +3 -4
  225. package/src/components/modules/paste/index.ts +1 -1
  226. package/src/components/modules/rectangleSelection.ts +5 -2
  227. package/src/components/modules/toolbar/blockSettings.ts +52 -44
  228. package/src/components/modules/toolbar/index.ts +27 -7
  229. package/src/components/modules/toolbar/inline/index.ts +1 -1
  230. package/src/components/modules/uiControllers/controllers/blockHover.ts +16 -2
  231. package/src/components/modules/uiControllers/handlers/touch.ts +83 -10
  232. package/src/components/modules/yjs/block-observer.ts +9 -3
  233. package/src/components/modules/yjs/document-store.ts +4 -2
  234. package/src/components/modules/yjs/types.ts +8 -6
  235. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +6 -4
  236. package/src/components/utils/popover/popover-desktop.ts +12 -0
  237. package/src/stories/Popover.stories.ts +0 -2
  238. package/src/styles/main.css +9 -1
  239. package/src/tools/list/caret-manager.ts +28 -10
  240. package/src/tools/table/index.ts +180 -37
  241. package/src/tools/table/table-add-controls.ts +51 -14
  242. package/src/tools/table/table-cell-blocks.ts +41 -2
  243. package/src/tools/table/table-cell-selection.ts +27 -1
  244. package/src/tools/table/table-operations.ts +12 -15
  245. package/src/tools/table/table-row-col-controls.ts +69 -6
  246. package/src/tools/table/table-scroll-haze.ts +152 -0
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Escreva algo ou pressione / para selecionar",
30
30
  "tools.table.title": "Tabela",
31
31
  "tools.table.clearSelection": "Limpar",
32
+ "tools.table.copySelection": "Copiar",
32
33
  "tools.table.headerColumn": "Coluna de cabeçalho",
33
34
  "tools.table.insertColumnLeft": "Inserir coluna à esquerda",
34
35
  "tools.table.insertColumnRight": "Inserir coluna à direita",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "Scrie ceva sau apasă / pentru a selecta",
45
45
  "tools.table.title": "Tabel",
46
46
  "tools.table.clearSelection": "Șterge",
47
+ "tools.table.copySelection": "Copiază",
47
48
  "tools.table.headerColumn": "Coloană antet",
48
49
  "tools.table.insertColumnLeft": "Inserează coloană la stânga",
49
50
  "tools.table.insertColumnRight": "Inserează coloană la dreapta",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Напишите что-нибудь или нажмите / для выбора блока",
30
30
  "tools.table.title": "Таблица",
31
31
  "tools.table.clearSelection": "Очистить",
32
+ "tools.table.copySelection": "Копировать",
32
33
  "tools.table.headerColumn": "Колонка-заголовок",
33
34
  "tools.table.insertColumnLeft": "Вставить столбец слева",
34
35
  "tools.table.insertColumnRight": "Вставить столбец справа",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "ڪجھ لکو يا اوزار چونڊڻ لاءِ / دٻايو",
30
30
  "tools.table.title": "ٽيبل",
31
31
  "tools.table.clearSelection": "صاف ڪريو",
32
+ "tools.table.copySelection": "ڪاپي",
32
33
  "tools.table.headerColumn": "هيڊر ڪالم",
33
34
  "tools.table.insertColumnLeft": "کاٻي ڪالم شامل ڪريو",
34
35
  "tools.table.insertColumnRight": "ساڄي ڪالم شامل ڪريو",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "යමක් ලියන්න හෝ තෝරා ගැනීමට / ඔබන්න",
45
45
  "tools.table.title": "වගුව",
46
46
  "tools.table.clearSelection": "හිස් කරන්න",
47
+ "tools.table.copySelection": "පිටපත් කරන්න",
47
48
  "tools.table.headerColumn": "ශීර්ෂ තීරුව",
48
49
  "tools.table.insertColumnLeft": "වමට තීරුව එක් කරන්න",
49
50
  "tools.table.insertColumnRight": "දකුණට තීරුව එක් කරන්න",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "Napíšte niečo alebo stlačte / pre výber",
45
45
  "tools.table.title": "Tabuľka",
46
46
  "tools.table.clearSelection": "Vymazať",
47
+ "tools.table.copySelection": "Kopírovať",
47
48
  "tools.table.headerColumn": "Stĺpec hlavičky",
48
49
  "tools.table.insertColumnLeft": "Vložiť stĺpec vľavo",
49
50
  "tools.table.insertColumnRight": "Vložiť stĺpec vpravo",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Napišite nekaj ali pritisnite / za izbiro",
30
30
  "tools.table.title": "Tabela",
31
31
  "tools.table.clearSelection": "Počisti",
32
+ "tools.table.copySelection": "Kopiraj",
32
33
  "tools.table.headerColumn": "Stolpec glave",
33
34
  "tools.table.insertColumnLeft": "Vstavi stolpec levo",
34
35
  "tools.table.insertColumnRight": "Vstavi stolpec desno",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Shkruaj diçka ose shtyp / për të zgjedhur",
30
30
  "tools.table.title": "Tabelë",
31
31
  "tools.table.clearSelection": "Pastro",
32
+ "tools.table.copySelection": "Kopjo",
32
33
  "tools.table.headerColumn": "Kolonë titull",
33
34
  "tools.table.insertColumnLeft": "Shto kolonë majtas",
34
35
  "tools.table.insertColumnRight": "Shto kolonë djathtas",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Напишите нешто или притисните / за избор",
30
30
  "tools.table.title": "Табела",
31
31
  "tools.table.clearSelection": "Очисти",
32
+ "tools.table.copySelection": "Копирај",
32
33
  "tools.table.headerColumn": "Колона заглавља",
33
34
  "tools.table.insertColumnLeft": "Уметни колону лево",
34
35
  "tools.table.insertColumnRight": "Уметни колону десно",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Skriv något eller tryck / för att välja",
30
30
  "tools.table.title": "Tabell",
31
31
  "tools.table.clearSelection": "Rensa",
32
+ "tools.table.copySelection": "Kopiera",
32
33
  "tools.table.headerColumn": "Rubrikkolumn",
33
34
  "tools.table.insertColumnLeft": "Infoga kolumn till vänster",
34
35
  "tools.table.insertColumnRight": "Infoga kolumn till höger",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Andika kitu au bonyeza / kuchagua",
30
30
  "tools.table.title": "Jedwali",
31
31
  "tools.table.clearSelection": "Futa",
32
+ "tools.table.copySelection": "Nakili",
32
33
  "tools.table.headerColumn": "Safu wima ya kichwa",
33
34
  "tools.table.insertColumnLeft": "Ingiza safu wima kushoto",
34
35
  "tools.table.insertColumnRight": "Ingiza safu wima kulia",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "ஏதாவது எழுதவும் அல்லது கருவி தேர்வு செய்ய / அழுத்தவும்",
30
30
  "tools.table.title": "அட்டவணை",
31
31
  "tools.table.clearSelection": "தெளி",
32
+ "tools.table.copySelection": "நகலெடு",
32
33
  "tools.table.headerColumn": "தலைப்பு நெடுவரிசை",
33
34
  "tools.table.insertColumnLeft": "இடதில் நெடுவரிசை சேர்",
34
35
  "tools.table.insertColumnRight": "வலதில் நெடுவரிசை சேர்",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "ఏదైనా రాయండి లేదా సాధనం ఎంచుకోడానికి / నొక్కండి",
45
45
  "tools.table.title": "పట్టిక",
46
46
  "tools.table.clearSelection": "తుడుచు",
47
+ "tools.table.copySelection": "కాపీ చేయి",
47
48
  "tools.table.headerColumn": "శీర్ష స్తంభం",
48
49
  "tools.table.insertColumnLeft": "ఎడమవైపు స్తంభం చొప్పించు",
49
50
  "tools.table.insertColumnRight": "కుడివైపు స్తంభం చొప్పించు",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "เขียนอะไรสักอย่าง หรือกด / เพื่อเลือกเครื่องมือ",
45
45
  "tools.table.title": "ตาราง",
46
46
  "tools.table.clearSelection": "ล้าง",
47
+ "tools.table.copySelection": "คัดลอก",
47
48
  "tools.table.headerColumn": "คอลัมน์หัวข้อ",
48
49
  "tools.table.insertColumnLeft": "แทรกคอลัมน์ทางซ้าย",
49
50
  "tools.table.insertColumnRight": "แทรกคอลัมน์ทางขวา",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "Bir şeyler yazın veya seçmek için / tuşuna basın",
45
45
  "tools.table.title": "Tablo",
46
46
  "tools.table.clearSelection": "Temizle",
47
+ "tools.table.copySelection": "Kopyala",
47
48
  "tools.table.headerColumn": "Başlık sütunu",
48
49
  "tools.table.insertColumnLeft": "Sola sütun ekle",
49
50
  "tools.table.insertColumnRight": "Sağa sütun ekle",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "بىر نەرسە يېزىڭ ياكى / نى بېسىپ قورال تاللاڭ",
30
30
  "tools.table.title": "جەدۋەل",
31
31
  "tools.table.clearSelection": "تازىلاش",
32
+ "tools.table.copySelection": "كۆچۈر",
32
33
  "tools.table.headerColumn": "ماۋزۇ ئىستونى",
33
34
  "tools.table.insertColumnLeft": "سولغا ئىستون قىستۇرۇش",
34
35
  "tools.table.insertColumnRight": "ئوڭغا ئىستون قىستۇرۇش",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "Напишіть щось або натисніть / для вибору",
45
45
  "tools.table.title": "Таблиця",
46
46
  "tools.table.clearSelection": "Очистити",
47
+ "tools.table.copySelection": "Копіювати",
47
48
  "tools.table.headerColumn": "Колонка-заголовок",
48
49
  "tools.table.insertColumnLeft": "Вставити колонку зліва",
49
50
  "tools.table.insertColumnRight": "Вставити колонку справа",
@@ -44,6 +44,7 @@
44
44
  "tools.paragraph.placeholder": "کچھ لکھیں یا منتخب کرنے کیلئے / دبائیں",
45
45
  "tools.table.title": "ٹیبل",
46
46
  "tools.table.clearSelection": "صاف کریں",
47
+ "tools.table.copySelection": "کاپی",
47
48
  "tools.table.headerColumn": "ہیڈر کالم",
48
49
  "tools.table.insertColumnLeft": "بائیں کالم شامل کریں",
49
50
  "tools.table.insertColumnRight": "دائیں کالم شامل کریں",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "Viết gì đó hoặc nhấn / để chọn công cụ",
30
30
  "tools.table.title": "Bảng",
31
31
  "tools.table.clearSelection": "Xóa",
32
+ "tools.table.copySelection": "Sao chép",
32
33
  "tools.table.headerColumn": "Cột tiêu đề",
33
34
  "tools.table.insertColumnLeft": "Chèn cột bên trái",
34
35
  "tools.table.insertColumnRight": "Chèn cột bên phải",
@@ -29,6 +29,7 @@
29
29
  "tools.paragraph.placeholder": "שרײַב עפּעס אָדער דריק / צו קלײַבן אַ געצײַג",
30
30
  "tools.table.title": "טאַבעלע",
31
31
  "tools.table.clearSelection": "אויסמעקן",
32
+ "tools.table.copySelection": "קאָפּירן",
32
33
  "tools.table.headerColumn": "קעפּל שפּאַלט",
33
34
  "tools.table.insertColumnLeft": "אַרײַנשטעלן שפּאַלט לינקס",
34
35
  "tools.table.insertColumnRight": "אַרײַנשטעלן שפּאַלט רעכטס",
@@ -44,6 +44,7 @@
44
44
  "a11y.atBottom": "内容块已在底部,无法下移",
45
45
  "tools.table.title": "表格",
46
46
  "tools.table.clearSelection": "清除",
47
+ "tools.table.copySelection": "复制",
47
48
  "tools.table.headerColumn": "标题列",
48
49
  "tools.table.insertColumnLeft": "在左侧插入列",
49
50
  "tools.table.insertColumnRight": "在右侧插入列",
@@ -323,6 +323,14 @@ export const IconMoveRight = `
323
323
  </svg>
324
324
  `;
325
325
 
326
+ // Copy icon
327
+ export const IconCopy = `
328
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
329
+ <rect x="7" y="7" width="9" height="9" rx="1.5" stroke="currentColor" stroke-width="1.25"/>
330
+ <path d="M5 13h-.5A1.5 1.5 0 0 1 3 11.5v-7A1.5 1.5 0 0 1 4.5 3h7A1.5 1.5 0 0 1 13 4.5V5" stroke="currentColor" stroke-width="1.25"/>
331
+ </svg>
332
+ `;
333
+
326
334
  // Trash/Delete icon
327
335
  export const IconTrash = `
328
336
  <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -43,6 +43,33 @@ export class KeyboardNavigation extends BlockEventComposer {
43
43
  return ui.isRtl ?? false;
44
44
  }
45
45
 
46
+ /**
47
+ * Check if the current block is inside a table cell.
48
+ * Used to prevent closing the toolbar when the user navigates
49
+ * within a table — closing it makes the toolbar permanently
50
+ * disappear because the hover controller deduplicates by block id
51
+ * and all cells resolve to the same parent table block.
52
+ */
53
+ private get isCurrentBlockInsideTableCell(): boolean {
54
+ const currentBlock = this.Blok.BlockManager.currentBlock;
55
+
56
+ return Boolean(currentBlock?.holder?.closest('[data-blok-table-cell-blocks]'));
57
+ }
58
+
59
+ /**
60
+ * Fully close the toolbar if the current block is NOT inside a table cell.
61
+ * Used for destructive operations (Backspace, Delete, merge) where the
62
+ * toolbar should be dismissed — unlike arrow navigation where
63
+ * hideBlockActions() is preferred to allow reopening.
64
+ */
65
+ private closeToolbarIfNotInTableCell(): void {
66
+ if (this.isCurrentBlockInsideTableCell) {
67
+ return;
68
+ }
69
+
70
+ this.Blok.Toolbar.close();
71
+ }
72
+
46
73
  /**
47
74
  * Tab pressed inside a Block.
48
75
  * @param event - keydown event
@@ -186,7 +213,8 @@ export class KeyboardNavigation extends BlockEventComposer {
186
213
  * All the cases below have custom behaviour, so we don't need a native one
187
214
  */
188
215
  event.preventDefault();
189
- this.Blok.Toolbar.close();
216
+
217
+ this.closeToolbarIfNotInTableCell();
190
218
 
191
219
  const isFirstInputFocused = currentBlock.currentInput === currentBlock.firstInput;
192
220
 
@@ -273,7 +301,8 @@ export class KeyboardNavigation extends BlockEventComposer {
273
301
  * All the cases below have custom behaviour, so we don't need a native one
274
302
  */
275
303
  event.preventDefault();
276
- this.Blok.Toolbar.close();
304
+
305
+ this.closeToolbarIfNotInTableCell();
277
306
 
278
307
  const isLastInputFocused = currentBlock.currentInput === currentBlock.lastInput;
279
308
 
@@ -316,7 +345,7 @@ export class KeyboardNavigation extends BlockEventComposer {
316
345
  const newCurrentBlock = BlockManager.currentBlock;
317
346
 
318
347
  newCurrentBlock && Caret.setToBlock(newCurrentBlock, Caret.positions.START);
319
- this.Blok.Toolbar.close();
348
+ this.closeToolbarIfNotInTableCell();
320
349
 
321
350
  return;
322
351
  }
@@ -340,7 +369,7 @@ export class KeyboardNavigation extends BlockEventComposer {
340
369
  * @param blockToMerge - what Block we want to merge
341
370
  */
342
371
  private mergeBlocks(targetBlock: Block, blockToMerge: Block): void {
343
- const { BlockManager, Toolbar } = this.Blok;
372
+ const { BlockManager } = this.Blok;
344
373
 
345
374
  if (targetBlock.lastInput === undefined) {
346
375
  return;
@@ -351,7 +380,7 @@ export class KeyboardNavigation extends BlockEventComposer {
351
380
  BlockManager
352
381
  .mergeBlocks(targetBlock, blockToMerge)
353
382
  .then(() => {
354
- Toolbar.close();
383
+ this.closeToolbarIfNotInTableCell();
355
384
  })
356
385
  .catch(() => {
357
386
  // Error handling for mergeBlocks
@@ -391,9 +420,10 @@ export class KeyboardNavigation extends BlockEventComposer {
391
420
  /**
392
421
  * Close Toolbar when user moves cursor, but keep toolbars open if the user
393
422
  * is extending selection with the Shift key so inline interactions remain available.
423
+ * Skip closing when inside a table cell — the toolbar belongs to the parent
424
+ * table block and the hover controller won't re-emit BlockHovered for it.
394
425
  */
395
- if (!event.shiftKey) {
396
- this.Blok.Toolbar.close();
426
+ if (!event.shiftKey && !this.isCurrentBlockInsideTableCell) {
397
427
  this.Blok.InlineToolbar.close();
398
428
  }
399
429
 
@@ -477,6 +507,11 @@ export class KeyboardNavigation extends BlockEventComposer {
477
507
  */
478
508
  event.preventDefault();
479
509
 
510
+ /**
511
+ * Reopen the toolbar at the new block position after navigation
512
+ */
513
+ this.Blok.Toolbar.moveAndOpen(this.Blok.BlockManager.currentBlock);
514
+
480
515
  return;
481
516
  }
482
517
 
@@ -526,15 +561,16 @@ export class KeyboardNavigation extends BlockEventComposer {
526
561
  return;
527
562
  }
528
563
 
529
- if (toolbarOpened) {
564
+ if (toolbarOpened && !this.isCurrentBlockInsideTableCell) {
530
565
  this.Blok.UI.closeAllToolbars();
531
566
  }
532
567
 
533
568
  /**
534
569
  * Close Toolbar when user moves cursor, but preserve it for Shift-based selection changes.
570
+ * Skip closing when inside a table cell — the toolbar belongs to the parent
571
+ * table block and the hover controller won't re-emit BlockHovered for it.
535
572
  */
536
- if (!event.shiftKey) {
537
- this.Blok.Toolbar.close();
573
+ if (!event.shiftKey && !this.isCurrentBlockInsideTableCell) {
538
574
  this.Blok.InlineToolbar.close();
539
575
  }
540
576
 
@@ -605,6 +641,11 @@ export class KeyboardNavigation extends BlockEventComposer {
605
641
  */
606
642
  event.preventDefault();
607
643
 
644
+ /**
645
+ * Reopen the toolbar at the new block position after navigation
646
+ */
647
+ this.Blok.Toolbar.moveAndOpen(this.Blok.BlockManager.currentBlock);
648
+
608
649
  return;
609
650
  }
610
651
 
@@ -228,16 +228,13 @@ export class BlockEvents extends Module {
228
228
  }
229
229
 
230
230
  /**
231
- * When user type something:
232
- * - close Toolbar
233
- * - clear block highlighting
231
+ * When user types something, clear block highlighting.
232
+ * The toolbar stays visible — it should persist during typing.
234
233
  */
235
234
  if (!isPrintableKeyEvent(event)) {
236
235
  return;
237
236
  }
238
237
 
239
- this.Blok.Toolbar.close();
240
-
241
238
  /**
242
239
  * Allow to use shortcuts with selected blocks
243
240
  * @type {boolean}
@@ -724,6 +724,16 @@ export class BlockManager extends Module {
724
724
  return this.repository.getBlockById(id);
725
725
  }
726
726
 
727
+ /**
728
+ * Walks up the parentId chain and returns the top-level (root) block.
729
+ * If the block has no parent, returns it as-is.
730
+ * @param block - the block to resolve
731
+ * @returns {Block} the root ancestor block
732
+ */
733
+ public resolveToRootBlock(block: Block): Block {
734
+ return this.repository.resolveToRootBlock(block);
735
+ }
736
+
727
737
  /**
728
738
  * Returns the depth (nesting level) of a block in the hierarchy.
729
739
  * @param block - the block to get depth for
@@ -497,6 +497,17 @@ export class BlockOperations {
497
497
  return;
498
498
  }
499
499
 
500
+ // Check if the move would place a restricted tool inside a table cell
501
+ const movingBlock = this.repository.getBlockByIndex(fromIndex);
502
+ const neighborBlock = this.repository.getBlockByIndex(toIndex);
503
+
504
+ if (movingBlock !== undefined && neighborBlock !== undefined &&
505
+ isInsideTableCell(neighborBlock) && isRestrictedInTableCell(movingBlock.name)) {
506
+ log(`Warning during 'move' call: '${movingBlock.name}' is restricted in table cells.`, 'warn');
507
+
508
+ return;
509
+ }
510
+
500
511
  // Suppress stopCapturing to keep DOM + Yjs move as single undo entry
501
512
  this.suppressStopCapturing = true;
502
513
  try {
@@ -201,6 +201,28 @@ export class BlockRepository {
201
201
  return previousBlocks.find((block) => !!block.inputs.length);
202
202
  }
203
203
 
204
+ /**
205
+ * Walks up the parentId chain and returns the top-level (root) block.
206
+ * If the block has no parent, returns it as-is.
207
+ * Used by selection modules to treat hierarchical blocks (e.g. table cells)
208
+ * as a single unit rather than selecting child blocks individually.
209
+ * @param block - the block to resolve
210
+ * @returns {Block} the root ancestor block
211
+ */
212
+ public resolveToRootBlock(block: Block): Block {
213
+ if (block.parentId === null) {
214
+ return block;
215
+ }
216
+
217
+ const parent = this.getBlockById(block.parentId);
218
+
219
+ if (parent === undefined) {
220
+ return block;
221
+ }
222
+
223
+ return this.resolveToRootBlock(parent);
224
+ }
225
+
204
226
  /**
205
227
  * Get block at a specific index from the blocks store nodes array
206
228
  * @param index - the index