@jackuait/blok 0.7.0-beta.3 → 0.7.0

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 (462) hide show
  1. package/dist/blok.mjs +3 -7
  2. package/dist/chunks/blok-Ufr5cPq-.mjs +12435 -0
  3. package/dist/chunks/constants-DT17zmu_.mjs +2934 -0
  4. package/dist/chunks/i18next-DymC16cN.mjs +1146 -0
  5. package/dist/chunks/i18next-loader-qjweOJ-t.mjs +35 -0
  6. package/dist/chunks/lightweight-i18n-vbtPx5C4.mjs +105 -0
  7. package/dist/chunks/messages-3bOAVT3X2.mjs +80 -0
  8. package/dist/chunks/messages-43N0Vfg42.mjs +80 -0
  9. package/dist/chunks/messages-B0cg-ThO2.mjs +80 -0
  10. package/dist/chunks/messages-B3StvafX.mjs +80 -0
  11. package/dist/chunks/messages-B7LU-b6n2.mjs +80 -0
  12. package/dist/chunks/messages-B87-89os.mjs +80 -0
  13. package/dist/chunks/messages-BFiMCfDX2.mjs +80 -0
  14. package/dist/chunks/messages-BLxyso1L.mjs +80 -0
  15. package/dist/chunks/messages-BQZtOYxr2.mjs +80 -0
  16. package/dist/chunks/messages-BRrtoRdw2.mjs +80 -0
  17. package/dist/chunks/messages-BU_YdaAf.mjs +80 -0
  18. package/dist/chunks/messages-BWbZYIs12.mjs +80 -0
  19. package/dist/chunks/messages-B_Qcy8kr2.mjs +80 -0
  20. package/dist/chunks/messages-B_uTiuQ-.mjs +80 -0
  21. package/dist/chunks/messages-BdWTM73p.mjs +80 -0
  22. package/dist/chunks/messages-BhZcNoIQ.mjs +80 -0
  23. package/dist/chunks/messages-Bn6LwI4B.mjs +80 -0
  24. package/dist/chunks/messages-BoTtYEct2.mjs +80 -0
  25. package/dist/chunks/messages-BrvAiuWT.mjs +80 -0
  26. package/dist/chunks/messages-Byp0YFMg.mjs +80 -0
  27. package/dist/chunks/messages-C0ZWDShx2.mjs +80 -0
  28. package/dist/chunks/messages-CA-jms9R.mjs +80 -0
  29. package/dist/chunks/messages-CFr0Ha6p2.mjs +80 -0
  30. package/dist/chunks/messages-CG2xl0IV.mjs +80 -0
  31. package/dist/chunks/messages-CIGX0FfW.mjs +80 -0
  32. package/dist/chunks/messages-CRMdL0jG.mjs +80 -0
  33. package/dist/chunks/messages-CRdl14uE.mjs +80 -0
  34. package/dist/chunks/messages-Cimsel4e.mjs +80 -0
  35. package/dist/chunks/messages-CjcSWeud.mjs +80 -0
  36. package/dist/chunks/messages-ClDJuy8K2.mjs +80 -0
  37. package/dist/chunks/messages-Cn1AC0Qk.mjs +80 -0
  38. package/dist/chunks/messages-CpnXbVOK2.mjs +80 -0
  39. package/dist/chunks/messages-CqsES1wk2.mjs +80 -0
  40. package/dist/chunks/messages-Csq7JatN.mjs +80 -0
  41. package/dist/chunks/messages-CtufKbaD.mjs +80 -0
  42. package/dist/chunks/messages-Cuk0QaLM.mjs +80 -0
  43. package/dist/chunks/messages-CvamFN6x.mjs +80 -0
  44. package/dist/chunks/messages-CwRhVVui.mjs +80 -0
  45. package/dist/chunks/messages-CzCezryo.mjs +80 -0
  46. package/dist/chunks/messages-D0v0Xa_i2.mjs +80 -0
  47. package/dist/chunks/messages-D3JVx_CH2.mjs +80 -0
  48. package/dist/chunks/messages-D4jR5Oc-.mjs +80 -0
  49. package/dist/chunks/messages-D7fI9Pj52.mjs +80 -0
  50. package/dist/chunks/messages-DGodJU2R.mjs +80 -0
  51. package/dist/chunks/messages-DLrmLkco2.mjs +80 -0
  52. package/dist/chunks/messages-DPe7kW6J.mjs +80 -0
  53. package/dist/chunks/messages-DRYKKPk8.mjs +80 -0
  54. package/dist/chunks/messages-DV5c_ZRQ.mjs +80 -0
  55. package/dist/chunks/messages-Dg6kSnxq.mjs +80 -0
  56. package/dist/chunks/messages-Dgfbmyf-.mjs +80 -0
  57. package/dist/chunks/messages-DihczS7L.mjs +80 -0
  58. package/dist/chunks/messages-DkSwQvmi2.mjs +80 -0
  59. package/dist/chunks/messages-Doxcj7Qy.mjs +80 -0
  60. package/dist/chunks/messages-DqGQvcXv2.mjs +80 -0
  61. package/dist/chunks/messages-Dr7yA3xM.mjs +80 -0
  62. package/dist/chunks/messages-DriB5lEF.mjs +80 -0
  63. package/dist/chunks/messages-FB_MePlt.mjs +80 -0
  64. package/dist/chunks/messages-JyZvGvrN.mjs +80 -0
  65. package/dist/chunks/messages-KdvbGwLH.mjs +80 -0
  66. package/dist/chunks/messages-M0HT-kBW.mjs +80 -0
  67. package/dist/chunks/messages-M8noQ6Kp2.mjs +80 -0
  68. package/dist/chunks/messages-elZUbCrN.mjs +80 -0
  69. package/dist/chunks/messages-iWMOMK822.mjs +80 -0
  70. package/dist/chunks/messages-kC92TJI72.mjs +80 -0
  71. package/dist/chunks/messages-tfyq1JIh2.mjs +80 -0
  72. package/dist/chunks/messages-v1HkA3kF2.mjs +80 -0
  73. package/dist/chunks/messages-yuqArCc6.mjs +80 -0
  74. package/dist/chunks/notifier-BqYxvxnV.mjs +96 -0
  75. package/dist/chunks/objectSpread2-CyPxu8-u.mjs +62 -0
  76. package/dist/chunks/tools-CJIETS-H.mjs +6004 -0
  77. package/dist/chunks/tw-DmW6-pCY.mjs +237 -0
  78. package/dist/cli.mjs +36 -49
  79. package/dist/full.mjs +26 -52
  80. package/dist/locales.mjs +181 -254
  81. package/dist/messages-2iHnlF0U.mjs +80 -0
  82. package/dist/messages-49ZJ_ISf.mjs +80 -0
  83. package/dist/messages-B8jjwMLK.mjs +80 -0
  84. package/dist/messages-BEDVb3ZX.mjs +80 -0
  85. package/dist/messages-BEEr6Vh82.mjs +80 -0
  86. package/dist/messages-BFT0F9pw.mjs +80 -0
  87. package/dist/messages-BHOI7R4K.mjs +80 -0
  88. package/dist/messages-BRPH_a6a.mjs +80 -0
  89. package/dist/messages-BSlQrYwp.mjs +80 -0
  90. package/dist/messages-BTNuOkhL.mjs +80 -0
  91. package/dist/messages-BX2KVzJp2.mjs +80 -0
  92. package/dist/messages-BaGwIHPb2.mjs +80 -0
  93. package/dist/messages-BdA_xvxj.mjs +80 -0
  94. package/dist/messages-BeJaje7e2.mjs +80 -0
  95. package/dist/messages-BfgHOkAy.mjs +80 -0
  96. package/dist/messages-BflWzIcP2.mjs +80 -0
  97. package/dist/messages-BigRnQS92.mjs +80 -0
  98. package/dist/messages-BjnJajTO2.mjs +80 -0
  99. package/dist/messages-BpA30dPf.mjs +80 -0
  100. package/dist/messages-BrPEPj382.mjs +80 -0
  101. package/dist/messages-Bt_9ptDu.mjs +80 -0
  102. package/dist/messages-C0cXOCHN2.mjs +80 -0
  103. package/dist/messages-C3tLCwJp2.mjs +80 -0
  104. package/dist/messages-C45IBZtA2.mjs +80 -0
  105. package/dist/messages-CA0hwajz.mjs +80 -0
  106. package/dist/messages-CCKZS2f4.mjs +80 -0
  107. package/dist/messages-CCm71gq3.mjs +80 -0
  108. package/dist/messages-CERs9LC9.mjs +80 -0
  109. package/dist/messages-CLQvtc_8.mjs +80 -0
  110. package/dist/messages-CPx1R-PH.mjs +80 -0
  111. package/dist/messages-CYFdbooL2.mjs +80 -0
  112. package/dist/messages-CYLYnOV82.mjs +80 -0
  113. package/dist/messages-CYZVFnaF.mjs +80 -0
  114. package/dist/messages-CaAdEXoh2.mjs +80 -0
  115. package/dist/messages-CicggErN2.mjs +80 -0
  116. package/dist/messages-CkAWTSc4.mjs +80 -0
  117. package/dist/messages-CkVfziK_2.mjs +80 -0
  118. package/dist/messages-CsM2iz1H2.mjs +80 -0
  119. package/dist/messages-D-12TeCM2.mjs +80 -0
  120. package/dist/messages-D0i5Vdyy2.mjs +80 -0
  121. package/dist/messages-D5KmRsUV2.mjs +80 -0
  122. package/dist/messages-DBwaWI0X.mjs +80 -0
  123. package/dist/messages-DDGzypb4.mjs +80 -0
  124. package/dist/messages-DQGzw4IC.mjs +80 -0
  125. package/dist/messages-DWZyaZNA.mjs +80 -0
  126. package/dist/messages-DYlxQEIv.mjs +80 -0
  127. package/dist/messages-DZo0x7Bd.mjs +80 -0
  128. package/dist/messages-Dc1yFFBM.mjs +80 -0
  129. package/dist/messages-DdUpYaJ1.mjs +80 -0
  130. package/dist/messages-DgstU8GH.mjs +80 -0
  131. package/dist/messages-DhdWq5oQ2.mjs +80 -0
  132. package/dist/messages-DmX52AQr.mjs +80 -0
  133. package/dist/messages-Dr-YJYIK2.mjs +80 -0
  134. package/dist/messages-DuubRyFf.mjs +80 -0
  135. package/dist/messages-DvTVsLOK2.mjs +80 -0
  136. package/dist/messages-DwPfgL_u.mjs +80 -0
  137. package/dist/messages-DxKIxLKw.mjs +80 -0
  138. package/dist/messages-DzhR8Klk.mjs +80 -0
  139. package/dist/messages-MBBSKGjJ2.mjs +80 -0
  140. package/dist/messages-RNusm48G2.mjs +80 -0
  141. package/dist/messages-XwPD18Kk.mjs +80 -0
  142. package/dist/messages-YfjdnhUF.mjs +80 -0
  143. package/dist/messages-aNMLsF8T2.mjs +80 -0
  144. package/dist/messages-cOqXp22e.mjs +80 -0
  145. package/dist/messages-g58itYPI.mjs +80 -0
  146. package/dist/messages-vfkwiKQo.mjs +80 -0
  147. package/dist/messages-vssmW7KO.mjs +80 -0
  148. package/dist/react.mjs +108 -0
  149. package/dist/tools.mjs +3 -7462
  150. package/dist/vendor.LICENSE.txt +86 -86
  151. package/package.json +56 -29
  152. package/src/blok.ts +52 -2
  153. package/src/components/block/api.ts +8 -0
  154. package/src/components/block/mutation-handler.ts +29 -4
  155. package/src/components/block/style-manager.ts +1 -1
  156. package/src/components/block-tunes/block-tune-width.ts +39 -0
  157. package/src/components/blocks.ts +56 -2
  158. package/src/components/core.ts +1 -0
  159. package/src/components/i18n/locales/am/messages.json +6 -1
  160. package/src/components/i18n/locales/ar/messages.json +6 -1
  161. package/src/components/i18n/locales/az/messages.json +6 -1
  162. package/src/components/i18n/locales/bg/messages.json +8 -3
  163. package/src/components/i18n/locales/bn/messages.json +6 -1
  164. package/src/components/i18n/locales/bs/messages.json +6 -1
  165. package/src/components/i18n/locales/cs/messages.json +6 -1
  166. package/src/components/i18n/locales/da/messages.json +6 -1
  167. package/src/components/i18n/locales/de/messages.json +8 -3
  168. package/src/components/i18n/locales/dv/messages.json +6 -1
  169. package/src/components/i18n/locales/el/messages.json +8 -3
  170. package/src/components/i18n/locales/en/messages.json +5 -0
  171. package/src/components/i18n/locales/es/messages.json +6 -1
  172. package/src/components/i18n/locales/et/messages.json +6 -1
  173. package/src/components/i18n/locales/fa/messages.json +8 -3
  174. package/src/components/i18n/locales/fi/messages.json +6 -1
  175. package/src/components/i18n/locales/fil/messages.json +21 -16
  176. package/src/components/i18n/locales/fr/messages.json +6 -1
  177. package/src/components/i18n/locales/gu/messages.json +6 -1
  178. package/src/components/i18n/locales/he/messages.json +6 -1
  179. package/src/components/i18n/locales/hi/messages.json +6 -1
  180. package/src/components/i18n/locales/hr/messages.json +6 -1
  181. package/src/components/i18n/locales/hu/messages.json +6 -1
  182. package/src/components/i18n/locales/hy/messages.json +8 -3
  183. package/src/components/i18n/locales/id/messages.json +12 -7
  184. package/src/components/i18n/locales/it/messages.json +6 -1
  185. package/src/components/i18n/locales/ja/messages.json +6 -1
  186. package/src/components/i18n/locales/ka/messages.json +6 -1
  187. package/src/components/i18n/locales/km/messages.json +6 -1
  188. package/src/components/i18n/locales/kn/messages.json +6 -1
  189. package/src/components/i18n/locales/ko/messages.json +6 -1
  190. package/src/components/i18n/locales/ku/messages.json +7 -2
  191. package/src/components/i18n/locales/lo/messages.json +7 -2
  192. package/src/components/i18n/locales/lt/messages.json +6 -1
  193. package/src/components/i18n/locales/lv/messages.json +6 -1
  194. package/src/components/i18n/locales/mk/messages.json +6 -1
  195. package/src/components/i18n/locales/ml/messages.json +6 -1
  196. package/src/components/i18n/locales/mn/messages.json +6 -1
  197. package/src/components/i18n/locales/mr/messages.json +6 -1
  198. package/src/components/i18n/locales/ms/messages.json +6 -1
  199. package/src/components/i18n/locales/my/messages.json +6 -1
  200. package/src/components/i18n/locales/ne/messages.json +9 -4
  201. package/src/components/i18n/locales/nl/messages.json +6 -1
  202. package/src/components/i18n/locales/no/messages.json +6 -1
  203. package/src/components/i18n/locales/pa/messages.json +6 -1
  204. package/src/components/i18n/locales/pl/messages.json +6 -1
  205. package/src/components/i18n/locales/ps/messages.json +8 -3
  206. package/src/components/i18n/locales/pt/messages.json +6 -1
  207. package/src/components/i18n/locales/ro/messages.json +6 -1
  208. package/src/components/i18n/locales/ru/messages.json +10 -5
  209. package/src/components/i18n/locales/sd/messages.json +6 -1
  210. package/src/components/i18n/locales/si/messages.json +6 -1
  211. package/src/components/i18n/locales/sk/messages.json +6 -1
  212. package/src/components/i18n/locales/sl/messages.json +6 -1
  213. package/src/components/i18n/locales/sq/messages.json +6 -1
  214. package/src/components/i18n/locales/sr/messages.json +6 -1
  215. package/src/components/i18n/locales/sv/messages.json +6 -1
  216. package/src/components/i18n/locales/sw/messages.json +6 -1
  217. package/src/components/i18n/locales/ta/messages.json +6 -1
  218. package/src/components/i18n/locales/te/messages.json +9 -4
  219. package/src/components/i18n/locales/th/messages.json +6 -1
  220. package/src/components/i18n/locales/tr/messages.json +6 -1
  221. package/src/components/i18n/locales/ug/messages.json +7 -2
  222. package/src/components/i18n/locales/uk/messages.json +6 -1
  223. package/src/components/i18n/locales/ur/messages.json +6 -1
  224. package/src/components/i18n/locales/vi/messages.json +6 -1
  225. package/src/components/i18n/locales/yi/messages.json +7 -2
  226. package/src/components/i18n/locales/zh/messages.json +6 -1
  227. package/src/components/icons/index.ts +16 -0
  228. package/src/components/inline-tools/inline-tool-link.ts +1 -1
  229. package/src/components/modules/api/blocks.ts +45 -2
  230. package/src/components/modules/api/index.ts +1 -0
  231. package/src/components/modules/api/width.ts +17 -0
  232. package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +99 -0
  233. package/src/components/modules/blockEvents/composers/markdownShortcuts.ts +109 -2
  234. package/src/components/modules/blockEvents/constants.ts +7 -0
  235. package/src/components/modules/blockManager/blockManager.ts +113 -9
  236. package/src/components/modules/blockManager/hierarchy.ts +61 -0
  237. package/src/components/modules/blockManager/operations.ts +161 -16
  238. package/src/components/modules/blockManager/yjs-sync.ts +112 -4
  239. package/src/components/modules/blockSelection.ts +36 -2
  240. package/src/components/modules/crossBlockSelection.ts +22 -2
  241. package/src/components/modules/drag/DragController.ts +178 -4
  242. package/src/components/modules/drag/operations/DragOperations.ts +48 -9
  243. package/src/components/modules/drag/preview/DragPreview.ts +21 -1
  244. package/src/components/modules/drag/state/DragStateMachine.ts +6 -1
  245. package/src/components/modules/drag/target/DropTargetDetector.ts +80 -4
  246. package/src/components/modules/drag/utils/ToggleSpringLoader.ts +71 -0
  247. package/src/components/modules/index.ts +7 -1
  248. package/src/components/modules/modificationsObserver.ts +19 -0
  249. package/src/components/modules/paste/constants.ts +2 -0
  250. package/src/components/modules/paste/handlers/base.ts +33 -1
  251. package/src/components/modules/paste/handlers/html-handler.ts +121 -54
  252. package/src/components/modules/paste/index.ts +5 -0
  253. package/src/components/modules/paste/types.ts +5 -0
  254. package/src/components/modules/rectangleSelection.ts +74 -81
  255. package/src/components/modules/toolbar/blockSettings.ts +25 -7
  256. package/src/components/modules/toolbar/index.ts +9 -7
  257. package/src/components/modules/toolbar/inline/index.ts +6 -1
  258. package/src/components/modules/toolbar/plus-button.ts +2 -6
  259. package/src/components/modules/toolbar/positioning.ts +10 -1
  260. package/src/components/modules/toolbar/settings-toggler.ts +1 -1
  261. package/src/components/modules/toolbar/styles.ts +3 -7
  262. package/src/components/modules/ui.ts +59 -5
  263. package/src/components/modules/uiControllers/handlers/click.ts +3 -2
  264. package/src/components/modules/widthManager.ts +69 -0
  265. package/src/components/modules/yjs/document-store.ts +11 -0
  266. package/src/components/modules/yjs/index.ts +11 -0
  267. package/src/components/shared/color-picker.ts +3 -3
  268. package/src/components/tools/block.ts +1 -11
  269. package/src/components/ui/toolbox.ts +52 -8
  270. package/src/components/utils/blocks.ts +37 -7
  271. package/src/components/utils/mutations.ts +2 -2
  272. package/src/components/utils/notifier/draw.ts +1 -1
  273. package/src/components/utils/placeholder.ts +5 -6
  274. package/src/components/utils/popover/components/popover-header/popover-header.const.ts +1 -1
  275. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.const.ts +4 -4
  276. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +6 -6
  277. package/src/components/utils/popover/components/popover-item/popover-item-separator/popover-item-separator.const.ts +2 -2
  278. package/src/components/utils/popover/components/search-input/search-input.const.ts +2 -2
  279. package/src/components/utils/popover/components/search-input/search-input.ts +7 -11
  280. package/src/components/utils/popover/components/search-input/search-input.types.ts +149 -10
  281. package/src/components/utils/popover/popover-abstract.ts +3 -2
  282. package/src/components/utils/popover/popover-desktop.ts +133 -11
  283. package/src/components/utils/popover/popover-inline.ts +1 -1
  284. package/src/components/utils/popover/popover.const.ts +3 -3
  285. package/src/components/utils/shortcut.ts +2 -0
  286. package/src/components/utils/tooltip.ts +11 -1
  287. package/src/react/BlokContent.tsx +46 -0
  288. package/src/react/holder-map.ts +17 -0
  289. package/src/react/index.ts +3 -0
  290. package/src/react/types.ts +16 -0
  291. package/src/react/useBlok.ts +173 -0
  292. package/src/stories/Placeholder.stories.ts +0 -59
  293. package/src/styles/main.css +663 -52
  294. package/src/tools/header/header-toggle-keyboard.ts +115 -0
  295. package/src/tools/header/index.ts +382 -187
  296. package/src/tools/list/block-operations.ts +1 -1
  297. package/src/tools/list/caret-manager.ts +9 -12
  298. package/src/tools/list/index.ts +2 -6
  299. package/src/tools/list/list-keyboard.ts +2 -2
  300. package/src/tools/paragraph/index.ts +1 -1
  301. package/src/tools/table/index.ts +75 -3
  302. package/src/tools/table/table-add-controls.ts +97 -8
  303. package/src/tools/table/table-cell-blocks.ts +17 -8
  304. package/src/tools/table/table-cell-clipboard.ts +1 -1
  305. package/src/tools/table/table-cell-selection.ts +27 -2
  306. package/src/tools/table/table-operations.ts +3 -2
  307. package/src/tools/toggle/block-operations.ts +4 -2
  308. package/src/tools/toggle/constants.ts +26 -2
  309. package/src/tools/toggle/dom-builder.ts +90 -25
  310. package/src/tools/toggle/index.ts +112 -9
  311. package/src/tools/toggle/toggle-keyboard.ts +5 -3
  312. package/src/tools/toggle/toggle-lifecycle.ts +79 -7
  313. package/src/tools/toggle/toggle-shortcuts.ts +214 -20
  314. package/src/tools/toggle/types.ts +2 -0
  315. package/src/types-internal/blok-modules.d.ts +4 -0
  316. package/types/api/block.d.ts +5 -0
  317. package/types/api/blocks.d.ts +29 -0
  318. package/types/api/index.d.ts +1 -0
  319. package/types/api/width.d.ts +19 -0
  320. package/types/configs/blok-config.d.ts +33 -0
  321. package/types/index.d.ts +4 -0
  322. package/types/react.d.ts +58 -0
  323. package/types/utils/popover/popover.d.ts +7 -0
  324. package/dist/chunks/blok-BlyYiZTm.mjs +0 -20098
  325. package/dist/chunks/constants-DEy4jBO5.mjs +0 -5123
  326. package/dist/chunks/i18next-B47TKgbU.mjs +0 -1303
  327. package/dist/chunks/i18next-loader-Cfbv-x6v.mjs +0 -43
  328. package/dist/chunks/index-Cu1w-sLZ.mjs +0 -130
  329. package/dist/chunks/messages-0Pxnqd4N.mjs +0 -75
  330. package/dist/chunks/messages-0ZXYUq7S.mjs +0 -75
  331. package/dist/chunks/messages-2OD2uUDS.mjs +0 -75
  332. package/dist/chunks/messages-7cEMfYzh.mjs +0 -75
  333. package/dist/chunks/messages-8mwfda1Q.mjs +0 -75
  334. package/dist/chunks/messages-B-FqWsBM.mjs +0 -75
  335. package/dist/chunks/messages-B1jzqWiQ.mjs +0 -75
  336. package/dist/chunks/messages-B5wk4Ezz.mjs +0 -75
  337. package/dist/chunks/messages-BAZ5Ld8x.mjs +0 -75
  338. package/dist/chunks/messages-BBhGp198.mjs +0 -75
  339. package/dist/chunks/messages-BC9IjIb7.mjs +0 -75
  340. package/dist/chunks/messages-BFEmpeV-.mjs +0 -75
  341. package/dist/chunks/messages-BGqzTZy0.mjs +0 -75
  342. package/dist/chunks/messages-BICs1abK.mjs +0 -75
  343. package/dist/chunks/messages-BJX6rOnd.mjs +0 -75
  344. package/dist/chunks/messages-BL2bXRhN.mjs +0 -75
  345. package/dist/chunks/messages-BMs5qdlH.mjs +0 -75
  346. package/dist/chunks/messages-BRsjUNwB.mjs +0 -75
  347. package/dist/chunks/messages-BSqV8OUR.mjs +0 -75
  348. package/dist/chunks/messages-BTqu3DfG.mjs +0 -75
  349. package/dist/chunks/messages-BXnDEsur.mjs +0 -75
  350. package/dist/chunks/messages-BYcre4-6.mjs +0 -75
  351. package/dist/chunks/messages-BZ9LRJf-.mjs +0 -75
  352. package/dist/chunks/messages-BgypBy7y.mjs +0 -75
  353. package/dist/chunks/messages-BsuGf70G.mjs +0 -75
  354. package/dist/chunks/messages-BwaoF4lQ.mjs +0 -75
  355. package/dist/chunks/messages-C1l8_7-y.mjs +0 -75
  356. package/dist/chunks/messages-C5NA_r9v.mjs +0 -75
  357. package/dist/chunks/messages-C6zgZ5pA.mjs +0 -75
  358. package/dist/chunks/messages-CAo5ghFI.mjs +0 -75
  359. package/dist/chunks/messages-CH9qlJ9I.mjs +0 -75
  360. package/dist/chunks/messages-CI0HqAeS.mjs +0 -75
  361. package/dist/chunks/messages-CJJtms9k.mjs +0 -75
  362. package/dist/chunks/messages-CM2hJqk6.mjs +0 -75
  363. package/dist/chunks/messages-CRMiDPIQ.mjs +0 -75
  364. package/dist/chunks/messages-CWsZuBj1.mjs +0 -75
  365. package/dist/chunks/messages-C_gLHo6A.mjs +0 -75
  366. package/dist/chunks/messages-Cbu-NUDn.mjs +0 -75
  367. package/dist/chunks/messages-Cjb_MCeh.mjs +0 -75
  368. package/dist/chunks/messages-ClXYO9Wn.mjs +0 -75
  369. package/dist/chunks/messages-CsH20vhP.mjs +0 -75
  370. package/dist/chunks/messages-CsjAGhzA.mjs +0 -75
  371. package/dist/chunks/messages-Cx7VKFOE.mjs +0 -75
  372. package/dist/chunks/messages-D3JeBwxo.mjs +0 -75
  373. package/dist/chunks/messages-D541fieJ.mjs +0 -75
  374. package/dist/chunks/messages-D7XPdglc.mjs +0 -75
  375. package/dist/chunks/messages-DBhylfvt.mjs +0 -75
  376. package/dist/chunks/messages-DCA120lW.mjs +0 -75
  377. package/dist/chunks/messages-DCf_xZMN.mjs +0 -75
  378. package/dist/chunks/messages-DDwXKCpe.mjs +0 -75
  379. package/dist/chunks/messages-DNKDlxcy.mjs +0 -75
  380. package/dist/chunks/messages-DPvEjrGK.mjs +0 -75
  381. package/dist/chunks/messages-DQ-AkNxA.mjs +0 -75
  382. package/dist/chunks/messages-DVuvkNap.mjs +0 -75
  383. package/dist/chunks/messages-DaglyqUT.mjs +0 -75
  384. package/dist/chunks/messages-Di0bAfwA.mjs +0 -75
  385. package/dist/chunks/messages-DuLct0Yr.mjs +0 -75
  386. package/dist/chunks/messages-DzEYYhZh.mjs +0 -75
  387. package/dist/chunks/messages-DznNGAB2.mjs +0 -75
  388. package/dist/chunks/messages-DzoIzyu8.mjs +0 -75
  389. package/dist/chunks/messages-QYOGmket.mjs +0 -75
  390. package/dist/chunks/messages-cEjGDAgI.mjs +0 -75
  391. package/dist/chunks/messages-ddhvrdpE.mjs +0 -75
  392. package/dist/chunks/messages-mwfNK5nZ.mjs +0 -75
  393. package/dist/chunks/messages-nG_vNDte.mjs +0 -75
  394. package/dist/chunks/messages-tDq3Owh7.mjs +0 -75
  395. package/dist/chunks/messages-x6VJVZKx.mjs +0 -75
  396. package/dist/messages-0Pxnqd4N.mjs +0 -75
  397. package/dist/messages-0ZXYUq7S.mjs +0 -75
  398. package/dist/messages-2OD2uUDS.mjs +0 -75
  399. package/dist/messages-7cEMfYzh.mjs +0 -75
  400. package/dist/messages-8mwfda1Q.mjs +0 -75
  401. package/dist/messages-B-FqWsBM.mjs +0 -75
  402. package/dist/messages-B1jzqWiQ.mjs +0 -75
  403. package/dist/messages-B5wk4Ezz.mjs +0 -75
  404. package/dist/messages-BAZ5Ld8x.mjs +0 -75
  405. package/dist/messages-BBhGp198.mjs +0 -75
  406. package/dist/messages-BC9IjIb7.mjs +0 -75
  407. package/dist/messages-BFEmpeV-.mjs +0 -75
  408. package/dist/messages-BGqzTZy0.mjs +0 -75
  409. package/dist/messages-BICs1abK.mjs +0 -75
  410. package/dist/messages-BJX6rOnd.mjs +0 -75
  411. package/dist/messages-BL2bXRhN.mjs +0 -75
  412. package/dist/messages-BMs5qdlH.mjs +0 -75
  413. package/dist/messages-BRsjUNwB.mjs +0 -75
  414. package/dist/messages-BSqV8OUR.mjs +0 -75
  415. package/dist/messages-BTqu3DfG.mjs +0 -75
  416. package/dist/messages-BXnDEsur.mjs +0 -75
  417. package/dist/messages-BYcre4-6.mjs +0 -75
  418. package/dist/messages-BZ9LRJf-.mjs +0 -75
  419. package/dist/messages-BgypBy7y.mjs +0 -75
  420. package/dist/messages-BsuGf70G.mjs +0 -75
  421. package/dist/messages-BwaoF4lQ.mjs +0 -75
  422. package/dist/messages-C1l8_7-y.mjs +0 -75
  423. package/dist/messages-C5NA_r9v.mjs +0 -75
  424. package/dist/messages-C6zgZ5pA.mjs +0 -75
  425. package/dist/messages-CAo5ghFI.mjs +0 -75
  426. package/dist/messages-CH9qlJ9I.mjs +0 -75
  427. package/dist/messages-CI0HqAeS.mjs +0 -75
  428. package/dist/messages-CJJtms9k.mjs +0 -75
  429. package/dist/messages-CM2hJqk6.mjs +0 -75
  430. package/dist/messages-CRMiDPIQ.mjs +0 -75
  431. package/dist/messages-CWsZuBj1.mjs +0 -75
  432. package/dist/messages-C_gLHo6A.mjs +0 -75
  433. package/dist/messages-Cbu-NUDn.mjs +0 -75
  434. package/dist/messages-Cjb_MCeh.mjs +0 -75
  435. package/dist/messages-ClXYO9Wn.mjs +0 -75
  436. package/dist/messages-CsH20vhP.mjs +0 -75
  437. package/dist/messages-CsjAGhzA.mjs +0 -75
  438. package/dist/messages-Cx7VKFOE.mjs +0 -75
  439. package/dist/messages-D3JeBwxo.mjs +0 -75
  440. package/dist/messages-D541fieJ.mjs +0 -75
  441. package/dist/messages-D7XPdglc.mjs +0 -75
  442. package/dist/messages-DBhylfvt.mjs +0 -75
  443. package/dist/messages-DCA120lW.mjs +0 -75
  444. package/dist/messages-DCf_xZMN.mjs +0 -75
  445. package/dist/messages-DDwXKCpe.mjs +0 -75
  446. package/dist/messages-DNKDlxcy.mjs +0 -75
  447. package/dist/messages-DPvEjrGK.mjs +0 -75
  448. package/dist/messages-DQ-AkNxA.mjs +0 -75
  449. package/dist/messages-DVuvkNap.mjs +0 -75
  450. package/dist/messages-DaglyqUT.mjs +0 -75
  451. package/dist/messages-Di0bAfwA.mjs +0 -75
  452. package/dist/messages-DuLct0Yr.mjs +0 -75
  453. package/dist/messages-DzEYYhZh.mjs +0 -75
  454. package/dist/messages-DznNGAB2.mjs +0 -75
  455. package/dist/messages-DzoIzyu8.mjs +0 -75
  456. package/dist/messages-QYOGmket.mjs +0 -75
  457. package/dist/messages-cEjGDAgI.mjs +0 -75
  458. package/dist/messages-ddhvrdpE.mjs +0 -75
  459. package/dist/messages-mwfNK5nZ.mjs +0 -75
  460. package/dist/messages-nG_vNDte.mjs +0 -75
  461. package/dist/messages-tDq3Owh7.mjs +0 -75
  462. package/dist/messages-x6VJVZKx.mjs +0 -75
