@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
@@ -0,0 +1,225 @@
1
+ import type { I18n } from '../../../types/api';
2
+ import {
3
+ IconInsertAbove,
4
+ IconInsertBelow,
5
+ IconInsertLeft,
6
+ IconInsertRight,
7
+ IconTrash,
8
+ IconHeaderRow,
9
+ IconHeaderColumn,
10
+ } from '../../components/icons';
11
+ import { PopoverDesktop, PopoverItemType } from '../../components/utils/popover';
12
+
13
+ import { GRIP_HOVER_SIZE } from './table-grip-visuals';
14
+ import { createHeadingToggle } from './table-heading-toggle';
15
+ import type { RowColAction } from './table-row-col-controls';
16
+
17
+ import { PopoverEvent } from '@/types/utils/popover/popover-event';
18
+ import type { PopoverItemParams } from '@/types/utils/popover/popover-item';
19
+
20
+ /**
21
+ * State for the currently active grip popover.
22
+ */
23
+ export interface PopoverState {
24
+ popover: PopoverDesktop | null;
25
+ grip: HTMLElement | null;
26
+ }
27
+
28
+ /**
29
+ * Options for building popover menu items.
30
+ */
31
+ export interface PopoverMenuOptions {
32
+ getColumnCount: () => number;
33
+ getRowCount: () => number;
34
+ isHeadingRow: () => boolean;
35
+ isHeadingColumn: () => boolean;
36
+ onAction: (action: RowColAction) => void;
37
+ i18n: I18n;
38
+ }
39
+
40
+ /**
41
+ * Callbacks the popover needs from the controls class.
42
+ */
43
+ export interface OpenPopoverCallbacks {
44
+ clearHideTimeout: () => void;
45
+ hideAllGripsExcept: (grip: HTMLElement) => void;
46
+ applyActiveClasses: (grip: HTMLElement) => void;
47
+ applyVisibleClasses: (grip: HTMLElement) => void;
48
+ scheduleHideAll: () => void;
49
+ destroyPopover: () => void;
50
+ onGripPopoverClose?: () => void;
51
+ }
52
+
53
+ /**
54
+ * Build the popover menu items for a column grip.
55
+ */
56
+ export const buildColumnMenuItems = (colIndex: number, options: PopoverMenuOptions): PopoverItemParams[] => {
57
+ const headingItems: PopoverItemParams[] = colIndex === 0
58
+ ? [
59
+ {
60
+ type: PopoverItemType.Html,
61
+ element: createHeadingToggle({
62
+ icon: IconHeaderColumn,
63
+ label: options.i18n.t('tools.table.headerColumn'),
64
+ isActive: options.isHeadingColumn(),
65
+ onToggle: () => {
66
+ options.onAction({ type: 'toggle-heading-column' });
67
+ },
68
+ }),
69
+ },
70
+ { type: PopoverItemType.Separator },
71
+ ]
72
+ : [];
73
+
74
+ const baseItems: PopoverItemParams[] = [
75
+ {
76
+ icon: IconInsertLeft,
77
+ title: options.i18n.t('tools.table.insertColumnLeft'),
78
+ closeOnActivate: true,
79
+ onActivate: (): void => {
80
+ options.onAction({ type: 'insert-col-left', index: colIndex });
81
+ },
82
+ },
83
+ {
84
+ icon: IconInsertRight,
85
+ title: options.i18n.t('tools.table.insertColumnRight'),
86
+ closeOnActivate: true,
87
+ onActivate: (): void => {
88
+ options.onAction({ type: 'insert-col-right', index: colIndex });
89
+ },
90
+ },
91
+ ];
92
+
93
+ const canDelete = options.getColumnCount() > 1;
94
+ const deleteItems: PopoverItemParams[] = [
95
+ { type: PopoverItemType.Separator },
96
+ {
97
+ icon: IconTrash,
98
+ title: options.i18n.t('tools.table.deleteColumn'),
99
+ isDestructive: true,
100
+ isDisabled: !canDelete,
101
+ closeOnActivate: true,
102
+ onActivate: (): void => {
103
+ options.onAction({ type: 'delete-col', index: colIndex });
104
+ },
105
+ },
106
+ ];
107
+
108
+ return [...headingItems, ...baseItems, ...deleteItems];
109
+ };
110
+
111
+ /**
112
+ * Build the popover menu items for a row grip.
113
+ */
114
+ export const buildRowMenuItems = (rowIndex: number, options: PopoverMenuOptions): PopoverItemParams[] => {
115
+ const headingItems: PopoverItemParams[] = rowIndex === 0
116
+ ? [
117
+ {
118
+ type: PopoverItemType.Html,
119
+ element: createHeadingToggle({
120
+ icon: IconHeaderRow,
121
+ label: options.i18n.t('tools.table.headerRow'),
122
+ isActive: options.isHeadingRow(),
123
+ onToggle: () => {
124
+ options.onAction({ type: 'toggle-heading' });
125
+ },
126
+ }),
127
+ },
128
+ { type: PopoverItemType.Separator },
129
+ ]
130
+ : [];
131
+
132
+ const baseItems: PopoverItemParams[] = [
133
+ {
134
+ icon: IconInsertAbove,
135
+ title: options.i18n.t('tools.table.insertRowAbove'),
136
+ closeOnActivate: true,
137
+ onActivate: (): void => {
138
+ options.onAction({ type: 'insert-row-above', index: rowIndex });
139
+ },
140
+ },
141
+ {
142
+ icon: IconInsertBelow,
143
+ title: options.i18n.t('tools.table.insertRowBelow'),
144
+ closeOnActivate: true,
145
+ onActivate: (): void => {
146
+ options.onAction({ type: 'insert-row-below', index: rowIndex });
147
+ },
148
+ },
149
+ ];
150
+
151
+ const canDelete = options.getRowCount() > 1;
152
+ const deleteItems: PopoverItemParams[] = [
153
+ { type: PopoverItemType.Separator },
154
+ {
155
+ icon: IconTrash,
156
+ title: options.i18n.t('tools.table.deleteRow'),
157
+ isDestructive: true,
158
+ isDisabled: !canDelete,
159
+ closeOnActivate: true,
160
+ onActivate: (): void => {
161
+ options.onAction({ type: 'delete-row', index: rowIndex });
162
+ },
163
+ },
164
+ ];
165
+
166
+ return [...headingItems, ...baseItems, ...deleteItems];
167
+ };
168
+
169
+ /**
170
+ * Create a popover anchored to the given grip and prepare it for display.
171
+ * Returns the new state. The caller must call `popover.show()` after
172
+ * storing the state so that any callbacks fired during show see the
173
+ * updated popover reference.
174
+ */
175
+ export const createGripPopover = (
176
+ type: 'row' | 'col',
177
+ index: number,
178
+ grips: { col: HTMLElement[]; row: HTMLElement[] },
179
+ menuOptions: PopoverMenuOptions,
180
+ callbacks: OpenPopoverCallbacks
181
+ ): PopoverState => {
182
+ callbacks.destroyPopover();
183
+ callbacks.clearHideTimeout();
184
+
185
+ const grip = type === 'col'
186
+ ? grips.col[index]
187
+ : grips.row[index];
188
+
189
+ if (!grip) {
190
+ return { popover: null, grip: null };
191
+ }
192
+
193
+ const items = type === 'col'
194
+ ? buildColumnMenuItems(index, menuOptions)
195
+ : buildRowMenuItems(index, menuOptions);
196
+
197
+ const popover = new PopoverDesktop({
198
+ items,
199
+ trigger: grip,
200
+ flippable: true,
201
+ });
202
+
203
+ popover.on(PopoverEvent.Closed, () => {
204
+ // The caller's destroyPopover handles nulling the shared state and
205
+ // calling popover.destroy(). The re-entrant Closed event is caught
206
+ // by the guard inside destroyPopover (checks if popover is already null).
207
+ callbacks.destroyPopover();
208
+ callbacks.applyVisibleClasses(grip);
209
+ callbacks.scheduleHideAll();
210
+ callbacks.onGripPopoverClose?.();
211
+ });
212
+
213
+ // Hide all other grips and make the active one blue
214
+ callbacks.hideAllGripsExcept(grip);
215
+ callbacks.applyActiveClasses(grip);
216
+
217
+ // Expand the grip to hover size so it remains visible while popover is open
218
+ if (type === 'col') {
219
+ grip.style.height = `${GRIP_HOVER_SIZE}px`;
220
+ } else {
221
+ grip.style.width = `${GRIP_HOVER_SIZE}px`;
222
+ }
223
+
224
+ return { popover, grip };
225
+ };
@@ -29,12 +29,16 @@ export const isCellWithBlocks = (cell: LegacyCellContent): cell is CellContent =
29
29
  export interface TableData extends BlockToolData {
30
30
  /** Whether the first row is a heading row */
31
31
  withHeadings: boolean;
32
+ /** Whether the first column is a heading column */
33
+ withHeadingColumn: boolean;
32
34
  /** Whether the table is full-width */
33
35
  stretched?: boolean;
34
36
  /** 2D array of cell content (may contain legacy string format when loading saved data) */
35
37
  content: LegacyCellContent[][];
36
38
  /** Column widths in pixels (e.g., [200, 300, 250]). Omit for equal widths. */
37
39
  colWidths?: number[];
40
+ /** Original per-column width in pixels, set once at creation. New columns = initialColWidth / 2. */
41
+ initialColWidth?: number;
38
42
  }
