@jackuait/blok 0.10.4 → 0.10.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 (459) hide show
  1. package/dist/blok.mjs +2 -2
  2. package/dist/chunks/_basePickBy--UeZi0iS.mjs +166 -0
  3. package/dist/chunks/_baseUniq-C977U_l-.mjs +682 -0
  4. package/dist/chunks/{arc-D-pL2Ftf.mjs → arc-Woh6y3jm.mjs} +2 -2
  5. package/dist/chunks/architecture-YZFGNWBL-aVO23UKm.mjs +3 -0
  6. package/dist/chunks/{architectureDiagram-Q4EWVU46-DS7mqjL2.mjs → architectureDiagram-Q4EWVU46-GTqLmLqg.mjs} +115 -115
  7. package/dist/chunks/{blockDiagram-DXYQGD6D-BTtcn4NG.mjs → blockDiagram-DXYQGD6D-CML01I1L.mjs} +681 -866
  8. package/dist/chunks/{blok-NcdNQ0I6.mjs → blok-B0k4z2h1.mjs} +673 -604
  9. package/dist/chunks/{c4Diagram-AHTNJAMY-Y4Dcwcoo.mjs → c4Diagram-AHTNJAMY-C29OuYjO.mjs} +239 -239
  10. package/dist/chunks/{channel-Cln-eWE0.mjs → channel-Zp_OyvEW.mjs} +1 -1
  11. package/dist/chunks/{chunk-2KRD3SAO-DkM7qh-k.mjs → chunk-2KRD3SAO-mVfUZfox.mjs} +1 -1
  12. package/dist/chunks/{chunk-336JU56O-B17AtzlK.mjs → chunk-336JU56O-mJNxs0cr.mjs} +18 -18
  13. package/dist/chunks/{chunk-426QAEUC-D6UAVUog.mjs → chunk-426QAEUC-TajZlyP-.mjs} +2 -2
  14. package/dist/chunks/{chunk-4BX2VUAB-CgIkjF7Z.mjs → chunk-4BX2VUAB-CsopMMb6.mjs} +1 -1
  15. package/dist/chunks/{chunk-4TB4RGXK-BUP4eON3.mjs → chunk-4TB4RGXK-DC963IrJ.mjs} +129 -129
  16. package/dist/chunks/{chunk-55IACEB6-zZ-IgaSt.mjs → chunk-55IACEB6-yyL3mncJ.mjs} +1 -1
  17. package/dist/chunks/{chunk-5FUZZQ4R-DsZnJYxM.mjs → chunk-5FUZZQ4R-Dr4NE8rh.mjs} +663 -663
  18. package/dist/chunks/chunk-5PVQY5BW-BP7ENjg7.mjs +1122 -0
  19. package/dist/chunks/{chunk-67CJDMHE-m0UKdcSH.mjs → chunk-67CJDMHE-Dbl-PjEf.mjs} +1 -1
  20. package/dist/chunks/{chunk-7N4EOEYR-DKNajFZd.mjs → chunk-7N4EOEYR-p-g3cKuX.mjs} +1 -1
  21. package/dist/chunks/{chunk-AA7GKIK3-BeLhNzKa.mjs → chunk-AA7GKIK3-Dt0Kr5Va.mjs} +1 -1
  22. package/dist/chunks/{chunk-BSJP7CBP-CJExmx8a.mjs → chunk-BSJP7CBP-DGU2WHwh.mjs} +1 -1
  23. package/dist/chunks/{chunk-CIAEETIT-CTikoJ19.mjs → chunk-CIAEETIT-BQ4crY5r.mjs} +1 -1
  24. package/dist/chunks/{chunk-EDXVE4YY-DjInnnwb.mjs → chunk-EDXVE4YY-B9_aGwkV.mjs} +2 -2
  25. package/dist/chunks/{chunk-ENJZ2VHE-CIl5FRDA.mjs → chunk-ENJZ2VHE-23pY8ft5.mjs} +243 -243
  26. package/dist/chunks/{chunk-FMBD7UC4-DjV0W7UE.mjs → chunk-FMBD7UC4-D_RQlBGX.mjs} +1 -1
  27. package/dist/chunks/{chunk-FOC6F5B3-LmHCCWYY.mjs → chunk-FOC6F5B3-CJfr-iwx.mjs} +1 -1
  28. package/dist/chunks/{chunk-ICPOFSXX-BHZIN46A.mjs → chunk-ICPOFSXX-BOvOTlG6.mjs} +2 -2
  29. package/dist/chunks/{chunk-K5T4RW27-BPZ6fFnW.mjs → chunk-K5T4RW27-CHSI0vpp.mjs} +572 -570
  30. package/dist/chunks/{chunk-KGLVRYIC-S1OQdW76.mjs → chunk-KGLVRYIC-ngXT4XVA.mjs} +1 -1
  31. package/dist/chunks/{chunk-LIHQZDEY-CjtyJlI6.mjs → chunk-LIHQZDEY-CnP7bym1.mjs} +1 -1
  32. package/dist/chunks/{chunk-ORNJ4GCN-CdO0hAge.mjs → chunk-ORNJ4GCN-BPaghT45.mjs} +1 -1
  33. package/dist/chunks/{chunk-OYMX7WX6-ApX8eV4o.mjs → chunk-OYMX7WX6-CKjTvqTg.mjs} +172 -172
  34. package/dist/chunks/{chunk-QZHKN3VN-BGFuA6-k.mjs → chunk-QZHKN3VN-uW1N2UWF.mjs} +1 -1
  35. package/dist/chunks/{chunk-U2HBQHQK-B88ZUOTL.mjs → chunk-U2HBQHQK-DiQOEtQH.mjs} +65 -65
  36. package/dist/chunks/{chunk-X2U36JSP-1VS5TyCr.mjs → chunk-X2U36JSP-Cznp5Jm-.mjs} +2 -2
  37. package/dist/chunks/{chunk-XPW4576I-BMupdrvo.mjs → chunk-XPW4576I-W5t_agZI.mjs} +1 -1
  38. package/dist/chunks/{chunk-YZCP3GAM-BQ7eEsm2.mjs → chunk-YZCP3GAM-BV02tG_z.mjs} +3 -3
  39. package/dist/chunks/{chunk-ZZ45TVLE-D1xks9zd.mjs → chunk-ZZ45TVLE-D28EyJ6R.mjs} +7 -7
  40. package/dist/chunks/classDiagram-6PBFFD2Q-DXsClapu.mjs +30 -0
  41. package/dist/chunks/classDiagram-v2-HSJHXN6E-B6TlQ_PM.mjs +30 -0
  42. package/dist/chunks/{clone-Ckjt1LtE.mjs → clone-CUNvBGto.mjs} +1 -1
  43. package/dist/chunks/{constants-DtfShkXT.mjs → constants-lOEJu8bC.mjs} +4 -2
  44. package/dist/chunks/{cose-bilkent-S5V4N54A-Bpcs2jA_.mjs → cose-bilkent-S5V4N54A-D-Xgf_Xn.mjs} +2 -2
  45. package/dist/chunks/{cpp-BdjvAny0.mjs → cpp-DaTV1RSp.mjs} +2 -2
  46. package/dist/chunks/{dagre-KV5264BT-DUD9ikgN.mjs → dagre-KV5264BT-BB3SAlfA.mjs} +15 -15
  47. package/dist/chunks/{dagre-CGNbYTKq.mjs → dagre-dysBn-m8.mjs} +499 -552
  48. package/dist/chunks/diagram-5BDNPKRD-B1410bPG.mjs +112 -0
  49. package/dist/chunks/{diagram-G4DWMVQ6-CuS0-h95.mjs → diagram-G4DWMVQ6-CdhBBETB.mjs} +82 -82
  50. package/dist/chunks/{diagram-MMDJMWI5-C-AEApYz.mjs → diagram-MMDJMWI5-B3HWfHe1.mjs} +48 -48
  51. package/dist/chunks/{diagram-TYMM5635-CiwAJVMq.mjs → diagram-TYMM5635-D0JzRYCN.mjs} +51 -51
  52. package/dist/chunks/{erDiagram-SMLLAGMA-DeH5yck2.mjs → erDiagram-SMLLAGMA-DfIG0QBk.mjs} +142 -142
  53. package/dist/chunks/{flowDiagram-DWJPFMVM-Cr6dwmQ5.mjs → flowDiagram-DWJPFMVM-BOL8JsQX.mjs} +176 -176
  54. package/dist/chunks/{ganttDiagram-T4ZO3ILL-K-divBg_.mjs → ganttDiagram-T4ZO3ILL-CiUr_YRw.mjs} +230 -230
  55. package/dist/chunks/gitGraph-7Q5UKJZL-B3aq166w.mjs +3 -0
  56. package/dist/chunks/{gitGraphDiagram-UUTBAWPF-UytPZv72.mjs → gitGraphDiagram-UUTBAWPF-CtNkTTWO.mjs} +218 -218
  57. package/dist/chunks/{graphlib-Cye9EPNq.mjs → graphlib-BXNPwKuI.mjs} +48 -46
  58. package/dist/chunks/{graphql-BSnqmqgO.mjs → graphql-DNumR9m-.mjs} +2 -2
  59. package/dist/chunks/{html-BLNeZvnp.mjs → html-CanPsi1Y.mjs} +2 -2
  60. package/dist/chunks/{i18next-loader-D32EUWLr.mjs → i18next-loader-CIXsptng.mjs} +2 -2
  61. package/dist/chunks/info-OMHHGYJF-SX91-Wub.mjs +3 -0
  62. package/dist/chunks/{infoDiagram-42DDH7IO-DuYnDbF3.mjs → infoDiagram-42DDH7IO-CD7nVBvi.mjs} +14 -14
  63. package/dist/chunks/isArrayLikeObject-DzUNFfIK.mjs +578 -0
  64. package/dist/chunks/isEmpty-D8B0aRsG.mjs +35 -0
  65. package/dist/chunks/{ishikawaDiagram-UXIWVN3A-CHc59dLn.mjs → ishikawaDiagram-UXIWVN3A-BOaC9qJs.mjs} +81 -81
  66. package/dist/chunks/{journeyDiagram-VCZTEJTY-CD25C4_n.mjs → journeyDiagram-VCZTEJTY-DKf55ZdJ.mjs} +6 -6
  67. package/dist/chunks/{kanban-definition-6JOO6SKY-CTCT6N_p.mjs → kanban-definition-6JOO6SKY-D2CrAXqB.mjs} +11 -11
  68. package/dist/chunks/{latex-24n3TcOR.mjs → latex-DY1HNB4U.mjs} +1 -1
  69. package/dist/chunks/{lightweight-i18n-DpkvRXEd.mjs → lightweight-i18n-DTYoSr_o.mjs} +2 -0
  70. package/dist/chunks/line-CuvDsrkE.mjs +34 -0
  71. package/dist/chunks/{linear-BRCpMvtr.mjs → linear-JRIqMpGQ.mjs} +3 -3
  72. package/dist/chunks/{lua-DV0fuZWx.mjs → lua-COOfzihE.mjs} +1 -1
  73. package/dist/chunks/{mermaid-parser.core-CA3DKkuk.mjs → mermaid-parser.core-BhpZC2lA.mjs} +10 -10
  74. package/dist/chunks/mermaid.core-C40gcVfv.mjs +977 -0
  75. package/dist/chunks/{messages-DtZ9U9g72.mjs → messages--G2XLc8E.mjs} +8 -5
  76. package/dist/{messages-CFUBJfnf.mjs → chunks/messages-3kHDtQLN.mjs} +8 -5
  77. package/dist/{messages-0lOPMv8u.mjs → chunks/messages-4Y8dL_1j2.mjs} +8 -5
  78. package/dist/{messages-DQ1icG7L.mjs → chunks/messages-9Nx7kteY2.mjs} +8 -5
  79. package/dist/{messages-aoO_TtoE2.mjs → chunks/messages-B29Wm2zT.mjs} +9 -6
  80. package/dist/chunks/{messages-oPV2oMxM.mjs → messages-B9mzGzZ_.mjs} +11 -8
  81. package/dist/{messages-Di3-WVzq.mjs → chunks/messages-BCfsOOlp.mjs} +8 -5
  82. package/dist/{messages-CA6J_QoC.mjs → chunks/messages-BJTwY1tq.mjs} +7 -4
  83. package/dist/chunks/{messages-Cxy_E2IS.mjs → messages-BK6AwU6C.mjs} +8 -5
  84. package/dist/chunks/{messages-DoPdy75l.mjs → messages-BPxMr5HC.mjs} +10 -7
  85. package/dist/chunks/{messages-Ci7UXRVI2.mjs → messages-BS9zk4mI2.mjs} +9 -6
  86. package/dist/chunks/{messages-BouFtpfO.mjs → messages-BSXBVdsp.mjs} +7 -4
  87. package/dist/{messages-DqDlcEPn.mjs → chunks/messages-BSyO1EWC.mjs} +9 -6
  88. package/dist/{messages-DzknMM7W.mjs → chunks/messages-BUQTXTew2.mjs} +8 -5
  89. package/dist/chunks/{messages-BJNFCDv42.mjs → messages-Bhn5V9FQ2.mjs} +8 -5
  90. package/dist/chunks/{messages-zWqsggJh.mjs → messages-Bi629xgG.mjs} +8 -5
  91. package/dist/{messages-CR4gHjd82.mjs → chunks/messages-BimpUMRx.mjs} +6 -3
  92. package/dist/{messages-BCMFYqKc2.mjs → chunks/messages-BkaUIuz-2.mjs} +8 -5
  93. package/dist/{messages-5wuR90qS.mjs → chunks/messages-BmC2yhsC2.mjs} +8 -5
  94. package/dist/chunks/{messages-HzH9_QH8.mjs → messages-Bo7Cbk_O.mjs} +8 -5
  95. package/dist/chunks/{messages-BcHZf9o-.mjs → messages-Bq7fo8X0.mjs} +16 -13
  96. package/dist/{messages-bh8BiOee2.mjs → chunks/messages-BsqBho4T.mjs} +9 -6
  97. package/dist/{messages-C-8qb9sf2.mjs → chunks/messages-C7E8C3-S.mjs} +8 -5
  98. package/dist/chunks/{messages-DRJxSTqs.mjs → messages-C9QhLDA2.mjs} +9 -6
  99. package/dist/chunks/{messages-DSbI0vJf.mjs → messages-C9UIaF6N.mjs} +8 -5
  100. package/dist/chunks/{messages-dpXwA3Sz.mjs → messages-CAX3qQi0.mjs} +8 -5
  101. package/dist/chunks/{messages-DpydMd36.mjs → messages-CEJtxBxU.mjs} +8 -5
  102. package/dist/chunks/{messages-DkP3Jf4F.mjs → messages-CF0SW1zy.mjs} +7 -4
  103. package/dist/{messages-B_UKuqrH.mjs → chunks/messages-CIre8L_r.mjs} +8 -5
  104. package/dist/{messages-DT7dwzEe.mjs → chunks/messages-CJ8IkF1P.mjs} +8 -5
  105. package/dist/{messages-BORkMoil2.mjs → chunks/messages-CKP6aUXN2.mjs} +7 -4
  106. package/dist/chunks/{messages-DY8zPIZW.mjs → messages-CMMq-u7e.mjs} +9 -6
  107. package/dist/chunks/{messages-CTdSIOAc.mjs → messages-CR5irc8q.mjs} +7 -4
  108. package/dist/chunks/{messages-ZhHLC6dk.mjs → messages-CRH0RWBs.mjs} +8 -5
  109. package/dist/chunks/{messages-C7sBaZOO2.mjs → messages-CWm_2RvD2.mjs} +8 -5
  110. package/dist/{messages-CLUBh7O_.mjs → chunks/messages-CY76MvbX2.mjs} +8 -5
  111. package/dist/{messages-PyOr_YgV.mjs → chunks/messages-CpLq4ZZg.mjs} +6 -3
  112. package/dist/chunks/{messages-CGLTjtRv2.mjs → messages-CrpOkt8c2.mjs} +8 -5
  113. package/dist/{messages-DwiykEgr2.mjs → chunks/messages-D3fu2FHB2.mjs} +8 -5
  114. package/dist/{messages-hya8YLMj.mjs → chunks/messages-D6_I0L06.mjs} +8 -5
  115. package/dist/chunks/{messages-oXBbHW9A.mjs → messages-DHzT8CZv.mjs} +8 -5
  116. package/dist/chunks/{messages-ChayV9WY2.mjs → messages-DIVQmVS92.mjs} +8 -5
  117. package/dist/{messages-BrYeJsSE2.mjs → chunks/messages-DJYT0upW.mjs} +9 -6
  118. package/dist/chunks/{messages-THR8q8bJ.mjs → messages-DPcc6xp-.mjs} +16 -13
  119. package/dist/chunks/{messages-CDSyoUft.mjs → messages-Dass0QsQ.mjs} +6 -3
  120. package/dist/chunks/{messages-DVvrZRyZ.mjs → messages-DcUYfD6m.mjs} +8 -5
  121. package/dist/chunks/{messages-BNy4e7Xl.mjs → messages-DfLcy0CY.mjs} +8 -5
  122. package/dist/chunks/{messages-H6vLy8wJ.mjs → messages-DhoZXmg_.mjs} +8 -5
  123. package/dist/{messages-ZHgPRUj02.mjs → chunks/messages-DiQkvwE32.mjs} +8 -5
  124. package/dist/{messages-BKXjO3NH.mjs → chunks/messages-DmvWmURo.mjs} +8 -5
  125. package/dist/chunks/{messages-DjSuq0-y2.mjs → messages-Dobxrshu2.mjs} +8 -5
  126. package/dist/{messages-DPFuzIdF2.mjs → chunks/messages-DsMIxm6I2.mjs} +8 -5
  127. package/dist/{messages-D6RYu9JW2.mjs → chunks/messages-DtssWM8x2.mjs} +8 -5
  128. package/dist/{messages-gZEhkRrR2.mjs → chunks/messages-E1tsNNG5.mjs} +8 -5
  129. package/dist/chunks/{messages-D9uWAWjW.mjs → messages-PFfYbqlm.mjs} +9 -6
  130. package/dist/{messages-DCdP2ujL.mjs → chunks/messages-bIzBNzdr2.mjs} +6 -3
  131. package/dist/{messages-WsUHzXMu2.mjs → chunks/messages-dGYum7sj2.mjs} +8 -5
  132. package/dist/chunks/{messages-C-EBhOHE.mjs → messages-kKXlI5xZ.mjs} +8 -5
  133. package/dist/chunks/{messages-Cfbmwdep2.mjs → messages-mo5OrbVj2.mjs} +8 -5
  134. package/dist/{messages-9L4qqCKh2.mjs → chunks/messages-nAdoEqRi.mjs} +8 -5
  135. package/dist/chunks/{messages-Bop7vrhU.mjs → messages-rNLuCrAb.mjs} +8 -5
  136. package/dist/chunks/{messages-yGedmr61.mjs → messages-v26RM5PC.mjs} +8 -5
  137. package/dist/{messages-Cd5CW5Tt.mjs → chunks/messages-x0kzc2oy.mjs} +9 -6
  138. package/dist/{messages-DB4UKN8D.mjs → chunks/messages-x6y6csd52.mjs} +6 -3
  139. package/dist/chunks/{messages-Br6bE1FD2.mjs → messages-x_eMclsl2.mjs} +9 -6
  140. package/dist/{messages-CVMngZNA.mjs → chunks/messages-z5pham9o.mjs} +10 -7
  141. package/dist/chunks/{messages-D9syZVGi2.mjs → messages-zcqQ8x232.mjs} +6 -3
  142. package/dist/chunks/{micromark-extension-math-BbkUb36G.mjs → micromark-extension-math-D-s54WWf.mjs} +1 -1
  143. package/dist/chunks/{mindmap-definition-QFDTVHPH-hNnyBkEP.mjs → mindmap-definition-QFDTVHPH-C-0fwUUS.mjs} +13 -13
  144. package/dist/chunks/{ordinal-B-kolV-i.mjs → ordinal-fyJMP-lj.mjs} +1 -1
  145. package/dist/chunks/packet-4T2RLAQJ-suhU85JN.mjs +3 -0
  146. package/dist/chunks/{php-DmXKyPwJ.mjs → php-DA-SOiqC.mjs} +6 -6
  147. package/dist/chunks/pie-ZZUOXDRM-DF5e16CP.mjs +3 -0
  148. package/dist/chunks/pieDiagram-DEJITSTG-BPyqheXv.mjs +179 -0
  149. package/dist/chunks/{quadrantDiagram-34T5L4WZ-CQ5fGYI5.mjs → quadrantDiagram-34T5L4WZ-kOZ1zIXB.mjs} +4 -4
  150. package/dist/chunks/radar-PYXPWWZC-DgzodpRv.mjs +3 -0
  151. package/dist/chunks/{requirementDiagram-MS252O5E-DjWKB42c.mjs → requirementDiagram-MS252O5E-C8Zkq6Lq.mjs} +64 -64
  152. package/dist/chunks/{ruby-DdOo03Kg.mjs → ruby-HDUjp8gK.mjs} +11 -11
  153. package/dist/chunks/{sankeyDiagram-XADWPNL6-BIN2evSB.mjs → sankeyDiagram-XADWPNL6-B0FhkAL9.mjs} +3 -3
  154. package/dist/chunks/{sequenceDiagram-FGHM5R23-CQz2lMoS.mjs → sequenceDiagram-FGHM5R23-Dv2H5Lbc.mjs} +447 -447
  155. package/dist/chunks/stateDiagram-FHFEXIEX-D1vcO7H_.mjs +218 -0
  156. package/dist/chunks/stateDiagram-v2-QKLJ7IA2-AoHzFiaI.mjs +28 -0
  157. package/dist/chunks/{timeline-definition-GMOUNBTQ-CzvQ7Lav.mjs → timeline-definition-GMOUNBTQ-DJmJ0TPa.mjs} +195 -195
  158. package/dist/chunks/{tools-DMSi-3RW.mjs → tools-FmtWXVgt.mjs} +109 -142
  159. package/dist/chunks/treeView-SZITEDCU-C1mc9PWf.mjs +3 -0
  160. package/dist/chunks/treemap-W4RFUUIX-ClV9Slyp.mjs +3 -0
  161. package/dist/chunks/{vennDiagram-DHZGUBPP-B0DmLQqe.mjs → vennDiagram-DHZGUBPP-Dx1rMP24.mjs} +76 -76
  162. package/dist/chunks/wardley-RL74JXVD-Dj7t7jHR.mjs +3 -0
  163. package/dist/chunks/{wardleyDiagram-NUSXRM2D-CzoKesUw.mjs → wardleyDiagram-NUSXRM2D-Dnm6lvMn.mjs} +15 -15
  164. package/dist/chunks/{xml-g8kXXALs.mjs → xml-Dq1lpp8G.mjs} +1 -1
  165. package/dist/chunks/{xychartDiagram-5P7HB3ND-CixwR8r2.mjs → xychartDiagram-5P7HB3ND-C9wFc2e9.mjs} +120 -120
  166. package/dist/full.mjs +3 -3
  167. package/dist/locales.mjs +69 -67
  168. package/dist/markdown.mjs +1 -1
  169. package/dist/{chunks/messages-CPFB2_m-2.mjs → messages--zgIPYtb.mjs} +6 -3
  170. package/dist/{messages-D8dO6OMN.mjs → messages-4jULpVvw.mjs} +16 -13
  171. package/dist/{chunks/messages-CNaaqQVz.mjs → messages-AbwSlRf_.mjs} +10 -7
  172. package/dist/{chunks/messages-AD17iDBx.mjs → messages-B-dl7Pwb2.mjs} +9 -6
  173. package/dist/{chunks/messages-CGFlOwst.mjs → messages-B3rCRhb1.mjs} +8 -5
  174. package/dist/{chunks/messages-CCEgR9GN2.mjs → messages-B73L8nKc2.mjs} +8 -5
  175. package/dist/{chunks/messages-wYQksm10.mjs → messages-BAjsD2Vm2.mjs} +8 -5
  176. package/dist/{messages-C34dTwF72.mjs → messages-BBodSb5B2.mjs} +8 -5
  177. package/dist/{chunks/messages-O6FOfUgF.mjs → messages-BTpn6H9x2.mjs} +6 -3
  178. package/dist/{chunks/messages-Cql2ozf_2.mjs → messages-BWb0GjTj2.mjs} +8 -5
  179. package/dist/{messages-ELvF3qMl2.mjs → messages-BbCgnri12.mjs} +8 -5
  180. package/dist/{chunks/messages-OSP4Hj5o.mjs → messages-Bfon_Y3q.mjs} +9 -6
  181. package/dist/{chunks/messages-fbL5y58u2.mjs → messages-BhOtow9J2.mjs} +8 -5
  182. package/dist/{messages-6eX0fWGR2.mjs → messages-BoB7m0uu2.mjs} +9 -6
  183. package/dist/{chunks/messages-C3X7dv3f.mjs → messages-BsOZPjeg.mjs} +8 -5
  184. package/dist/{chunks/messages-vDgsEqQW2.mjs → messages-BuzKUYPV.mjs} +8 -5
  185. package/dist/{chunks/messages-BjyYZeBm2.mjs → messages-BzOKMdMQ.mjs} +6 -3
  186. package/dist/{messages-CxZarWTm2.mjs → messages-C2H3PeQW2.mjs} +8 -5
  187. package/dist/{messages-D0eT_eWA.mjs → messages-C5KNzSTk.mjs} +8 -5
  188. package/dist/{messages-CNGwdIEz.mjs → messages-CIDYjE6l.mjs} +8 -5
  189. package/dist/{messages-BPw_x-6H.mjs → messages-CJmyF5ye.mjs} +7 -4
  190. package/dist/{messages-VrQw3tQ62.mjs → messages-CTwiYb2a2.mjs} +6 -3
  191. package/dist/{messages-BM2kx9Td.mjs → messages-CUHoJaDO.mjs} +8 -5
  192. package/dist/{chunks/messages-RiqdVwuN2.mjs → messages-CVeuqUjQ2.mjs} +8 -5
  193. package/dist/{messages-KVerxvZC.mjs → messages-CW75b4sz.mjs} +8 -5
  194. package/dist/{messages-DA4T9WBe.mjs → messages-CXd7YeWV.mjs} +8 -5
  195. package/dist/{chunks/messages-CXVWb9js.mjs → messages-CjlYkunD.mjs} +8 -5
  196. package/dist/{chunks/messages-B8hICx3L.mjs → messages-CrGx64yd.mjs} +9 -6
  197. package/dist/{chunks/messages-C7Pjof0d2.mjs → messages-Ct0jbgHd.mjs} +8 -5
  198. package/dist/{messages-C67YUZ9-.mjs → messages-CtKrCYD1.mjs} +8 -5
  199. package/dist/{chunks/messages-B03yUEra2.mjs → messages-Cu2eLjfJ.mjs} +8 -5
  200. package/dist/{messages-BwttyHDI2.mjs → messages-CvwQ-fK_2.mjs} +8 -5
  201. package/dist/{chunks/messages-zQOpKjl3.mjs → messages-Cy6UYN9b.mjs} +6 -3
  202. package/dist/{messages-CrjQ2Op0.mjs → messages-D01vnfA9.mjs} +8 -5
  203. package/dist/{messages-C6yKu_PJ.mjs → messages-D0BAV45W.mjs} +8 -5
  204. package/dist/{messages-DxEiqa-B.mjs → messages-D5LGpdga.mjs} +9 -6
  205. package/dist/{messages-Dl0bfeA-.mjs → messages-DATK4ftv.mjs} +9 -6
  206. package/dist/{chunks/messages-D_kZN9rB.mjs → messages-DEl77Urv2.mjs} +9 -6
  207. package/dist/{messages-BRY51SEw2.mjs → messages-DHNjM2nv2.mjs} +6 -3
  208. package/dist/{messages-OOiDDmVw.mjs → messages-DMW8b_sO.mjs} +8 -5
  209. package/dist/{messages-tb1FD_ge.mjs → messages-DNmgANKr.mjs} +7 -4
  210. package/dist/{messages-Do3mHd9U.mjs → messages-DQaa3cEM.mjs} +9 -6
  211. package/dist/{chunks/messages-VtfKWZ2S.mjs → messages-DSlD4bV9.mjs} +8 -5
  212. package/dist/{messages-Dxr1BBvo.mjs → messages-DTzbkXFt.mjs} +8 -5
  213. package/dist/{chunks/messages-SP659Sal2.mjs → messages-DbZihxtV.mjs} +8 -5
  214. package/dist/{messages-Cv1PSaNk.mjs → messages-DeE8fyKQ.mjs} +8 -5
  215. package/dist/{messages-B4zPxKl62.mjs → messages-Dg-TpO2S2.mjs} +8 -5
  216. package/dist/{messages-CLZoy5fQ.mjs → messages-DgP82LzF.mjs} +7 -4
  217. package/dist/{chunks/messages-C85zv_7x.mjs → messages-Dh3Vt7WC.mjs} +7 -4
  218. package/dist/{chunks/messages-bFEdH3lv.mjs → messages-DiVVyZD22.mjs} +9 -6
  219. package/dist/{messages-BSNsrZVN.mjs → messages-DpRnGjoe.mjs} +10 -7
  220. package/dist/{messages-Dx5n6MLQ2.mjs → messages-DqZmrFaa2.mjs} +8 -5
  221. package/dist/{messages-D8U5D391.mjs → messages-Dra9Fz5Q.mjs} +11 -8
  222. package/dist/{chunks/messages-CpXvyGWv2.mjs → messages-DuPBRgEF2.mjs} +7 -4
  223. package/dist/{messages-JVJdC0Er2.mjs → messages-DuxEyAY-2.mjs} +9 -6
  224. package/dist/{chunks/messages-BGmvvtg_.mjs → messages-FmJD6lHR2.mjs} +8 -5
  225. package/dist/{messages-BLW2GX7J2.mjs → messages-ONielGl92.mjs} +8 -5
  226. package/dist/{chunks/messages-B2dU00Z3.mjs → messages-RzgUqCGb2.mjs} +8 -5
  227. package/dist/{chunks/messages-YbckahVx2.mjs → messages-U22AKGKs.mjs} +8 -5
  228. package/dist/{chunks/messages-CGPxUESo.mjs → messages-XufeeRfO.mjs} +8 -5
  229. package/dist/{messages-DUYxMxrQ2.mjs → messages-fprUm7SO2.mjs} +8 -5
  230. package/dist/{chunks/messages-BCifzMVO2.mjs → messages-gFNdz3Tn2.mjs} +8 -5
  231. package/dist/{messages-DfqM_XvD.mjs → messages-h_n5GBm6.mjs} +16 -13
  232. package/dist/{chunks/messages-VlEyFUxF2.mjs → messages-oOogIpsL2.mjs} +8 -5
  233. package/dist/{messages-D_V0kHD7.mjs → messages-otwg3KcK.mjs} +8 -5
  234. package/dist/{messages-BLfK27kX.mjs → messages-rDDoBMWb.mjs} +8 -5
  235. package/dist/{chunks/messages-BBe45sPH.mjs → messages-trQPxZIu.mjs} +8 -5
  236. package/dist/react.mjs +2 -2
  237. package/dist/tools.mjs +2 -2
  238. package/dist/vendor.LICENSE.txt +64 -64
  239. package/package.json +3 -2
  240. package/src/blok.ts +55 -0
  241. package/src/components/block/index.ts +2 -2
  242. package/src/components/block-tunes/block-tune-delete.ts +1 -0
  243. package/src/components/i18n/locales/am/messages.json +8 -5
  244. package/src/components/i18n/locales/ar/messages.json +8 -5
  245. package/src/components/i18n/locales/az/messages.json +8 -5
  246. package/src/components/i18n/locales/bg/messages.json +7 -4
  247. package/src/components/i18n/locales/bn/messages.json +8 -5
  248. package/src/components/i18n/locales/bs/messages.json +10 -7
  249. package/src/components/i18n/locales/cs/messages.json +9 -6
  250. package/src/components/i18n/locales/da/messages.json +9 -6
  251. package/src/components/i18n/locales/de/messages.json +9 -6
  252. package/src/components/i18n/locales/dv/messages.json +8 -5
  253. package/src/components/i18n/locales/el/messages.json +8 -5
  254. package/src/components/i18n/locales/en/messages.json +2 -0
  255. package/src/components/i18n/locales/es/messages.json +9 -6
  256. package/src/components/i18n/locales/et/messages.json +7 -4
  257. package/src/components/i18n/locales/fa/messages.json +8 -5
  258. package/src/components/i18n/locales/fi/messages.json +8 -5
  259. package/src/components/i18n/locales/fil/messages.json +16 -13
  260. package/src/components/i18n/locales/fr/messages.json +8 -5
  261. package/src/components/i18n/locales/gu/messages.json +8 -5
  262. package/src/components/i18n/locales/he/messages.json +8 -5
  263. package/src/components/i18n/locales/hi/messages.json +8 -5
  264. package/src/components/i18n/locales/hr/messages.json +10 -7
  265. package/src/components/i18n/locales/hu/messages.json +9 -6
  266. package/src/components/i18n/locales/hy/messages.json +16 -13
  267. package/src/components/i18n/locales/id/messages.json +7 -4
  268. package/src/components/i18n/locales/it/messages.json +11 -8
  269. package/src/components/i18n/locales/ja/messages.json +8 -5
  270. package/src/components/i18n/locales/ka/messages.json +8 -5
  271. package/src/components/i18n/locales/km/messages.json +6 -3
  272. package/src/components/i18n/locales/kn/messages.json +8 -5
  273. package/src/components/i18n/locales/ko/messages.json +8 -5
  274. package/src/components/i18n/locales/ku/messages.json +8 -5
  275. package/src/components/i18n/locales/lo/messages.json +6 -3
  276. package/src/components/i18n/locales/lt/messages.json +8 -5
  277. package/src/components/i18n/locales/lv/messages.json +8 -5
  278. package/src/components/i18n/locales/mk/messages.json +8 -5
  279. package/src/components/i18n/locales/ml/messages.json +8 -5
  280. package/src/components/i18n/locales/mn/messages.json +8 -5
  281. package/src/components/i18n/locales/mr/messages.json +8 -5
  282. package/src/components/i18n/locales/ms/messages.json +6 -3
  283. package/src/components/i18n/locales/my/messages.json +8 -5
  284. package/src/components/i18n/locales/ne/messages.json +8 -5
  285. package/src/components/i18n/locales/nl/messages.json +8 -5
  286. package/src/components/i18n/locales/no/messages.json +9 -6
  287. package/src/components/i18n/locales/pa/messages.json +8 -5
  288. package/src/components/i18n/locales/pl/messages.json +9 -6
  289. package/src/components/i18n/locales/ps/messages.json +8 -5
  290. package/src/components/i18n/locales/pt/messages.json +8 -5
  291. package/src/components/i18n/locales/ro/messages.json +8 -5
  292. package/src/components/i18n/locales/ru/messages.json +7 -4
  293. package/src/components/i18n/locales/sd/messages.json +8 -5
  294. package/src/components/i18n/locales/si/messages.json +8 -5
  295. package/src/components/i18n/locales/sk/messages.json +9 -6
  296. package/src/components/i18n/locales/sl/messages.json +9 -6
  297. package/src/components/i18n/locales/sq/messages.json +9 -6
  298. package/src/components/i18n/locales/sr/messages.json +8 -5
  299. package/src/components/i18n/locales/sv/messages.json +8 -5
  300. package/src/components/i18n/locales/sw/messages.json +6 -3
  301. package/src/components/i18n/locales/ta/messages.json +8 -5
  302. package/src/components/i18n/locales/te/messages.json +8 -5
  303. package/src/components/i18n/locales/th/messages.json +6 -3
  304. package/src/components/i18n/locales/tr/messages.json +8 -5
  305. package/src/components/i18n/locales/ug/messages.json +8 -5
  306. package/src/components/i18n/locales/uk/messages.json +7 -4
  307. package/src/components/i18n/locales/ur/messages.json +8 -5
  308. package/src/components/i18n/locales/vi/messages.json +6 -3
  309. package/src/components/i18n/locales/yi/messages.json +8 -5
  310. package/src/components/i18n/locales/zh/messages.json +8 -5
  311. package/src/components/inline-tools/inline-tool-code.ts +0 -19
  312. package/src/components/inline-tools/inline-tool-italic.ts +3 -20
  313. package/src/components/inline-tools/inline-tool-strikethrough.ts +0 -19
  314. package/src/components/inline-tools/inline-tool-underline.ts +0 -19
  315. package/src/components/inline-tools/services/bold-normalization-pass.ts +1 -29
  316. package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +11 -5
  317. package/src/components/modules/blockEvents/composers/markdownShortcuts.ts +105 -2
  318. package/src/components/modules/blockEvents/constants.ts +24 -0
  319. package/src/components/modules/blockManager/blockManager.ts +1 -1
  320. package/src/components/modules/blockManager/types.ts +1 -1
  321. package/src/components/modules/toolbar/blockSettings.ts +89 -11
  322. package/src/components/modules/ui.ts +1 -0
  323. package/src/components/modules/uiControllers/controllers/keyboard.ts +55 -5
  324. package/src/components/modules/yjs/document-store.ts +1 -1
  325. package/src/components/modules/yjs/index.ts +1 -1
  326. package/src/components/utils/popover/popover-abstract.ts +9 -0
  327. package/src/styles/main.css +3 -0
  328. package/src/tools/code/index.ts +1 -0
  329. package/src/tools/database/database-view.ts +269 -0
  330. package/src/tools/database/types.ts +16 -0
  331. package/src/tools/quote/index.ts +1 -0
  332. package/types/configs/blok-config.d.ts +13 -3
  333. package/types/configs/index.d.ts +1 -0
  334. package/types/configs/user-info.d.ts +14 -0
  335. package/types/data-formats/output-data.d.ts +2 -2
  336. package/types/index.d.ts +1 -0
  337. package/dist/chunks/_basePickBy-DISiGhsr.mjs +0 -410
  338. package/dist/chunks/_baseUniq-gAuHRtRF.mjs +0 -1045
  339. package/dist/chunks/_getTag-Aj56Wgor.mjs +0 -26
  340. package/dist/chunks/architecture-YZFGNWBL-CuqTb_ae.mjs +0 -3
  341. package/dist/chunks/chunk-5PVQY5BW-CORl9dnu.mjs +0 -1692
  342. package/dist/chunks/classDiagram-6PBFFD2Q-C59BZJxp.mjs +0 -30
  343. package/dist/chunks/classDiagram-v2-HSJHXN6E-7a0qeMsE.mjs +0 -30
  344. package/dist/chunks/diagram-5BDNPKRD-CZGfTYEe.mjs +0 -112
  345. package/dist/chunks/gitGraph-7Q5UKJZL-Dl-vQzrq.mjs +0 -3
  346. package/dist/chunks/info-OMHHGYJF-BOejJvJR.mjs +0 -3
  347. package/dist/chunks/line-Dct5pMmw.mjs +0 -34
  348. package/dist/chunks/mermaid.core-CA8nc1sZ.mjs +0 -989
  349. package/dist/chunks/packet-4T2RLAQJ-B5ZMgwzZ.mjs +0 -3
  350. package/dist/chunks/pie-ZZUOXDRM-B9l6y0XJ.mjs +0 -3
  351. package/dist/chunks/pieDiagram-DEJITSTG-Gw-fsc6U.mjs +0 -179
  352. package/dist/chunks/radar-PYXPWWZC-D5kYmUaB.mjs +0 -3
  353. package/dist/chunks/stateDiagram-FHFEXIEX-BIBFsF65.mjs +0 -218
  354. package/dist/chunks/stateDiagram-v2-QKLJ7IA2-BZUmAVw7.mjs +0 -28
  355. package/dist/chunks/treeView-SZITEDCU-BNtnNxpI.mjs +0 -3
  356. package/dist/chunks/treemap-W4RFUUIX-DYENULz2.mjs +0 -3
  357. package/dist/chunks/wardley-RL74JXVD-ByNHVBTb.mjs +0 -3
  358. /package/dist/chunks/{am-BxlkYGsI.mjs → am-Bbd7cTHS.mjs} +0 -0
  359. /package/dist/chunks/{ar-9vlpr9V8.mjs → ar-Bo71sCQE.mjs} +0 -0
  360. /package/dist/chunks/{array-BsrkCVSZ.mjs → array-DbiMs_0t.mjs} +0 -0
  361. /package/dist/chunks/{az-ON63W_FP.mjs → az-BnNrO_xK.mjs} +0 -0
  362. /package/dist/chunks/{bg-CtXWTP5w.mjs → bg-CMd2n-OG.mjs} +0 -0
  363. /package/dist/chunks/{bn-BERvhXM4.mjs → bn-B3lorfXA.mjs} +0 -0
  364. /package/dist/chunks/{bs-CBg8NVPG.mjs → bs-_zM8QBsA.mjs} +0 -0
  365. /package/dist/chunks/{c-C6JXJf5K.mjs → c-DmKJe6GM.mjs} +0 -0
  366. /package/dist/chunks/{core-Bm6DWt7D.mjs → core-C942GvJO.mjs} +0 -0
  367. /package/dist/chunks/{cs-DeQddxS7.mjs → cs-nodpmLBf.mjs} +0 -0
  368. /package/dist/chunks/{csharp-YHxeHpeH.mjs → csharp-Drv96dbi.mjs} +0 -0
  369. /package/dist/chunks/{css-DdLevFaX.mjs → css-82tNAoU6.mjs} +0 -0
  370. /package/dist/chunks/{cytoscape.esm-BvD8wo00.mjs → cytoscape.esm-DSb9a7HE.mjs} +0 -0
  371. /package/dist/chunks/{da-DyTo-ec_.mjs → da-DwzgQcXQ.mjs} +0 -0
  372. /package/dist/chunks/{dart-DrPWqfcC.mjs → dart-DE9j8McI.mjs} +0 -0
  373. /package/dist/chunks/{de-Cu7545m1.mjs → de-BvWPiNt6.mjs} +0 -0
  374. /package/dist/chunks/{defaultLocale-ChuSeAxU.mjs → defaultLocale-yTyMJ3IT.mjs} +0 -0
  375. /package/dist/chunks/{dist-Ctq-pyfb.mjs → dist-X14EnMrO.mjs} +0 -0
  376. /package/dist/chunks/{dockerfile-C68ALcaN.mjs → dockerfile-D9DFksUy.mjs} +0 -0
  377. /package/dist/chunks/{el-oiubLRBq.mjs → el-B_D7wUrZ.mjs} +0 -0
  378. /package/dist/chunks/{engine-javascript-CJpnSvzf.mjs → engine-javascript-Dd6ViPCH.mjs} +0 -0
  379. /package/dist/chunks/{es-DZUC6Klv.mjs → es-Bn_ZFyW9.mjs} +0 -0
  380. /package/dist/chunks/{et-CDeklAog.mjs → et-CUcULjoh.mjs} +0 -0
  381. /package/dist/chunks/{fa-Cafp7_Li.mjs → fa-BRhCTsOy.mjs} +0 -0
  382. /package/dist/chunks/{fi-BD_V_aVW.mjs → fi-BEvyU9n6.mjs} +0 -0
  383. /package/dist/chunks/{fil-Crsfbtx4.mjs → fil-Dlp1_W2B.mjs} +0 -0
  384. /package/dist/chunks/{fr-BGGc04Zv.mjs → fr-DJBeOAx1.mjs} +0 -0
  385. /package/dist/chunks/{go-Fm5N96DN.mjs → go-jyWjtO8q.mjs} +0 -0
  386. /package/dist/chunks/{gu-Vg_BgCTp.mjs → gu-0hWvx16l.mjs} +0 -0
  387. /package/dist/chunks/{he-DTY9chlZ.mjs → he-CYe88qXp.mjs} +0 -0
  388. /package/dist/chunks/{hi-DChMXk0x.mjs → hi-DuLkkPWn.mjs} +0 -0
  389. /package/dist/chunks/{hr-BWVgNU8k.mjs → hr-BwCB1IMW.mjs} +0 -0
  390. /package/dist/chunks/{hu-B37awHXA.mjs → hu-C2dLyTeX.mjs} +0 -0
  391. /package/dist/chunks/{hy-DGC_GDHh.mjs → hy-DXKoDpv9.mjs} +0 -0
  392. /package/dist/chunks/{i18next-CXx5niYF.mjs → i18next-CLUkHqmV.mjs} +0 -0
  393. /package/dist/chunks/{id-V7cw6La2.mjs → id-D4chLuW_.mjs} +0 -0
  394. /package/dist/chunks/{init-C6T-mugb.mjs → init-BlLeEogJ.mjs} +0 -0
  395. /package/dist/chunks/{it-DrTGP8Rn.mjs → it-Hto3G26t.mjs} +0 -0
  396. /package/dist/chunks/{ja-DS4pbJEG.mjs → ja-UxHm_PPZ.mjs} +0 -0
  397. /package/dist/chunks/{java-83DWBpzu.mjs → java-Dhv78FEb.mjs} +0 -0
  398. /package/dist/chunks/{javascript-CBgeF1Xx.mjs → javascript-DilE9EuZ.mjs} +0 -0
  399. /package/dist/chunks/{json-BI17y-1H.mjs → json-LUtHrtDA.mjs} +0 -0
  400. /package/dist/chunks/{ka-BueyosRh.mjs → ka-BnjXwPUq.mjs} +0 -0
  401. /package/dist/chunks/{katex-CmTPfM0f.mjs → katex-B8jUB5Cv.mjs} +0 -0
  402. /package/dist/chunks/{km-B0K891yW.mjs → km-exgzZBIE.mjs} +0 -0
  403. /package/dist/chunks/{kn-BQ__skg8.mjs → kn-DjjUg8aO.mjs} +0 -0
  404. /package/dist/chunks/{ko-BuPxi_7e.mjs → ko-Cu0YUSV6.mjs} +0 -0
  405. /package/dist/chunks/{kotlin-DjnvsrfO.mjs → kotlin-DFLPXbOQ.mjs} +0 -0
  406. /package/dist/chunks/{ku-nQjwPRw2.mjs → ku-D-IxJ0fx.mjs} +0 -0
  407. /package/dist/chunks/{lo-K5NVFoq1.mjs → lo-BcwjJBcv.mjs} +0 -0
  408. /package/dist/chunks/{lt-D3xD6Eb2.mjs → lt-Bt05MFPC.mjs} +0 -0
  409. /package/dist/chunks/{lv-DH13mzZj.mjs → lv-B01TmEFW.mjs} +0 -0
  410. /package/dist/chunks/{markdown-BqQYT45f.mjs → markdown-C6pnqcPd.mjs} +0 -0
  411. /package/dist/chunks/{mdast-util-math-BlK2Zu-1.mjs → mdast-util-math-D56mMxhB.mjs} +0 -0
  412. /package/dist/chunks/{mermaid-vF0cEnZ0.mjs → mermaid-BKA834jS.mjs} +0 -0
  413. /package/dist/chunks/{mk-Bb48BcDA.mjs → mk-DlZNyDhn.mjs} +0 -0
  414. /package/dist/chunks/{ml-BHPEj1kD.mjs → ml-CizMIOxl.mjs} +0 -0
  415. /package/dist/chunks/{mn-BNGzpdI6.mjs → mn-B_pDvxok.mjs} +0 -0
  416. /package/dist/chunks/{mr-D5PgU-cH.mjs → mr-D8D_7YmW.mjs} +0 -0
  417. /package/dist/chunks/{ms-DPkxqKz5.mjs → ms-CM93I8ec.mjs} +0 -0
  418. /package/dist/chunks/{my-DZGcyfxy.mjs → my-BGnGdDAV.mjs} +0 -0
  419. /package/dist/chunks/{ne-BU_Wh4Wv.mjs → ne-C6ZmmqhH.mjs} +0 -0
  420. /package/dist/chunks/{nl-DtAPk1mK.mjs → nl-UGFOU80W.mjs} +0 -0
  421. /package/dist/chunks/{no-CdW3n3BY.mjs → no-as-DKhC4.mjs} +0 -0
  422. /package/dist/chunks/{notifier-CuvTt9pe.mjs → notifier-PpnFhM0m.mjs} +0 -0
  423. /package/dist/chunks/{one-light-DmNO_Y4X.mjs → one-light-Di_o5Kb7.mjs} +0 -0
  424. /package/dist/chunks/{pa-BacCHz87.mjs → pa-DiOAveAI.mjs} +0 -0
  425. /package/dist/chunks/{path-rIMjg_tH.mjs → path-7pA19U_d.mjs} +0 -0
  426. /package/dist/chunks/{pl-8zBJbmhZ.mjs → pl-DXk8ye3B.mjs} +0 -0
  427. /package/dist/chunks/{ps-c6nGXD-W.mjs → ps-CuxilZ3F.mjs} +0 -0
  428. /package/dist/chunks/{pt-B5yR8Qhr.mjs → pt-DsT6E77q.mjs} +0 -0
  429. /package/dist/chunks/{python-DfwfY9t5.mjs → python-DYiHKGPV.mjs} +0 -0
  430. /package/dist/chunks/{r-BD2D7qEW.mjs → r-BZ4pC-Uz.mjs} +0 -0
  431. /package/dist/chunks/{ro-Nscylsqb.mjs → ro-CcAQOL-B.mjs} +0 -0
  432. /package/dist/chunks/{rough.esm-cmMIcj7N.mjs → rough.esm-BPA_YwbP.mjs} +0 -0
  433. /package/dist/chunks/{ru-DxERQkVJ.mjs → ru-hD41D0Fd.mjs} +0 -0
  434. /package/dist/chunks/{rust-DEDueB5R.mjs → rust-Db_HEGL5.mjs} +0 -0
  435. /package/dist/chunks/{scala-CsjqvxE4.mjs → scala-B1kK21mu.mjs} +0 -0
  436. /package/dist/chunks/{sd-5z-QY3q9.mjs → sd-Biu7f00A.mjs} +0 -0
  437. /package/dist/chunks/{shellscript-Bh5zEpnQ.mjs → shellscript-BBh7AxMC.mjs} +0 -0
  438. /package/dist/chunks/{si-DTL0mzrx.mjs → si-Bhto6prC.mjs} +0 -0
  439. /package/dist/chunks/{sk-DrGczTvY.mjs → sk-Ce7J4sHX.mjs} +0 -0
  440. /package/dist/chunks/{sl-D8nJjig4.mjs → sl-Fz7idR9w.mjs} +0 -0
  441. /package/dist/chunks/{sq-C74Hm3YL.mjs → sq-CnLb3bAQ.mjs} +0 -0
  442. /package/dist/chunks/{sql-D9CrOi1i.mjs → sql-DHkazX4B.mjs} +0 -0
  443. /package/dist/chunks/{sr-DAwB05Gj.mjs → sr-Bc5JbF-b.mjs} +0 -0
  444. /package/dist/chunks/{src-DVJl6f6s.mjs → src-B3rrEIze.mjs} +0 -0
  445. /package/dist/chunks/{sv-BkHBsN4y.mjs → sv-B86P2LyK.mjs} +0 -0
  446. /package/dist/chunks/{sw-BBQLTq_z.mjs → sw-CnQXriTg.mjs} +0 -0
  447. /package/dist/chunks/{swift-Dpyt0s2c.mjs → swift-DZdprfb-.mjs} +0 -0
  448. /package/dist/chunks/{ta-DRRzdKky.mjs → ta-CG4BbxjE.mjs} +0 -0
  449. /package/dist/chunks/{te-CedXLsKM.mjs → te-CkE35V1X.mjs} +0 -0
  450. /package/dist/chunks/{th-DDOlGA0W.mjs → th-BCtkHu3E.mjs} +0 -0
  451. /package/dist/chunks/{tr-ClgvwOlL.mjs → tr-D5Cexvko.mjs} +0 -0
  452. /package/dist/chunks/{typescript-DO5cd4m8.mjs → typescript-DhtGMhWX.mjs} +0 -0
  453. /package/dist/chunks/{ug-bXxwiinM.mjs → ug-Bt9xMT4p.mjs} +0 -0
  454. /package/dist/chunks/{uk-Dp46o_VT.mjs → uk-D1g7UV0v.mjs} +0 -0
  455. /package/dist/chunks/{ur-MfEEhdFq.mjs → ur-B69faQh_.mjs} +0 -0
  456. /package/dist/chunks/{vi-bt-3LPGO.mjs → vi--gW42cZG.mjs} +0 -0
  457. /package/dist/chunks/{vitesse-dark-CcorSKT2.mjs → vitesse-dark-B5oAIYZ5.mjs} +0 -0
  458. /package/dist/chunks/{yaml-CrNNZyLb.mjs → yaml-T4MCc8o4.mjs} +0 -0
  459. /package/dist/chunks/{zh-Dgyb5Ly8.mjs → zh-DgQ6P8Lu.mjs} +0 -0
