@jackuait/blok 0.4.1 → 0.4.2

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 (397) hide show
  1. package/README.md +136 -17
  2. package/codemod/README.md +16 -0
  3. package/codemod/migrate-editorjs-to-blok.js +859 -92
  4. package/codemod/test.js +682 -77
  5. package/dist/blok.mjs +5 -2
  6. package/dist/chunks/blok-BjgH1REI.mjs +12838 -0
  7. package/dist/chunks/i18next-CugVlwWp.mjs +1292 -0
  8. package/dist/chunks/i18next-loader-DfiUa_gd.mjs +43 -0
  9. package/dist/{index-CBkApZKo.mjs → chunks/index-5m5JWNey.mjs} +2 -2
  10. package/dist/chunks/inline-tool-convert-Bx5BVd8I.mjs +1988 -0
  11. package/dist/chunks/messages-2434tVOK.mjs +47 -0
  12. package/dist/chunks/messages-3DcCwXMF.mjs +47 -0
  13. package/dist/chunks/messages-4kMwVAKY.mjs +47 -0
  14. package/dist/chunks/messages-57uL5htT.mjs +47 -0
  15. package/dist/chunks/messages-76-iJV9Q.mjs +47 -0
  16. package/dist/chunks/messages-8p86Eyf2.mjs +47 -0
  17. package/dist/chunks/messages-BBX0p0Pi.mjs +47 -0
  18. package/dist/chunks/messages-BCm2eudQ.mjs +47 -0
  19. package/dist/chunks/messages-BFiUomgG.mjs +47 -0
  20. package/dist/chunks/messages-BIPNHHAV.mjs +47 -0
  21. package/dist/chunks/messages-BUlwu9mo.mjs +47 -0
  22. package/dist/chunks/messages-BX-DPa-z.mjs +47 -0
  23. package/dist/chunks/messages-BextV3Qh.mjs +47 -0
  24. package/dist/chunks/messages-BiPSFlUG.mjs +47 -0
  25. package/dist/chunks/messages-BiXe9G-O.mjs +47 -0
  26. package/dist/chunks/messages-Bl5z_Igo.mjs +47 -0
  27. package/dist/chunks/messages-BnsE97ku.mjs +47 -0
  28. package/dist/chunks/messages-BoO8gsVD.mjs +47 -0
  29. package/dist/chunks/messages-BqWaOGMn.mjs +47 -0
  30. package/dist/chunks/messages-BqkL2_Ro.mjs +47 -0
  31. package/dist/chunks/messages-BvCkXKX-.mjs +47 -0
  32. package/dist/chunks/messages-C6tbPLoj.mjs +47 -0
  33. package/dist/chunks/messages-CA6T3-gQ.mjs +47 -0
  34. package/dist/chunks/messages-CFFPFdWP.mjs +47 -0
  35. package/dist/chunks/messages-CFrKE-TN.mjs +47 -0
  36. package/dist/chunks/messages-CHz8VlG-.mjs +47 -0
  37. package/dist/chunks/messages-CLixzySl.mjs +47 -0
  38. package/dist/chunks/messages-CV7OM_qk.mjs +47 -0
  39. package/dist/chunks/messages-CXHt3eCC.mjs +47 -0
  40. package/dist/chunks/messages-CbmsBrB0.mjs +47 -0
  41. package/dist/chunks/messages-Ceo1KtFx.mjs +47 -0
  42. package/dist/chunks/messages-Cm0LJLtB.mjs +47 -0
  43. package/dist/chunks/messages-CmymP_Ar.mjs +47 -0
  44. package/dist/chunks/messages-D0ohMB5H.mjs +47 -0
  45. package/dist/chunks/messages-D3GrDwXh.mjs +47 -0
  46. package/dist/chunks/messages-D3vTzIpL.mjs +47 -0
  47. package/dist/chunks/messages-D5WeksbV.mjs +47 -0
  48. package/dist/chunks/messages-DGaab4EP.mjs +47 -0
  49. package/dist/chunks/messages-DKha57ZU.mjs +47 -0
  50. package/dist/chunks/messages-DOaujgMW.mjs +47 -0
  51. package/dist/chunks/messages-DVbPLd_0.mjs +47 -0
  52. package/dist/chunks/messages-D_FCyfW6.mjs +47 -0
  53. package/dist/chunks/messages-Dd5iZN3c.mjs +47 -0
  54. package/dist/chunks/messages-DehM7135.mjs +47 -0
  55. package/dist/chunks/messages-Dg1OHftD.mjs +47 -0
  56. package/dist/chunks/messages-Di6Flq-b.mjs +47 -0
  57. package/dist/chunks/messages-Dqhhex6e.mjs +47 -0
  58. package/dist/chunks/messages-DueVe0F1.mjs +47 -0
  59. package/dist/chunks/messages-Dx3eFwI0.mjs +47 -0
  60. package/dist/chunks/messages-FOtiUoKl.mjs +47 -0
  61. package/dist/chunks/messages-FTOZNhRD.mjs +47 -0
  62. package/dist/chunks/messages-IQxGfQIV.mjs +47 -0
  63. package/dist/chunks/messages-JF2fzCkK.mjs +47 -0
  64. package/dist/chunks/messages-MOGl7I5v.mjs +47 -0
  65. package/dist/chunks/messages-QgYhPL-3.mjs +47 -0
  66. package/dist/chunks/messages-WYWIbQwo.mjs +47 -0
  67. package/dist/chunks/messages-a6A_LgDv.mjs +47 -0
  68. package/dist/chunks/messages-bSf31LJi.mjs +47 -0
  69. package/dist/chunks/messages-diGozhTn.mjs +47 -0
  70. package/dist/chunks/messages-er-kd-VO.mjs +47 -0
  71. package/dist/chunks/messages-ez3w5NBn.mjs +47 -0
  72. package/dist/chunks/messages-f3uXjegd.mjs +47 -0
  73. package/dist/chunks/messages-ohwI1UGv.mjs +47 -0
  74. package/dist/chunks/messages-p9BZJaFV.mjs +47 -0
  75. package/dist/chunks/messages-qIQ4L4rw.mjs +47 -0
  76. package/dist/chunks/messages-qWkXPggi.mjs +47 -0
  77. package/dist/chunks/messages-w5foGze_.mjs +47 -0
  78. package/dist/full.mjs +50 -0
  79. package/dist/locales.mjs +227 -0
  80. package/dist/messages-2434tVOK.mjs +47 -0
  81. package/dist/messages-3DcCwXMF.mjs +47 -0
  82. package/dist/messages-4kMwVAKY.mjs +47 -0
  83. package/dist/messages-57uL5htT.mjs +47 -0
  84. package/dist/messages-76-iJV9Q.mjs +47 -0
  85. package/dist/messages-8p86Eyf2.mjs +47 -0
  86. package/dist/messages-BBX0p0Pi.mjs +47 -0
  87. package/dist/messages-BCm2eudQ.mjs +47 -0
  88. package/dist/messages-BFiUomgG.mjs +47 -0
  89. package/dist/messages-BIPNHHAV.mjs +47 -0
  90. package/dist/messages-BUlwu9mo.mjs +47 -0
  91. package/dist/messages-BX-DPa-z.mjs +47 -0
  92. package/dist/messages-BextV3Qh.mjs +47 -0
  93. package/dist/messages-BiPSFlUG.mjs +47 -0
  94. package/dist/messages-BiXe9G-O.mjs +47 -0
  95. package/dist/messages-Bl5z_Igo.mjs +47 -0
  96. package/dist/messages-BnsE97ku.mjs +47 -0
  97. package/dist/messages-BoO8gsVD.mjs +47 -0
  98. package/dist/messages-BqWaOGMn.mjs +47 -0
  99. package/dist/messages-BqkL2_Ro.mjs +47 -0
  100. package/dist/messages-BvCkXKX-.mjs +47 -0
  101. package/dist/messages-C6tbPLoj.mjs +47 -0
  102. package/dist/messages-CA6T3-gQ.mjs +47 -0
  103. package/dist/messages-CFFPFdWP.mjs +47 -0
  104. package/dist/messages-CFrKE-TN.mjs +47 -0
  105. package/dist/messages-CHz8VlG-.mjs +47 -0
  106. package/dist/messages-CLixzySl.mjs +47 -0
  107. package/dist/messages-CV7OM_qk.mjs +47 -0
  108. package/dist/messages-CXHt3eCC.mjs +47 -0
  109. package/dist/messages-CbmsBrB0.mjs +47 -0
  110. package/dist/messages-Ceo1KtFx.mjs +47 -0
  111. package/dist/messages-Cm0LJLtB.mjs +47 -0
  112. package/dist/messages-CmymP_Ar.mjs +47 -0
  113. package/dist/messages-D0ohMB5H.mjs +47 -0
  114. package/dist/messages-D3GrDwXh.mjs +47 -0
  115. package/dist/messages-D3vTzIpL.mjs +47 -0
  116. package/dist/messages-D5WeksbV.mjs +47 -0
  117. package/dist/messages-DGaab4EP.mjs +47 -0
  118. package/dist/messages-DKha57ZU.mjs +47 -0
  119. package/dist/messages-DOaujgMW.mjs +47 -0
  120. package/dist/messages-DVbPLd_0.mjs +47 -0
  121. package/dist/messages-D_FCyfW6.mjs +47 -0
  122. package/dist/messages-Dd5iZN3c.mjs +47 -0
  123. package/dist/messages-DehM7135.mjs +47 -0
  124. package/dist/messages-Dg1OHftD.mjs +47 -0
  125. package/dist/messages-Di6Flq-b.mjs +47 -0
  126. package/dist/messages-Dqhhex6e.mjs +47 -0
  127. package/dist/messages-DueVe0F1.mjs +47 -0
  128. package/dist/messages-Dx3eFwI0.mjs +47 -0
  129. package/dist/messages-FOtiUoKl.mjs +47 -0
  130. package/dist/messages-FTOZNhRD.mjs +47 -0
  131. package/dist/messages-IQxGfQIV.mjs +47 -0
  132. package/dist/messages-JF2fzCkK.mjs +47 -0
  133. package/dist/messages-MOGl7I5v.mjs +47 -0
  134. package/dist/messages-QgYhPL-3.mjs +47 -0
  135. package/dist/messages-WYWIbQwo.mjs +47 -0
  136. package/dist/messages-a6A_LgDv.mjs +47 -0
  137. package/dist/messages-bSf31LJi.mjs +47 -0
  138. package/dist/messages-diGozhTn.mjs +47 -0
  139. package/dist/messages-er-kd-VO.mjs +47 -0
  140. package/dist/messages-ez3w5NBn.mjs +47 -0
  141. package/dist/messages-f3uXjegd.mjs +47 -0
  142. package/dist/messages-ohwI1UGv.mjs +47 -0
  143. package/dist/messages-p9BZJaFV.mjs +47 -0
  144. package/dist/messages-qIQ4L4rw.mjs +47 -0
  145. package/dist/messages-qWkXPggi.mjs +47 -0
  146. package/dist/messages-w5foGze_.mjs +47 -0
  147. package/dist/tools.mjs +3073 -0
  148. package/dist/vendor.LICENSE.txt +59 -156
  149. package/package.json +47 -15
  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 +1427 -0
  154. package/src/components/block-tunes/block-tune-delete.ts +51 -0
  155. package/src/components/blocks.ts +338 -0
  156. package/src/components/constants/data-attributes.ts +342 -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 +481 -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 +44 -0
  177. package/src/components/i18n/locales/ar/messages.json +44 -0
  178. package/src/components/i18n/locales/az/messages.json +44 -0
  179. package/src/components/i18n/locales/bg/messages.json +44 -0
  180. package/src/components/i18n/locales/bn/messages.json +44 -0
  181. package/src/components/i18n/locales/bs/messages.json +44 -0
  182. package/src/components/i18n/locales/cs/messages.json +44 -0
  183. package/src/components/i18n/locales/da/messages.json +44 -0
  184. package/src/components/i18n/locales/de/messages.json +44 -0
  185. package/src/components/i18n/locales/dv/messages.json +44 -0
  186. package/src/components/i18n/locales/el/messages.json +44 -0
  187. package/src/components/i18n/locales/en/messages.json +44 -0
  188. package/src/components/i18n/locales/es/messages.json +44 -0
  189. package/src/components/i18n/locales/et/messages.json +44 -0
  190. package/src/components/i18n/locales/fa/messages.json +44 -0
  191. package/src/components/i18n/locales/fi/messages.json +44 -0
  192. package/src/components/i18n/locales/fil/messages.json +44 -0
  193. package/src/components/i18n/locales/fr/messages.json +44 -0
  194. package/src/components/i18n/locales/gu/messages.json +44 -0
  195. package/src/components/i18n/locales/he/messages.json +44 -0
  196. package/src/components/i18n/locales/hi/messages.json +44 -0
  197. package/src/components/i18n/locales/hr/messages.json +44 -0
  198. package/src/components/i18n/locales/hu/messages.json +44 -0
  199. package/src/components/i18n/locales/hy/messages.json +44 -0
  200. package/src/components/i18n/locales/id/messages.json +44 -0
  201. package/src/components/i18n/locales/index.ts +225 -0
  202. package/src/components/i18n/locales/it/messages.json +44 -0
  203. package/src/components/i18n/locales/ja/messages.json +44 -0
  204. package/src/components/i18n/locales/ka/messages.json +44 -0
  205. package/src/components/i18n/locales/km/messages.json +44 -0
  206. package/src/components/i18n/locales/kn/messages.json +44 -0
  207. package/src/components/i18n/locales/ko/messages.json +44 -0
  208. package/src/components/i18n/locales/ku/messages.json +44 -0
  209. package/src/components/i18n/locales/lo/messages.json +44 -0
  210. package/src/components/i18n/locales/lt/messages.json +44 -0
  211. package/src/components/i18n/locales/lv/messages.json +44 -0
  212. package/src/components/i18n/locales/mk/messages.json +44 -0
  213. package/src/components/i18n/locales/ml/messages.json +44 -0
  214. package/src/components/i18n/locales/mn/messages.json +44 -0
  215. package/src/components/i18n/locales/mr/messages.json +44 -0
  216. package/src/components/i18n/locales/ms/messages.json +44 -0
  217. package/src/components/i18n/locales/my/messages.json +44 -0
  218. package/src/components/i18n/locales/ne/messages.json +44 -0
  219. package/src/components/i18n/locales/nl/messages.json +44 -0
  220. package/src/components/i18n/locales/no/messages.json +44 -0
  221. package/src/components/i18n/locales/pa/messages.json +44 -0
  222. package/src/components/i18n/locales/pl/messages.json +44 -0
  223. package/src/components/i18n/locales/ps/messages.json +44 -0
  224. package/src/components/i18n/locales/pt/messages.json +44 -0
  225. package/src/components/i18n/locales/ro/messages.json +44 -0
  226. package/src/components/i18n/locales/ru/messages.json +44 -0
  227. package/src/components/i18n/locales/sd/messages.json +44 -0
  228. package/src/components/i18n/locales/si/messages.json +44 -0
  229. package/src/components/i18n/locales/sk/messages.json +44 -0
  230. package/src/components/i18n/locales/sl/messages.json +44 -0
  231. package/src/components/i18n/locales/sq/messages.json +44 -0
  232. package/src/components/i18n/locales/sr/messages.json +44 -0
  233. package/src/components/i18n/locales/sv/messages.json +44 -0
  234. package/src/components/i18n/locales/sw/messages.json +44 -0
  235. package/src/components/i18n/locales/ta/messages.json +44 -0
  236. package/src/components/i18n/locales/te/messages.json +44 -0
  237. package/src/components/i18n/locales/th/messages.json +44 -0
  238. package/src/components/i18n/locales/tr/messages.json +44 -0
  239. package/src/components/i18n/locales/ug/messages.json +44 -0
  240. package/src/components/i18n/locales/uk/messages.json +44 -0
  241. package/src/components/i18n/locales/ur/messages.json +44 -0
  242. package/src/components/i18n/locales/vi/messages.json +44 -0
  243. package/src/components/i18n/locales/yi/messages.json +44 -0
  244. package/src/components/i18n/locales/zh/messages.json +44 -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 +141 -0
  248. package/src/components/inline-tools/inline-tool-italic.ts +500 -0
  249. package/src/components/inline-tools/inline-tool-link.ts +539 -0
  250. package/src/components/modules/api/blocks.ts +363 -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 +33 -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 +1375 -0
  269. package/src/components/modules/blockManager.ts +1348 -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 +1141 -0
  274. package/src/components/modules/history.ts +1098 -0
  275. package/src/components/modules/i18n.ts +325 -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 +668 -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 +776 -0
  284. package/src/components/modules/toolbar/index.ts +1311 -0
  285. package/src/components/modules/toolbar/inline.ts +956 -0
  286. package/src/components/modules/tools.ts +589 -0
  287. package/src/components/modules/ui.ts +1179 -0
  288. package/src/components/polyfills.ts +113 -0
  289. package/src/components/selection.ts +1189 -0
  290. package/src/components/tools/base.ts +274 -0
  291. package/src/components/tools/block.ts +291 -0
  292. package/src/components/tools/collection.ts +67 -0
  293. package/src/components/tools/factory.ts +85 -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 +497 -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 +666 -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 +187 -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 +181 -0
  330. package/src/components/utils/popover/components/search-input/search-input.types.ts +30 -0
  331. package/src/components/utils/popover/index.ts +13 -0
  332. package/src/components/utils/popover/popover-abstract.ts +448 -0
  333. package/src/components/utils/popover/popover-desktop.ts +643 -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 +105 -0
  344. package/src/components/utils/tooltip.ts +642 -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 +844 -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 +123 -0
  366. package/src/tools/header/index.ts +570 -0
  367. package/src/tools/index.ts +38 -0
  368. package/src/tools/list/index.ts +1803 -0
  369. package/src/tools/paragraph/index.ts +411 -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 +1 -1
  378. package/types/api/i18n.d.ts +5 -3
  379. package/types/api/selection.d.ts +6 -0
  380. package/types/api/styles.d.ts +0 -5
  381. package/types/configs/blok-config.d.ts +21 -0
  382. package/types/configs/i18n-config.d.ts +52 -2
  383. package/types/configs/i18n-dictionary.d.ts +16 -90
  384. package/types/data-attributes.d.ts +169 -0
  385. package/types/data-formats/output-data.d.ts +15 -0
  386. package/types/full.d.ts +80 -0
  387. package/types/index.d.ts +9 -24
  388. package/types/locales.d.ts +59 -0
  389. package/types/tools/adapters/inline-tool-adapter.d.ts +10 -0
  390. package/types/tools/block-tool.d.ts +9 -0
  391. package/types/tools/list.d.ts +25 -18
  392. package/types/tools/tool-settings.d.ts +8 -1
  393. package/types/tools/tool.d.ts +6 -0
  394. package/types/tools-entry.d.ts +49 -0
  395. package/types/utils/popover/popover-item.d.ts +0 -5
  396. package/dist/blok-BwPfU8ro.mjs +0 -21510
  397. package/dist/blok.umd.js +0 -198
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Static imports for all 68 locales.
3
+ *
4
+ * This file forces Vite to bundle all locale JSON files instead of code-splitting them.
5
+ * It's only used for the "maximum" bundle size measurement variant.
6
+ *
7
+ * This file is NOT part of the public API.
8
+ */
9
+
10
+ // Static imports for all locale message files
11
+ import am from '../components/i18n/locales/am/messages.json';
12
+ import ar from '../components/i18n/locales/ar/messages.json';
13
+ import az from '../components/i18n/locales/az/messages.json';
14
+ import bg from '../components/i18n/locales/bg/messages.json';
15
+ import bn from '../components/i18n/locales/bn/messages.json';
16
+ import bs from '../components/i18n/locales/bs/messages.json';
17
+ import cs from '../components/i18n/locales/cs/messages.json';
18
+ import da from '../components/i18n/locales/da/messages.json';
19
+ import de from '../components/i18n/locales/de/messages.json';
20
+ import dv from '../components/i18n/locales/dv/messages.json';
21
+ import el from '../components/i18n/locales/el/messages.json';
22
+ import en from '../components/i18n/locales/en/messages.json';
23
+ import es from '../components/i18n/locales/es/messages.json';
24
+ import et from '../components/i18n/locales/et/messages.json';
25
+ import fa from '../components/i18n/locales/fa/messages.json';
26
+ import fi from '../components/i18n/locales/fi/messages.json';
27
+ import fil from '../components/i18n/locales/fil/messages.json';
28
+ import fr from '../components/i18n/locales/fr/messages.json';
29
+ import gu from '../components/i18n/locales/gu/messages.json';
30
+ import he from '../components/i18n/locales/he/messages.json';
31
+ import hi from '../components/i18n/locales/hi/messages.json';
32
+ import hr from '../components/i18n/locales/hr/messages.json';
33
+ import hu from '../components/i18n/locales/hu/messages.json';
34
+ import hy from '../components/i18n/locales/hy/messages.json';
35
+ import id from '../components/i18n/locales/id/messages.json';
36
+ import it from '../components/i18n/locales/it/messages.json';
37
+ import ja from '../components/i18n/locales/ja/messages.json';
38
+ import ka from '../components/i18n/locales/ka/messages.json';
39
+ import km from '../components/i18n/locales/km/messages.json';
40
+ import kn from '../components/i18n/locales/kn/messages.json';
41
+ import ko from '../components/i18n/locales/ko/messages.json';
42
+ import ku from '../components/i18n/locales/ku/messages.json';
43
+ import lo from '../components/i18n/locales/lo/messages.json';
44
+ import lt from '../components/i18n/locales/lt/messages.json';
45
+ import lv from '../components/i18n/locales/lv/messages.json';
46
+ import mk from '../components/i18n/locales/mk/messages.json';
47
+ import ml from '../components/i18n/locales/ml/messages.json';
48
+ import mn from '../components/i18n/locales/mn/messages.json';
49
+ import mr from '../components/i18n/locales/mr/messages.json';
50
+ import ms from '../components/i18n/locales/ms/messages.json';
51
+ import my from '../components/i18n/locales/my/messages.json';
52
+ import ne from '../components/i18n/locales/ne/messages.json';
53
+ import nl from '../components/i18n/locales/nl/messages.json';
54
+ import no from '../components/i18n/locales/no/messages.json';
55
+ import pa from '../components/i18n/locales/pa/messages.json';
56
+ import pl from '../components/i18n/locales/pl/messages.json';
57
+ import ps from '../components/i18n/locales/ps/messages.json';
58
+ import pt from '../components/i18n/locales/pt/messages.json';
59
+ import ro from '../components/i18n/locales/ro/messages.json';
60
+ import ru from '../components/i18n/locales/ru/messages.json';
61
+ import sd from '../components/i18n/locales/sd/messages.json';
62
+ import si from '../components/i18n/locales/si/messages.json';
63
+ import sk from '../components/i18n/locales/sk/messages.json';
64
+ import sl from '../components/i18n/locales/sl/messages.json';
65
+ import sq from '../components/i18n/locales/sq/messages.json';
66
+ import sr from '../components/i18n/locales/sr/messages.json';
67
+ import sv from '../components/i18n/locales/sv/messages.json';
68
+ import sw from '../components/i18n/locales/sw/messages.json';
69
+ import ta from '../components/i18n/locales/ta/messages.json';
70
+ import te from '../components/i18n/locales/te/messages.json';
71
+ import th from '../components/i18n/locales/th/messages.json';
72
+ import tr from '../components/i18n/locales/tr/messages.json';
73
+ import ug from '../components/i18n/locales/ug/messages.json';
74
+ import uk from '../components/i18n/locales/uk/messages.json';
75
+ import ur from '../components/i18n/locales/ur/messages.json';
76
+ import vi from '../components/i18n/locales/vi/messages.json';
77
+ import yi from '../components/i18n/locales/yi/messages.json';
78
+ import zh from '../components/i18n/locales/zh/messages.json';
79
+
80
+ /**
81
+ * All locale dictionaries as a record.
82
+ * Exporting this ensures the imports are not tree-shaken.
83
+ */
84
+ export const allLocales = {
85
+ am,
86
+ ar,
87
+ az,
88
+ bg,
89
+ bn,
90
+ bs,
91
+ cs,
92
+ da,
93
+ de,
94
+ dv,
95
+ el,
96
+ en,
97
+ es,
98
+ et,
99
+ fa,
100
+ fi,
101
+ fil,
102
+ fr,
103
+ gu,
104
+ he,
105
+ hi,
106
+ hr,
107
+ hu,
108
+ hy,
109
+ id,
110
+ it,
111
+ ja,
112
+ ka,
113
+ km,
114
+ kn,
115
+ ko,
116
+ ku,
117
+ lo,
118
+ lt,
119
+ lv,
120
+ mk,
121
+ ml,
122
+ mn,
123
+ mr,
124
+ ms,
125
+ my,
126
+ ne,
127
+ nl,
128
+ no,
129
+ pa,
130
+ pl,
131
+ ps,
132
+ pt,
133
+ ro,
134
+ ru,
135
+ sd,
136
+ si,
137
+ sk,
138
+ sl,
139
+ sq,
140
+ sr,
141
+ sv,
142
+ sw,
143
+ ta,
144
+ te,
145
+ th,
146
+ tr,
147
+ ug,
148
+ uk,
149
+ ur,
150
+ vi,
151
+ yi,
152
+ zh,
153
+ };
154
+
155
+ export const localeCount = Object.keys(allLocales).length;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Maximum bundle variant - All tools + all 68 locales
3
+ *
4
+ * This entry point bundles everything: the Blok class, all bundled tools,
5
+ * and all 68 locale dictionaries (statically imported, not code-split).
6
+ *
7
+ * Use this to measure the maximum bundle size when everything is included.
8
+ *
9
+ * This file is NOT part of the public API - it's only used for bundle size measurement.
10
+ */
11
+
12
+ // Re-export everything from the main blok entry
13
+ export * from '../blok';
14
+
15
+ // Import all locales to force them into the bundle
16
+ // The allLocales export ensures these aren't tree-shaken
17
+ import { allLocales, localeCount } from './all-locales';
18
+
19
+ // Export to prevent tree-shaking
20
+ export { allLocales, localeCount };
@@ -0,0 +1,243 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Minimum bundle variant - Core editor only
5
+ *
6
+ * This entry point exports the Blok class WITHOUT bundled tools (Header, Paragraph, List).
7
+ * Use this to measure the minimum bundle size when users provide all tools externally.
8
+ *
9
+ * This file is NOT part of the public API - it's only used for bundle size measurement.
10
+ */
11
+
12
+ import type { BlokConfig } from '../../types';
13
+ import type { BlokModules } from '../types-internal/blok-modules';
14
+
15
+ import '@babel/register';
16
+ import '../components/polyfills';
17
+ import { Core } from '../components/core';
18
+ import { getBlokVersion, isObject, isFunction } from '../components/utils';
19
+ import { destroy as destroyTooltip } from '../components/utils/tooltip';
20
+ import { DATA_ATTR } from '../components/constants/data-attributes';
21
+
22
+ export const version = getBlokVersion();
23
+ export { DATA_ATTR };
24
+
25
+ /**
26
+ * Blok - Minimum bundle (no bundled tools)
27
+ */
28
+ class Blok {
29
+ private readonly initialConfiguration: BlokConfig | string | undefined;
30
+ public isReady: Promise<void>;
31
+ public destroy: () => void;
32
+
33
+ public static get version(): string {
34
+ return getBlokVersion();
35
+ }
36
+
37
+ public static DATA_ATTR = DATA_ATTR;
38
+
39
+ constructor(configuration?: BlokConfig | string) {
40
+ this.initialConfiguration = isObject(configuration)
41
+ ? { ...configuration }
42
+ : configuration;
43
+
44
+ const onReady =
45
+ isObject(configuration) && isFunction(configuration.onReady)
46
+ ? configuration.onReady
47
+ : () => {};
48
+
49
+ const blok = new Core(configuration);
50
+
51
+ this.destroy = (): void => {};
52
+
53
+ this.isReady = blok.isReady.then(() => {
54
+ this.exportAPI(blok);
55
+ onReady();
56
+ });
57
+ }
58
+
59
+ public exportAPI(blok: Core): void {
60
+ const fieldsToExport = ['configuration'];
61
+ const destroy = (): void => {
62
+ Object.values(blok.moduleInstances).forEach((moduleInstance) => {
63
+ if (moduleInstance === undefined || moduleInstance === null) {
64
+ return;
65
+ }
66
+
67
+ if (
68
+ isFunction((moduleInstance as { destroy?: () => void }).destroy)
69
+ ) {
70
+ (moduleInstance as { destroy: () => void }).destroy();
71
+ }
72
+
73
+ const listeners = (
74
+ moduleInstance as { listeners?: { removeAll?: () => void } }
75
+ ).listeners;
76
+
77
+ if (listeners && isFunction(listeners.removeAll)) {
78
+ listeners.removeAll();
79
+ }
80
+ });
81
+
82
+ destroyTooltip();
83
+
84
+ for (const field in this) {
85
+ if (Object.prototype.hasOwnProperty.call(this, field)) {
86
+ delete (this as Record<string, unknown>)[field];
87
+ }
88
+ }
89
+
90
+ Object.setPrototypeOf(this, null);
91
+ };
92
+
93
+ fieldsToExport.forEach((field) => {
94
+ if (field !== 'configuration') {
95
+ (this as Record<string, unknown>)[field] = (
96
+ blok as unknown as Record<string, unknown>
97
+ )[field];
98
+
99
+ return;
100
+ }
101
+
102
+ const coreConfiguration = (
103
+ blok as unknown as { configuration?: BlokConfig | string | undefined }
104
+ ).configuration;
105
+ const configurationToExport = isObject(this.initialConfiguration)
106
+ ? this.initialConfiguration
107
+ : (coreConfiguration ?? this.initialConfiguration);
108
+
109
+ if (configurationToExport === undefined) {
110
+ return;
111
+ }
112
+
113
+ (this as Record<string, unknown>)[field] = configurationToExport as
114
+ | BlokConfig
115
+ | string;
116
+ });
117
+
118
+ this.destroy = destroy;
119
+
120
+ const apiMethods = blok.moduleInstances.API.methods;
121
+ const eventsDispatcherApi =
122
+ blok.moduleInstances.EventsAPI?.methods ?? apiMethods.events;
123
+
124
+ if (eventsDispatcherApi !== undefined) {
125
+ const defineDispatcher = (target: object): void => {
126
+ if (!Object.prototype.hasOwnProperty.call(target, 'eventsDispatcher')) {
127
+ Object.defineProperty(target, 'eventsDispatcher', {
128
+ value: eventsDispatcherApi,
129
+ configurable: true,
130
+ enumerable: true,
131
+ writable: false,
132
+ });
133
+ }
134
+ };
135
+
136
+ defineDispatcher(apiMethods);
137
+ defineDispatcher(this as Record<string, unknown>);
138
+ }
139
+
140
+ if (Object.getPrototypeOf(apiMethods) !== Blok.prototype) {
141
+ Object.setPrototypeOf(apiMethods, Blok.prototype);
142
+ }
143
+
144
+ Object.setPrototypeOf(this, apiMethods);
145
+
146
+ const moduleAliases = Object.create(null) as Record<string, unknown>;
147
+ const moduleInstances = blok.moduleInstances as Partial<BlokModules>;
148
+ const moduleInstancesRecord = moduleInstances as unknown as Record<
149
+ string,
150
+ unknown
151
+ >;
152
+
153
+ const getAliasName = (name: string): string =>
154
+ /^[A-Z]+$/.test(name)
155
+ ? name.toLowerCase()
156
+ : name.charAt(0).toLowerCase() + name.slice(1);
157
+
158
+ Object.keys(moduleInstancesRecord).forEach((name) => {
159
+ const alias = getAliasName(name);
160
+
161
+ Object.defineProperty(moduleAliases, alias, {
162
+ configurable: true,
163
+ enumerable: true,
164
+ get: () => moduleInstancesRecord[name],
165
+ });
166
+ });
167
+
168
+ type ToolbarModuleWithSettings = {
169
+ blockSettings?: unknown;
170
+ inlineToolbar?: unknown;
171
+ };
172
+
173
+ const toolbarModule = moduleInstances.Toolbar as unknown as
174
+ | ToolbarModuleWithSettings
175
+ | undefined;
176
+ const blockSettingsModule = moduleInstances.BlockSettings;
177
+
178
+ if (
179
+ toolbarModule !== undefined &&
180
+ blockSettingsModule !== undefined &&
181
+ toolbarModule.blockSettings === undefined
182
+ ) {
183
+ toolbarModule.blockSettings = blockSettingsModule;
184
+ }
185
+
186
+ const inlineToolbarModule = moduleInstances.InlineToolbar;
187
+
188
+ if (
189
+ toolbarModule !== undefined &&
190
+ inlineToolbarModule !== undefined &&
191
+ toolbarModule.inlineToolbar === undefined
192
+ ) {
193
+ toolbarModule.inlineToolbar = inlineToolbarModule;
194
+ }
195
+
196
+ Object.defineProperty(this, 'module', {
197
+ value: moduleAliases,
198
+ configurable: true,
199
+ enumerable: false,
200
+ writable: false,
201
+ });
202
+
203
+ delete (this as Partial<Blok>).exportAPI;
204
+
205
+ const shorthands = {
206
+ blocks: {
207
+ clear: 'clear',
208
+ render: 'render',
209
+ },
210
+ caret: {
211
+ focus: 'focus',
212
+ },
213
+ events: {
214
+ on: 'on',
215
+ off: 'off',
216
+ emit: 'emit',
217
+ },
218
+ saver: {
219
+ save: 'save',
220
+ },
221
+ };
222
+
223
+ type API = {
224
+ blocks: Record<string, unknown>;
225
+ caret: Record<string, unknown>;
226
+ events: Record<string, unknown>;
227
+ saver: Record<string, unknown>;
228
+ };
229
+
230
+ Object.entries(shorthands).forEach(([key, methods]) => {
231
+ Object.entries(methods).forEach(([name, alias]) => {
232
+ const apiKey = key as keyof API;
233
+ const apiMethodGroup = blok.moduleInstances.API.methods[
234
+ apiKey
235
+ ] as unknown as Record<string, unknown>;
236
+
237
+ (this as Record<string, unknown>)[alias] = apiMethodGroup[name];
238
+ });
239
+ });
240
+ }
241
+ }
242
+
243
+ export { Blok };
@@ -32,7 +32,7 @@ export interface Blocks {
32
32
  * Removes current Block
33
33
  * @param {number} index - index of a block to delete
34
34
  */
35
- delete(index?: number): void;
35
+ delete(index?: number): Promise<void>;
36
36
 
37
37
  /**
38
38
  * Moves a block to a new index
@@ -1,11 +1,13 @@
1
1
  /**
2
- * Describes Blok`s I18n API
2
+ * Describes Blok's I18n API for tools
3
3
  */
4
4
  export interface I18n {
5
5
  /**
6
- * Perform translation with automatically added namespace like `tools.${toolName}` or `blockTunes.${tuneName}`
6
+ * Translate a key from the global dictionary.
7
+ * Keys should be fully qualified (e.g., 'tools.link.addLink', 'blockSettings.delete').
7
8
  *
8
- * @param dictKey - what to translate
9
+ * @param dictKey - Full translation key to look up
10
+ * @returns Translated string, or the key itself if translation is missing
9
11
  */
10
12
  t(dictKey: string): string;
11
13
  }
@@ -27,6 +27,12 @@ export interface Selection {
27
27
  */
28
28
  removeFakeBackground(): void;
29
29
 
30
+ /**
31
+ * Clears all fake background state - both DOM elements and internal flags
32
+ * This is useful for cleanup after undo/redo operations or when the selection context has been lost
33
+ */
34
+ clearFakeBackground(): void;
35
+
30
36
  /**
31
37
  * Save selection range.
32
38
  * Allows to save selection to be able to temporally move focus away.
@@ -94,8 +94,3 @@ export interface Styles {
94
94
  */
95
95
  button: string;
96
96
  }
97
-
98
- /**
99
- * @deprecated Use Styles instead
100
- */
101
- export type StyleClasses = Styles;
@@ -4,6 +4,14 @@ import {SanitizerConfig} from './sanitizer-config';
4
4
  import {I18nConfig} from './i18n-config';
5
5
  import { BlockMutationEvent } from '../events/block';
6
6
 
7
+ /**
8
+ * Data model format for input/output
9
+ * - 'legacy': Use nested items structure (e.g., List items[] with nested items[])
10
+ * - 'hierarchical': Use flat blocks with parent/content references (Notion-like)
11
+ * - 'auto': Auto-detect input format and preserve it on output (default)
12
+ */
13
+ export type DataModelFormat = 'legacy' | 'hierarchical' | 'auto';
14
+
7
15
  export interface BlokConfig {
8
16
  /**
9
17
  * Element where Blok will be appended
@@ -22,6 +30,19 @@ export interface BlokConfig {
22
30
  */
23
31
  defaultBlock?: string;
24
32
 
33
+ /**
34
+ * Data model format for input/output.
35
+ * - 'legacy': Always use nested items structure (e.g., List items[] with nested items[])
36
+ * - 'hierarchical': Always use flat blocks with parent/content references (Notion-like)
37
+ * - 'auto': Auto-detect input format and preserve it on output (default)
38
+ *
39
+ * With 'auto', existing articles using legacy format will continue to work unchanged,
40
+ * while new hierarchical data will be preserved as-is.
41
+ *
42
+ * @default 'auto'
43
+ */
44
+ dataModel?: DataModelFormat;
45
+
25
46
 
26
47
 
27
48
  /**
@@ -3,14 +3,64 @@
3
3
  */
4
4
  import { I18nDictionary } from './i18n-dictionary';
5
5
 
6
+ /**
7
+ * Supported locale codes that have built-in translations.
8
+ *
9
+ * When adding a new locale:
10
+ * 1. Add the code to this union type
11
+ * 2. Add the code to ALL_LOCALE_CODES in src/components/i18n/locales/index.ts
12
+ * 3. Add the importer to localeImporters in the same file
13
+ * 4. Create the messages.json file in src/components/i18n/locales/{code}/
14
+ *
15
+ * TypeScript will error if localeImporters is missing any code from this type.
16
+ */
17
+ export type SupportedLocale = 'am' | 'ar' | 'az' | 'bg' | 'bn' | 'bs' | 'cs' | 'da' | 'de' | 'dv' | 'el' | 'en' | 'es' | 'et' | 'fa' | 'fi' | 'fil' | 'fr' | 'gu' | 'he' | 'hi' | 'hr' | 'hu' | 'hy' | 'id' | 'it' | 'ja' | 'ka' | 'km' | 'kn' | 'ko' | 'ku' | 'lo' | 'lt' | 'lv' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'my' | 'ne' | 'nl' | 'no' | 'pa' | 'pl' | 'ps' | 'pt' | 'ro' | 'ru' | 'sd' | 'si' | 'sk' | 'sl' | 'sq' | 'sr' | 'sv' | 'sw' | 'ta' | 'te' | 'th' | 'tr' | 'ug' | 'uk' | 'ur' | 'vi' | 'yi' | 'zh';
18
+
19
+ /**
20
+ * Configuration for a single locale including its dictionary and text direction.
21
+ * This is the single source of truth for locale configuration shape.
22
+ */
23
+ export interface LocaleConfig {
24
+ /** Translation dictionary mapping keys to translated strings */
25
+ dictionary: I18nDictionary;
26
+ /** Text direction for the locale */
27
+ direction: 'ltr' | 'rtl';
28
+ }
29
+
30
+ /**
31
+ * Registry of locale configurations.
32
+ */
33
+ export type LocaleRegistry = Partial<Record<SupportedLocale, LocaleConfig>>;
34
+
35
+ /**
36
+ * I18n configuration options.
37
+ *
38
+ * All 68 supported locales are available for lazy loading by default.
39
+ *
40
+ * @see README.md#localization for usage examples
41
+ */
6
42
  export interface I18nConfig {
7
43
  /**
8
- * Dictionary used for translation
44
+ * Active locale code ('en', 'ru', etc.) or 'auto' to detect from browser.
45
+ * All 68 locales are supported and will be loaded on-demand.
46
+ * @default 'auto'
47
+ */
48
+ locale?: SupportedLocale | 'auto';
49
+
50
+ /**
51
+ * Custom dictionary that overrides locale-based translations.
9
52
  */
10
53
  messages?: I18nDictionary;
11
54
 
12
55
  /**
13
- * Text direction. If not set, uses ltr
56
+ * Text direction. Auto-determined by locale if not set.
57
+ * @default 'ltr'
14
58
  */
15
59
  direction?: 'ltr' | 'rtl';
60
+
61
+ /**
62
+ * Fallback locale when detection fails or requested locale unavailable.
63
+ * @default 'en'
64
+ */
65
+ defaultLocale?: SupportedLocale;
16
66
  }
@@ -1,93 +1,19 @@
1
1
  /**
2
- * Structure of the i18n dictionary
2
+ * Structure of the i18n dictionary - flat key-value pairs
3
+ *
4
+ * Keys use dot notation to represent the translation path:
5
+ * - "toolNames.text" - Tool name translations
6
+ * - "tools.link.addLink" - Tool-specific translations
7
+ * - "blockSettings.delete" - Block settings translations
8
+ * - "popover.search" - Popover component translations
9
+ * - "a11y.dragHandle" - Accessibility translations
10
+ *
11
+ * Example:
12
+ * {
13
+ * "toolNames.text": "Текст",
14
+ * "tools.link.addLink": "Добавить ссылку",
15
+ * "popover.search": "Поиск"
16
+ * }
3
17
  */
4
- export interface I18nDictionary {
5
- /**
6
- * Section for translation Tool Names: both block and inline tools
7
- * Example:
8
- * "toolNames": {
9
- * "Text": "Параграф",
10
- * "Heading": "Заголовок",
11
- * "List": "Список",
12
- * ...
13
- * },
14
- */
15
- toolNames?: Dictionary;
16
-
17
- /**
18
- * Section for passing translations to the external tools classes
19
- * The first-level keys of this object should be equal of keys ot the 'tools' property of BlokConfig
20
- * Includes internal tools: "paragraph", "stub"
21
- *
22
- * Example:
23
- * "tools": {
24
- * "warning": {
25
- * "Title": "Название",
26
- * "Message": "Сообщение",
27
- * },
28
- * "link": {
29
- * "Add a link": "Вставьте ссылку"
30
- * },
31
- * },
32
- */
33
- tools?: Dictionary;
34
-
35
- /**
36
- * Section allows to translate Block Tunes
37
- * The first-level keys of this object should be equal of 'name' ot the 'tools.<toolName>.tunes' property of BlokConfig
38
- * Including some internal block-tunes: "delete", "moveUp", "moveDown
39
- *
40
- * Example:
41
- * "blockTunes": {
42
- * "delete": {
43
- * "Delete": "Удалить"
44
- * },
45
- * "moveUp": {
46
- * "Move up": "Переместить вверх"
47
- * },
48
- * "moveDown": {
49
- * "Move down": "Переместить вниз"
50
- * }
51
- * },
52
- */
53
- blockTunes?: Dictionary;
54
-
55
- /**
56
- * Translation of internal UI components of the blok.js core
57
- */
58
- ui?: Dictionary;
59
- }
60
-
61
- /**
62
- * Represent item of the I18nDictionary config
63
- */
64
- export interface Dictionary {
65
- /**
66
- * The keys of the object can represent two entities:
67
- * 1. Dictionary key usually is an original string from default locale, like "Convert to"
68
- * 2. Sub-namespace section, like "toolbar.converter.<...>"
69
- *
70
- * Example of 1:
71
- * toolbox: {
72
- * "Add": "Добавить",
73
- * }
74
- *
75
- * Example of 2:
76
- * ui: {
77
- * toolbar: {
78
- * toolbox: { <-- Example of 1
79
- * "Add": "Добавить"
80
- * }
81
- * }
82
- * }
83
- */
84
- [key: string]: DictValue;
85
- }
86
-
87
- /**
88
- * The value of the dictionary can be:
89
- * - other dictionary
90
- * - result translate string
91
- */
92
- export type DictValue = {[key: string]: Dictionary | string} | string;
18
+ export type I18nDictionary = Record<string, string>;
93
19