@jackuait/blok 0.4.1 → 0.4.3-beta.1

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 +45 -7
  3. package/codemod/migrate-editorjs-to-blok.js +951 -92
  4. package/codemod/test.js +780 -77
  5. package/dist/blok.mjs +5 -2
  6. package/dist/chunks/blok-8ptWuVZC.mjs +12838 -0
  7. package/dist/chunks/i18next-CugVlwWp.mjs +1292 -0
  8. package/dist/chunks/i18next-loader-bLawSYRV.mjs +43 -0
  9. package/dist/{index-CBkApZKo.mjs → chunks/index-5nYtWZD2.mjs} +2 -2
  10. package/dist/chunks/inline-tool-convert-CvMDAIzb.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 +60 -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,136 @@
1
+ import { PopoverItem } from '../popover-item';
2
+ import type { PopoverItemHtmlParams, PopoverItemRenderParamsMap, PopoverItemType } from '@/types/utils/popover/popover-item';
3
+ import { Dom } from '../../../../../dom';
4
+ import { css, cssInline } from './popover-item-html.const';
5
+ import { DATA_ATTR } from '../../../../../constants/data-attributes';
6
+ import { twMerge } from '../../../../tw';
7
+
8
+ /**
9
+ * Represents popover item with custom html content
10
+ */
11
+ export class PopoverItemHtml extends PopoverItem {
12
+ /**
13
+ * Item html elements
14
+ */
15
+ private nodes: { root: HTMLElement | null } = { root: null };
16
+
17
+ /**
18
+ * Whether the item is currently hidden
19
+ */
20
+ private isHidden = false;
21
+
22
+ /**
23
+ * Whether this item is in an inline popover context
24
+ */
25
+ private readonly isInline: boolean;
26
+
27
+ /**
28
+ * Constructs the instance
29
+ * @param params – instance parameters
30
+ * @param renderParams – popover item render params.
31
+ * The parameters that are not set by user via popover api but rather depend on technical implementation
32
+ */
33
+ constructor(params: PopoverItemHtmlParams, renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Html]) {
34
+ super(params);
35
+
36
+ this.isInline = renderParams?.isInline ?? false;
37
+
38
+ this.nodes.root = this.createRootElement(params, renderParams);
39
+ }
40
+
41
+ /**
42
+ * Returns popover item root element
43
+ */
44
+ public getElement(): HTMLElement {
45
+ return this.nodes.root as HTMLElement;
46
+ }
47
+
48
+ /**
49
+ * Toggles item hidden state
50
+ * @param isHidden - true if item should be hidden
51
+ */
52
+ public toggleHidden(isHidden: boolean): void {
53
+ this.isHidden = isHidden;
54
+ this.updateRootClasses();
55
+
56
+ if (!this.nodes.root) {
57
+ return;
58
+ }
59
+
60
+ if (isHidden) {
61
+ this.nodes.root.setAttribute(DATA_ATTR.hidden, 'true');
62
+ } else {
63
+ this.nodes.root.removeAttribute(DATA_ATTR.hidden);
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Returns list of buttons and inputs inside custom content
69
+ */
70
+ public getControls(): HTMLElement[] {
71
+ if (!this.nodes.root) {
72
+ return [];
73
+ }
74
+
75
+ const controls = this.nodes.root.querySelectorAll<HTMLElement>(
76
+ `button, ${Dom.allInputsSelector}`
77
+ );
78
+
79
+ return Array.from(controls);
80
+ }
81
+
82
+ /**
83
+ * Updates the root element's class list based on current state
84
+ */
85
+ private updateRootClasses(): void {
86
+ if (!this.nodes.root) {
87
+ return;
88
+ }
89
+
90
+ this.nodes.root.className = twMerge(
91
+ css.root,
92
+ this.isInline && cssInline.root,
93
+ this.isHidden && css.rootHidden
94
+ );
95
+ }
96
+
97
+ /**
98
+ * Creates the root container element
99
+ * @param params - item params
100
+ * @param renderParams - render configuration
101
+ */
102
+ private createRootElement(
103
+ params: PopoverItemHtmlParams,
104
+ renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Html]
105
+ ): HTMLElement {
106
+ const root = document.createElement('div');
107
+
108
+ // Set initial classes
109
+ root.className = twMerge(
110
+ css.root,
111
+ this.isInline && cssInline.root
112
+ );
113
+
114
+ // Set data attributes
115
+ root.setAttribute(DATA_ATTR.popoverItemHtml, '');
116
+ root.setAttribute('data-blok-testid', 'popover-item-html');
117
+
118
+ if (params.name) {
119
+ root.setAttribute('data-blok-item-name', params.name);
120
+ }
121
+
122
+ // Append the custom element
123
+ root.appendChild(params.element);
124
+
125
+ // Add hint if configured
126
+ if (params.hint !== undefined && renderParams?.hint?.enabled !== false) {
127
+ this.addHint(root, {
128
+ ...params.hint,
129
+ position: renderParams?.hint?.position || 'right',
130
+ alignment: renderParams?.hint?.alignment || 'center',
131
+ });
132
+ }
133
+
134
+ return root;
135
+ }
136
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tailwind CSS classes for popover separator component
3
+ */
4
+ export const css = {
5
+ container: 'py-1 px-[3px]',
6
+ containerHidden: 'hidden',
7
+ line: 'h-px w-full bg-popover-border',
8
+ };
9
+
10
+ /**
11
+ * Tailwind CSS classes for inline popover separator
12
+ */
13
+ export const cssInline = {
14
+ // Inline context: horizontal separator
15
+ container: 'px-1 py-0',
16
+ line: 'h-full w-px',
17
+ // Nested inline context: back to vertical separator
18
+ nestedContainer: 'py-1 px-[3px]',
19
+ nestedLine: 'w-full h-px',
20
+ };
@@ -0,0 +1,117 @@
1
+ import { twMerge } from '../../../../tw';
2
+ import { PopoverItem } from '../popover-item';
3
+ import type { PopoverItemRenderParamsMap, PopoverItemType } from '@/types/utils/popover/popover-item';
4
+ import { css, cssInline } from './popover-item-separator.const';
5
+ import { DATA_ATTR } from '../../../../../constants/data-attributes';
6
+
7
+ /**
8
+ * Represents popover separator node
9
+ */
10
+ export class PopoverItemSeparator extends PopoverItem {
11
+ /**
12
+ * Html elements
13
+ */
14
+ private nodes: { root: HTMLElement | null; line: HTMLElement | null } = { root: null, line: null };
15
+
16
+ /**
17
+ * Whether this separator is in an inline popover context
18
+ */
19
+ private readonly isInline: boolean;
20
+
21
+ /**
22
+ * Whether this separator is in a nested inline popover context
23
+ */
24
+ private readonly isNestedInline: boolean;
25
+
26
+ /**
27
+ * Constructs the instance
28
+ * @param renderParams - optional render params for styling context
29
+ */
30
+ constructor(renderParams?: PopoverItemRenderParamsMap[PopoverItemType.Separator]) {
31
+ super();
32
+
33
+ this.isInline = renderParams?.isInline ?? false;
34
+ this.isNestedInline = renderParams?.isNestedInline ?? false;
35
+
36
+ this.nodes.root = this.createRootElement();
37
+ }
38
+
39
+ /**
40
+ * Returns popover separator root element
41
+ */
42
+ public getElement(): HTMLElement {
43
+ return this.nodes.root as HTMLElement;
44
+ }
45
+
46
+ /**
47
+ * Toggles item hidden state
48
+ * @param isHidden - true if item should be hidden
49
+ */
50
+ public toggleHidden(isHidden: boolean): void {
51
+ if (!this.nodes.root) {
52
+ return;
53
+ }
54
+
55
+ const baseClass = this.getContainerClass(false);
56
+ const hiddenClass = this.getContainerClass(true);
57
+
58
+ this.nodes.root.className = isHidden ? hiddenClass : baseClass;
59
+
60
+ if (isHidden) {
61
+ this.nodes.root.setAttribute(DATA_ATTR.hidden, 'true');
62
+ } else {
63
+ this.nodes.root.removeAttribute(DATA_ATTR.hidden);
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Build container class based on context
69
+ */
70
+ private getContainerClass(isHidden: boolean): string {
71
+ const baseClass = css.container;
72
+
73
+ if (this.isNestedInline) {
74
+ return twMerge(baseClass, cssInline.nestedContainer, isHidden && css.containerHidden);
75
+ }
76
+ if (this.isInline) {
77
+ return twMerge(baseClass, cssInline.container, isHidden && css.containerHidden);
78
+ }
79
+
80
+ return twMerge(baseClass, isHidden && css.containerHidden);
81
+ }
82
+
83
+ /**
84
+ * Build line class based on context
85
+ */
86
+ private getLineClass(): string {
87
+ if (this.isNestedInline) {
88
+ return twMerge(css.line, cssInline.nestedLine);
89
+ }
90
+ if (this.isInline) {
91
+ return twMerge(css.line, cssInline.line);
92
+ }
93
+
94
+ return css.line;
95
+ }
96
+
97
+ /**
98
+ * Creates the root container element
99
+ */
100
+ private createRootElement(): HTMLElement {
101
+ const container = document.createElement('div');
102
+
103
+ container.className = this.getContainerClass(false);
104
+ container.setAttribute(DATA_ATTR.popoverItemSeparator, '');
105
+ container.setAttribute('data-blok-testid', 'popover-item-separator');
106
+
107
+ const line = document.createElement('div');
108
+
109
+ line.className = this.getLineClass();
110
+ line.setAttribute(DATA_ATTR.popoverItemSeparatorLine, '');
111
+
112
+ container.appendChild(line);
113
+ this.nodes.line = line;
114
+
115
+ return container;
116
+ }
117
+ }
@@ -0,0 +1,187 @@
1
+ import { hide, onHover } from '../../../../utils/tooltip';
2
+ import { type HintPosition, Hint } from '../hint';
3
+ import type { PopoverItemParams } from '@/types/utils/popover/popover-item';
4
+
5
+ /**
6
+ * Popover item abstract class
7
+ */
8
+ export abstract class PopoverItem {
9
+ /**
10
+ * Constructs the instance
11
+ * @param params - instance parameters
12
+ */
13
+ constructor(protected readonly params?: PopoverItemParams) {}
14
+
15
+ /**
16
+ * Item name if exists
17
+ */
18
+ public get name(): string | undefined {
19
+ if (this.params === undefined) {
20
+ return;
21
+ }
22
+ if ('name' in this.params) {
23
+ return this.params.name;
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Destroys the instance
29
+ */
30
+ public destroy(): void {
31
+ hide();
32
+ }
33
+
34
+ /**
35
+ * Called when children popover is opened (if exists)
36
+ */
37
+ public onChildrenOpen(): void {
38
+ if (this.params === undefined) {
39
+ return;
40
+ }
41
+
42
+ if ('children' in this.params && typeof this.params.children?.onOpen === 'function') {
43
+ this.params.children.onOpen();
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Called when children popover is closed (if exists)
49
+ */
50
+ public onChildrenClose(): void {
51
+ if (this.params === undefined) {
52
+ return;
53
+ }
54
+
55
+ if ('children' in this.params && typeof this.params.children?.onClose === 'function') {
56
+ this.params.children.onClose();
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Called on popover item click
62
+ */
63
+ public handleClick(): void {
64
+ if (this.params === undefined) {
65
+ return;
66
+ }
67
+
68
+ if (!('onActivate' in this.params)) {
69
+ return;
70
+ }
71
+
72
+ this.params.onActivate?.(this.params);
73
+ }
74
+
75
+ /**
76
+ * Adds hint to the item element if hint data is provided
77
+ * @param itemElement - popover item root element to add hint to
78
+ * @param hintData - hint data
79
+ */
80
+ protected addHint(itemElement: HTMLElement, hintData: { title: string, description?: string; position: HintPosition; alignment?: 'start' | 'center' }): void {
81
+ const content = new Hint(hintData);
82
+
83
+ onHover(itemElement, content.getElement(), {
84
+ placement: hintData.position,
85
+ hidingDelay: 100,
86
+ });
87
+ }
88
+
89
+ /**
90
+ * Returns popover item root element
91
+ */
92
+ public abstract getElement(): HTMLElement | null;
93
+
94
+ /**
95
+ * Returns DOM element that should be mounted into the popover container.
96
+ * Default implementation returns the main element; subclasses may override
97
+ * when the mounted element differs from the focusable/root element.
98
+ */
99
+ public getMountElement(): HTMLElement | null {
100
+ return this.getElement();
101
+ }
102
+
103
+ /**
104
+ * Toggles item hidden state
105
+ * @param isHidden - true if item should be hidden
106
+ */
107
+ public abstract toggleHidden(isHidden: boolean): void;
108
+
109
+
110
+ /**
111
+ * Returns item children that are represented as popover items
112
+ */
113
+ public get children(): PopoverItemParams[] {
114
+ return this.params !== undefined && 'children' in this.params && this.params.children?.items !== undefined ? this.params.children.items : [];
115
+ }
116
+
117
+ /**
118
+ * Returns true if item has any type of children
119
+ */
120
+ public get hasChildren(): boolean {
121
+ return this.children.length > 0;
122
+ }
123
+
124
+ /**
125
+ * Returns true if item children should be open instantly after popover is opened and not on item click/hover
126
+ */
127
+ public get isChildrenOpen(): boolean {
128
+ return this.params !== undefined && 'children' in this.params && this.params.children?.isOpen === true;
129
+ }
130
+
131
+ /** * Returns true if the chevron icon should be hidden
132
+ */
133
+ public get isChevronHidden(): boolean {
134
+ return this.params !== undefined && 'children' in this.params && this.params.children?.hideChevron === true;
135
+ }
136
+
137
+ /** * True if item children items should be navigatable via keyboard
138
+ */
139
+ public get isChildrenFlippable(): boolean {
140
+ if (this.params === undefined) {
141
+ return false;
142
+ }
143
+
144
+ if (!('children' in this.params)) {
145
+ return false;
146
+ }
147
+
148
+ if (this.params.children?.isFlippable === false) {
149
+ return false;
150
+ }
151
+
152
+ return true;
153
+ }
154
+
155
+ /**
156
+ * Returns true if item has children that should be searchable
157
+ */
158
+ public get isChildrenSearchable(): boolean {
159
+ return this.params !== undefined && 'children' in this.params && this.params.children?.searchable === true;
160
+ }
161
+
162
+ /**
163
+ * True if popover should close once item is activated
164
+ */
165
+ public get closeOnActivate(): boolean | undefined {
166
+ return this.params !== undefined && 'closeOnActivate' in this.params && this.params.closeOnActivate;
167
+ }
168
+
169
+ /**
170
+ * True if item is active
171
+ */
172
+ public get isActive(): boolean {
173
+ if (this.params === undefined) {
174
+ return false;
175
+ }
176
+
177
+ if (!('isActive' in this.params)) {
178
+ return false;
179
+ }
180
+
181
+ if (typeof this.params.isActive === 'function') {
182
+ return this.params.isActive();
183
+ }
184
+
185
+ return this.params.isActive === true;
186
+ }
187
+ }
@@ -0,0 +1,2 @@
1
+ export * from './search-input';
2
+ export * from './search-input.types';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CSS class names to be used in popover search input class
3
+ */
4
+ export const css = {
5
+ wrapper: 'bg-[#F8F8F8] border border-[rgba(226,226,229,0.20)] rounded p-0.5 grid grid-cols-[auto_auto_1fr] grid-rows-[auto]',
6
+ icon: 'w-toolbox-btn h-toolbox-btn flex items-center justify-center mr-2 [&_svg]:w-icon [&_svg]:h-icon [&_svg]:text-gray-text',
7
+ input: "text-sm outline-none font-medium font-inherit border-0 bg-transparent m-0 p-0 leading-[22px] min-w-[calc(100%-theme('spacing.6')-10px)] placeholder:text-gray-text placeholder:font-medium",
8
+ };
@@ -0,0 +1,181 @@
1
+ import { Dom } from '../../../../dom';
2
+ import { Listeners } from '../../../listeners';
3
+ import { IconSearch } from '../../../../icons';
4
+ import type { SearchInputEventMap, SearchableItem } from './search-input.types';
5
+ import { SearchInputEvent } from './search-input.types';
6
+ import { css } from './search-input.const';
7
+ import { EventsDispatcher } from '../../../events';
8
+
9
+ /**
10
+ * Provides search input element and search logic
11
+ * @internal
12
+ */
13
+ export class SearchInput extends EventsDispatcher<SearchInputEventMap> {
14
+ /**
15
+ * Input wrapper element
16
+ */
17
+ private wrapper: HTMLElement;
18
+
19
+ /**
20
+ * Editable input itself
21
+ */
22
+ private input: HTMLInputElement;
23
+
24
+ /**
25
+ * The instance of the Listeners util
26
+ */
27
+ private listeners: Listeners;
28
+
29
+ /**
30
+ * Items for local search
31
+ */
32
+ private items: SearchableItem[];
33
+
34
+ /**
35
+ * Current search query
36
+ */
37
+ private searchQuery = '';
38
+
39
+ /**
40
+ * @param options - available config
41
+ * @param options.items - searchable items list
42
+ * @param options.placeholder - input placeholder
43
+ */
44
+ constructor({ items, placeholder }: {
45
+ items: SearchableItem[];
46
+ placeholder?: string;
47
+ }) {
48
+ super();
49
+
50
+ this.listeners = new Listeners();
51
+ this.items = items;
52
+
53
+ /** Build ui */
54
+ this.wrapper = Dom.make('div', css.wrapper);
55
+ this.wrapper.setAttribute('data-blok-testid', 'popover-search-field');
56
+
57
+ const iconWrapper = Dom.make('div', css.icon, {
58
+ innerHTML: IconSearch,
59
+ });
60
+
61
+ this.input = Dom.make('input', css.input, {
62
+ type: 'search',
63
+ placeholder,
64
+ /**
65
+ * Used to prevent focusing on the input by Tab key
66
+ * (Popover in the Toolbar lays below the blocks,
67
+ * so Tab in the last block will focus this hidden input if this property is not set)
68
+ */
69
+ tabIndex: -1,
70
+ }) as HTMLInputElement;
71
+ this.input.setAttribute('data-blok-flipper-navigation-target', 'true');
72
+ this.input.setAttribute('data-blok-testid', 'popover-search-input');
73
+
74
+ this.wrapper.appendChild(iconWrapper);
75
+ this.wrapper.appendChild(this.input);
76
+
77
+ this.overrideValueProperty();
78
+
79
+ const eventsToHandle = ['input', 'keyup', 'search', 'change'] as const;
80
+
81
+ eventsToHandle.forEach((eventName) => {
82
+ this.listeners.on(this.input, eventName, this.handleValueChange);
83
+ });
84
+ }
85
+
86
+ /**
87
+ * Returns search field element
88
+ */
89
+ public getElement(): HTMLElement {
90
+ return this.wrapper;
91
+ }
92
+
93
+ /**
94
+ * Sets focus to the input
95
+ */
96
+ public focus(): void {
97
+ this.input.focus();
98
+ }
99
+
100
+ /**
101
+ * Clears search query and results
102
+ */
103
+ public clear(): void {
104
+ this.input.value = '';
105
+ }
106
+
107
+ /**
108
+ * Handles value changes for the input element
109
+ */
110
+ private handleValueChange = (): void => {
111
+ this.applySearch(this.input.value);
112
+ };
113
+
114
+ /**
115
+ * Applies provided query to the search state and notifies listeners
116
+ * @param query - search query to apply
117
+ */
118
+ private applySearch(query: string): void {
119
+ if (this.searchQuery === query) {
120
+ return;
121
+ }
122
+
123
+ this.searchQuery = query;
124
+
125
+ this.emit(SearchInputEvent.Search, {
126
+ query,
127
+ items: this.foundItems,
128
+ });
129
+ }
130
+
131
+ /**
132
+ * Overrides value property setter to catch programmatic changes
133
+ */
134
+ private overrideValueProperty(): void {
135
+ const prototype = Object.getPrototypeOf(this.input);
136
+ const descriptor = Object.getOwnPropertyDescriptor(prototype, 'value');
137
+
138
+ if (descriptor?.set === undefined || descriptor.get === undefined) {
139
+ return;
140
+ }
141
+
142
+ const applySearch = this.applySearch.bind(this);
143
+
144
+ Object.defineProperty(this.input, 'value', {
145
+ configurable: descriptor.configurable ?? true,
146
+ enumerable: descriptor.enumerable ?? false,
147
+ get(): string {
148
+ return descriptor.get?.call(this) ?? '';
149
+ },
150
+ set(value: string): void {
151
+ descriptor.set?.call(this, value);
152
+ applySearch(value);
153
+ },
154
+ });
155
+ }
156
+
157
+ /**
158
+ * Clears memory
159
+ */
160
+ public destroy(): void {
161
+ this.listeners.removeAll();
162
+ }
163
+
164
+ /**
165
+ * Returns list of found items for the current search query
166
+ */
167
+ private get foundItems(): SearchableItem[] {
168
+ return this.items.filter(item => this.checkItem(item));
169
+ }
170
+
171
+ /**
172
+ * Contains logic for checking whether passed item conforms the search query
173
+ * @param item - item to be checked
174
+ */
175
+ private checkItem(item: SearchableItem): boolean {
176
+ const text = item.title?.toLowerCase() || '';
177
+ const query = this.searchQuery?.toLowerCase();
178
+
179
+ return query !== undefined ? text.includes(query) : false;
180
+ }
181
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Item that could be searched
3
+ */
4
+ export interface SearchableItem {
5
+ /**
6
+ * Items title
7
+ */
8
+ title?: string;
9
+ }
10
+
11
+
12
+ /**
13
+ * Event that can be triggered by the Search Input
14
+ */
15
+ export enum SearchInputEvent {
16
+ /**
17
+ * When search query is applied
18
+ */
19
+ Search = 'search'
20
+ }
21
+
22
+ /**
23
+ * Events fired by the Search Input
24
+ */
25
+ export interface SearchInputEventMap {
26
+ /**
27
+ * Fired when search query is applied
28
+ */
29
+ [SearchInputEvent.Search]: { query: string; items: SearchableItem[]};
30
+ }
@@ -0,0 +1,13 @@
1
+ import { PopoverDesktop } from './popover-desktop';
2
+ import { PopoverInline } from './popover-inline';
3
+ import { PopoverMobile } from './popover-mobile';
4
+
5
+ export type * from '@/types/utils/popover';
6
+ export { PopoverItemType } from '@/types/utils/popover/popover-item-type';
7
+
8
+ /**
9
+ * Union type for all popovers
10
+ */
11
+ export type Popover = PopoverDesktop | PopoverMobile | PopoverInline;
12
+
13
+ export { PopoverDesktop, PopoverMobile, PopoverInline };