@@ -196,7 +196,9 @@ export class ItalicInlineTool implements InlineTool {
196
196
  }
197
197
 
198
198
  /**
199
- * Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element
199
+ * Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element.
200
+ * The browser's contenteditable engine will re-insert nbsp where needed for rendering
201
+ * (e.g. trailing spaces, consecutive spaces) on the next input event.
200
202
  * @param element - The element to normalize
201
203
  */
202
204
  private normalizeNbspInElement(element: HTMLElement): void {
@@ -212,27 +214,8 @@ export class ItalicInlineTool implements InlineTool {
212
214
  continue;
213
215
  }
214
216
 
215
- const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
216
-
217
217
  node.textContent = node.textContent.replace(/\u00A0/g, ' ');
218
-
219
- if (keepTrailing) {
220
- node.textContent = node.textContent.slice(0, -1) + '\u00A0';
221
- }
222
- }
223
- }
224
-
225
- /**
226
- * Check whether all siblings after a node are empty
227
- */
228
- private isEffectivelyLastChild(node: Node): boolean {
229
- const next = node.nextSibling;
230
-
231
- if (!next) {
232
- return true;
233
218
  }
234
-
235
- return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
236
219
  }
237
220
 
238
221
  /**
@@ -209,27 +209,8 @@ export class StrikethroughInlineTool implements InlineTool {
209
209
  continue;
210
210
  }
211
211
 
212
- const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
213
-
214
212
  node.textContent = node.textContent.replace(/\u00A0/g, ' ');
215
-
216
- if (keepTrailing) {
217
- node.textContent = node.textContent.slice(0, -1) + '\u00A0';
218
- }
219
- }
220
- }
221
-
222
- /**
223
- * Check whether all siblings after a node are empty
224
- */
225
- private isEffectivelyLastChild(node: Node): boolean {
226
- const next = node.nextSibling;
227
-
228
- if (!next) {
229
- return true;
230
213
  }
231
-
232
- return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
233
214
  }