@@ -1,22 +1,25 @@
1
1
  /**
2
- * Toggle Shortcuts - Manages the collapse/expand-all keyboard shortcut (CMD+ALT+T).
2
+ * Toggle Shortcuts - Manages keyboard shortcuts for toggle blocks.
3
3
  *
4
- * Iterates all blocks in the editor and toggles all collapsible blocks
5
- * (toggle blocks and toggle headings):
6
- * - If any collapsible block is collapsed, expands all
7
- * - If all collapsible blocks are expanded, collapses all
4
+ * CMD+ALT+T: Collapse/expand all toggle blocks on the page.
5
+ * CMD+SHIFT+[: Collapse/expand the toggle block that currently has focus
6
+ * (or its parent toggle if the focused block is a child).
7
+ * CMD+ALT+SHIFT+T: Collapse/expand all descendant toggles of the current toggle.
8
+ * Falls back to page-wide CMD+ALT+T behavior when cursor is not inside any toggle.
8
9
  */
9
10
 
10
- import type { API } from '../../../types';
11
+ import type { API, BlockAPI } from '../../../types';
11
12
 
12
13
  import { Shortcuts } from '../../components/utils/shortcuts';
13
14
 
14
- import { TOGGLE_ATTR } from './constants';
15
+ import { TOGGLE_ATTR, TOOL_NAME } from './constants';
15
16
 