39
43
 
40
44
  /**
@@ -2,6 +2,7 @@
2
2
  import { BlocksAPI } from '../components/modules/api/blocks';
3
3
  import { CaretAPI } from '../components/modules/api/caret';
4
4
  import { EventsAPI } from '../components/modules/api/events';
5
+ import { HistoryAPI } from '../components/modules/api/history';
5
6
  import { I18nAPI } from '../components/modules/api/i18n';
6
7
  import { API } from '../components/modules/api/index';
7
8
  import { InlineToolbarAPI } from '../components/modules/api/inlineToolbar';
@@ -45,6 +46,7 @@ export interface BlokModules {
45
46
  CaretAPI: CaretAPI,
46
47
  ToolsAPI: ToolsAPI,
47
48
  EventsAPI: EventsAPI,
49
+ HistoryAPI: HistoryAPI,
48
50
  I18nAPI: I18nAPI,
49
51
  API: API,
50
52
  InlineToolbarAPI: InlineToolbarAPI,
@@ -78,6 +78,14 @@ export interface Blocks {
78
78
  */
79
79
  getChildren(parentId: string): BlockAPI[];
80
80
 
81
+ /**
82
+ * Sets the parent of a block, updating both the block's parentId and the parent's contentIds.
83
+ *
84
+ * @param blockId - id of the block to reparent
85
+ * @param parentId - id of the new parent block, or null for root level
86
+ */
87
+ setBlockParent(blockId: string, parentId: string | null): void;
88
+
81
89
  /**
82
90
  * Returns Blocks count
83
91
  * @return {number}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Describes Blok's history API
3
+ */
4
+ export interface History {
5
+ /**
6
+ * Undo the last operation
7
+ */
8
+ undo(): void;
9
+
10
+ /**
11
+ * Redo the last undone operation
12
+ */
13
+ redo(): void;
14
+
15
+ /**
16
+ * Check if undo is available
17
+ *
18
+ * @returns {boolean} true if undo is available
19
+ */
20
+ canUndo(): boolean;
21
+
22
+ /**
23
+ * Check if redo is available
24
+ *
25
+ * @returns {boolean} true if redo is available
26
+ */
27
+ canRedo(): boolean;
28
+
29
+ /**
30
+ * Clear all history
31
+ */
32
+ clear(): void;
33
+ }
@@ -1,5 +1,6 @@
1
1
  export * from './blocks';