234
215
 
235
216
  /**
@@ -209,27 +209,8 @@ export class UnderlineInlineTool implements InlineTool {
209
209
  continue;
210
210
  }
211
211
 
212
- const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
213
-
214
212
  node.textContent = node.textContent.replace(/\u00A0/g, ' ');
215
-
216
- if (keepTrailing) {
217
- node.textContent = node.textContent.slice(0, -1) + '\u00A0';
218
- }
219
- }
220
- }
221
-
222
- /**
223
- * Check whether all siblings after a node are empty
224
- */
225
- private isEffectivelyLastChild(node: Node): boolean {
226
- const next = node.nextSibling;
227
-
228
- if (!next) {
229
- return true;
230
213
  }
231
-
232
- return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
233
214
  }
234
215
 
235
216
  /**
@@ -202,9 +202,6 @@ export class BoldNormalizationPass {
202
202
 
203
203
  /**
204
204
  * Replace non-breaking spaces with regular spaces in a text node.
205
- * Preserves a trailing \u00A0 when the text node is the last child of its
206
- * parent, because converting it to a regular space (char 32) would make it
207
- * invisible under CSS white-space:normal.
208
205
  * @param textNode - The text node to process
209
206
  */
210
207
  private replaceNbspInTextNode(textNode: Text): void {
@@ -214,13 +211,8 @@ export class BoldNormalizationPass {
214
211
  return;
215
212
  }
216
213
 
217
- const keepTrailing = text.endsWith('\u00A0') && BoldNormalizationPass.isEffectivelyLastChild(textNode);
218
- const replaced = text.replace(/\u00A0/g, ' ');
219
-
220
214
  // eslint-disable-next-line no-param-reassign
221
- textNode.textContent = keepTrailing
222
- ? replaced.slice(0, -1) + '\u00A0'
223
- : replaced;
215
+ textNode.textContent = text.replace(/\u00A0/g, ' ');
224
216
  }
