@jackuait/blok 0.4.1-beta.5 → 0.4.1-beta.6

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 (400) hide show
  1. package/README.md +136 -17
  2. package/codemod/README.md +16 -0
  3. package/codemod/migrate-editorjs-to-blok.js +868 -92
  4. package/codemod/test.js +682 -77
  5. package/dist/blok.mjs +5 -2
  6. package/dist/chunks/blok-B5qs7C5l.mjs +12838 -0
  7. package/dist/chunks/i18next-CugVlwWp.mjs +1292 -0
  8. package/dist/chunks/i18next-loader-CTrK3HzG.mjs +43 -0
  9. package/dist/{index-Cl_5rkKS.mjs → chunks/index-DDpzQn-0.mjs} +2 -2
  10. package/dist/chunks/inline-tool-convert-RBcopmCh.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 +48 -16
  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 -12
  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/header.d.ts +18 -0
  392. package/types/tools/index.d.ts +1 -0
  393. package/types/tools/list.d.ts +91 -0
  394. package/types/tools/paragraph.d.ts +71 -0
  395. package/types/tools/tool-settings.d.ts +16 -2
  396. package/types/tools/tool.d.ts +6 -0
  397. package/types/tools-entry.d.ts +49 -0
  398. package/types/utils/popover/popover-item.d.ts +0 -5
  399. package/dist/blok-DvN73wsH.mjs +0 -19922
  400. package/dist/blok.umd.js +0 -166
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Placeholder utilities for contenteditable elements
3
+ *
4
+ * Provides unified handling for:
5
+ * - Placeholder styling classes
6
+ * - Caret positioning when content is empty
7
+ * - Focus and input event handlers
8
+ *
9
+ * @license MIT
10
+ */
11
+
12
+ /**
13
+ * Placeholder styling classes using Tailwind arbitrary variants.
14
+ * Applied to ::before pseudo-element only when element is empty.
15
+ * Uses data-placeholder attribute for the placeholder text.
16
+ */
17
+ export const PLACEHOLDER_CLASSES: string[] = [
18
+ 'empty:before:pointer-events-none',
19
+ 'empty:before:text-gray-text',
20
+ 'empty:before:cursor-text',
21
+ 'empty:before:content-[attr(data-placeholder)]',
22
+ '[&[data-blok-empty=true]]:before:pointer-events-none',
23
+ '[&[data-blok-empty=true]]:before:text-gray-text',
24
+ '[&[data-blok-empty=true]]:before:cursor-text',
25
+ '[&[data-blok-empty=true]]:before:content-[attr(data-placeholder)]',
26
+ ];
27
+
28
+ /**
29
+ * Alternative placeholder classes using data-blok-placeholder-active attribute.
30
+ * Used by some tools that need a different attribute name.
31
+ */
32
+ export const PLACEHOLDER_ACTIVE_CLASSES: string[] = [
33
+ 'empty:before:pointer-events-none',
34
+ 'empty:before:text-gray-text',
35
+ 'empty:before:cursor-text',
36
+ 'empty:before:content-[attr(data-blok-placeholder-active)]',
37
+ '[&[data-empty=true]]:before:pointer-events-none',
38
+ '[&[data-empty=true]]:before:text-gray-text',
39
+ '[&[data-empty=true]]:before:cursor-text',
40
+ '[&[data-empty=true]]:before:content-[attr(data-blok-placeholder-active)]',
41
+ ];
42
+
43
+ /**
44
+ * Placeholder classes that only show placeholder when element is focused.
45
+ * Uses data-blok-placeholder-active attribute and only displays when element is empty AND focused.
46
+ * Used by paragraph tool.
47
+ */
48
+ export const PLACEHOLDER_FOCUS_ONLY_CLASSES: string[] = [
49
+ 'empty:focus:before:pointer-events-none',
50
+ 'empty:focus:before:text-gray-text',
51
+ 'empty:focus:before:cursor-text',
52
+ 'empty:focus:before:content-[attr(data-blok-placeholder-active)]',
53
+ '[&[data-empty=true]:focus]:before:pointer-events-none',
54
+ '[&[data-empty=true]:focus]:before:text-gray-text',
55
+ '[&[data-empty=true]:focus]:before:cursor-text',
56
+ '[&[data-empty=true]:focus]:before:content-[attr(data-blok-placeholder-active)]',
57
+ ];
58
+
59
+ /**
60
+ * Check if an element's content is empty
61
+ *
62
+ * @param element - The element to check
63
+ * @returns true if the element is empty or contains only a <br>
64
+ */
65
+ export const isContentEmpty = (element: HTMLElement): boolean => {
66
+ const content = element.innerHTML.trim();
67
+ return content === '' || content === '<br>';
68
+ };
69
+
70
+ /**
71
+ * Set caret to the start of an element.
72
+ * Clears any <br> tags to ensure clean empty state for placeholder.
73
+ *
74
+ * @param element - The element to set caret in
75
+ */
76
+ export const setCaretToStart = (element: HTMLElement): void => {
77
+ // Clear any <br> tags to ensure clean empty state for placeholder
78
+ if (element.innerHTML === '<br>') {
79
+ // eslint-disable-next-line no-param-reassign
80
+ element.innerHTML = '';
81
+ }
82
+
83
+ const selection = window.getSelection();
84
+ if (!selection) return;
85
+
86
+ const range = document.createRange();
87
+ range.selectNodeContents(element);
88
+ range.collapse(true);
89
+ selection.removeAllRanges();
90
+ selection.addRange(range);
91
+ };
92
+
93
+ /**
94
+ * Handler that sets caret to start when element is empty.
95
+ * Used for focus and input events.
96
+ *
97
+ * @param element - The element to handle
98
+ */
99
+ const handleEmptyElement = (element: HTMLElement): void => {
100
+ if (!isContentEmpty(element)) return;
101
+ setCaretToStart(element);
102
+ };
103
+
104
+ /**
105
+ * Set up placeholder behavior for a contenteditable element.
106
+ * Adds focus and input event listeners to handle caret positioning
107
+ * when the element is empty.
108
+ *
109
+ * @param element - The contenteditable element
110
+ * @param placeholder - Optional placeholder text to set
111
+ * @param attributeName - The attribute name for placeholder text (default: 'data-placeholder')
112
+ */
113
+ export const setupPlaceholder = (
114
+ element: HTMLElement,
115
+ placeholder?: string,
116
+ attributeName: 'data-placeholder' | 'data-blok-placeholder-active' = 'data-placeholder'
117
+ ): void => {
118
+ // Always set the attribute, even if empty (for consistency and testing)
119
+ element.setAttribute(attributeName, placeholder ?? '');
120
+
121
+ const handler = (): void => handleEmptyElement(element);
122
+
123
+ element.addEventListener('focus', handler);
124
+ element.addEventListener('input', handler);
125
+ };
126
+
127
+ /**
128
+ * Apply placeholder attribute to an element
129
+ *
130
+ * @param element - The element to apply placeholder to
131
+ * @param placeholder - The placeholder text
132
+ * @param attributeName - The attribute name (default: 'data-placeholder')
133
+ */
134
+ export const applyPlaceholderAttribute = (
135
+ element: HTMLElement,
136
+ placeholder: string,
137
+ attributeName: 'data-placeholder' | 'data-blok-placeholder-active' = 'data-placeholder'
138
+ ): void => {
139
+ element.setAttribute(attributeName, placeholder);
140
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CSS class names to be used in hint class
3
+ */
4
+ export const css = {
5
+ root: '',
6
+ alignedStart: 'text-start',
7
+ alignedCenter: 'text-center',
8
+ title: '',
9
+ description: 'opacity-60 mt-[3px]',
10
+ };
@@ -0,0 +1,46 @@
1
+ import { Dom } from '../../../../dom';
2
+ import { css } from './hint.const';
3
+ import type { HintParams } from '@/types/utils/popover/hint';
4
+
5
+ /**
6
+ * Represents the hint content component
7
+ */
8
+ export class Hint {
9
+ /**
10
+ * Html element used to display hint content on screen
11
+ */
12
+ private nodes: {
13
+ root: HTMLElement;
14
+ title: HTMLElement;
15
+ description?: HTMLElement;
16
+ };
17
+
18
+ /**
19
+ * Constructs the hint content instance
20
+ * @param params - hint content parameters
21
+ */
22
+ constructor(params: HintParams) {
23
+ const alignment = params.alignment === 'center' ? 'center' : 'start';
24
+
25
+ this.nodes = {
26
+ root: Dom.make('div', [css.root, alignment === 'center' ? css.alignedCenter : css.alignedStart]),
27
+ title: Dom.make('div', css.title, { textContent: params.title }),
28
+ };
29
+
30
+ this.nodes.root.setAttribute('data-alignment', alignment);
31
+ this.nodes.root.appendChild(this.nodes.title);
32
+
33
+ if (params.description !== undefined) {
34
+ this.nodes.description = Dom.make('div', css.description, { textContent: params.description });
35
+
36
+ this.nodes.root.appendChild(this.nodes.description);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Returns the root element of the hint content
42
+ */
43
+ public getElement(): HTMLElement {
44
+ return this.nodes.root;
45
+ }
46
+ }
@@ -0,0 +1,6 @@
1
+ export * from './hint';
2
+ export type {
3
+ HintParams,
4
+ HintPosition,
5
+ HintTextAlignment
6
+ } from '@/types/utils/popover/hint';
@@ -0,0 +1,2 @@
1
+ export * from './popover-header';
2
+ export type * from './popover-header.types';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tailwind CSS classes for popover header component
3
+ */
4
+ export const css = {
5
+ root: 'flex items-center mb-2 mt-1',
6
+ text: 'text-lg font-semibold text-text-primary',
7
+ backButton: 'border-0 bg-transparent w-9 h-9 text-text-primary cursor-pointer [&_svg]:block [&_svg]:w-7 [&_svg]:h-7',
8
+ };
@@ -0,0 +1,80 @@
1
+ import type { PopoverHeaderParams } from './popover-header.types';
2
+ import { Dom } from '../../../../dom';
3
+ import { css } from './popover-header.const';
4
+ import { DATA_ATTR } from '../../../../constants/data-attributes';
5
+ import { IconChevronLeft } from '../../../../icons';
6
+ import { Listeners } from '../../../listeners';
7
+
8
+ /**
9
+ * Represents popover header ui element
10
+ */
11
+ export class PopoverHeader {
12
+ /**
13
+ * Listeners util instance
14
+ */
15
+ private listeners = new Listeners();
16
+
17
+ /**
18
+ * Header html elements
19
+ */
20
+ private nodes: {
21
+ root: HTMLElement,
22
+ text: HTMLElement,
23
+ backButton: HTMLElement
24
+ };
25
+
26
+ /**
27
+ * Text displayed inside header
28
+ */
29
+ private readonly text: string;
30
+
31
+ /**
32
+ * Back button click handler
33
+ */
34
+ private readonly onBackButtonClick: () => void;
35
+
36
+ /**
37
+ * Constructs the instance
38
+ * @param params - popover header params
39
+ */
40
+ constructor({ text, onBackButtonClick }: PopoverHeaderParams) {
41
+ this.text = text;
42
+ this.onBackButtonClick = onBackButtonClick;
43
+
44
+ this.nodes = {
45
+ root: Dom.make('div', [ css.root ], {
46
+ 'data-blok-testid': 'popover-header',
47
+ [DATA_ATTR.popoverHeader]: '',
48
+ }),
49
+ backButton: Dom.make('button', [ css.backButton ], {
50
+ 'data-blok-testid': 'popover-header-back-button',
51
+ [DATA_ATTR.popoverHeaderBackButton]: '',
52
+ }),
53
+ text: Dom.make('div', [ css.text ], {
54
+ 'data-blok-testid': 'popover-header-text',
55
+ [DATA_ATTR.popoverHeaderText]: '',
56
+ }),
57
+ };
58
+ this.nodes.backButton.innerHTML = IconChevronLeft;
59
+ this.nodes.root.appendChild(this.nodes.backButton);
60
+ this.listeners.on(this.nodes.backButton, 'click', this.onBackButtonClick);
61
+
62
+ this.nodes.text.innerText = this.text;
63
+ this.nodes.root.appendChild(this.nodes.text);
64
+ }
65
+
66
+ /**
67
+ * Returns popover header root html element
68
+ */
69
+ public getElement(): HTMLElement | null {
70
+ return this.nodes.root;
71
+ }
72
+
73
+ /**
74
+ * Destroys the instance
75
+ */
76
+ public destroy(): void {
77
+ this.nodes.root.remove();
78
+ this.listeners.destroy();
79
+ }
80
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Popover header params
3
+ */
4
+ export interface PopoverHeaderParams {
5
+ /**
6
+ * Text to be displayed inside header
7
+ */
8
+ text: string;
9
+
10
+ /**
11
+ * Back button click handler
12
+ */
13
+ onBackButtonClick: () => void;
14
+ }
@@ -0,0 +1,13 @@
1
+ import { PopoverItemDefault } from './popover-item-default/popover-item-default';
2
+ import { PopoverItemSeparator } from './popover-item-separator/popover-item-separator';
3
+ import { PopoverItem } from './popover-item';
4
+
5
+ export * from './popover-item-default/popover-item-default.const';
6
+ export type * from '@/types/utils/popover/popover-item.d.ts';
7
+ export { PopoverItemType } from '@/types/utils/popover/popover-item-type';
8
+
9
+ export {
10
+ PopoverItemDefault,
11
+ PopoverItemSeparator,
12
+ PopoverItem
13
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tailwind CSS class names for popover item
3
+ */
4
+ export const css = {
5
+ /**
6
+ * Base item styles with hover, focus, and active support
7
+ * Hover is applied via can-hover:hover: for real hover and data-blok-force-hover for tests
8
+ * Focus is applied via data-blok-focused attribute (set by DomIterator during keyboard navigation)
9
+ * Active is applied via data-blok-popover-item-active attribute
10
+ * Note: noHover state is handled via [data-blok-popover-item-no-hover] which disables hover
11
+ * Priority order: active < hover < focus (focus wins when navigating with keyboard)
12
+ */
13
+ item: 'flex items-center select-none border-none bg-transparent rounded-md p-[var(--item-padding)] text-text-primary mb-px [&[data-blok-popover-item-active]]:bg-icon-active-bg [&[data-blok-popover-item-active]]:text-icon-active-text can-hover:hover:cursor-pointer can-hover:hover:bg-item-hover-bg [&[data-blok-force-hover]]:cursor-pointer [&[data-blok-force-hover]]:bg-item-hover-bg [&[data-blok-focused="true"]]:bg-item-focus-bg [&[data-blok-popover-item-no-hover]]:hover:bg-transparent [&[data-blok-popover-item-no-hover]]:cursor-default',
14
+
15
+ /**
16
+ * Item disabled state
17
+ */
18
+ itemDisabled: 'cursor-default pointer-events-none text-text-secondary',
19
+
20
+ /**
21
+ * Icon container styles
22
+ */
23
+ icon: 'flex items-center justify-center w-[26px] h-[26px] [&_svg]:w-icon [&_svg]:h-icon',
24
+
25
+ /**
26
+ * Focused state class for DomIterator/Flipper keyboard navigation.
27
+ * Used alongside data-blok-focused attribute.
28
+ */
29
+ focused: 'is-focused',
30
+ };
31
+
32
+ /**
33
+ * Tailwind CSS class names for inline popover item
34
+ */
35
+ export const cssInline = {
36
+ /**
37
+ * Item in inline context - more compact styling
38
+ */
39
+ item: 'rounded p-1',
40
+ };
41
+
42
+ /**
43
+ * Tailwind CSS class names for nested inline popover item
44
+ */
45
+ export const cssNestedInline = {
46
+ /**
47
+ * Nested item - back to desktop popover styling
48
+ */
49
+ item: 'rounded-md p-[3px] mobile:p-1',
50
+ };