2
2
  export * from './events';
3
+ export * from './history';
3
4
  export * from './listeners';
4
5
  export * from './sanitizer';
5
6
  export * from './saver';
@@ -3,10 +3,20 @@
3
3
  */
4
4
  export interface ReadOnly {
5
5
  /**
6
- * Set or toggle read-only state
6
+ * Set read-only mode to the specified boolean state
7
7
  *
8
- * @param {Boolean|undefined} state - set or toggle state
8
+ * @param {Boolean} state - read-only state to set
9
+ * @returns {Promise<boolean>} the new read-only state
10
+ */
11
+ set: (state: boolean) => Promise<boolean>;
12
+
13
+ /**
14
+ * Toggle read-only state (deprecated - use set() instead)
15
+ * Without parameter, toggles current state. With parameter, sets to specified state.
16
+ *
17
+ * @param {Boolean|undefined} state - optional state to set (if omitted, toggles)
9
18
  * @returns {Promise<boolean>} current value
19
+ * @deprecated Use `set()` method for clearer intent
10
20
  */
11
21
  toggle: (state?: boolean) => Promise<boolean>;
12
22
 
package/types/index.d.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  Blocks,
17
17
  Caret,
18
18
  Events,
19
+ History,
19
20
  InlineToolbar,
20
21
  Listeners,
21
22
  Notifier,
@@ -90,6 +91,7 @@ export {
90
91
  Blocks,
91
92
  Caret,
92
93
  Events,
94
+ History,
93
95
  InlineToolbar,
94
96
  Listeners,
95
97
  Notifier,
@@ -127,6 +129,7 @@ export interface API {
127
129
  caret: Caret;
128
130
  tools: Tools;
129
131
  events: Events;
132
+ history: History;
130
133
  listeners: Listeners;
131
134
  notifier: Notifier;
132
135
  sanitizer: Sanitizer;
@@ -139,6 +142,13 @@ export interface API {
139
142
  i18n: I18n;
140
143
  readOnly: ReadOnly;
141
144
  ui: Ui;
145
+ rectangleSelection: {
146
+ cancelActiveSelection: () => void;
147
+ isRectActivated: () => boolean;
148
+ clearSelection: () => void;
149
+ startSelection: (pageX: number, pageY: number, shiftKey?: boolean) => void;
150
+ endSelection: () => void;
151
+ };
142
152
  }
143
153
 
144
154
  import { DATA_ATTR, DataAttrKey, DataAttrValue, createSelector } from './data-attributes';
@@ -0,0 +1,67 @@
1
+ import { BlockTool, BlockToolConstructable, BlockToolConstructorOptions, BlockToolData } from './block-tool';
2
+
3
+ /**
4
+ * Cell content always contains block IDs.
5
+ * Every cell in the table is represented as an array of block references.
6
+ */
7
+ export interface CellContent {
8
+ blocks: string[];
9
+ }
10
+
11
+ /**
12
+ * Table Tool's input and output data format
13
+ */
14
+ export interface TableData extends BlockToolData {
15
+ /** Whether the first row is a heading row */
16
+ withHeadings: boolean;
17
+ /** Whether the first column is a heading column */
18
+ withHeadingColumn: boolean;
19
+ /** Whether the table is full-width */
20
+ stretched?: boolean;
21
+ /** 2D array of cell content */
22
+ content: CellContent[][];
23
+ /** Column widths in pixels (e.g., [200, 300, 250]). Omit for equal widths. */
24
+ colWidths?: number[];
25
+ }
26
+
27
+ /**
28
+ * Table Tool's configuration
29
+ */
30
+ export interface TableConfig {
31
+ /** Initial number of rows (default: 3) */
32
+ rows?: number;
33
+ /** Initial number of columns (default: 3) */
34
+ cols?: number;
35
+ /** Whether to start with heading row enabled */
36
+ withHeadings?: boolean;
37
+ /** Whether to start stretched */
38
+ stretched?: boolean;
39
+ }
40
+
41
+ /**
42
+ * Table Tool for the Blok Editor
43
+ * Renders a 2D grid of block-based cells
44
+ */
45
+ export interface Table extends BlockTool {
46
+ /**
47
+ * Return Tool's view
48
+ */
49
+ render(): HTMLElement;
50
+
51
+ /**
52
+ * Validate Table block data
53
+ */
54
+ validate(blockData: TableData): boolean;
55
+
56
+ /**
57
+ * Extract Tool's data from the view
58
+ */
59
+ save(): TableData;
60
+ }
61
+
62
+ /**
63
+ * Table Tool constructor
64
+ */
65
+ export interface TableConstructable extends BlockToolConstructable {
66
+ new(config: BlockToolConstructorOptions<TableData, TableConfig>): Table;
67
+ }
@@ -6,6 +6,7 @@
6
6
  import { HeaderConstructable, HeaderData, HeaderConfig } from './tools/header';
7
7
  import { ParagraphConstructable, ParagraphData, ParagraphConfig } from './tools/paragraph';
8
8
  import { ListConstructable, ListData, ListConfig, ListStyle } from './tools/list';
9
+ import { TableConstructable, TableData, TableConfig, CellContent } from './tools/table';
9
10
  import { InlineToolConstructable } from './tools/inline-tool';
10
11
  import { BlockTuneConstructable } from './block-tunes';
11
12
  import { ToolSettings } from './tools';
@@ -14,11 +15,13 @@ import { ToolSettings } from './tools';
14
15
  export const Paragraph: ParagraphConstructable;
15
16
  export const Header: HeaderConstructable;
16
17
  export const List: ListConstructable;
18
+ export const Table: TableConstructable;
17
19
 
18
20
  // Re-export data and config types for convenience
19
21
  export { HeaderData, HeaderConfig } from './tools/header';
20
22
  export { ParagraphData, ParagraphConfig } from './tools/paragraph';
21
23
  export { ListData, ListConfig, ListStyle } from './tools/list';
24
+ export { TableData, TableConfig, CellContent } from './tools/table';
22
25
 
23
26
  // Inline tools
24
27
  export const Bold: InlineToolConstructable;
@@ -36,6 +39,7 @@ export const defaultBlockTools: {
36
39
  readonly paragraph: { readonly inlineToolbar: true; readonly config: { readonly preserveBlank: true } };
37
40
  readonly header: { readonly inlineToolbar: true };
38
41
  readonly list: { readonly inlineToolbar: true };
42
+ readonly table: {};
39
43
  };
40
44
 
41
45
  /**
@@ -160,6 +160,12 @@ export interface PopoverItemDefaultBaseParams {
160
160
  */
161
161
  isDisabled?: boolean;
162
162
 
163
+ /**
164
+ * True if item represents a destructive action (e.g. delete).
165
+ * Applies red text/icon color and red-tinted hover background.
166
+ */
167
+ isDestructive?: boolean;
168
+
163
169
  /**
164
170
  * True if popover should close once item is activated
165
171
  */
@@ -22,6 +22,13 @@ export interface PopoverParams {
22
22
  */
23
23
  trigger?: HTMLElement;
24
24
 
25
+ /**
26
+ * Optional position (DOMRect) to use for positioning instead of trigger element.
27
+ * When provided, this takes precedence over trigger's getBoundingClientRect().
28
+ * Useful for positioning at caret location or other dynamic positions.
29
+ */
30
+ position?: DOMRect;
31
+
25
32
  /**
26
33
  * True if popover should contain search field
27
34
  */
@@ -1,48 +0,0 @@
1
- const o = {
2
- "blockSettings.dragToMove": "తరలించడానికి డ్రాగ్ చేయండి",
3
- "blockSettings.clickToOpenMenu": "మెనూ తెరవడానికి క్లిక్ చేయండి",
4
- "toolbox.addBelow": "క్రింద జోడించడానికి క్లిక్ చేయండి",
5
- "toolbox.optionAddAbove": "పైన జోడించడానికి Option-క్లిక్ చేయండి",
6
- "toolbox.ctrlAddAbove": "పైన జోడించడానికి Ctrl-క్లిక్ చేయండి",
7
- "popover.search": "వెతకండి",
8
- "popover.nothingFound": "ఏమీ కనుగొనబడలేదు",
9
- "popover.convertTo": "మార్చు",
10
- "toolNames.text": "టెక్స్ట్",
11
- "toolNames.heading": "శీర్షిక",
12
- "toolNames.link": "లింక్",
13
- "toolNames.bold": "బోల్డ్",
14
- "toolNames.italic": "ఇటాలిక్",
15
- "toolNames.bulletedList": "బుల్లెట్ జాబితా",
16
- "toolNames.numberedList": "నంబర్ జాబితా",
17
- "toolNames.todoList": "చేయవలసిన పనుల జాబితా",
18
- "tools.link.addLink": "లింక్ జోడించండి",
19
- "tools.link.invalidLink": "చెల్లని లింక్",
20
- "tools.stub.error": "లోపం",
21
- "tools.stub.blockCannotBeDisplayed": "ఈ బ్లాక్‌ను ప్రదర్శించలేము",
22
- "tools.header.heading1": "శీర్షిక 1",
23
- "tools.header.heading2": "శీర్షిక 2",
24
- "tools.header.heading3": "శీర్షిక 3",
25
- "tools.header.heading4": "శీర్షిక 4",
26
- "tools.header.heading5": "శీర్షిక 5",
27
- "tools.header.heading6": "శీర్షిక 6",
28
- "tools.list.placeholder": "జాబితా",
29
- "blockSettings.delete": "తొలగించు",
30
- "a11y.dragHandle": "బ్లాక్ తరలించడానికి డ్రాగ్ చేయండి లేదా మెనూ కోసం క్లిక్ చేయండి",
31
- "a11y.dragHandleRole": "డ్రాగ్ హ్యాండిల్",
32
- "a11y.dragStarted": "బ్లాక్ డ్రాగ్ అవుతోంది",
33
- "a11y.dragStartedMultiple": "{count} బ్లాక్‌లు డ్రాగ్ అవుతున్నాయి",
34
- "a11y.dropPosition": "{total} లో {position} స్థానంలో డ్రాప్ అవుతుంది",
35
- "a11y.dropCancelled": "డ్రాగ్ రద్దు చేయబడింది",
36
- "a11y.blockMoved": "బ్లాక్ {total} లో {position} స్థానానికి తరలించబడింది",
37
- "a11y.blocksMoved": "{count} బ్లాక్‌లు {position} స్థానానికి తరలించబడ్డాయి",
38
- "a11y.blockDuplicated": "బ్లాక్ {total} లో {position} స్థానంలో నకలు చేయబడింది",
39
- "a11y.blocksDuplicated": "{count} బ్లాక్‌లు {position} స్థానం నుండి నకలు చేయబడ్డాయి",
40
- "a11y.movedUp": "బ్లాక్ {total} లో {position} స్థానానికి పైకి తరలించబడింది",
41
- "a11y.movedDown": "బ్లాక్ {total} లో {position} స్థానానికి క్రిందికి తరలించబడింది",
42
- "a11y.atTop": "బ్లాక్ పైన ఉంది, పైకి తరలించలేము",
43
- "a11y.atBottom": "బ్లాక్ క్రింద ఉంది, క్రిందికి తరలించలేము",
44
- "tools.paragraph.placeholder": "ఏదైనా delaysాయండి లేదా ఎంచdelay / నొక్కండి"
45
- };
46
- export {
47
- o as default
48
- };
@@ -1,48 +0,0 @@
1
- const o = {
2
- "blockSettings.dragToMove": "తరలించడానికి డ్రాగ్ చేయండి",
3
- "blockSettings.clickToOpenMenu": "మెనూ తెరవడానికి క్లిక్ చేయండి",
4
- "toolbox.addBelow": "క్రింద జోడించడానికి క్లిక్ చేయండి",
5
- "toolbox.optionAddAbove": "పైన జోడించడానికి Option-క్లిక్ చేయండి",
6
- "toolbox.ctrlAddAbove": "పైన జోడించడానికి Ctrl-క్లిక్ చేయండి",
7
- "popover.search": "వెతకండి",
8
- "popover.nothingFound": "ఏమీ కనుగొనబడలేదు",
9
- "popover.convertTo": "మార్చు",
10
- "toolNames.text": "టెక్స్ట్",
11
- "toolNames.heading": "శీర్షిక",
12
- "toolNames.link": "లింక్",
13
- "toolNames.bold": "బోల్డ్",
14
- "toolNames.italic": "ఇటాలిక్",
15
- "toolNames.bulletedList": "బుల్లెట్ జాబితా",
16
- "toolNames.numberedList": "నంబర్ జాబితా",
17
- "toolNames.todoList": "చేయవలసిన పనుల జాబితా",
18
- "tools.link.addLink": "లింక్ జోడించండి",
19
- "tools.link.invalidLink": "చెల్లని లింక్",
20
- "tools.stub.error": "లోపం",
21
- "tools.stub.blockCannotBeDisplayed": "ఈ బ్లాక్‌ను ప్రదర్శించలేము",
22
- "tools.header.heading1": "శీర్షిక 1",
23
- "tools.header.heading2": "శీర్షిక 2",
24
- "tools.header.heading3": "శీర్షిక 3",
25
- "tools.header.heading4": "శీర్షిక 4",
26
- "tools.header.heading5": "శీర్షిక 5",
27
- "tools.header.heading6": "శీర్షిక 6",
28
- "tools.list.placeholder": "జాబితా",
29
- "blockSettings.delete": "తొలగించు",
30
- "a11y.dragHandle": "బ్లాక్ తరలించడానికి డ్రాగ్ చేయండి లేదా మెనూ కోసం క్లిక్ చేయండి",
31
- "a11y.dragHandleRole": "డ్రాగ్ హ్యాండిల్",
32
- "a11y.dragStarted": "బ్లాక్ డ్రాగ్ అవుతోంది",
33
- "a11y.dragStartedMultiple": "{count} బ్లాక్‌లు డ్రాగ్ అవుతున్నాయి",
34
- "a11y.dropPosition": "{total} లో {position} స్థానంలో డ్రాప్ అవుతుంది",
35
- "a11y.dropCancelled": "డ్రాగ్ రద్దు చేయబడింది",
36
- "a11y.blockMoved": "బ్లాక్ {total} లో {position} స్థానానికి తరలించబడింది",
37
- "a11y.blocksMoved": "{count} బ్లాక్‌లు {position} స్థానానికి తరలించబడ్డాయి",
38
- "a11y.blockDuplicated": "బ్లాక్ {total} లో {position} స్థానంలో నకలు చేయబడింది",
39
- "a11y.blocksDuplicated": "{count} బ్లాక్‌లు {position} స్థానం నుండి నకలు చేయబడ్డాయి",
40
- "a11y.movedUp": "బ్లాక్ {total} లో {position} స్థానానికి పైకి తరలించబడింది",
41
- "a11y.movedDown": "బ్లాక్ {total} లో {position} స్థానానికి క్రిందికి తరలించబడింది",
42
- "a11y.atTop": "బ్లాక్ పైన ఉంది, పైకి తరలించలేము",
43
- "a11y.atBottom": "బ్లాక్ క్రింద ఉంది, క్రిందికి తరలించలేము",
44
- "tools.paragraph.placeholder": "ఏదైనా delaysాయండి లేదా ఎంచdelay / నొక్కండి"
45
- };
46
- export {
47
- o as default
48
- };