225
217
 
226
218
  /**
@@ -285,26 +277,6 @@ export class BoldNormalizationPass {
285
277
  rightStrong.remove();
286
278
  }
287
279
 
288
- /**
289
- * Check whether all siblings after a node are empty (zero-length text nodes
290
- * or empty elements). The unbold process can leave behind empty text nodes
291
- * which would cause `!node.nextSibling` to return false even though the node
292
- * is effectively the last meaningful child.
293
- */
294
- private static isEffectivelyLastChild(node: Node): boolean {
295
- const next = node.nextSibling;
296
-
297
- if (!next) {
298
- return true;
299
- }
300
-
301
- if ((next.textContent ?? '').length > 0) {
302
- return false;
303
- }
304
-
305
- return BoldNormalizationPass.isEffectivelyLastChild(next);
306
- }
307
-
308
280
  /**
309
281
  * Find the appropriate scope element from a selection
310
282
  * @param selection - The current selection
@@ -91,14 +91,20 @@ export class KeyboardNavigation extends BlockEventComposer {
91
91
  return;
92
92
  }
93
93
 
94
- event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
94
+ const isNavigated = event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
95
95
 
96
96
  /**
97
- * Always prevent default Tab behaviour to keep focus inside the editor.
98
- * Without this, pressing Tab on the last block of a nested editor (e.g. a
99
- * database card drawer) lets the browser move focus out of the editor entirely.
97
+ * Prevent default Tab behaviour only when navigation occurred within the
98
+ * editor. When navigateNext/navigatePrevious returns false (no next/prev
99
+ * block), allow the browser default so focus can leave the editor to
100
+ * external elements (e.g. inputs after the editor).
101
+ *
102
+ * Nested editors (e.g. database card drawer) are safe because the table
103
+ * cell guard above returns early, and those editors handle Tab themselves.
100
104
  */
