@jackuait/blok 0.4.1-beta.1 → 0.4.1-beta.12

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 (403) hide show
  1. package/README.md +138 -17
  2. package/codemod/README.md +45 -7
  3. package/codemod/migrate-editorjs-to-blok.js +960 -92
  4. package/codemod/test.js +780 -77
  5. package/dist/blok.mjs +5 -2
  6. package/dist/chunks/blok-BU6NwVkN.mjs +13239 -0
  7. package/dist/chunks/i18next-CugVlwWp.mjs +1292 -0
  8. package/dist/chunks/i18next-loader-D8GzSwio.mjs +43 -0
  9. package/dist/{index-CEXLTV6f.mjs → chunks/index-C5e_WLFg.mjs} +2 -2
  10. package/dist/chunks/inline-tool-convert-CLUxkCe_.mjs +1990 -0
  11. package/dist/chunks/messages-0tDXLuyH.mjs +48 -0
  12. package/dist/chunks/messages-2_xedlYw.mjs +48 -0
  13. package/dist/chunks/messages-AHESHJm_.mjs +48 -0
  14. package/dist/chunks/messages-B5hdXZwA.mjs +48 -0
  15. package/dist/chunks/messages-B5jGUnOy.mjs +48 -0
  16. package/dist/chunks/messages-B5puUm7R.mjs +48 -0
  17. package/dist/chunks/messages-B66ZSDCJ.mjs +48 -0
  18. package/dist/chunks/messages-B9Oba7sq.mjs +48 -0
  19. package/dist/chunks/messages-BA0rcTCY.mjs +48 -0
  20. package/dist/chunks/messages-BBJgd5jG.mjs +48 -0
  21. package/dist/chunks/messages-BPqWKx5Z.mjs +48 -0
  22. package/dist/chunks/messages-Bdv-IkfG.mjs +48 -0
  23. package/dist/chunks/messages-BeUhMpsr.mjs +48 -0
  24. package/dist/chunks/messages-Bf6Y3_GI.mjs +48 -0
  25. package/dist/chunks/messages-BiExzWJv.mjs +48 -0
  26. package/dist/chunks/messages-BlpqL8vG.mjs +48 -0
  27. package/dist/chunks/messages-BmKCChWZ.mjs +48 -0
  28. package/dist/chunks/messages-Bn253WWC.mjs +48 -0
  29. package/dist/chunks/messages-BrJHUxQL.mjs +48 -0
  30. package/dist/chunks/messages-C5b7hr_E.mjs +48 -0
  31. package/dist/chunks/messages-C7I_AVH2.mjs +48 -0
  32. package/dist/chunks/messages-CJoBtXU6.mjs +48 -0
  33. package/dist/chunks/messages-CQj2JU2j.mjs +48 -0
  34. package/dist/chunks/messages-CUZ1x1QD.mjs +48 -0
  35. package/dist/chunks/messages-CUy1vn-b.mjs +48 -0
  36. package/dist/chunks/messages-CVeWVKsV.mjs +48 -0
  37. package/dist/chunks/messages-CXHd9SUK.mjs +48 -0
  38. package/dist/chunks/messages-CbMyJSzS.mjs +48 -0
  39. package/dist/chunks/messages-CbhuIWRJ.mjs +48 -0
  40. package/dist/chunks/messages-CeCjVKMW.mjs +48 -0
  41. package/dist/chunks/messages-Cj-t1bdy.mjs +48 -0
  42. package/dist/chunks/messages-CkFT2gle.mjs +48 -0
  43. package/dist/chunks/messages-Cm9aLHeX.mjs +48 -0
  44. package/dist/chunks/messages-CnvW8Slp.mjs +48 -0
  45. package/dist/chunks/messages-Cr-RJ7YB.mjs +48 -0
  46. package/dist/chunks/messages-CrsJ1TEJ.mjs +48 -0
  47. package/dist/chunks/messages-Cu08aLS3.mjs +48 -0
  48. package/dist/chunks/messages-CvaqJFN-.mjs +48 -0
  49. package/dist/chunks/messages-CyDU5lz9.mjs +48 -0
  50. package/dist/chunks/messages-CySyfkMU.mjs +48 -0
  51. package/dist/chunks/messages-Cyi2AMmz.mjs +48 -0
  52. package/dist/chunks/messages-D00OjS2n.mjs +48 -0
  53. package/dist/chunks/messages-DDLgIPDF.mjs +48 -0
  54. package/dist/chunks/messages-DMQIHGRj.mjs +48 -0
  55. package/dist/chunks/messages-DOlC_Tty.mjs +48 -0
  56. package/dist/chunks/messages-DV6shA9b.mjs +48 -0
  57. package/dist/chunks/messages-DY94ykcE.mjs +48 -0
  58. package/dist/chunks/messages-DbVquYKN.mjs +48 -0
  59. package/dist/chunks/messages-DcKOuncK.mjs +48 -0
  60. package/dist/chunks/messages-Dg92dXZ5.mjs +48 -0
  61. package/dist/chunks/messages-DnbbyJT3.mjs +48 -0
  62. package/dist/chunks/messages-DteYq0rv.mjs +48 -0
  63. package/dist/chunks/messages-GC2PhgV3.mjs +48 -0
  64. package/dist/chunks/messages-JGsXAReJ.mjs +48 -0
  65. package/dist/chunks/messages-JZUhXTuV.mjs +48 -0
  66. package/dist/chunks/messages-LvFKBBPa.mjs +48 -0
  67. package/dist/chunks/messages-NP1myMGI.mjs +48 -0
  68. package/dist/chunks/messages-Q4kc_ZtL.mjs +48 -0
  69. package/dist/chunks/messages-RvMHb2Ht.mjs +48 -0
  70. package/dist/chunks/messages-ftMcCEuO.mjs +48 -0
  71. package/dist/chunks/messages-o24dK6CU.mjs +48 -0
  72. package/dist/chunks/messages-pA5TvcAj.mjs +48 -0
  73. package/dist/chunks/messages-rRSHQDCX.mjs +48 -0
  74. package/dist/chunks/messages-srxrv8Yh.mjs +48 -0
  75. package/dist/chunks/messages-wdqp4610.mjs +48 -0
  76. package/dist/chunks/messages-zS1AXZ0y.mjs +48 -0
  77. package/dist/chunks/messages-zSzDzXej.mjs +48 -0
  78. package/dist/full.mjs +50 -0
  79. package/dist/locales.mjs +228 -0
  80. package/dist/messages-0tDXLuyH.mjs +48 -0
  81. package/dist/messages-2_xedlYw.mjs +48 -0
  82. package/dist/messages-AHESHJm_.mjs +48 -0
  83. package/dist/messages-B5hdXZwA.mjs +48 -0
  84. package/dist/messages-B5jGUnOy.mjs +48 -0
  85. package/dist/messages-B5puUm7R.mjs +48 -0
  86. package/dist/messages-B66ZSDCJ.mjs +48 -0
  87. package/dist/messages-B9Oba7sq.mjs +48 -0
  88. package/dist/messages-BA0rcTCY.mjs +48 -0
  89. package/dist/messages-BBJgd5jG.mjs +48 -0
  90. package/dist/messages-BPqWKx5Z.mjs +48 -0
  91. package/dist/messages-Bdv-IkfG.mjs +48 -0
  92. package/dist/messages-BeUhMpsr.mjs +48 -0
  93. package/dist/messages-Bf6Y3_GI.mjs +48 -0
  94. package/dist/messages-BiExzWJv.mjs +48 -0
  95. package/dist/messages-BlpqL8vG.mjs +48 -0
  96. package/dist/messages-BmKCChWZ.mjs +48 -0
  97. package/dist/messages-Bn253WWC.mjs +48 -0
  98. package/dist/messages-BrJHUxQL.mjs +48 -0
  99. package/dist/messages-C5b7hr_E.mjs +48 -0
  100. package/dist/messages-C7I_AVH2.mjs +48 -0
  101. package/dist/messages-CJoBtXU6.mjs +48 -0
  102. package/dist/messages-CQj2JU2j.mjs +48 -0
  103. package/dist/messages-CUZ1x1QD.mjs +48 -0
  104. package/dist/messages-CUy1vn-b.mjs +48 -0
  105. package/dist/messages-CVeWVKsV.mjs +48 -0
  106. package/dist/messages-CXHd9SUK.mjs +48 -0
  107. package/dist/messages-CbMyJSzS.mjs +48 -0
  108. package/dist/messages-CbhuIWRJ.mjs +48 -0
  109. package/dist/messages-CeCjVKMW.mjs +48 -0
  110. package/dist/messages-Cj-t1bdy.mjs +48 -0
  111. package/dist/messages-CkFT2gle.mjs +48 -0
  112. package/dist/messages-Cm9aLHeX.mjs +48 -0
  113. package/dist/messages-CnvW8Slp.mjs +48 -0
  114. package/dist/messages-Cr-RJ7YB.mjs +48 -0
  115. package/dist/messages-CrsJ1TEJ.mjs +48 -0
  116. package/dist/messages-Cu08aLS3.mjs +48 -0
  117. package/dist/messages-CvaqJFN-.mjs +48 -0
  118. package/dist/messages-CyDU5lz9.mjs +48 -0
  119. package/dist/messages-CySyfkMU.mjs +48 -0
  120. package/dist/messages-Cyi2AMmz.mjs +48 -0
  121. package/dist/messages-D00OjS2n.mjs +48 -0
  122. package/dist/messages-DDLgIPDF.mjs +48 -0
  123. package/dist/messages-DMQIHGRj.mjs +48 -0
  124. package/dist/messages-DOlC_Tty.mjs +48 -0
  125. package/dist/messages-DV6shA9b.mjs +48 -0
  126. package/dist/messages-DY94ykcE.mjs +48 -0
  127. package/dist/messages-DbVquYKN.mjs +48 -0
  128. package/dist/messages-DcKOuncK.mjs +48 -0
  129. package/dist/messages-Dg92dXZ5.mjs +48 -0
  130. package/dist/messages-DnbbyJT3.mjs +48 -0
  131. package/dist/messages-DteYq0rv.mjs +48 -0
  132. package/dist/messages-GC2PhgV3.mjs +48 -0
  133. package/dist/messages-JGsXAReJ.mjs +48 -0
  134. package/dist/messages-JZUhXTuV.mjs +48 -0
  135. package/dist/messages-LvFKBBPa.mjs +48 -0
  136. package/dist/messages-NP1myMGI.mjs +48 -0
  137. package/dist/messages-Q4kc_ZtL.mjs +48 -0
  138. package/dist/messages-RvMHb2Ht.mjs +48 -0
  139. package/dist/messages-ftMcCEuO.mjs +48 -0
  140. package/dist/messages-o24dK6CU.mjs +48 -0
  141. package/dist/messages-pA5TvcAj.mjs +48 -0
  142. package/dist/messages-rRSHQDCX.mjs +48 -0
  143. package/dist/messages-srxrv8Yh.mjs +48 -0
  144. package/dist/messages-wdqp4610.mjs +48 -0
  145. package/dist/messages-zS1AXZ0y.mjs +48 -0
  146. package/dist/messages-zSzDzXej.mjs +48 -0
  147. package/dist/tools.mjs +3126 -0
  148. package/dist/vendor.LICENSE.txt +26 -225
  149. package/package.json +63 -24
  150. package/src/blok.ts +267 -0
  151. package/src/components/__module.ts +139 -0
  152. package/src/components/block/api.ts +155 -0
  153. package/src/components/block/index.ts +1428 -0
  154. package/src/components/block-tunes/block-tune-delete.ts +51 -0
  155. package/src/components/blocks.ts +352 -0
  156. package/src/components/constants/data-attributes.ts +344 -0
  157. package/src/components/constants.ts +76 -0
  158. package/src/components/core.ts +392 -0
  159. package/src/components/dom.ts +773 -0
  160. package/src/components/domIterator.ts +189 -0
  161. package/src/components/errors/critical.ts +5 -0
  162. package/src/components/events/BlockChanged.ts +16 -0
  163. package/src/components/events/BlockHovered.ts +21 -0
  164. package/src/components/events/BlockSettingsClosed.ts +12 -0
  165. package/src/components/events/BlockSettingsOpened.ts +12 -0
  166. package/src/components/events/BlokMobileLayoutToggled.ts +15 -0
  167. package/src/components/events/FakeCursorAboutToBeToggled.ts +17 -0
  168. package/src/components/events/FakeCursorHaveBeenSet.ts +17 -0
  169. package/src/components/events/HistoryStateChanged.ts +19 -0
  170. package/src/components/events/RedactorDomChanged.ts +14 -0
  171. package/src/components/events/index.ts +46 -0
  172. package/src/components/flipper.ts +497 -0
  173. package/src/components/i18n/i18next-loader.ts +84 -0
  174. package/src/components/i18n/lightweight-i18n.ts +86 -0
  175. package/src/components/i18n/locales/TRANSLATION_GUIDELINES.md +113 -0
  176. package/src/components/i18n/locales/am/messages.json +45 -0
  177. package/src/components/i18n/locales/ar/messages.json +45 -0
  178. package/src/components/i18n/locales/az/messages.json +45 -0
  179. package/src/components/i18n/locales/bg/messages.json +45 -0
  180. package/src/components/i18n/locales/bn/messages.json +45 -0
  181. package/src/components/i18n/locales/bs/messages.json +45 -0
  182. package/src/components/i18n/locales/cs/messages.json +45 -0
  183. package/src/components/i18n/locales/da/messages.json +45 -0
  184. package/src/components/i18n/locales/de/messages.json +45 -0
  185. package/src/components/i18n/locales/dv/messages.json +45 -0
  186. package/src/components/i18n/locales/el/messages.json +45 -0
  187. package/src/components/i18n/locales/en/messages.json +45 -0
  188. package/src/components/i18n/locales/es/messages.json +45 -0
  189. package/src/components/i18n/locales/et/messages.json +45 -0
  190. package/src/components/i18n/locales/fa/messages.json +45 -0
  191. package/src/components/i18n/locales/fi/messages.json +45 -0
  192. package/src/components/i18n/locales/fil/messages.json +45 -0
  193. package/src/components/i18n/locales/fr/messages.json +45 -0
  194. package/src/components/i18n/locales/gu/messages.json +45 -0
  195. package/src/components/i18n/locales/he/messages.json +45 -0
  196. package/src/components/i18n/locales/hi/messages.json +45 -0
  197. package/src/components/i18n/locales/hr/messages.json +45 -0
  198. package/src/components/i18n/locales/hu/messages.json +45 -0
  199. package/src/components/i18n/locales/hy/messages.json +45 -0
  200. package/src/components/i18n/locales/id/messages.json +45 -0
  201. package/src/components/i18n/locales/index.ts +231 -0
  202. package/src/components/i18n/locales/it/messages.json +45 -0
  203. package/src/components/i18n/locales/ja/messages.json +45 -0
  204. package/src/components/i18n/locales/ka/messages.json +45 -0
  205. package/src/components/i18n/locales/km/messages.json +45 -0
  206. package/src/components/i18n/locales/kn/messages.json +45 -0
  207. package/src/components/i18n/locales/ko/messages.json +45 -0
  208. package/src/components/i18n/locales/ku/messages.json +45 -0
  209. package/src/components/i18n/locales/lo/messages.json +45 -0
  210. package/src/components/i18n/locales/lt/messages.json +45 -0
  211. package/src/components/i18n/locales/lv/messages.json +45 -0
  212. package/src/components/i18n/locales/mk/messages.json +45 -0
  213. package/src/components/i18n/locales/ml/messages.json +45 -0
  214. package/src/components/i18n/locales/mn/messages.json +45 -0
  215. package/src/components/i18n/locales/mr/messages.json +45 -0
  216. package/src/components/i18n/locales/ms/messages.json +45 -0
  217. package/src/components/i18n/locales/my/messages.json +45 -0
  218. package/src/components/i18n/locales/ne/messages.json +45 -0
  219. package/src/components/i18n/locales/nl/messages.json +45 -0
  220. package/src/components/i18n/locales/no/messages.json +45 -0
  221. package/src/components/i18n/locales/pa/messages.json +45 -0
  222. package/src/components/i18n/locales/pl/messages.json +45 -0
  223. package/src/components/i18n/locales/ps/messages.json +45 -0
  224. package/src/components/i18n/locales/pt/messages.json +45 -0
  225. package/src/components/i18n/locales/ro/messages.json +45 -0
  226. package/src/components/i18n/locales/ru/messages.json +45 -0
  227. package/src/components/i18n/locales/sd/messages.json +45 -0
  228. package/src/components/i18n/locales/si/messages.json +45 -0
  229. package/src/components/i18n/locales/sk/messages.json +45 -0
  230. package/src/components/i18n/locales/sl/messages.json +45 -0
  231. package/src/components/i18n/locales/sq/messages.json +45 -0
  232. package/src/components/i18n/locales/sr/messages.json +45 -0
  233. package/src/components/i18n/locales/sv/messages.json +45 -0
  234. package/src/components/i18n/locales/sw/messages.json +45 -0
  235. package/src/components/i18n/locales/ta/messages.json +45 -0
  236. package/src/components/i18n/locales/te/messages.json +45 -0
  237. package/src/components/i18n/locales/th/messages.json +45 -0
  238. package/src/components/i18n/locales/tr/messages.json +45 -0
  239. package/src/components/i18n/locales/ug/messages.json +45 -0
  240. package/src/components/i18n/locales/uk/messages.json +45 -0
  241. package/src/components/i18n/locales/ur/messages.json +45 -0
  242. package/src/components/i18n/locales/vi/messages.json +45 -0
  243. package/src/components/i18n/locales/yi/messages.json +45 -0
  244. package/src/components/i18n/locales/zh/messages.json +45 -0
  245. package/src/components/icons/index.ts +242 -0
  246. package/src/components/inline-tools/inline-tool-bold.ts +2213 -0
  247. package/src/components/inline-tools/inline-tool-convert.ts +142 -0
  248. package/src/components/inline-tools/inline-tool-italic.ts +500 -0
  249. package/src/components/inline-tools/inline-tool-link.ts +540 -0
  250. package/src/components/modules/api/blocks.ts +377 -0
  251. package/src/components/modules/api/caret.ts +125 -0
  252. package/src/components/modules/api/events.ts +51 -0
  253. package/src/components/modules/api/history.ts +73 -0
  254. package/src/components/modules/api/i18n.ts +35 -0
  255. package/src/components/modules/api/index.ts +39 -0
  256. package/src/components/modules/api/inlineToolbar.ts +33 -0
  257. package/src/components/modules/api/listeners.ts +56 -0
  258. package/src/components/modules/api/notifier.ts +46 -0
  259. package/src/components/modules/api/readonly.ts +39 -0
  260. package/src/components/modules/api/sanitizer.ts +30 -0
  261. package/src/components/modules/api/saver.ts +52 -0
  262. package/src/components/modules/api/selection.ts +48 -0
  263. package/src/components/modules/api/styles.ts +72 -0
  264. package/src/components/modules/api/toolbar.ts +79 -0
  265. package/src/components/modules/api/tools.ts +16 -0
  266. package/src/components/modules/api/tooltip.ts +67 -0
  267. package/src/components/modules/api/ui.ts +36 -0
  268. package/src/components/modules/blockEvents.ts +1591 -0
  269. package/src/components/modules/blockManager.ts +1356 -0
  270. package/src/components/modules/blockSelection.ts +708 -0
  271. package/src/components/modules/caret.ts +853 -0
  272. package/src/components/modules/crossBlockSelection.ts +329 -0
  273. package/src/components/modules/dragManager.ts +1204 -0
  274. package/src/components/modules/history.ts +1098 -0
  275. package/src/components/modules/i18n.ts +332 -0
  276. package/src/components/modules/index.ts +139 -0
  277. package/src/components/modules/modificationsObserver.ts +147 -0
  278. package/src/components/modules/paste.ts +1092 -0
  279. package/src/components/modules/readonly.ts +136 -0
  280. package/src/components/modules/rectangleSelection.ts +711 -0
  281. package/src/components/modules/renderer.ts +155 -0
  282. package/src/components/modules/saver.ts +283 -0
  283. package/src/components/modules/toolbar/blockSettings.ts +782 -0
  284. package/src/components/modules/toolbar/index.ts +1296 -0
  285. package/src/components/modules/toolbar/inline.ts +956 -0
  286. package/src/components/modules/tools.ts +625 -0
  287. package/src/components/modules/ui.ts +1283 -0
  288. package/src/components/polyfills.ts +113 -0
  289. package/src/components/selection.ts +1179 -0
  290. package/src/components/tools/base.ts +301 -0
  291. package/src/components/tools/block.ts +339 -0
  292. package/src/components/tools/collection.ts +67 -0
  293. package/src/components/tools/factory.ts +138 -0
  294. package/src/components/tools/inline.ts +71 -0
  295. package/src/components/tools/tune.ts +33 -0
  296. package/src/components/ui/toolbox.ts +610 -0
  297. package/src/components/utils/announcer.ts +205 -0
  298. package/src/components/utils/api.ts +20 -0
  299. package/src/components/utils/bem.ts +26 -0
  300. package/src/components/utils/blocks.ts +284 -0
  301. package/src/components/utils/caret.ts +1067 -0
  302. package/src/components/utils/data-model-transform.ts +382 -0
  303. package/src/components/utils/events.ts +117 -0
  304. package/src/components/utils/keyboard.ts +60 -0
  305. package/src/components/utils/listeners.ts +296 -0
  306. package/src/components/utils/mutations.ts +39 -0
  307. package/src/components/utils/notifier/draw.ts +190 -0
  308. package/src/components/utils/notifier/index.ts +66 -0
  309. package/src/components/utils/notifier/types.ts +1 -0
  310. package/src/components/utils/notifier.ts +77 -0
  311. package/src/components/utils/placeholder.ts +140 -0
  312. package/src/components/utils/popover/components/hint/hint.const.ts +10 -0
  313. package/src/components/utils/popover/components/hint/hint.ts +46 -0
  314. package/src/components/utils/popover/components/hint/index.ts +6 -0
  315. package/src/components/utils/popover/components/popover-header/index.ts +2 -0
  316. package/src/components/utils/popover/components/popover-header/popover-header.const.ts +8 -0
  317. package/src/components/utils/popover/components/popover-header/popover-header.ts +80 -0
  318. package/src/components/utils/popover/components/popover-header/popover-header.types.ts +14 -0
  319. package/src/components/utils/popover/components/popover-item/index.ts +13 -0
  320. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.const.ts +50 -0
  321. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +680 -0
  322. package/src/components/utils/popover/components/popover-item/popover-item-html/popover-item-html.const.ts +14 -0
  323. package/src/components/utils/popover/components/popover-item/popover-item-html/popover-item-html.ts +136 -0
  324. package/src/components/utils/popover/components/popover-item/popover-item-separator/popover-item-separator.const.ts +20 -0
  325. package/src/components/utils/popover/components/popover-item/popover-item-separator/popover-item-separator.ts +117 -0
  326. package/src/components/utils/popover/components/popover-item/popover-item.ts +197 -0
  327. package/src/components/utils/popover/components/search-input/index.ts +2 -0
  328. package/src/components/utils/popover/components/search-input/search-input.const.ts +8 -0
  329. package/src/components/utils/popover/components/search-input/search-input.ts +178 -0
  330. package/src/components/utils/popover/components/search-input/search-input.types.ts +59 -0
  331. package/src/components/utils/popover/index.ts +13 -0
  332. package/src/components/utils/popover/popover-abstract.ts +457 -0
  333. package/src/components/utils/popover/popover-desktop.ts +682 -0
  334. package/src/components/utils/popover/popover-inline.ts +338 -0
  335. package/src/components/utils/popover/popover-mobile.ts +201 -0
  336. package/src/components/utils/popover/popover.const.ts +81 -0
  337. package/src/components/utils/popover/utils/popover-states-history.ts +72 -0
  338. package/src/components/utils/promise-queue.ts +43 -0
  339. package/src/components/utils/sanitizer.ts +537 -0
  340. package/src/components/utils/scroll-locker.ts +87 -0
  341. package/src/components/utils/shortcut.ts +231 -0
  342. package/src/components/utils/shortcuts.ts +113 -0
  343. package/src/components/utils/tools.ts +110 -0
  344. package/src/components/utils/tooltip.ts +591 -0
  345. package/src/components/utils/tw.ts +241 -0
  346. package/src/components/utils.ts +1081 -0
  347. package/src/env.d.ts +13 -0
  348. package/src/full.ts +69 -0
  349. package/src/locales.ts +51 -0
  350. package/src/stories/Block.stories.ts +498 -0
  351. package/src/stories/EditorModes.stories.ts +505 -0
  352. package/src/stories/Header.stories.ts +137 -0
  353. package/src/stories/InlineToolbar.stories.ts +498 -0
  354. package/src/stories/List.stories.ts +259 -0
  355. package/src/stories/Notifier.stories.ts +340 -0
  356. package/src/stories/Paragraph.stories.ts +112 -0
  357. package/src/stories/Placeholder.stories.ts +319 -0
  358. package/src/stories/Popover.stories.ts +759 -0
  359. package/src/stories/Selection.stories.ts +250 -0
  360. package/src/stories/StubBlock.stories.ts +156 -0
  361. package/src/stories/Toolbar.stories.ts +223 -0
  362. package/src/stories/Toolbox.stories.ts +166 -0
  363. package/src/stories/Tooltip.stories.ts +198 -0
  364. package/src/stories/helpers.ts +463 -0
  365. package/src/styles/main.css +126 -0
  366. package/src/tools/header/index.ts +647 -0
  367. package/src/tools/index.ts +45 -0
  368. package/src/tools/list/index.ts +1826 -0
  369. package/src/tools/paragraph/index.ts +412 -0
  370. package/src/tools/stub/index.ts +107 -0
  371. package/src/types-internal/blok-modules.d.ts +87 -0
  372. package/src/types-internal/html-janitor.d.ts +28 -0
  373. package/src/types-internal/module-config.d.ts +11 -0
  374. package/src/variants/all-locales.ts +155 -0
  375. package/src/variants/blok-maximum.ts +20 -0
  376. package/src/variants/blok-minimum.ts +243 -0
  377. package/types/api/blocks.d.ts +9 -1
  378. package/types/api/history.d.ts +7 -0
  379. package/types/api/i18n.d.ts +22 -3
  380. package/types/api/selection.d.ts +6 -0
  381. package/types/api/styles.d.ts +23 -10
  382. package/types/configs/blok-config.d.ts +29 -0
  383. package/types/configs/i18n-config.d.ts +52 -2
  384. package/types/configs/i18n-dictionary.d.ts +16 -90
  385. package/types/configs/sanitizer-config.d.ts +25 -1
  386. package/types/data-attributes.d.ts +170 -0
  387. package/types/data-formats/output-data.d.ts +15 -0
  388. package/types/full.d.ts +80 -0
  389. package/types/index.d.ts +30 -13
  390. package/types/locales.d.ts +59 -0
  391. package/types/tools/adapters/inline-tool-adapter.d.ts +10 -0
  392. package/types/tools/block-tool.d.ts +11 -2
  393. package/types/tools/header.d.ts +18 -0
  394. package/types/tools/index.d.ts +1 -0
  395. package/types/tools/list.d.ts +91 -0
  396. package/types/tools/paragraph.d.ts +71 -0
  397. package/types/tools/tool-settings.d.ts +99 -6
  398. package/types/tools/tool.d.ts +6 -0
  399. package/types/tools-entry.d.ts +49 -0
  400. package/types/utils/popover/popover-item.d.ts +24 -5
  401. package/types/utils/popover/popover.d.ts +13 -0
  402. package/dist/blok-C8XbyLHh.mjs +0 -25795
  403. package/dist/blok.umd.js +0 -181
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Supported modifier commands and their aliases
3
+ */
4
+ const SUPPORTED_COMMANDS = {
5
+ SHIFT: ['SHIFT'],
6
+ CMD: ['CMD', 'CONTROL', 'COMMAND', 'WINDOWS', 'CTRL'],
7
+ ALT: ['ALT', 'OPTION'],
8
+ } as const;
9
+
10
+ /**
11
+ * Key name mappings to event.code values
12
+ */
13
+ const KEY_CODES: Record<string, string> = {
14
+ '0': 'Digit0',
15
+ '1': 'Digit1',
16
+ '2': 'Digit2',
17
+ '3': 'Digit3',
18
+ '4': 'Digit4',
19
+ '5': 'Digit5',
20
+ '6': 'Digit6',
21
+ '7': 'Digit7',
22
+ '8': 'Digit8',
23
+ '9': 'Digit9',
24
+ 'A': 'KeyA',
25
+ 'B': 'KeyB',
26
+ 'C': 'KeyC',
27
+ 'D': 'KeyD',
28
+ 'E': 'KeyE',
29
+ 'F': 'KeyF',
30
+ 'G': 'KeyG',
31
+ 'H': 'KeyH',
32
+ 'I': 'KeyI',
33
+ 'J': 'KeyJ',
34
+ 'K': 'KeyK',
35
+ 'L': 'KeyL',
36
+ 'M': 'KeyM',
37
+ 'N': 'KeyN',
38
+ 'O': 'KeyO',
39
+ 'P': 'KeyP',
40
+ 'Q': 'KeyQ',
41
+ 'R': 'KeyR',
42
+ 'S': 'KeyS',
43
+ 'T': 'KeyT',
44
+ 'U': 'KeyU',
45
+ 'V': 'KeyV',
46
+ 'W': 'KeyW',
47
+ 'X': 'KeyX',
48
+ 'Y': 'KeyY',
49
+ 'Z': 'KeyZ',
50
+ 'BACKSPACE': 'Backspace',
51
+ 'ENTER': 'Enter',
52
+ 'ESCAPE': 'Escape',
53
+ 'LEFT': 'ArrowLeft',
54
+ 'UP': 'ArrowUp',
55
+ 'RIGHT': 'ArrowRight',
56
+ 'DOWN': 'ArrowDown',
57
+ 'INSERT': 'Insert',
58
+ 'DELETE': 'Delete',
59
+ '.': 'Period',
60
+ };
61
+
62
+ type ModifierKey = keyof typeof SUPPORTED_COMMANDS;
63
+
64
+ /**
65
+ * Finds the modifier key that matches the given alias
66
+ * @param alias - The alias to check (e.g., 'CMD', 'CTRL', 'OPTION')
67
+ * @returns The modifier key if found, undefined otherwise
68
+ */
69
+ const findModifierKey = (alias: string): ModifierKey | undefined => {
70
+ const modifierKeys = Object.keys(SUPPORTED_COMMANDS) as ModifierKey[];
71
+
72
+ return modifierKeys.find((command) =>
73
+ SUPPORTED_COMMANDS[command].includes(alias as never)
74
+ );
75
+ };
76
+
77
+ /**
78
+ * Options for creating a keyboard shortcut
79
+ */
80
+ export interface ShortcutOptions {
81
+ /**
82
+ * Shortcut name (e.g., 'CMD+K', 'CMD+B')
83
+ */
84
+ name: string;
85
+
86
+ /**
87
+ * Element to attach the shortcut to
88
+ */
89
+ on: HTMLElement | Document;
90
+
91
+ /**
92
+ * Callback function to execute when shortcut is triggered
93
+ */
94
+ callback: (event: KeyboardEvent) => void;
95
+ }
96
+
97
+ /**
98
+ * Shortcut class for handling keyboard shortcuts
99
+ *
100
+ * Listens for keydown events on the specified element and executes
101
+ * the callback when the configured key combination is pressed.
102
+ */
103
+ export class Shortcut {
104
+ /**
105
+ * Shortcut name
106
+ */
107
+ public name: string;
108
+
109
+ /**
110
+ * Parsed modifier commands state
111
+ */
112
+ private commands: Record<ModifierKey, boolean>;
113
+
114
+ /**
115
+ * Parsed key codes to match
116
+ */
117
+ private keys: Record<string, boolean>;
118
+
119
+ /**
120
+ * Element the shortcut is attached to
121
+ */
122
+ private element: HTMLElement | Document;
123
+
124
+ /**
125
+ * Callback to execute when shortcut is triggered
126
+ */
127
+ private callback: (event: KeyboardEvent) => void;
128
+
129
+ /**
130
+ * Bound event handler for removal
131
+ */
132
+ private executeShortcut: EventListener;
133
+
134
+ /**
135
+ * Creates a new Shortcut instance
136
+ * @param options - Configuration options
137
+ */
138
+ constructor(options: ShortcutOptions) {
139
+ this.commands = {
140
+ SHIFT: false,
141
+ CMD: false,
142
+ ALT: false,
143
+ };
144
+ this.keys = {};
145
+ this.name = options.name;
146
+ this.element = options.on;
147
+ this.callback = options.callback;
148
+
149
+ this.parseShortcutName(options.name);
150
+
151
+ this.executeShortcut = (event: Event): void => {
152
+ this.execute(event as KeyboardEvent);
153
+ };
154
+
155
+ this.element.addEventListener('keydown', this.executeShortcut, false);
156
+ }
157
+
158
+ /**
159
+ * Removes the shortcut event listener
160
+ */
161
+ public remove(): void {
162
+ this.element.removeEventListener('keydown', this.executeShortcut);
163
+ }
164
+
165
+ /**
166
+ * Parses the shortcut name and extracts modifier keys and regular keys
167
+ * @param name - Shortcut name like 'CMD+K' or 'SHIFT+CMD+B'
168
+ */
169
+ private parseShortcutName(name: string): void {
170
+ const parts = name.split('+');
171
+
172
+ for (const part of parts) {
173
+ const upperPart = part.toUpperCase();
174
+ const modifierKey = findModifierKey(upperPart);
175
+
176
+ if (modifierKey !== undefined) {
177
+ this.commands[modifierKey] = true;
178
+ } else {
179
+ this.keys[upperPart] = true;
180
+ }
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Checks if all modifier commands match the event
186
+ * @param event - Keyboard event to check
187
+ * @returns True if all modifiers match
188
+ */
189
+ private checkModifiers(event: KeyboardEvent): boolean {
190
+ const eventModifiers: Record<ModifierKey, boolean> = {
191
+ CMD: event.ctrlKey || event.metaKey,
192
+ SHIFT: event.shiftKey,
193
+ ALT: event.altKey,
194
+ };
195
+
196
+ const modifierKeys = Object.keys(this.commands) as ModifierKey[];
197
+
198
+ return modifierKeys.every(
199
+ (command) => this.commands[command] === eventModifiers[command]
200
+ );
201
+ }
202
+
203
+ /**
204
+ * Checks if all required keys match the event
205
+ * @param event - Keyboard event to check
206
+ * @returns True if all keys match
207
+ */
208
+ private checkKeys(event: KeyboardEvent): boolean {
209
+ const requiredKeys = Object.keys(this.keys);
210
+
211
+ return requiredKeys.every((key) => {
212
+ const expectedCode = KEY_CODES[key];
213
+
214
+ return event.code === expectedCode;
215
+ });
216
+ }
217
+
218
+ /**
219
+ * Executes the callback if the keyboard event matches the shortcut
220
+ * @param event - Keyboard event to check
221
+ */
222
+ private execute(event: KeyboardEvent): void {
223
+ const commandsMatch = this.checkModifiers(event);
224
+ const keysMatch = this.checkKeys(event);
225
+
226
+ if (commandsMatch && keysMatch) {
227
+ this.callback(event);
228
+ }
229
+ }
230
+ }
231
+
@@ -0,0 +1,113 @@
1
+ import { Shortcut } from './shortcut';
2
+
3
+ /**
4
+ * Contains keyboard and mouse events binded on each Block by Block Manager
5
+ */
6
+
7
+ /**
8
+ * ShortcutData interface
9
+ * Each shortcut must have name and handler
10
+ * `name` is a shortcut, like 'CMD+K', 'CMD+B' etc
11
+ * `handler` is a callback
12
+ * @interface ShortcutData
13
+ */
14
+ export interface ShortcutData {
15
+
16
+ /**
17
+ * Shortcut name
18
+ * Ex. CMD+I, CMD+B ....
19
+ */
20
+ name: string;
21
+
22
+ /**
23
+ * Shortcut handler
24
+ */
25
+ handler(event: KeyboardEvent): void;
26
+
27
+ /**
28
+ * Element handler should be added for
29
+ */
30
+ on: HTMLElement | Document;
31
+ }
32
+
33
+ /**
34
+ * @class Shortcut
35
+ * @classdesc Allows to register new shortcut
36
+ *
37
+ * Internal Shortcuts Module
38
+ */
39
+ class ShortcutsClass {
40
+ /**
41
+ * All registered shortcuts
42
+ * @type {Map<HTMLElement | Document, Shortcut[]>}
43
+ */
44
+ private registeredShortcuts: Map<HTMLElement | Document, Shortcut[]> = new Map();
45
+
46
+ /**
47
+ * Register shortcut
48
+ * @param shortcut - shortcut options
49
+ */
50
+ public add(shortcut: ShortcutData): void {
51
+ const foundShortcut = this.findShortcut(shortcut.on, shortcut.name);
52
+
53
+ if (foundShortcut) {
54
+ throw Error(
55
+ `Shortcut ${shortcut.name} is already registered for ${shortcut.on}. Please remove it before add a new handler.`
56
+ );
57
+ }
58
+
59
+ const newShortcut = new Shortcut({
60
+ name: shortcut.name,
61
+ on: shortcut.on,
62
+ callback: shortcut.handler,
63
+ });
64
+ const shortcuts = this.registeredShortcuts.get(shortcut.on) || [];
65
+
66
+ this.registeredShortcuts.set(shortcut.on, [...shortcuts, newShortcut]);
67
+ }
68
+
69
+ /**
70
+ * Remove shortcut
71
+ * @param element - Element shortcut is set for
72
+ * @param name - shortcut name
73
+ */
74
+ public remove(element: HTMLElement | Document, name: string): void {
75
+ const shortcut = this.findShortcut(element, name);
76
+
77
+ if (!shortcut) {
78
+ return;
79
+ }
80
+
81
+ shortcut.remove();
82
+
83
+ const shortcuts = this.registeredShortcuts.get(element);
84
+
85
+ if (!shortcuts) {
86
+ return;
87
+ }
88
+
89
+ const filteredShortcuts = shortcuts.filter(el => el !== shortcut);
90
+
91
+ if (filteredShortcuts.length === 0) {
92
+ this.registeredShortcuts.delete(element);
93
+
94
+ return;
95
+ }
96
+
97
+ this.registeredShortcuts.set(element, filteredShortcuts);
98
+ }
99
+
100
+ /**
101
+ * Get Shortcut instance if exist
102
+ * @param element - Element shorcut is set for
103
+ * @param shortcut - shortcut name
104
+ * @returns {number} index - shortcut index if exist
105
+ */
106
+ private findShortcut(element: HTMLElement | Document, shortcut: string): Shortcut | void {
107
+ const shortcuts = this.registeredShortcuts.get(element) || [];
108
+
109
+ return shortcuts.find(({ name }) => name === shortcut);
110
+ }
111
+ }
112
+
113
+ export const Shortcuts = new ShortcutsClass();
@@ -0,0 +1,110 @@
1
+ import type { BlockToolAdapter } from '../tools/block';
2
+ import type { ToolboxConfigEntry } from '@/types';
3
+ import { isFunction, isString } from '../utils';
4
+
5
+ /**
6
+ * Interface for i18n instance needed by tool utilities
7
+ */
8
+ export interface I18nInstance {
9
+ t(key: string, vars?: Record<string, string | number>): string;
10
+ has(key: string): boolean;
11
+ }
12
+
13
+ /**
14
+ * Check if tool has valid conversion config for export or import.
15
+ * @param tool - tool to check
16
+ * @param direction - export for tool to merge from, import for tool to merge to
17
+ */
18
+ export const isToolConvertable = (tool: BlockToolAdapter, direction: 'export' | 'import'): boolean => {
19
+ if (!tool.conversionConfig) {
20
+ return false;
21
+ }
22
+
23
+ const conversionProp = tool.conversionConfig[direction];
24
+
25
+ return isFunction(conversionProp) || isString(conversionProp);
26
+ };
27
+
28
+ /**
29
+ * Try to translate a key, supporting both full keys and toolNames namespace.
30
+ *
31
+ * If the key contains a dot (e.g., 'tools.header.heading1'), it's treated as a full key.
32
+ * Otherwise, it's prefixed with 'toolNames.' (e.g., 'text' → 'toolNames.text').
33
+ *
34
+ * @param i18n - I18n instance
35
+ * @param key - The key to look up (full key or short key without toolNames prefix)
36
+ * @returns The translated string or undefined if not found
37
+ */
38
+ const tryTranslate = (i18n: I18nInstance, key: string): string | undefined => {
39
+ // If key contains a dot, treat it as a full key (e.g., 'tools.header.heading1')
40
+ // Otherwise, prefix with 'toolNames.' (e.g., 'text' → 'toolNames.text')
41
+ const fullKey = key.includes('.') ? key : `toolNames.${key}`;
42
+
43
+ return i18n.has(fullKey) ? i18n.t(fullKey) : undefined;
44
+ };
45
+
46
+ /**
47
+ * Translate a toolbox entry title using the i18n system.
48
+ *
49
+ * Priority:
50
+ * 1. If titleKey is set, look up toolNames.{titleKey}
51
+ * 2. If title is set, look up toolNames.{title} (for external tools without titleKey)
52
+ * 3. If fallback is set, look up toolNames.{fallback} (for tools without title)
53
+ * 4. Return the first available string: title or fallback
54
+ *
55
+ * @param i18n - I18n instance
56
+ * @param entry - Toolbox config entry with title and optional titleKey
57
+ * @param fallback - Fallback string if no translation or title exists
58
+ * @returns Translated title string
59
+ */
60
+ export const translateToolTitle = (i18n: I18nInstance, entry: ToolboxConfigEntry, fallback = ''): string => {
61
+ // Try titleKey first (explicit translation key)
62
+ const titleKeyTranslation = entry.titleKey ? tryTranslate(i18n, entry.titleKey) : undefined;
63
+
64
+ if (titleKeyTranslation !== undefined) {
65
+ return titleKeyTranslation;
66
+ }
67
+
68
+ // Try title as translation key (for external tools without titleKey)
69
+ const titleTranslation = entry.title ? tryTranslate(i18n, entry.title) : undefined;
70
+
71
+ if (titleTranslation !== undefined) {
72
+ return titleTranslation;
73
+ }
74
+
75
+ if (entry.title) {
76
+ return entry.title;
77
+ }
78
+
79
+ // Try fallback as translation key (for tools without title)
80
+ const fallbackTranslation = fallback ? tryTranslate(i18n, fallback) : undefined;
81
+
82
+ return fallbackTranslation ?? fallback;
83
+ };
84
+
85
+ /**
86
+ * Translate a tool name using the toolNames namespace.
87
+ *
88
+ * Priority:
89
+ * 1. If titleKey is set, look up toolNames.{titleKey}
90
+ * 2. If title is set, look up toolNames.{title} (for external tools without titleKey)
91
+ * 3. Return the title as-is
92
+ *
93
+ * @param i18n - I18n instance
94
+ * @param titleKey - Translation key (e.g., 'bold', 'link', 'text')
95
+ * @param title - Fallback title string (e.g., 'Bold', 'Link', 'Text')
96
+ * @returns Translated tool name, or the title as fallback
97
+ */
98
+ export const translateToolName = (i18n: I18nInstance, titleKey: string | undefined, title: string): string => {
99
+ // Try explicit titleKey first
100
+ const titleKeyTranslation = titleKey ? tryTranslate(i18n, titleKey) : undefined;
101
+
102
+ if (titleKeyTranslation !== undefined) {
103
+ return titleKeyTranslation;
104
+ }
105
+
106
+ // Try title as translation key (for external tools without titleKey)
107
+ const titleTranslation = tryTranslate(i18n, title);
108
+
109
+ return titleTranslation ?? title;
110
+ };