16
17
  const COLLAPSE_EXPAND_ALL_SHORTCUT = 'CMD+ALT+T';
18
+ const COLLAPSE_EXPAND_CURRENT_SHORTCUT = 'CMD+SHIFT+[';
19
+ const COLLAPSE_EXPAND_SCOPED_SHORTCUT = 'CMD+ALT+SHIFT+T';
17
20
 
18
21
  /**
19
- * Manages the collapse/expand-all shortcut for toggle blocks.
22
+ * Manages the collapse/expand shortcuts for toggle blocks.
20
23
  */
21
24
  export class ToggleShortcuts {
22
25
  private readonly api: API;
@@ -29,8 +32,8 @@ export class ToggleShortcuts {
29
32
  }
30
33
 
31
34
  /**
32
- * Register the CMD+ALT+T shortcut on the document.
33
- * Pre-clears any stale registration to handle cases where a previous editor
35
+ * Register all toggle shortcuts on the document.
36
+ * Pre-clears any stale registrations to handle cases where a previous editor
34
37
  * instance was not fully destroyed (e.g. Storybook story switching).
35
38
  */
36
39
  public register(): void {
@@ -39,6 +42,8 @@ export class ToggleShortcuts {
39
42
  }
40
43
 
41
44
  Shortcuts.remove(document, COLLAPSE_EXPAND_ALL_SHORTCUT);
45
+ Shortcuts.remove(document, COLLAPSE_EXPAND_CURRENT_SHORTCUT);
46
+ Shortcuts.remove(document, COLLAPSE_EXPAND_SCOPED_SHORTCUT);
42
47
 
43
48
  Shortcuts.add({
44
49
  name: COLLAPSE_EXPAND_ALL_SHORTCUT,
@@ -53,11 +58,37 @@ export class ToggleShortcuts {
53
58
  },
54
59
  });
55
60
 
61
+ Shortcuts.add({
62
+ name: COLLAPSE_EXPAND_CURRENT_SHORTCUT,
63
+ on: document,
64
+ handler: (event: KeyboardEvent) => {
65
+ if (!this.shouldHandle(event)) {
66
+ return;
67
+ }
68
+
69
+ event.preventDefault();
70
+ this.toggleCurrent();
71
+ },
72
+ });
73
+
74
+ Shortcuts.add({
75
+ name: COLLAPSE_EXPAND_SCOPED_SHORTCUT,
76
+ on: document,
77
+ handler: (event: KeyboardEvent) => {
78
+ if (!this.shouldHandle(event)) {
79
+ return;
80
+ }
81
+
82
+ event.preventDefault();
83
+ this.toggleScoped();
84
+ },
85
+ });
86
+
56
87
  this.registered = true;
57
88
  }
58
89
 
59
90
  /**
60
- * Unregister the shortcut.
91
+ * Unregister all shortcuts.
61
92
  */
62
93
  public unregister(): void {
63
94
  if (!this.registered) {
@@ -65,6 +96,8 @@ export class ToggleShortcuts {
65
96
  }
66
97
 
67
98
  Shortcuts.remove(document, COLLAPSE_EXPAND_ALL_SHORTCUT);
99
+ Shortcuts.remove(document, COLLAPSE_EXPAND_CURRENT_SHORTCUT);
100
+ Shortcuts.remove(document, COLLAPSE_EXPAND_SCOPED_SHORTCUT);
68
101
  this.registered = false;
69
102
  }
70
103
 
@@ -82,6 +115,169 @@ export class ToggleShortcuts {
82
115
  * If any is collapsed, expand all. If all are expanded, collapse all.
83
116
  */
84
117
  private toggleAll(): void {
118
+ const toggleBlocks = this.collectAllToggleBlocks();
119
+
120
+ if (toggleBlocks.length === 0) {
121
+ return;
122
+ }
123
+
124
+ const anyCollapsed = toggleBlocks.some((b) => !b.isOpen);
125
+ const method = anyCollapsed ? 'expand' : 'collapse';
126
+
127
+ for (const block of toggleBlocks) {
128
+ block.call(method);
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Toggle the current block if it is a toggle, or its nearest toggle ancestor
134
+ * if the current block is a child inside a toggle.
135
+ * Does nothing if neither applies.
136
+ */
137
+ private toggleCurrent(): void {
138
+ const currentIndex = this.api.blocks.getCurrentBlockIndex();
139
+ const currentBlock = this.api.blocks.getBlockByIndex(currentIndex);
140
+
141
+ if (currentBlock === undefined) {
142
+ return;
143
+ }
144
+
145
+ const targetBlock = this.findToggleBlockForCurrent(currentBlock);
146
+
147
+ if (targetBlock === undefined) {
148
+ return;
149
+ }
150
+
151
+ const toggleWrapper = targetBlock.holder.querySelector(`[${TOGGLE_ATTR.toggleOpen}]`);
152
+
153
+ if (toggleWrapper === null) {
154
+ return;
155
+ }
156
+
157
+ const isOpen = toggleWrapper.getAttribute(TOGGLE_ATTR.toggleOpen) === 'true';
158
+
159
+ targetBlock.call(isOpen ? 'collapse' : 'expand');
160
+ }
161
+
162
+ /**
163
+ * Toggle all descendant toggles of the root toggle ancestor for the current block.
164
+ * If the current block is not inside any toggle, falls back to page-wide toggleAll().
165
+ */
166
+ private toggleScoped(): void {
167
+ const currentIndex = this.api.blocks.getCurrentBlockIndex();
168
+ const currentBlock = this.api.blocks.getBlockByIndex(currentIndex);
169
+
170
+ if (currentBlock === undefined) {
171
+ return;
172
+ }
173
+
174
+ const rootToggle = this.findRootToggleAncestor(currentBlock);
175
+
176
+ if (rootToggle === undefined) {
177
+ this.toggleAll();
178
+ return;
179
+ }
180
+
181
+ const descendants = this.collectDescendantToggleBlocks(rootToggle.id);
182
+
183
+ if (descendants.length === 0) {
184
+ return;
185
+ }
186
+
187
+ const anyCollapsed = descendants.some((b) => !b.isOpen);
188
+ const method = anyCollapsed ? 'expand' : 'collapse';
189
+
190
+ for (const block of descendants) {
191
+ block.call(method);
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Returns the toggle block to act on for the current block:
197
+ * - If the current block itself is a toggle, return it.
198
+ * - If it has a parentId pointing to a toggle block, return the parent.
199
+ * - Otherwise return undefined.
200
+ */
201
+ private findToggleBlockForCurrent(block: BlockAPI): BlockAPI | undefined {
202
+ if (this.isToggleBlock(block)) {
203
+ return block;
204
+ }
205
+
206
+ if (block.parentId !== null) {
207
+ const parent = this.api.blocks.getById(block.parentId);
208
+
209
+ if (parent !== null && this.isToggleBlock(parent)) {
210
+ return parent;
211
+ }
212
+ }
213
+
214
+ return undefined;
215
+ }
216
+
217
+ /**
218
+ * Walks up the parentId chain to find the root-level toggle ancestor of the
219
+ * given block. Returns the root toggle if found, or undefined if the block is
220
+ * not inside any toggle.
221
+ */
222
+ private findRootToggleAncestor(block: BlockAPI): BlockAPI | undefined {
223
+ if (this.isToggleBlock(block) && block.parentId === null) {
224
+ return block;
225
+ }
226
+
227
+ return this.walkToRootToggle(block.parentId, undefined);
228
+ }
229
+
230
+ private walkToRootToggle(parentId: string | null, best: BlockAPI | undefined): BlockAPI | undefined {
231
+ if (parentId === null) {
232
+ return best;
233
+ }
234
+
235
+ const parent = this.api.blocks.getById(parentId);
236
+
237
+ if (parent === null) {
238
+ return best;
239
+ }
240
+
241
+ return this.walkToRootToggle(parent.parentId, this.isToggleBlock(parent) ? parent : best);
242
+ }
243
+
244
+ /**
245
+ * Recursively collects all descendant toggle blocks of the given parent id.
246
+ * Returns items with call/isOpen so they can be expanded or collapsed.
247
+ */
248
+ private collectDescendantToggleBlocks(parentId: string): { call: (method: string) => void; isOpen: boolean }[] {
249
+ const children = this.api.blocks.getChildren(parentId);
250
+ const result: { call: (method: string) => void; isOpen: boolean }[] = [];
251
+
252
+ for (const child of children) {
253
+ const info = this.isToggleBlock(child) ? this.extractToggleBlockInfo(child) : null;
254
+
255
+ if (info !== null) {
256
+ result.push(info);
257
+ }
258
+
259
+ result.push(...this.collectDescendantToggleBlocks(child.id));
260
+ }
261
+
262
+ return result;
263
+ }
264
+
265
+ private extractToggleBlockInfo(child: BlockAPI): { call: (method: string) => void; isOpen: boolean } | null {
266
+ const toggleWrapper = child.holder.querySelector(`[${TOGGLE_ATTR.toggleOpen}]`);
267
+
268
+ if (toggleWrapper === null) {
269
+ return null;
270
+ }
271
+
272
+ const isOpen = toggleWrapper.getAttribute(TOGGLE_ATTR.toggleOpen) === 'true';
273
+
274
+ return { call: (method: string) => child.call(method), isOpen };
275
+ }
276
+
277
+ /**
278
+ * Collect all toggle-capable blocks across the entire document.
279
+ */
280
+ private collectAllToggleBlocks(): { call: (method: string) => void; isOpen: boolean }[] {
85
281
  const blockCount = this.api.blocks.getBlocksCount();
86
282
  const toggleBlocks: { call: (method: string) => void; isOpen: boolean }[] = [];
87
283
 
@@ -103,15 +299,13 @@ export class ToggleShortcuts {
103
299
  toggleBlocks.push({ call: (method: string) => block.call(method), isOpen });
104
300
  }
105
301
 
106
- if (toggleBlocks.length === 0) {
107
- return;
108
- }
109
-
110
- const anyCollapsed = toggleBlocks.some((b) => !b.isOpen);
111
- const method = anyCollapsed ? 'expand' : 'collapse';
302
+ return toggleBlocks;
303
+ }
112
304
 
113
- for (const block of toggleBlocks) {
114
- block.call(method);
115
- }
305
+ /**
306
+ * Returns true if the given block is a toggle block (by tool name).
307
+ */
308
+ private isToggleBlock(block: BlockAPI): boolean {
309
+ return block.name === TOOL_NAME;
116
310
  }
117
311
  }
@@ -10,6 +10,8 @@ import type { BlockToolData } from '../../../types';
10
10
  export interface ToggleItemData extends BlockToolData {
11
11
  /** Toggle item text content (can include HTML) */
12
12
  text: string;
13
+ /** Whether the toggle is open (expanded). Persisted on save so state is restored on reload. */
14
+ isOpen?: boolean;
13
15
  }
14
16
 
15
17
  /**
@@ -16,6 +16,7 @@ import { StylesAPI } from '../components/modules/api/styles';
16
16
  import { ToolbarAPI } from '../components/modules/api/toolbar';
17
17
  import { TooltipAPI } from '../components/modules/api/tooltip';
18
18
  import { UiAPI } from '../components/modules/api/ui';
19
+ import { WidthAPI } from '../components/modules/api/width';
19
20
  /** ./toolbar */
20
21
  import { BlockSettings } from '../components/modules/toolbar/blockSettings';
21
22
  import { Toolbar } from '../components/modules/toolbar/index';
@@ -38,6 +39,7 @@ import { Tools } from '../components/modules/tools';
38
39
  import { UI } from '../components/modules/ui';
39
40
  import { ToolsAPI } from '../components/modules/api/tools';
40
41
  import { I18n } from '../components/modules/i18n';
42
+ import { WidthManager } from '../components/modules/widthManager';
41
43
  import { YjsManager } from '../components/modules/yjs';
42
44
 
43
45
  export interface BlokModules {
@@ -60,6 +62,7 @@ export interface BlokModules {
60
62
  ToolbarAPI: ToolbarAPI,
61
63
  TooltipAPI: TooltipAPI,
62
64
  UiAPI: UiAPI,
65
+ WidthAPI: WidthAPI,
63
66
 
64
67
  // Toolbar Modules
65
68
  BlockSettings: BlockSettings,
@@ -82,5 +85,6 @@ export interface BlokModules {
82
85
  Saver: Saver,
83
86
  Tools: Tools,
84
87
  UI: UI,
88
+ WidthManager: WidthManager,
85
89
  YjsManager: YjsManager,
86
90
  }
@@ -26,6 +26,11 @@ export interface BlockAPI {
26
26
  */
27
27
  readonly holder: HTMLElement;
28
28
 
29
+ /**
30
+ * Id of the parent block, or null if this block has no parent
31
+ */
32
+ readonly parentId: string | null;
33
+
29
34
  /**
30
35
  * True if Block content is empty
31
36
  */
@@ -182,6 +182,17 @@ export interface Blocks {
182
182
  insertIndex: number,
183
183
  ): BlockAPI;
184
184
 
185
+ /**
186
+ * Insert a new paragraph block as a child of the given parent block, atomically.
187
+ * The block creation and parent assignment are grouped into a single undo entry,
188
+ * so a single CMD+Z removes the new block completely.
189
+ *
190
+ * @param parentId - id of the parent block
191
+ * @param insertIndex - flat block index where the new block should appear
192
+ * @returns BlockAPI for the newly created child block
193
+ */
194
+ insertInsideParent(parentId: string, insertIndex: number): BlockAPI;
195
+
185
196
  /**
186
197
  * Execute a function within a transaction.
187
198
  * All block operations (insert, delete, move) within fn are grouped
@@ -191,4 +202,22 @@ export interface Blocks {
191
202
  * @param fn - The function containing block operations to group
192
203
  */
193
204
  transact?(fn: () => void): void;
205
+
206
+ /**
207
+ * Execute a function without recording any block operations in the undo history.
208
+ * Use this for auto-repair operations (e.g. ensuring empty cells always have a block)
209
+ * that should never appear as undoable entries in the history.
210
+ *
211
+ * @param fn - The function containing block operations to execute without undo capture
212
+ */
213
+ transactWithoutCapture?(fn: () => void): void;
214
+
215
+ /**
216
+ * Notify BlockManager that a pointer drag interaction has started or ended.
217
+ * While active, DOM-mutation-triggered Yjs syncs are suppressed to prevent
218
+ * cross-cell browser DOM mutations from corrupting Yjs state.
219
+ *
220
+ * @param active - true when a drag starts, false when it ends
221
+ */
222
+ setPointerDragActive?(active: boolean): void;
194
223
  }
@@ -16,3 +16,4 @@ export * from './readonly';
16
16
  export * from './i18n';
17
17
  export * from './ui';
18
18
  export * from './tools';
19
+ export * from './width';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Describes the editor-level width mode API
3
+ */
4
+ export interface Width {
5
+ /**
6
+ * Returns the current width mode
7
+ */
8
+ get(): 'narrow' | 'full';
9
+
10
+ /**
11
+ * Sets the width mode
12
+ */
13
+ set(mode: 'narrow' | 'full'): void;
14
+
15
+ /**
16
+ * Toggles between 'narrow' and 'full'
17
+ */
18
+ toggle(): void;
19
+ }
@@ -152,5 +152,38 @@ export interface BlokConfig {
152
152
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce
153
153
  */
154
154
  nonce?: string;
155
+
156
+ /**
157
+ * Custom font family for the entire editor UI (content area, toolbars, popovers).
158
+ * Accepts any valid CSS font-family value.
159
+ * @example 'Inter, sans-serif'
160
+ */
161
+ fontFamily?: string;
155
162
  }
163
+
164
+ /**
165
+ * Initial width mode. Defaults to 'narrow'.
166
+ */
167
+ defaultWidth?: 'narrow' | 'full';
168
+
169
+ /**
170
+ * CSS max-width value for narrow mode.
171
+ * Any valid CSS length (e.g. '650px', '800px', '60ch').
172
+ * Defaults to '650px'.
173
+ */
174
+ narrowWidth?: string;
175
+
176
+ /**
177
+ * CSS max-width value for full width mode.
178
+ * Any valid CSS length, or 'none' for no constraint.
179
+ * Defaults to 'none'.
180
+ */
181
+ fullWidth?: string;
182
+
183
+ /**
184
+ * Called when the editor width mode changes.
185
+ * @param mode - the new mode ('narrow' or 'full')
186
+ * @param value - the resolved CSS max-width value
187
+ */
188
+ onWidthChange?: (mode: 'narrow' | 'full', value: string) => void;
156
189
  }
package/types/index.d.ts CHANGED
@@ -30,6 +30,7 @@ import {
30
30
  I18n,
31
31
  Ui,
32
32
  Tools,
33
+ Width,
33
34
  } from './api';
34
35
 
35
36
  import { OutputData } from './data-formats';
@@ -105,6 +106,7 @@ export {
105
106
  I18n,
106
107
  Ui,
107
108
  Tools,
109
+ Width,
108
110
  } from './api';
109
111
  export {
110
112
  BlockMutationType,
@@ -142,6 +144,7 @@ export interface API {
142
144
  i18n: I18n;
143
145
  readOnly: ReadOnly;
144
146
  ui: Ui;
147
+ width: Width;
145
148
  rectangleSelection: {
146
149
  cancelActiveSelection: () => void;
147
150
  isRectActivated: () => boolean;
@@ -176,6 +179,7 @@ export class Blok {
176
179
  public inlineToolbar: InlineToolbar;
177
180
  public tooltip: Tooltip;
178
181
  public readOnly: ReadOnly;
182
+ public width: Width;
179
183
  constructor(configuration?: BlokConfig|string);
180
184
 
181
185
  /**
@@ -0,0 +1,58 @@
1
+ import type { BlokConfig } from './index';
2
+ import type { Blok } from './index';
3
+ import type React from 'react';
4
+
5
+ /**
6
+ * Configuration for the useBlok hook.
7
+ * Accepts all BlokConfig properties except `holder`, which is managed by BlokContent.
8
+ *
9
+ * Reactive props (sync after mount without recreation):
10
+ * - `readOnly` — calls `editor.readOnly.set(value)`
11
+ * - `autofocus` — calls `editor.focus()` when changed to true
12
+ *
13
+ * All other config is consumed once at editor creation.
14
+ */
15
+ export interface UseBlokConfig extends Omit<BlokConfig, 'holder'> {}
16
+
17
+ /**
18
+ * Props for the BlokContent component.
19
+ * Renders a `<div>` that becomes the Blok editor's DOM mount point.
20
+ * Passes through all standard HTML div attributes.
21
+ */
22
+ export interface BlokContentProps extends React.HTMLAttributes<HTMLDivElement> {
23
+ /** The Blok editor instance from useBlok. Null during SSR or before initialization. */
24
+ editor: Blok | null;
25
+ }
26
+
27
+ /**
28
+ * React hook that creates and manages a Blok editor instance.
29
+ *
30
+ * @param config - Editor configuration (all BlokConfig props except `holder`)
31
+ * @param deps - Optional dependency array. When any dep changes, the editor is destroyed and recreated.
32
+ * @returns The Blok editor instance, or null during SSR / before initialization.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * const editor = useBlok({
37
+ * tools: defaultTools,
38
+ * data: savedData,
39
+ * readOnly: false,
40
+ * onChange: (api, event) => console.log(event),
41
+ * });
42
+ * ```
43
+ */
44
+ export function useBlok(
45
+ config: UseBlokConfig,
46
+ deps?: React.DependencyList
47
+ ): Blok | null;
48
+
49
+ /**
50
+ * Component that provides the DOM mount point for a Blok editor.
51
+ * Renders a `<div>` and adopts the editor's DOM tree into it.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * <BlokContent editor={editor} className="my-editor" />
56
+ * ```
57
+ */
58
+ export declare const BlokContent: React.ForwardRefExoticComponent<BlokContentProps & React.RefAttributes<HTMLDivElement>>;
@@ -86,6 +86,13 @@ export interface PopoverParams {
86
86
  * block content area rather than to the plus button.
87
87
  */
88
88
  leftAlignElement?: HTMLElement;
89
+
90
+ /**
91
+ * When true, the first item is focused when the popover opens (default behavior).
92
+ * When false, no item is pre-focused — focus only appears after keyboard navigation.
93
+ * Defaults to true. Has no effect when a search field is present (search receives focus instead).
94
+ */
95
+ autoFocusFirstItem?: boolean;
89
96
  }
90
97
 
91
98