101
- event.preventDefault();
105
+ if (isNavigated) {
106
+ event.preventDefault();
107
+ }
102
108
  }
103
109
 
104
110
  /**
@@ -1,5 +1,5 @@
1
1
  import type { Block } from '../../../block';
2
- import { HEADER_PATTERN, CHECKLIST_PATTERN, UNORDERED_LIST_PATTERN, ORDERED_LIST_PATTERN, TOGGLE_HEADER_PATTERN, TOGGLE_PATTERN, HEADER_TOOL_NAME, LIST_TOOL_NAME, TOGGLE_TOOL_NAME, DIVIDER_TOOL_NAME, DIVIDER_PATTERN } from '../constants';
2
+ import { HEADER_PATTERN, CHECKLIST_PATTERN, UNORDERED_LIST_PATTERN, ORDERED_LIST_PATTERN, TOGGLE_HEADER_PATTERN, TOGGLE_PATTERN, HEADER_TOOL_NAME, LIST_TOOL_NAME, TOGGLE_TOOL_NAME, DIVIDER_TOOL_NAME, DIVIDER_PATTERN, QUOTE_TOOL_NAME, QUOTE_PATTERN, CODE_TOOL_NAME, CODE_PATTERN } from '../constants';
3
3
 
4
4
  import { BlockEventComposer } from './__base';
5
5
 
@@ -39,8 +39,10 @@ export class MarkdownShortcuts extends BlockEventComposer {
39
39
  const handledHeader = this.handleHeaderShortcut();
40
40
  const handledToggleHeader = this.handleToggleHeaderShortcut();
41
41
  const handledToggle = this.handleToggleShortcut();
42
+ const handledQuote = this.handleQuoteShortcut();
43
+ const handledCode = this.handleCodeShortcut();
42
44
 
43
- return handledList || handledHeader || handledToggleHeader || handledToggle;
45
+ return handledList || handledHeader || handledToggleHeader || handledToggle || handledQuote || handledCode;
44
46
  }
45
47
 
46
48
  /**
@@ -402,6 +404,107 @@ export class MarkdownShortcuts extends BlockEventComposer {
402
404
  return true;
403
405
  }
404
406
 
407
+ /**
408
+ * Check if current block matches a quote shortcut pattern (" ") and convert it.
409
+ */
410
+ private handleQuoteShortcut(): boolean {
411
+ const { BlockManager, Tools } = this.Blok;
412
+ const currentBlock = BlockManager.currentBlock;
413
+
414
+ if (!currentBlock) {
415
+ return false;
416
+ }
417
+
418
+ if (!currentBlock.tool.isDefault) {
419
+ return false;
420
+ }
421
+
422
+ const quoteTool = Tools.blockTools.get(QUOTE_TOOL_NAME);
423
+
424
+ if (!quoteTool) {
425
+ return false;
426
+ }
427
+
428
+ const currentInput = currentBlock.currentInput;
429
+
430
+ if (!currentInput) {
431
+ return false;
432
+ }
433
+
434
+ const textContent = currentInput.textContent || '';
435
+ const match = QUOTE_PATTERN.exec(textContent);
436
+
437
+ if (!match) {
438
+ return false;
439
+ }
440
+
441
+ this.Blok.YjsManager.stopCapturing();
442
+
443
+ const shortcutLength = 2; // " " + space
444
+ const remainingHtml = this.extractRemainingHtml(currentInput, shortcutLength);
445
+ const caretOffset = this.getCaretOffset(currentInput) - shortcutLength;
446
+
447
+ const newBlock = BlockManager.replace(currentBlock, QUOTE_TOOL_NAME, {
448
+ text: remainingHtml,
449
+ });
450
+
451
+ this.setCaretAfterConversion(newBlock, caretOffset);
452
+
453
+ this.Blok.YjsManager.stopCapturing();
454
+
455
+ return true;
456
+ }
457
+
458
+ /**
459
+ * Check if current block matches a code shortcut pattern ("``` ") and convert it.
460
+ */
461
+ private handleCodeShortcut(): boolean {
462
+ const { BlockManager, Tools } = this.Blok;
463
+ const currentBlock = BlockManager.currentBlock;
464
+
465
+ if (!currentBlock) {
466
+ return false;
467
+ }
468
+
469
+ if (!currentBlock.tool.isDefault) {
470
+ return false;
471
+ }
472
+
473
+ const codeTool = Tools.blockTools.get(CODE_TOOL_NAME);
474
+
475
+ if (!codeTool) {
476
+ return false;
477
+ }
478
+
479
+ const currentInput = currentBlock.currentInput;
480
+
481
+ if (!currentInput) {
482
+ return false;
483
+ }
484
+
485
+ const textContent = currentInput.textContent || '';
486
+ const match = CODE_PATTERN.exec(textContent);
487
+
488
+ if (!match) {
489
+ return false;
490
+ }
491
+
492
+ this.Blok.YjsManager.stopCapturing();
493
+
494
+ const shortcutLength = 4; // "```" + space
495
+ const remainingHtml = this.extractRemainingHtml(currentInput, shortcutLength);
496
+
497
+ const newBlock = BlockManager.replace(currentBlock, CODE_TOOL_NAME, {
498
+ code: remainingHtml,
499
+ });
500
+
501
+ this.setCaretAfterConversion(newBlock, 0);
502
+
503
+ this.Blok.YjsManager.stopCapturing();
504
+
505
+ return true;
506
+ }
507
+
405
508
  /**
406
509
  * Match default header shortcuts like "# ", "## ", etc.
407
510
  */
@@ -93,3 +93,27 @@ export const DIVIDER_TOOL_NAME = 'divider';
93
93
  * Matches exactly three hyphens with no other content.
94
94
  */
95
95
  export const DIVIDER_PATTERN = /^-{3}$/;
96
+
97
+ /**
98
+ * Tool name for quote blocks.
99
+ */
100
+ export const QUOTE_TOOL_NAME = 'quote';
101
+
102
+ /**
103
+ * Regex pattern for detecting quote shortcuts.
104
+ * Matches " followed by a space at the start of text.
105
+ * Captures remaining content after the shortcut in group 1.
106
+ */
107
+ export const QUOTE_PATTERN = /^"\s([\s\S]*)$/;
108
+
109
+ /**
110
+ * Tool name for code blocks.
111
+ */
112
+ export const CODE_TOOL_NAME = 'code';
113
+
114
+ /**
115
+ * Regex pattern for detecting code block shortcuts.
116
+ * Matches ``` followed by a space at the start of text.
117
+ * Captures remaining content after the shortcut in group 1.
118
+ */
119
+ export const CODE_PATTERN = /^```\s([\s\S]*)$/;
@@ -1102,7 +1102,7 @@ export class BlockManager extends Module {
1102
1102
  // eslint-disable-next-line no-param-reassign
1103
1103
  block.lastEditedAt = Date.now();
1104
1104
  // eslint-disable-next-line no-param-reassign
1105
- block.lastEditedBy = this.config.user?.name ?? null;
1105
+ block.lastEditedBy = this.config.user?.id ?? null;
1106
1106
 
1107
1107
  void this.syncBlockDataToYjs(block);
1108
1108
  }
@@ -28,7 +28,7 @@ export interface ComposeBlockOptions {
28
28
  bindEventsImmediately?: boolean;
29
29
  /** Timestamp of the last edit (milliseconds since epoch) */
30
30
  lastEditedAt?: number;
31
- /** Display name of the user who last edited this block */
31
+ /** ID of the user who last edited this block */
32
32
  lastEditedBy?: string | null;
33
33
  }
34
34
 
@@ -113,6 +113,11 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
113
113
  */
114
114
  private flipperKeydownSource: HTMLElement | null = null;
115
115
 
116
+ /**
117
+ * Handler for Delete key shortcut, stored for cleanup
118
+ */
119
+ private deleteKeyHandler: ((event: KeyboardEvent) => void) | null = null;
120
+
116
121
  /**
117
122
  * Panel with block settings with 2 sections:
118
123
  * - Tool's Settings
@@ -186,11 +191,13 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
186
191
  /** Get tool-specific tunes and common tunes (delete, move, etc.) */
187
192
  const { toolTunes, commonTunes } = block.getTunes();
188
193
 
194
+ const items = await this.getTunesItems(block, commonTunes, toolTunes);
195
+
189
196
  const PopoverClass = isMobileScreen() ? PopoverMobile : PopoverDesktop;
190
197
  const popoverParams: PopoverParams & { flipper?: Flipper } = {
191
198
  searchable: true,
192
199
  trigger: trigger || this.nodes.wrapper,
193
- items: await this.getTunesItems(block, commonTunes, toolTunes),
200
+ items,
194
201
  messages: {
195
202
  nothingFound: this.Blok.I18n.t('popover.nothingFound'),
196
203
  search: this.Blok.I18n.t('popover.search'),
@@ -208,6 +215,8 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
208
215
 
209
216
  this.popover.on(PopoverEvent.Closed, this.onPopoverClose);
210
217
 
218
+ this.attachDeleteKeyListener(items);
219
+
211
220
  /**
212
221
  * Set opened flag AFTER popover is created to prevent race conditions
213
222
  * where close() is called during the async getTunesItems() call
@@ -272,6 +281,7 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
272
281
  }
273
282
 
274
283
  this.selection.clearSaved();
284
+ this.detachDeleteKeyListener();
275
285
  this.detachFlipperKeydownListener();
276
286
 
277
287
  /**
@@ -415,6 +425,7 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
415
425
  title: this.Blok.I18n.t('blockSettings.delete'),
416
426
  name: 'delete',
417
427
  isDestructive: true,
428
+ secondaryLabel: 'Del',
418
429
  closeOnActivate: true,
419
430
  onActivate: () => {
420
431
  const { BlockManager, Caret, Toolbar } = this.Blok;
@@ -445,7 +456,8 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
445
456
  }
446
457
 
447
458
  /**
448
- * Creates the "Last edited by..." footer element for block settings.
459
+ * Creates the "Last edited" footer element for block settings.
460
+ * If a resolveUser callback is configured, resolves the user ID to a display name.
449
461
  * @param block - the block whose metadata to display
450
462
  * @returns the footer DOM element
451
463
  */
@@ -462,22 +474,46 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
462
474
 
463
475
  label.setAttribute('data-edit-meta-label', '');
464
476
 
465
- if (block.lastEditedBy !== null && block.lastEditedBy !== undefined) {
466
- label.textContent = `Last edited by ${block.lastEditedBy}`;
467
- } else {
468
- label.textContent = 'Last edited';
477
+ label.textContent = this.Blok.I18n.t('blockSettings.lastEdited');
478
+
479
+ if (block.lastEditedBy != null && this.config.resolveUser != null) {
480
+ void Promise.resolve(this.config.resolveUser(block.lastEditedBy)).then((userInfo) => {
481
+ if (userInfo?.name != null) {
482
+ label.textContent = this.Blok.I18n.t('blockSettings.lastEditedBy', { name: userInfo.name });
483
+ }
484
+ });
469
485
  }
470
486
 
471
487
  container.appendChild(label);
472
488
 
473
489
  if (block.lastEditedAt !== undefined) {
474
490
  const dateEl = document.createElement('div');
475
- const formatted = new Intl.DateTimeFormat(undefined, {
476
- dateStyle: 'medium',
477
- timeStyle: 'short',
478
- }).format(new Date(block.lastEditedAt));
479
491
 
480
- dateEl.textContent = formatted;
492
+ dateEl.classList.add('mt-1');
493
+ const locale = this.Blok.I18n.getLocale();
494
+ const date = new Date(block.lastEditedAt);
495
+
496
+ const dateParts = new Intl.DateTimeFormat(locale, {
497
+ day: 'numeric',
498
+ month: 'long',
499
+ year: 'numeric',
500
+ }).formatToParts(date);
501
+
502
+ /**
503
+ * Strip trailing literal parts that are abbreviations (contain a period),
504
+ * e.g. " г." in Russian or " р." in Ukrainian, while preserving essential
505
+ * trailing literals like "日" in Japanese/Chinese.
506
+ */
507
+ while (dateParts.length > 0
508
+ && dateParts[dateParts.length - 1].type === 'literal'
509
+ && dateParts[dateParts.length - 1].value.includes('.')) {
510
+ dateParts.pop();
511
+ }
512
+
513
+ const dateStr = dateParts.map(p => p.value).join('');
514
+ const timeStr = new Intl.DateTimeFormat(locale, { timeStyle: 'short' }).format(date);
515
+
516
+ dateEl.textContent = `${dateStr}, ${timeStr}`;
481
517
  container.appendChild(dateEl);
482
518
  }
483
519
 
@@ -893,4 +929,46 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
893
929
  this.flipperKeydownSource = null;
894
930
  this.flipperKeydownHandler = null;
895
931
  }
932
+
933
+ /**
934
+ * Attaches a keydown listener on the popover element to handle the Delete key shortcut
935
+ * @param items - popover items to search for the delete action
936
+ */
937
+ private attachDeleteKeyListener(items: PopoverItemParams[]): void {
938
+ this.detachDeleteKeyListener();
939
+
940
+ if (this.popover === null) {
941
+ return;
942
+ }
943
+
944
+ const deleteItem = items.find(
945
+ (item): item is PopoverItemParams & { name: string; onActivate: () => void } =>
946
+ 'name' in item && item.name === 'delete' && 'onActivate' in item
947
+ );
948
+
949
+ if (deleteItem === undefined) {
950
+ return;
951
+ }
952
+
953
+ this.deleteKeyHandler = (event: KeyboardEvent) => {
954
+ if (event.key === 'Delete') {
955
+ event.preventDefault();
956
+ deleteItem.onActivate(deleteItem);
957
+ this.close();
958
+ }
959
+ };
960
+
961
+ this.popover.getElement().addEventListener('keydown', this.deleteKeyHandler);
962
+ }
963
+
964
+ /**
965
+ * Removes the Delete key shortcut listener from the popover element
966
+ */
967
+ private detachDeleteKeyListener(): void {
968
+ if (this.popover !== null && this.deleteKeyHandler !== null) {
969
+ this.popover.getElement().removeEventListener('keydown', this.deleteKeyHandler);
970
+ }
971
+
972
+ this.deleteKeyHandler = null;
973
+ }
896
974
  }
@@ -205,6 +205,7 @@ export class UI extends Module<UINodes> {
205
205
  });
206
206
  this.keyboardController.state = this.Blok;
207
207
  this.keyboardController.setRedactorElement(this.nodes.redactor);
208
+ this.keyboardController.setWrapperElement(this.nodes.wrapper);
208
209
 
209
210
  /**
210
211
  * Selection controller needs wrapper element for click detection
@@ -29,6 +29,20 @@ export class KeyboardController extends Controller {
29
29
  */
30
30
  private redactorElement: HTMLElement | null = null;
31
31
 
32
+ /**
33
+ * The editor wrapper element for editor boundary checks.
34
+ * Stored directly because the keyboard controller's Blok reference
35
+ * (created by getModulesDiff) does not include the UI module itself.
36
+ */
37
+ private wrapperElement: HTMLElement | null = null;
38
+
39
+ /**
40
+ * Flag set when the controller is disabled (editor destroyed or read-only).
41
+ * Used instead of checking this.Blok.UI which is unavailable to controllers
42
+ * owned by the UI module (getModulesDiff excludes the owning module).
43
+ */
44
+ private isDisabled = false;
45
+
32
46
  /**
33
47
  * Stable handler references for deduplication via Listeners.findOne.
34
48
  * Storing as class properties ensures the same function reference is passed
@@ -61,7 +75,7 @@ export class KeyboardController extends Controller {
61
75
  if (target instanceof Element) {
62
76
  const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
63
77
 
64
- if (closestEditor !== null && closestEditor !== this.Blok.UI.nodes.wrapper) {
78
+ if (closestEditor !== null && closestEditor !== this.wrapperElement) {
65
79
  return;
66
80
  }
67
81
  }
@@ -87,6 +101,13 @@ export class KeyboardController extends Controller {
87
101
  this.redactorElement = element;
88
102
  }
89
103
 
104
+ /**
105
+ * Set the editor wrapper element for editor boundary checks
106
+ */
107
+ public setWrapperElement(element: HTMLElement): void {
108
+ this.wrapperElement = element;
109
+ }
110
+
90
111
  /**
91
112
  * Enable keyboard event listeners
92
113
  */
@@ -95,6 +116,8 @@ export class KeyboardController extends Controller {
95
116
  return;
96
117
  }
97
118
 
119
+ this.isDisabled = false;
120
+
98
121
  // Document-level keydown handler
99
122
  this.readOnlyMutableListeners.on(document, 'keydown', this.documentKeydownHandler, true);
100
123
 
@@ -112,27 +135,54 @@ export class KeyboardController extends Controller {
112
135
  this.readOnlyMutableListeners.on(this.redactorElement, 'keydown', this.redactorKeydownHandler, true);
113
136
  }
114
137
 
138
+ /**
139
+ * Disable the controller — marks it as inactive so stale handlers bail out.
140
+ */
141
+ public override disable(): void {
142
+ this.isDisabled = true;
143
+ super.disable();
144
+ }
145
+
115
146
  /**
116
147
  * Main keyboard event router
117
148
  * @param event - keyboard event
118
149
  */
119
150
  private handleKeydown(event: KeyboardEvent): void {
151
+ /**
152
+ * Guard against destroyed or disabled editor instances whose listeners
153
+ * were not properly removed. When the controller is disabled the handler
154
+ * bails out early so it does not throw or interfere with other editors.
155
+ */
156
+ if (this.isDisabled) {
157
+ return;
158
+ }
159
+
120
160
  const target = event.target;
161
+ const key = event.key ?? '';
121
162
 
163
+ /**
164
+ * Skip input/textarea targets for most keys to avoid intercepting normal
165
+ * typing. Escape is exempted only for inputs inside popovers (e.g. the
166
+ * search input) so the keyboard controller can close the popover.
167
+ * Inputs elsewhere (e.g. database title edit inputs) keep their own
168
+ * Escape handling.
169
+ */
122
170
  if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {
123
- return;
171
+ const isInsidePopover = target.closest('[data-blok-popover]') !== null;
172
+
173
+ if (key !== 'Escape' || !isInsidePopover) {
174
+ return;
175
+ }
124
176
  }
125
177
 
126
178
  if (target instanceof Element) {
127
179
  const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
128
180
 
129
- if (closestEditor !== null && closestEditor !== this.Blok.UI.nodes.wrapper) {
181
+ if (closestEditor !== null && closestEditor !== this.wrapperElement) {
130
182
  return;
131
183
  }
132
184
  }
133
185
 
134
- const key = event.key ?? '';
135
-
136
186
  switch (key) {
137
187
  case 'Enter':
138
188
  this.handleEnter(event);
@@ -197,7 +197,7 @@ export class DocumentStore {
197
197
  * Update a block's edit metadata fields directly on the Y.Map.
198
198
  * @param id - Block id
199
199
  * @param lastEditedAt - Timestamp in milliseconds
200
- * @param lastEditedBy - User display name, or null
200
+ * @param lastEditedBy - User ID, or null
201
201
  */
202
202
  public updateBlockMetadata(id: string, lastEditedAt: number, lastEditedBy: string | null): void {
203
203
  const yblock = this.getBlockById(id);
@@ -168,7 +168,7 @@ export class YjsManager extends Module {
168
168
  * Update a block's edit metadata.
169
169
  * @param id - Block id
170
170
  * @param lastEditedAt - Timestamp in milliseconds
171
- * @param lastEditedBy - User display name, or null
171
+ * @param lastEditedBy - User ID, or null
172
172
  */
173
173
  public updateBlockMetadata(id: string, lastEditedAt: number, lastEditedBy: string | null): void {
174
174
  this.documentStore.updateBlockMetadata(id, lastEditedAt, lastEditedBy);
@@ -141,7 +141,16 @@ export abstract class PopoverAbstract<Nodes extends PopoverNodes = PopoverNodes>
141
141
  this.search.focus();
142
142
  }
143
143
 
144
+ /**
145
+ * Show hazes instantly on open (no transition), then restore transition for scroll-triggered changes
146
+ */
147
+ this.nodes.scrollHazeTop.style.transition = 'none';
148
+ this.nodes.scrollHazeBottom.style.transition = 'none';
144
149
  this.updateScrollHazes();
150
+ requestAnimationFrame(() => {
151
+ this.nodes.scrollHazeTop.style.transition = '';
152
+ this.nodes.scrollHazeBottom.style.transition = '';
153
+ });
145
154
 
146
155
  const { trigger } = this.params;
147
156
  const isRootWithTrigger = (this.params.nestingLevel ?? 0) === 0 && trigger !== undefined;