@jackuait/blok 0.13.0 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/codemod/migrate-editorjs-to-blok.js +7 -2
  2. package/codemod/test.js +22 -2
  3. package/dist/blok.cjs +1 -1
  4. package/dist/blok.iife.js +29 -29
  5. package/dist/blok.mjs +2 -2
  6. package/dist/chunks/{blok-Cy7bijNZ.mjs → blok-Du6vYONn.mjs} +2166 -2182
  7. package/dist/chunks/{blok-DsB9tzWP.cjs → blok-Xu27QC2G.cjs} +13 -13
  8. package/dist/chunks/constants-DDTVRO2H.cjs +457 -0
  9. package/dist/chunks/{constants-CnxI96Oy.mjs → constants-DUuYY64n.mjs} +451 -246
  10. package/dist/chunks/{i18next-loader-BObGIOaH.cjs → i18next-loader-DC1uN-wc.cjs} +1 -1
  11. package/dist/chunks/{i18next-loader-BrDbxldT.mjs → i18next-loader-GIrBCFrC.mjs} +1 -1
  12. package/dist/chunks/{lightweight-i18n-Bw9zJMpT.cjs → lightweight-i18n-Bbl1cNYK.cjs} +1 -1
  13. package/dist/chunks/{lightweight-i18n-CFXiOjGR.mjs → lightweight-i18n-DF9Pupws.mjs} +2 -0
  14. package/dist/chunks/{messages-DLaesq4h2.cjs → messages-1qYt6EhZ2.cjs} +1 -1
  15. package/dist/chunks/{messages-BzCMWDCa.cjs → messages-2fxvN3Nb.cjs} +1 -1
  16. package/dist/chunks/{messages-CloQj-t82.mjs → messages-5AxgjKgf2.mjs} +2 -0
  17. package/dist/{messages-ByaREXXn.mjs → chunks/messages-AgmrT2Id.mjs} +2 -0
  18. package/dist/{messages-DV7zSwcU2.mjs → chunks/messages-AtUsRyWK2.mjs} +2 -0
  19. package/dist/chunks/{messages-23LJg97F.cjs → messages-B1Vs2HmR.cjs} +1 -1
  20. package/dist/{messages-Bgub7yIr.mjs → chunks/messages-B1k4DgVe.mjs} +4 -2
  21. package/dist/chunks/{messages-CyNE9mfW.cjs → messages-B1xgsCNQ.cjs} +1 -1
  22. package/dist/chunks/{messages-CK6NQlei2.mjs → messages-B2zrJyAc2.mjs} +2 -0
  23. package/dist/chunks/{messages-D9KllT5S.mjs → messages-B5CFhyI8.mjs} +2 -0
  24. package/dist/chunks/{messages-BFPJInnK.mjs → messages-B6You-RA.mjs} +7 -5
  25. package/dist/{messages-B8Ps9X7Q.mjs → chunks/messages-B6t1xShv.mjs} +2 -0
  26. package/dist/chunks/{messages-B5P29HKO2.cjs → messages-B780gS332.cjs} +1 -1
  27. package/dist/chunks/{messages-BBD0GeAN.mjs → messages-B7KbtBAE.mjs} +5 -3
  28. package/dist/chunks/{messages-CG1tpK3F.cjs → messages-B7T5Notn.cjs} +1 -1
  29. package/dist/{messages-DemkV5oa2.mjs → chunks/messages-BA2sVGrR2.mjs} +2 -0
  30. package/dist/chunks/{messages-B9q8LdZT.cjs → messages-BE9aZQ1Q.cjs} +1 -1
  31. package/dist/chunks/{messages-CPTia1Ip.cjs → messages-BIQpTYfm.cjs} +1 -1
  32. package/dist/chunks/{messages-BT-EUB5N.cjs → messages-BIRvUJ0t.cjs} +1 -1
  33. package/dist/chunks/{messages-BEkcSJKV.cjs → messages-BIodfkjv.cjs} +1 -1
  34. package/dist/chunks/{messages-_ysQiWQr.cjs → messages-BL-zBcuM.cjs} +1 -1
  35. package/dist/chunks/{messages-CSZTOxAh.mjs → messages-BNxTGhHu.mjs} +2 -0
  36. package/dist/chunks/{messages-CzG5xDaO.mjs → messages-BP77P9ER.mjs} +2 -0
  37. package/dist/chunks/{messages-BEM-ySlb2.cjs → messages-BQr0zpmu2.cjs} +1 -1
  38. package/dist/chunks/{messages-D4P5aWos2.cjs → messages-BTHi6rVW2.cjs} +1 -1
  39. package/dist/chunks/{messages-KTUVKXJd.mjs → messages-BVZONUH9.mjs} +3 -1
  40. package/dist/{messages-BvHpSkAX2.mjs → chunks/messages-BVarbXYD2.mjs} +2 -0
  41. package/dist/{messages-DiOm0iFp.mjs → chunks/messages-BWGqOZ9J.mjs} +2 -0
  42. package/dist/{messages-DIBytW9u.mjs → chunks/messages-BZ4d5yNH.mjs} +2 -0
  43. package/dist/chunks/{messages-WUvriTcu2.cjs → messages-BZOAdcmO2.cjs} +1 -1
  44. package/dist/chunks/{messages-CN9LNhoS2.mjs → messages-B_U10evN2.mjs} +4 -2
  45. package/dist/chunks/{messages-DPrZ8Z6d2.cjs → messages-BbsGeVs_2.cjs} +1 -1
  46. package/dist/chunks/{messages-3_7JWqT0.cjs → messages-Bc1NYJVS.cjs} +1 -1
  47. package/dist/chunks/{messages-D3EU-LRS.cjs → messages-BdORNG8X.cjs} +1 -1
  48. package/dist/chunks/{messages-BIOk-aTQ.cjs → messages-Bg2kheTv.cjs} +1 -1
  49. package/dist/chunks/{messages-DsAkJt8M.cjs → messages-Bj1eQtQw.cjs} +1 -1
  50. package/dist/chunks/{messages-CD6xvMw1.cjs → messages-BkJJCHNK.cjs} +1 -1
  51. package/dist/chunks/{messages-BIN5-zeZ.cjs → messages-BkdGQfIX.cjs} +1 -1
  52. package/dist/chunks/{messages-pKpKbxTh2.cjs → messages-BkgsB-cj2.cjs} +1 -1
  53. package/dist/{messages-DXCKUB0_.mjs → chunks/messages-BmdkDNYv.mjs} +4 -2
  54. package/dist/{messages-B66o_tQ42.mjs → chunks/messages-BmiN0JGP2.mjs} +2 -0
  55. package/dist/chunks/{messages-BG17trOF.cjs → messages-Bn0vGFEP.cjs} +1 -1
  56. package/dist/{messages-BpJopIVL2.mjs → chunks/messages-BoCUgrkI.mjs} +2 -0
  57. package/dist/chunks/{messages-B7dSyfsy.cjs → messages-BoIUXwWe.cjs} +1 -1
  58. package/dist/chunks/{messages-7oeFTHO4.cjs → messages-BpDEh8rW.cjs} +1 -1
  59. package/dist/{messages-DVSJBYhD.mjs → chunks/messages-BuYnNUtU2.mjs} +3 -1
  60. package/dist/{messages-D8SUKrMB.mjs → chunks/messages-BvuEffoe.mjs} +4 -2
  61. package/dist/{messages-DvIwCnTR.mjs → chunks/messages-BvupGuDw2.mjs} +2 -0
  62. package/dist/chunks/{messages-BZr0xR7X.cjs → messages-BwknPZJ8.cjs} +1 -1
  63. package/dist/{messages-5s1gGSm4.mjs → chunks/messages-BxKobpJ22.mjs} +2 -0
  64. package/dist/chunks/{messages-D_OfKMtO2.cjs → messages-ByicRCge2.cjs} +1 -1
  65. package/dist/{messages-DNDonN-x.mjs → chunks/messages-C03LZxma.mjs} +2 -0
  66. package/dist/{messages-CqrBLC_P.mjs → chunks/messages-C24IC_eR.mjs} +2 -0
  67. package/dist/chunks/{messages-CucO-8OV.cjs → messages-C2oBmyTn.cjs} +1 -1
  68. package/dist/chunks/{messages-CXZtG3Xs2.mjs → messages-C4bHKGnB2.mjs} +4 -2
  69. package/dist/chunks/{messages-DTceHV5d2.mjs → messages-C4sIqArW2.mjs} +2 -0
  70. package/dist/chunks/{messages-Ds1jRRkJ2.cjs → messages-C9wBMmxr2.cjs} +1 -1
  71. package/dist/chunks/{messages-DdMhxYfW.cjs → messages-CDK5-8vW.cjs} +1 -1
  72. package/dist/chunks/{messages-CP3f0qkN.cjs → messages-CKHbPcfh.cjs} +1 -1
  73. package/dist/{messages-Dt4Cw2PN2.mjs → chunks/messages-CMRjQYxi2.mjs} +3 -1
  74. package/dist/chunks/{messages-BJVhJhdz.cjs → messages-CNFfwTfw.cjs} +1 -1
  75. package/dist/chunks/{messages-C99hDoeM2.cjs → messages-CNiuofck2.cjs} +1 -1
  76. package/dist/chunks/{messages-CjgjbJ1H2.mjs → messages-COMdnGQV2.mjs} +4 -2
  77. package/dist/{messages-BfsTqQCr2.mjs → chunks/messages-CQg2_vmm.mjs} +2 -0
  78. package/dist/{messages-_OjohrXs.mjs → chunks/messages-CTWXEx_o.mjs} +6 -4
  79. package/dist/{messages-BJBdgowf.mjs → chunks/messages-CWTFEPbA2.mjs} +2 -0
  80. package/dist/chunks/{messages-l73qDsKl.cjs → messages-CWszAGkF.cjs} +1 -1
  81. package/dist/chunks/{messages-BGcdiqDM2.cjs → messages-CWzQNagc2.cjs} +1 -1
  82. package/dist/{messages-CaC0BVP72.mjs → chunks/messages-CXxz5HYQ.mjs} +2 -0
  83. package/dist/chunks/{messages-BvJTJwoq2.cjs → messages-CYf1gv722.cjs} +1 -1
  84. package/dist/{messages-DN_N2jK1.mjs → chunks/messages-CcboYTP8.mjs} +2 -0
  85. package/dist/{messages-DdGG7T30.mjs → chunks/messages-CdWXgq_r.mjs} +2 -0
  86. package/dist/chunks/{messages-pZC8rTng.cjs → messages-CfcCwbQo.cjs} +1 -1
  87. package/dist/chunks/{messages-DFJTssY7.cjs → messages-CkvqOnAR.cjs} +1 -1
  88. package/dist/chunks/{messages-BzbW5tIB2.cjs → messages-Cnrug7nz2.cjs} +1 -1
  89. package/dist/chunks/{messages-BUp0i-9G.cjs → messages-Cr51zCHy.cjs} +1 -1
  90. package/dist/chunks/{messages-Cz63p8bt2.cjs → messages-CsLvvl2F2.cjs} +1 -1
  91. package/dist/chunks/{messages-DrIzpqee.cjs → messages-CuO-Rx4g.cjs} +1 -1
  92. package/dist/chunks/messages-Cv4I3k1W2.cjs +1 -0
  93. package/dist/chunks/{messages-BScbCwsN.cjs → messages-CwHRv6g8.cjs} +1 -1
  94. package/dist/chunks/{messages-EUS1-T0-.mjs → messages-CyCl8la6.mjs} +2 -0
  95. package/dist/chunks/{messages-DOUT2sT62.cjs → messages-CzXnHfGb2.cjs} +1 -1
  96. package/dist/chunks/{messages-ndFXaPuJ.cjs → messages-D2QxLx1a.cjs} +1 -1
  97. package/dist/chunks/{messages-CDLJmxWA.cjs → messages-D4LUPpX_.cjs} +1 -1
  98. package/dist/{messages-DpQjOxzP.mjs → chunks/messages-D7YPlNAK.mjs} +2 -0
  99. package/dist/{messages-S0krg7sB.mjs → chunks/messages-DGHTTk1S2.mjs} +3 -1
  100. package/dist/chunks/{messages-wZhc9mFF2.mjs → messages-DHdoaaFq2.mjs} +6 -4
  101. package/dist/chunks/{messages-C0BMFvdy.mjs → messages-DI9Ifrgt.mjs} +2 -0
  102. package/dist/chunks/messages-DJFL-bxd2.cjs +1 -0
  103. package/dist/chunks/messages-DLEeNpMi2.cjs +1 -0
  104. package/dist/chunks/{messages-BpI1875E.mjs → messages-DNqFlfOd.mjs} +3 -1
  105. package/dist/chunks/{messages-mtoLIsYL.cjs → messages-DTNU_cq0.cjs} +1 -1
  106. package/dist/chunks/{messages-BxXGCWit.cjs → messages-DVKsYqpJ.cjs} +1 -1
  107. package/dist/chunks/{messages-BJNTs8dY.cjs → messages-DXlfz-nC.cjs} +1 -1
  108. package/dist/chunks/{messages-DKdgRSvy.cjs → messages-DbA_Zja3.cjs} +1 -1
  109. package/dist/chunks/{messages-CZ2th1UV2.cjs → messages-Dc2TTEx_2.cjs} +1 -1
  110. package/dist/chunks/{messages-Bh-GPq0T2.mjs → messages-Dd4nzvLj2.mjs} +2 -0
  111. package/dist/chunks/{messages-BISkpo37.cjs → messages-DeDMMmRC.cjs} +1 -1
  112. package/dist/chunks/{messages-C0Fr1grN.mjs → messages-DefZ3ihx.mjs} +2 -0
  113. package/dist/{messages-DC1fWdjB2.mjs → chunks/messages-DhZwMl9x2.mjs} +2 -0
  114. package/dist/chunks/{messages-BYT844Pj.mjs → messages-DiGsu5XN.mjs} +6 -4
  115. package/dist/chunks/{messages-xeJ5eVFo.cjs → messages-DlQNXqzr.cjs} +1 -1
  116. package/dist/{messages-CZYocA-2.mjs → chunks/messages-DlcI-0Sy.mjs} +2 -0
  117. package/dist/{messages-ZJE9VNzB2.mjs → chunks/messages-DmErSGPk2.mjs} +2 -0
  118. package/dist/chunks/{messages-h9Zi_9Gr.cjs → messages-DqMqZLcn.cjs} +1 -1
  119. package/dist/chunks/{messages-D_w-pjpG2.cjs → messages-DqqDuEE22.cjs} +1 -1
  120. package/dist/chunks/{messages-DW0CNDiw.mjs → messages-DsyO86r3.mjs} +2 -0
  121. package/dist/chunks/{messages-DgdjQ2JT.mjs → messages-DzY53I67.mjs} +2 -0
  122. package/dist/chunks/{messages-PeAC6FL2.cjs → messages-DzppdmWe.cjs} +1 -1
  123. package/dist/chunks/{messages-CkCgWAJW2.mjs → messages-GHsufIGi2.mjs} +4 -2
  124. package/dist/chunks/{messages-Diinl7nA2.cjs → messages-HzLF-BQL2.cjs} +1 -1
  125. package/dist/chunks/{messages-CoWmNHyu2.cjs → messages-Jb9n97oP2.cjs} +1 -1
  126. package/dist/chunks/{messages-2sqZ51ZE2.cjs → messages-K_vSdSoF2.cjs} +1 -1
  127. package/dist/{messages-D-K9TXl02.mjs → chunks/messages-LTkIIrSe2.mjs} +6 -4
  128. package/dist/chunks/{messages-zqNVwsuv.mjs → messages-MPF8o3EP.mjs} +2 -0
  129. package/dist/chunks/{messages-5HoTbob5.cjs → messages-Nh7wrRdm.cjs} +1 -1
  130. package/dist/chunks/{messages-B6ALGrrK2.mjs → messages-OSIAf0Wk2.mjs} +5 -3
  131. package/dist/chunks/{messages-P9sjeERx.mjs → messages-OYoN_rp1.mjs} +4 -2
  132. package/dist/chunks/messages-QHS-Ydg_.cjs +1 -0
  133. package/dist/chunks/{messages-DLphNjiM2.cjs → messages-SpiG5vT-2.cjs} +1 -1
  134. package/dist/chunks/{messages-RumMLtL32.mjs → messages-Uc3Uc2862.mjs} +3 -1
  135. package/dist/chunks/{messages-BP9zsQtc.mjs → messages-V8K7-1l2.mjs} +2 -0
  136. package/dist/chunks/{messages-BR1Rd5-u2.cjs → messages-XFaJzdhP2.cjs} +1 -1
  137. package/dist/{messages-B3GO2TNx2.mjs → chunks/messages-Z9mDYT3w.mjs} +2 -0
  138. package/dist/chunks/{messages-CEroCDzi.mjs → messages-ZHNvKiIX.mjs} +2 -0
  139. package/dist/chunks/{messages-C2irZQlh.mjs → messages-bSVgJ1cu.mjs} +3 -1
  140. package/dist/chunks/{messages-DlNTalkx2.mjs → messages-bjSJwsXK2.mjs} +2 -0
  141. package/dist/{messages-D_jk0Apm.mjs → chunks/messages-eyGOcbhV.mjs} +2 -0
  142. package/dist/chunks/{messages-DlvmJJK6.mjs → messages-fSeXd6-z.mjs} +3 -1
  143. package/dist/{messages-BYooY4mP2.mjs → chunks/messages-l5xHQb_m.mjs} +7 -5
  144. package/dist/{messages-D_pfhYg5.mjs → chunks/messages-rEsI_fAk.mjs} +5 -3
  145. package/dist/chunks/{messages-MxqZVywa2.mjs → messages-sqdfYuVj2.mjs} +2 -0
  146. package/dist/chunks/{messages-C-D80jVE.mjs → messages-vQ5kblO8.mjs} +2 -0
  147. package/dist/chunks/{messages-BwNXKlvA2.cjs → messages-y03BGg692.cjs} +1 -1
  148. package/dist/chunks/tools-DOuVjow8.cjs +116 -0
  149. package/dist/chunks/{tools-1xd7TPfu.mjs → tools-Tt-NXbRZ.mjs} +1816 -1637
  150. package/dist/full.cjs +1 -1
  151. package/dist/full.mjs +3 -3
  152. package/dist/locales.mjs +69 -67
  153. package/dist/{chunks/messages-CkdgHogc2.mjs → messages-1ufJbdRv2.mjs} +3 -1
  154. package/dist/{messages-cBA8dKoi.mjs → messages-3j4yi-DF.mjs} +5 -3
  155. package/dist/{chunks/messages-BGCpxpgG.mjs → messages-5USazVPA2.mjs} +2 -0
  156. package/dist/{chunks/messages-Cf9wwoye2.mjs → messages-7fwJIrld2.mjs} +2 -0
  157. package/dist/{messages-hVVP_eZE.mjs → messages-AycxTjmw.mjs} +2 -0
  158. package/dist/{messages-Bg5tERmS.mjs → messages-B3PWaMcw.mjs} +6 -4
  159. package/dist/{chunks/messages-Diozu4lJ.mjs → messages-B3oFjWq3.mjs} +4 -2
  160. package/dist/{chunks/messages-ByJ-nSXK.mjs → messages-B8Tq9Txy.mjs} +2 -0
  161. package/dist/{messages-CDJP_fbb2.mjs → messages-BDwU9rYR2.mjs} +4 -2
  162. package/dist/{messages-6ukS6d5Z.mjs → messages-BGzpwNrz.mjs} +2 -0
  163. package/dist/{chunks/messages-CHXG6lEA2.mjs → messages-BKCuCTFM.mjs} +2 -0
  164. package/dist/{chunks/messages-aGEPK1g12.mjs → messages-BSHFypGE2.mjs} +2 -0
  165. package/dist/{chunks/messages-OMGVF8X52.mjs → messages-BcD7xtJA.mjs} +3 -1
  166. package/dist/{messages-DA2x_UvX2.mjs → messages-Bj03XD-02.mjs} +6 -4
  167. package/dist/{chunks/messages-C3NrnRWC.mjs → messages-BkTBwYet.mjs} +2 -0
  168. package/dist/{messages-ZjCwxd3_2.mjs → messages-BmWP4vpV2.mjs} +2 -0
  169. package/dist/{chunks/messages-DDtwOfXf.mjs → messages-Bt4TLGth.mjs} +2 -0
  170. package/dist/{chunks/messages-Bly_2YUk.mjs → messages-BtDz-sw92.mjs} +2 -0
  171. package/dist/{messages-CTcNzaJJ2.mjs → messages-C2TRJroV2.mjs} +2 -0
  172. package/dist/{messages-CDRUbL17.mjs → messages-C31VIrlL.mjs} +2 -0
  173. package/dist/{messages-Yg8Y6PlG.mjs → messages-C8RMjnBe.mjs} +2 -0
  174. package/dist/{chunks/messages-BciKgfP4.mjs → messages-C9GFRcVj.mjs} +6 -4
  175. package/dist/{chunks/messages-0cSP25RB.mjs → messages-CAGQtm7T.mjs} +5 -3
  176. package/dist/{messages-_6tu8F-N.mjs → messages-CITYhXUz.mjs} +2 -0
  177. package/dist/{messages-BbaS2xgR2.mjs → messages-CIjSE2_O2.mjs} +5 -3
  178. package/dist/{messages-BQ7jJt9m.mjs → messages-CRR1VRO6.mjs} +2 -0
  179. package/dist/{chunks/messages-Da-9fv3U.mjs → messages-CTzO11jz.mjs} +2 -0
  180. package/dist/{messages-DaSzBuLF2.mjs → messages-CX8egsiA2.mjs} +2 -0
  181. package/dist/{messages-DccIq7002.mjs → messages-C_gdsU952.mjs} +4 -2
  182. package/dist/{messages-CXXQC9Vz.mjs → messages-C_mN4lx0.mjs} +3 -1
  183. package/dist/{chunks/messages-BI7NfKFe.mjs → messages-CacRpQpm.mjs} +4 -2
  184. package/dist/{chunks/messages-BCRpttn3.mjs → messages-Cdgz3urh.mjs} +2 -0
  185. package/dist/{messages-BaC-sNb4.mjs → messages-CgVEHCQ-.mjs} +3 -1
  186. package/dist/{chunks/messages-D_24p8E62.mjs → messages-CgaGkQi32.mjs} +2 -0
  187. package/dist/{chunks/messages-D3AyiRbO.mjs → messages-CmN2OfuB.mjs} +2 -0
  188. package/dist/{chunks/messages-CSierpa_2.mjs → messages-CntTlSE22.mjs} +2 -0
  189. package/dist/{messages-BK1sXq7X.mjs → messages-Cp0fjsey.mjs} +3 -1
  190. package/dist/{messages-DHOj5syv2.mjs → messages-Cx7sqvx02.mjs} +2 -0
  191. package/dist/{messages-CQUbgCd62.mjs → messages-CxX23Jsk2.mjs} +4 -2
  192. package/dist/{chunks/messages-DTqb7T61.mjs → messages-D-rvoUSJ.mjs} +2 -0
  193. package/dist/{messages-Bkbhk9kJ2.mjs → messages-D1Fjr4OK2.mjs} +2 -0
  194. package/dist/{chunks/messages-CSkYL3AP.mjs → messages-D4U4wkYM.mjs} +2 -0
  195. package/dist/{chunks/messages-DwuvQpsD.mjs → messages-D5qgCWmB2.mjs} +7 -5
  196. package/dist/{chunks/messages-a_XmI-x5.mjs → messages-D788KtGe.mjs} +2 -0
  197. package/dist/{chunks/messages-B4-oaYBZ.mjs → messages-DFfhoDWZ2.mjs} +2 -0
  198. package/dist/{messages-BgcWyc4R.mjs → messages-DKsyrVp5.mjs} +2 -0
  199. package/dist/{messages-B_Js-HRK.mjs → messages-DL7JAwpC.mjs} +2 -0
  200. package/dist/{chunks/messages-CSioKJVK2.mjs → messages-DNlrcG5Z.mjs} +2 -0
  201. package/dist/{chunks/messages-vGRE1OPk2.mjs → messages-DPqFBtJR.mjs} +2 -0
  202. package/dist/{chunks/messages-BTKAxpmi.mjs → messages-DQik3_xv2.mjs} +2 -0
  203. package/dist/{messages-BUksRT7Q.mjs → messages-DTkd9ND8.mjs} +7 -5
  204. package/dist/{messages-Br4tspi_2.mjs → messages-DXCyNanc2.mjs} +2 -0
  205. package/dist/{chunks/messages-CdJq8h3E.mjs → messages-D_WzyzUt.mjs} +2 -0
  206. package/dist/{chunks/messages-DC0r7l8x2.mjs → messages-Ddz6eH0-2.mjs} +2 -0
  207. package/dist/{messages-BqCRuWLo.mjs → messages-DiL61awK.mjs} +2 -0
  208. package/dist/{chunks/messages-DXaps_uI.mjs → messages-Dq2WEsEu.mjs} +2 -0
  209. package/dist/{chunks/messages-8qsQ7qZX2.mjs → messages-DqXJJPx9.mjs} +3 -1
  210. package/dist/{messages-jh3qE8dL.mjs → messages-Duk7VVeY.mjs} +3 -1
  211. package/dist/{messages-DQHRgl_P.mjs → messages-DzkZ434Z.mjs} +4 -2
  212. package/dist/{messages-DUdZKtlE.mjs → messages-JKXCsFKZ.mjs} +2 -0
  213. package/dist/{chunks/messages-C9-UAJuq.mjs → messages-NVepzgE3.mjs} +4 -2
  214. package/dist/{messages-omcUe0Za.mjs → messages-PQVh93mt.mjs} +2 -0
  215. package/dist/{chunks/messages-xRQMQj4w2.mjs → messages-ftPYsH6d2.mjs} +6 -4
  216. package/dist/{chunks/messages-Ddb_L6gp2.mjs → messages-gQ5PFa2t2.mjs} +2 -0
  217. package/dist/{messages-DzqQWiFx.mjs → messages-oIa8wahx.mjs} +2 -0
  218. package/dist/{messages-DO62ugjy2.mjs → messages-rpO1POP02.mjs} +3 -1
  219. package/dist/{messages-63r3O0932.mjs → messages-uy3FE24_2.mjs} +4 -2
  220. package/dist/react.cjs +1 -1
  221. package/dist/react.mjs +1 -1
  222. package/dist/tools.cjs +1 -1
  223. package/dist/tools.mjs +2 -2
  224. package/package.json +1 -1
  225. package/src/blok.ts +2 -0
  226. package/src/cli/commands/convert-html/block-builder.ts +13 -3
  227. package/src/components/i18n/locales/am/messages.json +2 -1
  228. package/src/components/i18n/locales/ar/messages.json +2 -1
  229. package/src/components/i18n/locales/az/messages.json +3 -2
  230. package/src/components/i18n/locales/bg/messages.json +2 -1
  231. package/src/components/i18n/locales/bn/messages.json +2 -1
  232. package/src/components/i18n/locales/bs/messages.json +6 -5
  233. package/src/components/i18n/locales/cs/messages.json +4 -3
  234. package/src/components/i18n/locales/da/messages.json +6 -5
  235. package/src/components/i18n/locales/de/messages.json +4 -3
  236. package/src/components/i18n/locales/dv/messages.json +2 -1
  237. package/src/components/i18n/locales/el/messages.json +2 -1
  238. package/src/components/i18n/locales/en/messages.json +2 -0
  239. package/src/components/i18n/locales/es/messages.json +3 -2
  240. package/src/components/i18n/locales/et/messages.json +3 -2
  241. package/src/components/i18n/locales/fa/messages.json +2 -1
  242. package/src/components/i18n/locales/fi/messages.json +3 -2
  243. package/src/components/i18n/locales/fil/messages.json +7 -6
  244. package/src/components/i18n/locales/fr/messages.json +4 -3
  245. package/src/components/i18n/locales/gu/messages.json +2 -1
  246. package/src/components/i18n/locales/he/messages.json +2 -1
  247. package/src/components/i18n/locales/hi/messages.json +2 -1
  248. package/src/components/i18n/locales/hr/messages.json +5 -4
  249. package/src/components/i18n/locales/hu/messages.json +4 -3
  250. package/src/components/i18n/locales/hy/messages.json +2 -1
  251. package/src/components/i18n/locales/id/messages.json +2 -1
  252. package/src/components/i18n/locales/it/messages.json +5 -4
  253. package/src/components/i18n/locales/ja/messages.json +2 -1
  254. package/src/components/i18n/locales/ka/messages.json +2 -1
  255. package/src/components/i18n/locales/km/messages.json +2 -1
  256. package/src/components/i18n/locales/kn/messages.json +2 -1
  257. package/src/components/i18n/locales/ko/messages.json +2 -1
  258. package/src/components/i18n/locales/ku/messages.json +2 -1
  259. package/src/components/i18n/locales/lo/messages.json +2 -1
  260. package/src/components/i18n/locales/lt/messages.json +3 -2
  261. package/src/components/i18n/locales/lv/messages.json +3 -2
  262. package/src/components/i18n/locales/mk/messages.json +2 -1
  263. package/src/components/i18n/locales/ml/messages.json +2 -1
  264. package/src/components/i18n/locales/mn/messages.json +2 -1
  265. package/src/components/i18n/locales/mr/messages.json +2 -1
  266. package/src/components/i18n/locales/ms/messages.json +4 -3
  267. package/src/components/i18n/locales/my/messages.json +2 -1
  268. package/src/components/i18n/locales/ne/messages.json +2 -1
  269. package/src/components/i18n/locales/nl/messages.json +4 -3
  270. package/src/components/i18n/locales/no/messages.json +4 -3
  271. package/src/components/i18n/locales/pa/messages.json +2 -1
  272. package/src/components/i18n/locales/pl/messages.json +4 -3
  273. package/src/components/i18n/locales/ps/messages.json +2 -1
  274. package/src/components/i18n/locales/pt/messages.json +6 -5
  275. package/src/components/i18n/locales/ro/messages.json +3 -2
  276. package/src/components/i18n/locales/ru/messages.json +2 -1
  277. package/src/components/i18n/locales/sd/messages.json +2 -1
  278. package/src/components/i18n/locales/si/messages.json +2 -1
  279. package/src/components/i18n/locales/sk/messages.json +6 -5
  280. package/src/components/i18n/locales/sl/messages.json +5 -4
  281. package/src/components/i18n/locales/sq/messages.json +3 -2
  282. package/src/components/i18n/locales/sr/messages.json +2 -1
  283. package/src/components/i18n/locales/sv/messages.json +7 -6
  284. package/src/components/i18n/locales/sw/messages.json +2 -1
  285. package/src/components/i18n/locales/ta/messages.json +2 -1
  286. package/src/components/i18n/locales/te/messages.json +2 -1
  287. package/src/components/i18n/locales/th/messages.json +2 -1
  288. package/src/components/i18n/locales/tr/messages.json +2 -1
  289. package/src/components/i18n/locales/ug/messages.json +2 -1
  290. package/src/components/i18n/locales/uk/messages.json +2 -1
  291. package/src/components/i18n/locales/ur/messages.json +2 -1
  292. package/src/components/i18n/locales/vi/messages.json +2 -1
  293. package/src/components/i18n/locales/yi/messages.json +2 -1
  294. package/src/components/i18n/locales/zh/messages.json +2 -1
  295. package/src/components/icons/index.ts +6 -3
  296. package/src/components/inline-tools/inline-tool-marker.ts +12 -0
  297. package/src/components/modules/api/blocks.ts +3 -0
  298. package/src/components/modules/paste/google-docs-preprocessor.ts +64 -28
  299. package/src/components/modules/paste/sanitizer-config.ts +10 -1
  300. package/src/components/modules/renderer.ts +7 -1
  301. package/src/components/modules/toolbar/blockSettings.ts +54 -7
  302. package/src/components/modules/toolbar/content-alignment.ts +89 -0
  303. package/src/components/modules/toolbar/index.ts +85 -61
  304. package/src/components/modules/ui.ts +28 -6
  305. package/src/components/modules/uiControllers/controllers/blockHover.ts +20 -0
  306. package/src/components/utils/color-mapping.ts +15 -0
  307. package/src/components/utils/color-migration.ts +10 -0
  308. package/src/components/utils/data-model-transform.ts +200 -0
  309. package/src/components/utils/default-page-colors.ts +130 -0
  310. package/src/components/utils/highlight-block-arrival.ts +50 -0
  311. package/src/components/utils/popover/popover-desktop.ts +23 -1
  312. package/src/styles/image.css +86 -0
  313. package/src/styles/keyframes.css +6 -0
  314. package/src/styles/main.css +17 -0
  315. package/src/tools/database/index.ts +3 -4
  316. package/src/tools/image/dimensions-from-svg.ts +53 -0
  317. package/src/tools/image/dimensions-from-url.ts +87 -0
  318. package/src/tools/image/error-state.ts +7 -2
  319. package/src/tools/image/index.ts +81 -7
  320. package/src/tools/image/probe-dimensions.ts +36 -0
  321. package/src/tools/image/ui.ts +46 -2
  322. package/src/tools/image/uploader.ts +12 -8
  323. package/src/tools/table/table-cell-clipboard.ts +17 -3
  324. package/types/tools/image.d.ts +16 -2
  325. package/dist/chunks/constants-JFG5JxhI.cjs +0 -457
  326. package/dist/chunks/messages-C-FUK4Ki2.cjs +0 -1
  327. package/dist/chunks/messages-CLkrVqVp.cjs +0 -1
  328. package/dist/chunks/messages-D9qYuzOY2.cjs +0 -1
  329. package/dist/chunks/messages-DEdX7dXt2.cjs +0 -1
  330. package/dist/chunks/tools-Cnlc1TxG.cjs +0 -116
@@ -25,7 +25,7 @@
25
25
  "toolNames.database": "Databas",
26
26
  "tools.link.addLink": "Lägg till länk",
27
27
  "tools.link.invalidLink": "Ogiltig länk",
28
- "tools.marker.textColor": "Text",
28
+ "tools.marker.textColor": "Textfärg",
29
29
  "tools.marker.background": "Bakgrund",
30
30
  "tools.marker.default": "Standard",
31
31
  "tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
@@ -207,7 +207,7 @@
207
207
  "tools.code.lineNumbers": "Radnummer",
208
208
  "searchTerms.code": "kod",
209
209
  "searchTerms.snippet": "kodsnutt",
210
- "searchTerms.program": "program",
210
+ "searchTerms.program": "programkod",
211
211
  "searchTerms.pre": "förformaterad",
212
212
  "toolNames.image": "Bild",
213
213
  "blockSettings.blocksSelected": "{count} block",
@@ -218,7 +218,7 @@
218
218
  "tools.link.emailAddress": "E-postadress",
219
219
  "tools.link.jumpToSection": "Gå till avsnitt",
220
220
  "tools.link.webLink": "Länk till webbsida",
221
- "tools.code.autoDetected": "auto",
221
+ "tools.code.autoDetected": "automatiskt",
222
222
  "tools.code.plainText": "Oformaterad text",
223
223
  "tools.image.alignment": "Justering",
224
224
  "tools.image.alignmentLeft": "Vänster",
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "Zooma ut",
261
261
  "tools.image.resetZoom": "Återställ zoom",
262
262
  "tools.image.errorUploadFailed": "Uppladdningen misslyckades",
263
+ "tools.image.errorUploadFailedTitle": "Uppladdningen misslyckades",
263
264
  "tools.image.errorSourceOffline": "Källan kan ha flyttats eller vara offline.",
264
265
  "tools.image.errorUnavailable": "Bild ej tillgänglig",
266
+ "tools.image.errorImageFailedToLoad": "Det gick inte att läsa in bilden",
265
267
  "tools.image.errorDefaultTitle": "Bilden kunde inte läsas in",
266
268
  "tools.image.errorDefaultMessage": "URL:en returnerade ett fel. Prova en annan källa eller ladda upp filen igen.",
267
269
  "tools.image.errorRetry": "Försök igen",
@@ -273,7 +275,7 @@
273
275
  "tools.image.emptyChooseFile": "Välj fil",
274
276
  "tools.image.emptyOrDropHere": "eller släpp en bild här",
275
277
  "tools.image.emptyDropToUpload": "Släpp för att ladda upp",
276
- "tools.image.emptyMaxSize": "max {size}",
278
+ "tools.image.emptyMaxSize": "högst {size}",
277
279
  "tools.image.emptyUrlPlaceholder": "Klistra in en bild-URL…",
278
280
  "tools.image.emptyUrlAria": "Bild-URL",
279
281
  "tools.image.emptySourceAria": "Bildkälla",
@@ -283,7 +285,7 @@
283
285
  "tools.image.cropRatio4to3": "4:3",
284
286
  "tools.image.cropRatio16to9": "16:9",
285
287
  "tools.image.cropRatioCircle": "Cirkel",
286
- "tools.image.cropRatioOval": "Oval",
288
+ "tools.image.cropRatioOval": "Ellips",
287
289
  "tools.image.cropReset": "Återställ",
288
290
  "tools.image.cropCancel": "Avbryt",
289
291
  "tools.image.cropDone": "Klar",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "Klar",
318
320
  "tools.database.defaultViewBoard": "Tavla"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "Kuza nje",
261
261
  "tools.image.resetZoom": "Weka upya ukuzaji",
262
262
  "tools.image.errorUploadFailed": "Upakiaji umeshindikana",
263
+ "tools.image.errorUploadFailedTitle": "Upakiaji umeshindwa",
263
264
  "tools.image.errorSourceOffline": "Chanzo kinaweza kuwa kimehamishwa au nje ya mtandao.",
264
265
  "tools.image.errorUnavailable": "Picha haipatikani",
266
+ "tools.image.errorImageFailedToLoad": "Imeshindwa kupakia picha",
265
267
  "tools.image.errorDefaultTitle": "Haikuweza kupakia picha",
266
268
  "tools.image.errorDefaultMessage": "URL imerudisha hitilafu. Jaribu chanzo kingine au pakia faili tena.",
267
269
  "tools.image.errorRetry": "Jaribu tena",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "Imekamilika",
318
320
  "tools.database.defaultViewBoard": "Ubao"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "சிறிதாக்கு",
261
261
  "tools.image.resetZoom": "பெரிதாக்கத்தை மீட்டமை",
262
262
  "tools.image.errorUploadFailed": "பதிவேற்றம் தோல்வி",
263
+ "tools.image.errorUploadFailedTitle": "பதிவேற்றம் தோல்வி",
263
264
  "tools.image.errorSourceOffline": "மூலம் நகர்த்தப்பட்டிருக்கலாம் அல்லது ஆஃப்லைனில் இருக்கலாம்.",
264
265
  "tools.image.errorUnavailable": "படம் கிடைக்கவில்லை",
266
+ "tools.image.errorImageFailedToLoad": "படத்தை ஏற்ற முடியவில்லை",
265
267
  "tools.image.errorDefaultTitle": "படத்தை ஏற்ற முடியவில்லை",
266
268
  "tools.image.errorDefaultMessage": "URL ஒரு பிழையை வழங்கியது. வேறு மூலத்தை முயற்சிக்கவும் அல்லது கோப்பை மீண்டும் பதிவேற்றவும்.",
267
269
  "tools.image.errorRetry": "மீண்டும் முயற்சி",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "முடிந்தது",
318
320
  "tools.database.defaultViewBoard": "பலகை"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "జూమ్ అవుట్",
261
261
  "tools.image.resetZoom": "జూమ్ రీసెట్",
262
262
  "tools.image.errorUploadFailed": "అప్‌లోడ్ విఫలమైంది",
263
+ "tools.image.errorUploadFailedTitle": "అప్‌లోడ్ విఫలమైంది",
263
264
  "tools.image.errorSourceOffline": "మూలం తరలించబడి ఉండవచ్చు లేదా ఆఫ్‌లైన్‌లో ఉండవచ్చు.",
264
265
  "tools.image.errorUnavailable": "చిత్రం అందుబాటులో లేదు",
266
+ "tools.image.errorImageFailedToLoad": "చిత్రాన్ని లోడ్ చేయడంలో విఫలమైంది",
265
267
  "tools.image.errorDefaultTitle": "చిత్రాన్ని లోడ్ చేయలేకపోయాము",
266
268
  "tools.image.errorDefaultMessage": "URL లోపాన్ని తిరిగి ఇచ్చింది. వేరే మూలాన్ని ప్రయత్నించండి లేదా ఫైల్‌ను మళ్లీ అప్‌లోడ్ చేయండి.",
267
269
  "tools.image.errorRetry": "మళ్లీ ప్రయత్నించు",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "పూర్తయింది",
318
320
  "tools.database.defaultViewBoard": "బోర్డ్"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "ย่อ",
261
261
  "tools.image.resetZoom": "รีเซ็ตการซูม",
262
262
  "tools.image.errorUploadFailed": "อัปโหลดล้มเหลว",
263
+ "tools.image.errorUploadFailedTitle": "อัปโหลดไม่สำเร็จ",
263
264
  "tools.image.errorSourceOffline": "แหล่งที่มาอาจถูกย้ายหรือออฟไลน์",
264
265
  "tools.image.errorUnavailable": "ไม่มีรูปภาพ",
266
+ "tools.image.errorImageFailedToLoad": "โหลดรูปภาพไม่สำเร็จ",
265
267
  "tools.image.errorDefaultTitle": "ไม่สามารถโหลดรูปภาพได้",
266
268
  "tools.image.errorDefaultMessage": "URL คืนค่าผิดพลาด ลองแหล่งอื่นหรืออัปโหลดไฟล์อีกครั้ง",
267
269
  "tools.image.errorRetry": "ลองอีกครั้ง",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "เสร็จสิ้น",
318
320
  "tools.database.defaultViewBoard": "บอร์ด"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "Uzaklaştır",
261
261
  "tools.image.resetZoom": "Yakınlaştırmayı sıfırla",
262
262
  "tools.image.errorUploadFailed": "Yükleme başarısız",
263
+ "tools.image.errorUploadFailedTitle": "Yükleme başarısız",
263
264
  "tools.image.errorSourceOffline": "Kaynak taşınmış veya çevrimdışı olabilir.",
264
265
  "tools.image.errorUnavailable": "Görsel kullanılamıyor",
266
+ "tools.image.errorImageFailedToLoad": "Görsel yüklenemedi",
265
267
  "tools.image.errorDefaultTitle": "Görsel yüklenemedi",
266
268
  "tools.image.errorDefaultMessage": "URL bir hata döndürdü. Farklı bir kaynak deneyin veya dosyayı yeniden yükleyin.",
267
269
  "tools.image.errorRetry": "Yeniden dene",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "Tamamlandı",
318
320
  "tools.database.defaultViewBoard": "Pano"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "كىچىكلىتىش",
261
261
  "tools.image.resetZoom": "چوڭايتىشنى ئەسلىگە كەلتۈرۈش",
262
262
  "tools.image.errorUploadFailed": "چىقىرىش مەغلۇپ بولدى",
263
+ "tools.image.errorUploadFailedTitle": "يۈكلەش مەغلۇپ بولدى",
263
264
  "tools.image.errorSourceOffline": "مەنبە يۆتكەلگەن ياكى ئوفلىن بولۇشى مۇمكىن.",
264
265
  "tools.image.errorUnavailable": "رەسىم ئىشلەتكىلى بولمايدۇ",
266
+ "tools.image.errorImageFailedToLoad": "رەسىمنى يۈكلىگىلى بولمىدى",
265
267
  "tools.image.errorDefaultTitle": "رەسىم يۈكلەنمىدى",
266
268
  "tools.image.errorDefaultMessage": "URL خاتالىق قايتۇردى. باشقا مەنبە سىناڭ ياكى ھۆججەتنى قايتا يۈكلەڭ.",
267
269
  "tools.image.errorRetry": "قايتا سىناش",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "تاماملاندى",
318
320
  "tools.database.defaultViewBoard": "تاختا"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "Зменшити",
261
261
  "tools.image.resetZoom": "Скинути масштаб",
262
262
  "tools.image.errorUploadFailed": "Не вдалося завантажити",
263
+ "tools.image.errorUploadFailedTitle": "Помилка завантаження",
263
264
  "tools.image.errorSourceOffline": "Джерело могло бути переміщене або недоступне.",
264
265
  "tools.image.errorUnavailable": "Зображення недоступне",
266
+ "tools.image.errorImageFailedToLoad": "Не вдалося завантажити зображення",
265
267
  "tools.image.errorDefaultTitle": "Не вдалося завантажити зображення",
266
268
  "tools.image.errorDefaultMessage": "Сервер повернув помилку. Спробуйте інше джерело або завантажте файл знову.",
267
269
  "tools.image.errorRetry": "Повторити",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "Готово",
318
320
  "tools.database.defaultViewBoard": "Дошка"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "زوم آؤٹ",
261
261
  "tools.image.resetZoom": "زوم ری سیٹ",
262
262
  "tools.image.errorUploadFailed": "اپ لوڈ ناکام",
263
+ "tools.image.errorUploadFailedTitle": "اپ لوڈ ناکام",
263
264
  "tools.image.errorSourceOffline": "ممکن ہے ذریعہ منتقل ہو گیا ہو یا آف لائن ہو۔",
264
265
  "tools.image.errorUnavailable": "تصویر دستیاب نہیں",
266
+ "tools.image.errorImageFailedToLoad": "تصویر لوڈ نہ ہو سکی",
265
267
  "tools.image.errorDefaultTitle": "تصویر لوڈ نہیں ہو سکی",
266
268
  "tools.image.errorDefaultMessage": "URL نے خرابی واپس کی۔ دوسرا ذریعہ آزمائیں یا فائل دوبارہ اپ لوڈ کریں۔",
267
269
  "tools.image.errorRetry": "دوبارہ کوشش کریں",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "مکمل",
318
320
  "tools.database.defaultViewBoard": "بورڈ"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "Thu nhỏ",
261
261
  "tools.image.resetZoom": "Đặt lại thu phóng",
262
262
  "tools.image.errorUploadFailed": "Tải lên thất bại",
263
+ "tools.image.errorUploadFailedTitle": "Tải lên thất bại",
263
264
  "tools.image.errorSourceOffline": "Nguồn có thể đã di chuyển hoặc ngoại tuyến.",
264
265
  "tools.image.errorUnavailable": "Không có hình ảnh",
266
+ "tools.image.errorImageFailedToLoad": "Không thể tải ảnh",
265
267
  "tools.image.errorDefaultTitle": "Không thể tải hình ảnh",
266
268
  "tools.image.errorDefaultMessage": "URL trả về lỗi. Hãy thử nguồn khác hoặc tải lại tệp.",
267
269
  "tools.image.errorRetry": "Thử lại",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "Hoàn thành",
318
320
  "tools.database.defaultViewBoard": "Bảng"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "פארקלענערן",
261
261
  "tools.image.resetZoom": "ריסעט זום",
262
262
  "tools.image.errorUploadFailed": "אפלאד דורכגעפאלן",
263
+ "tools.image.errorUploadFailedTitle": "אויפֿלאָדן געפֿעלט",
263
264
  "tools.image.errorSourceOffline": "די מקור קען זיין אריבערגעטראגן אדער אפליין.",
264
265
  "tools.image.errorUnavailable": "בילד נישט דא",
266
+ "tools.image.errorImageFailedToLoad": "בילד האט נישט געקענט לאדן",
265
267
  "tools.image.errorDefaultTitle": "בילד האט זיך נישט געלאדן",
266
268
  "tools.image.errorDefaultMessage": "די URL האט צוריקגעקערט א טעות. פרובירט אן אנדערן מקור אדער לאדט ווידער די טעקע.",
267
269
  "tools.image.errorRetry": "פרובירט ווידער",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "פארטיק",
318
320
  "tools.database.defaultViewBoard": "ברעט"
319
321
  }
320
-
@@ -260,8 +260,10 @@
260
260
  "tools.image.zoomOut": "缩小",
261
261
  "tools.image.resetZoom": "重置缩放",
262
262
  "tools.image.errorUploadFailed": "上传失败",
263
+ "tools.image.errorUploadFailedTitle": "上传失败",
263
264
  "tools.image.errorSourceOffline": "来源可能已更改或离线。",
264
265
  "tools.image.errorUnavailable": "图片不可用",
266
+ "tools.image.errorImageFailedToLoad": "无法加载图片",
265
267
  "tools.image.errorDefaultTitle": "无法加载图片",
266
268
  "tools.image.errorDefaultMessage": "URL 返回错误。请尝试其他来源或重新上传文件。",
267
269
  "tools.image.errorRetry": "重试",
@@ -317,4 +319,3 @@
317
319
  "tools.database.defaultStatusDone": "已完成",
318
320
  "tools.database.defaultViewBoard": "看板"
319
321
  }
320
-
@@ -719,9 +719,9 @@ export const IconCollapseFullscreen = wrapImageSvg('<path d="M9 3v6H3"/><path d=
719
719
  export const IconExpandFullscreen = wrapImageSvg('<path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="m21 3-7 7"/><path d="m3 21 7-7"/>');
720
720
  export const IconDownload = wrapImageSvg('<path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/>');
721
721
  export const IconCaption = wrapImageSvg('<rect x="3" y="3.5" width="18" height="12" rx="2.5"/><path d="M5 19h14"/><path d="M8 22h8"/>');
722
- // Replace (image) — opposing horizontal arrows. Distinct from IconReplace
723
- // (20×20 looping arrows) used by the inline-toolbar convert-to feature.
724
- export const IconReplaceImage = wrapImageSvg('<path d="M4 7h15"/><path d="m15 3 4 4-4 4"/><path d="M20 17H5"/><path d="m9 13-4 4 4 4"/>');
722
+ // Replace (image) — IconReplace geometry scaled to the 24×24 / 1.75-stroke
723
+ // image-toolbar spec so it sits at the same optical size as its neighbours.
724
+ export const IconReplaceImage = wrapImageSvg('<path d="m17.5 8 2.5-2.5L17.5 3"/><path d="M20 5.5h-5.5a6 6 0 0 0-6 6V13"/><path d="m6.5 16-2.5 2.5L6.5 21"/><path d="M4 18.5h5.5a6 6 0 0 0 6-6V11"/>');
725
725
  export const IconCrop = wrapImageSvg('<path d="M6 2v14a2 2 0 0 0 2 2h14"/><path d="M2 6h14a2 2 0 0 1 2 2v14"/>');
726
726
 
727
727
  // More-options (horizontal 3 dots) — filled circles
@@ -733,6 +733,9 @@ export const IconCloseThick = '<svg viewBox="0 0 24 24" fill="none" stroke="curr
733
733
  // Broken image alert — error state
734
734
  export const IconImageBroken = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M14.5 4.5H6A2.5 2.5 0 0 0 3.5 7v10A2.5 2.5 0 0 0 6 19.5h12a2.5 2.5 0 0 0 2.5-2.5v-6.25"/><path d="m14.5 4.5 1.75 2.25 2.25-1.25 2 2.75"/><circle cx="8" cy="9" r="1.2" fill="currentColor" stroke="none"/><path d="m3.8 16.25 3.45-3.45 2.5 2.5 3.5-3.5 4 4"/></svg>';
735
735
 
736
+ // Cloud with a strike-through — upload-failed error state
737
+ export const IconUploadFailed = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 16.5A4.5 4.5 0 0 0 17 8.25a6 6 0 0 0-11.7 1.5A4 4 0 0 0 6 17.5"/><path d="M12 12v5"/><path d="m9.5 14.5 2.5-2.5 2.5 2.5"/><path d="m4 4 16 16" stroke-width="2"/></svg>';
738
+
736
739
  export const IconUpload = wrapImageSvg('<path d="M12 4v10"/><path d="m7.5 8.5 4.5-4.5 4.5 4.5"/><path d="M5 14v3.5A2.5 2.5 0 0 0 7.5 20h9a2.5 2.5 0 0 0 2.5-2.5V14"/>');
737
740
  export const IconLinkExternal = wrapImageSvg('<path d="M10 14a5 5 0 0 0 7.07 0l2.83-2.83a5 5 0 0 0-7.07-7.07L11.5 5.5"/><path d="M14 10a5 5 0 0 0-7.07 0l-2.83 2.83a5 5 0 0 0 7.07 7.07l1.33-1.33"/>');
738
741
  export const IconArrowDownLine = wrapImageSvg('<path d="M12 4v12"/><path d="m6.5 10.5 5.5 5.5 5.5-5.5"/><path d="M4 18h16"/>');
@@ -17,6 +17,7 @@ import { createColorPicker } from '../shared/color-picker';
17
17
  import type { ColorPickerHandle } from '../shared/color-picker';
18
18
  import { colorVarName } from '../shared/color-presets';
19
19
  import { mapToNearestPresetName } from '../utils/color-mapping';
20
+ import { isDefaultDarkBackground, isDefaultWhiteBackground } from '../utils/default-page-colors';
20
21
 
21
22
  /**
22
23
  * Color mode type — either text color or background color
@@ -88,6 +89,17 @@ export class MarkerInlineTool implements InlineTool {
88
89
  }
89
90
  }
90
91
 
92
+ /**
93
+ * Strip default page background-colors (white / near-black) so a
94
+ * pasted <mark> from another editor doesn't persist a bg that was
95
+ * really just the source page background.
96
+ */
97
+ const bg = style.getPropertyValue('background-color');
98
+
99
+ if (bg && (isDefaultWhiteBackground(bg) || isDefaultDarkBackground(bg))) {
100
+ style.removeProperty('background-color');
101
+ }
102
+
91
103
  /**
92
104
  * When text color is set without an explicit background-color,
93
105
  * add transparent background to override the browser's default
@@ -8,6 +8,7 @@ import { Block } from '../../block';
8
8
  import { BlockAPI } from '../../block/api';
9
9
  import { capitalize } from '../../utils';
10
10
  import { normalizeTableChildParents } from '../../utils/data-model-transform';
11
+ import { highlightBlockArrival } from '../../utils/highlight-block-arrival';
11
12
 
12
13
  import { logLabeled } from './../../utils';
13
14
 
@@ -597,5 +598,7 @@ export class BlocksAPI extends Module {
597
598
  if (block !== undefined) {
598
599
  this.Blok.BlockSelection.selectBlock(block);
599
600
  }
601
+
602
+ highlightBlockArrival(el);
600
603
  }
601
604
  }
@@ -1,4 +1,8 @@
1
1
  import { mapToNearestPresetColor } from '../../utils/color-mapping';
2
+ import {
3
+ isDefaultDarkBackground as isDefaultDarkBackgroundShared,
4
+ isDefaultWhiteBackground as isDefaultWhiteBackgroundShared,
5
+ } from '../../utils/default-page-colors';
2
6
 
3
7
  /**
4
8
  * Pre-process Google Docs clipboard HTML before sanitization.
@@ -112,10 +116,31 @@ function splitAncestorsAroundImage(img: Element, topLevel: Element): { before: N
112
116
  return reduce(img, null, null);
113
117
  }
114
118
 
119
+ function hasTableAncestorWithin(node: Element, wrapper: HTMLElement): boolean {
120
+ const parent = node.parentElement;
121
+
122
+ if (parent === null || parent === wrapper) {
123
+ return false;
124
+ }
125
+
126
+ if (parent.tagName === 'TABLE') {
127
+ return true;
128
+ }
129
+
130
+ return hasTableAncestorWithin(parent, wrapper);
131
+ }
132
+
115
133
  function promoteImages(wrapper: HTMLElement): void {
116
134
  const imgs = Array.from(wrapper.querySelectorAll('img'));
117
135
 
118
136
  for (const img of imgs) {
137
+ /**
138
+ * Images inside a <table> must stay in their cell. Promoting them would
139
+ * split the table around the image boundary, destroying the original
140
+ * row/column layout and scattering the cell contents across half-tables.
141
+ */
142
+ if (hasTableAncestorWithin(img, wrapper)) continue;
143
+
119
144
  const topLevel = findTopLevelAncestor(img, wrapper);
120
145
 
121
146
  if (!topLevel) continue;
@@ -263,31 +288,12 @@ function computeRelativeLuminance(color: string): number {
263
288
  }
264
289
 
265
290
  /**
266
- * Check whether a CSS background-color value is the default white page background.
267
- * When the browser natively copies from a contenteditable, it adds computed styles
268
- * including `background-color: rgb(255, 255, 255)` — the resolved page background.
269
- * These should not be treated as intentional marker formatting.
291
+ * Re-exports for backward compatibility with table-cell-clipboard and other
292
+ * callers that still import these helpers from this module. The canonical
293
+ * implementations live in `src/components/utils/default-page-colors.ts`.
270
294
  */
271
- function isDefaultWhiteBackground(bgColor: string): boolean {
272
- const normalized = bgColor.replace(/\s/g, '').toLowerCase();
273
-
274
- return normalized === 'rgb(255,255,255)' || normalized === '#ffffff' || normalized === 'white';
275
- }
276
-
277
- /**
278
- * Check whether a CSS background-color value is a near-black (dark mode page) background.
279
- * When the browser natively copies from a contenteditable in dark mode, it adds computed
280
- * styles including the resolved dark page background (e.g. rgb(25, 25, 24) for Blok's
281
- * #191918 dark background). These should not be treated as intentional marker formatting.
282
- *
283
- * Uses relative luminance < 0.12, which is below all Blok dark background presets
284
- * (~18% minimum lightness for #2f2f2f) while catching typical dark page backgrounds.
285
- */
286
- function isDefaultDarkBackground(bgColor: string): boolean {
287
- const luminance = computeRelativeLuminance(bgColor);
288
-
289
- return luminance >= 0 && luminance < 0.12;
290
- }
295
+ export const isDefaultWhiteBackground = isDefaultWhiteBackgroundShared;
296
+ export const isDefaultDarkBackground = isDefaultDarkBackgroundShared;
291
297
 
292
298
  /**
293
299
  * Check whether a CSS color value is a near-white (dark mode default text) color.
@@ -348,9 +354,31 @@ function buildMarkWrapper(
348
354
  *
349
355
  * @returns replacement HTML string, or `null` if the span should be left as-is
350
356
  */
357
+ const HEADING_TAGS = new Set(['H1', 'H2', 'H3', 'H4', 'H5', 'H6']);
358
+
359
+ function hasHeadingAncestor(node: Element): boolean {
360
+ const parent = node.parentElement;
361
+
362
+ if (parent === null) {
363
+ return false;
364
+ }
365
+
366
+ if (HEADING_TAGS.has(parent.tagName)) {
367
+ return true;
368
+ }
369
+
370
+ return hasHeadingAncestor(parent);
371
+ }
372
+
351
373
  function convertSpanToSemanticHtml(span: Element, isGoogleDocs: boolean): string | null {
352
374
  const style = span.getAttribute('style') ?? '';
353
- const isBold = /font-weight\s*:\s*(700|bold)/i.test(style);
375
+ /**
376
+ * Headings are already rendered bold. A span with font-weight:700 inside a
377
+ * heading is the default weight Google Docs writes — treating it as bold
378
+ * would wrap the text in `<b>`, producing `<strong>` in saved data and
379
+ * visibly doubling the weight.
380
+ */
381
+ const isBold = /font-weight\s*:\s*(700|bold)/i.test(style) && !hasHeadingAncestor(span);
354
382
  const isItalic = /font-style\s*:\s*italic/i.test(style);
355
383
 
356
384
  const colorMatch = /(?<![a-z-])color\s*:\s*([^;]+)/i.exec(style);
@@ -362,9 +390,17 @@ function convertSpanToSemanticHtml(span: Element, isGoogleDocs: boolean): string
362
390
  const hasColor = isGoogleDocs
363
391
  ? color !== undefined && !isDefaultBlack(color)
364
392
  : color !== undefined && !isDefaultBlack(color) && !isDefaultLightText(color);
365
- const hasBgColor = isGoogleDocs
366
- ? bgColor !== undefined && bgColor !== 'transparent'
367
- : bgColor !== undefined && bgColor !== 'transparent' && !isDefaultWhiteBackground(bgColor) && !isDefaultDarkBackground(bgColor);
393
+ /**
394
+ * Default page backgrounds (white/near-white, near-black) are filtered for both
395
+ * branches. Google Docs writes the page background-color onto every <span> in
396
+ * the clipboard payload — without this filter, the nearest-preset color mapping
397
+ * would attach a default-bg styled <mark> to every paragraph.
398
+ */
399
+ const hasBgColor =
400
+ bgColor !== undefined &&
401
+ bgColor !== 'transparent' &&
402
+ !isDefaultWhiteBackground(bgColor) &&
403
+ !isDefaultDarkBackground(bgColor);
368
404
 
369
405
  if (!isBold && !isItalic && !hasColor && !hasBgColor) {
370
406
  return null;
@@ -93,7 +93,16 @@ export class SanitizerConfigBuilder {
93
93
  * Special handling for table sanitization.
94
94
  */
95
95
  public sanitizeTable(table: HTMLElement, config: SanitizerConfig): HTMLElement | null {
96
- const cleanTableHTML = clean(table.outerHTML, config);
96
+ /**
97
+ * Allow `<img>` inside table cells so pasted images (e.g. from Google Docs
98
+ * tables) survive sanitization and end up in the cell's paragraph content
99
+ * rather than being stripped silently.
100
+ */
101
+ const tableConfig: SanitizerConfig = {
102
+ ...config,
103
+ img: { src: true, alt: true, width: true, height: true },
104
+ };
105
+ const cleanTableHTML = clean(table.outerHTML, tableConfig);
97
106
  const tmpWrapper = document.createElement('div');
98
107
 
99
108
  tmpWrapper.innerHTML = cleanTableHTML;
@@ -8,6 +8,7 @@ import {
8
8
  analyzeDataFormat,
9
9
  expandToHierarchical,
10
10
  normalizeTableChildParents,
11
+ reclaimDetachedTableCells,
11
12
  shouldExpandToHierarchical,
12
13
  type DataFormatAnalysis,
13
14
  } from '../utils/data-model-transform';
@@ -100,12 +101,17 @@ export class Renderer extends Module {
100
101
  ? expandToHierarchical(blocksData)
101
102
  : blocksData;
102
103
 
104
+ // Recover migrated cells whose text a pre-fix save detached to root:
105
+ // re-attach `cell-<row>-<col>`-id orphans back into their empty cell.
106
+ // Runs before normalize so reclaimed refs get parented in the same pass.
107
+ const reclaimedBlocks = reclaimDetachedTableCells(expandedBlocks);
108
+
103
109
  // Tables persist child references via `data.content[r][c].blocks = [<id>]`
104
110
  // rather than an explicit `parent` field on each child. Pre-normalize
105
111
  // those parent references so downstream code that gates on parentId
106
112
  // (read-only cell mounter, saver filter, hierarchy queries) correctly
107
113
  // recognizes the children as belonging to their table.
108
- const processedBlocks = normalizeTableChildParents(expandedBlocks);
114
+ const processedBlocks = normalizeTableChildParents(reclaimedBlocks);
109
115
 
110
116
  // Note: Yjs data layer is loaded via BlockManager.insertMany() with the correct block IDs
111
117
 
@@ -13,7 +13,7 @@ import { getConvertibleToolsForBlock, getConvertibleToolsForBlocks } from '../..
13
13
  import type { PopoverItemParams, Popover } from '../../utils/popover';
14
14
  import { PopoverDesktop, PopoverMobile, PopoverItemType } from '../../utils/popover';
15
15
  import { css as popoverItemCls } from '../../utils/popover/components/popover-item';
16
- import { translateToolTitle } from '../../utils/tools';
16
+ import { translateToolName, translateToolTitle } from '../../utils/tools';
17
17
 
18
18
  import type { PopoverParams } from '@/types/utils/popover/popover';
19
19
  import { PopoverEvent } from '@/types/utils/popover/popover-event';
@@ -198,9 +198,20 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
198
198
 
199
199
  const items = await this.getTunesItems(block, commonTunes, toolTunes);
200
200
 
201
- const contextLabel = hasMultipleBlocksSelected
202
- ? `${selectedBlocks.length} blocks`
203
- : (await block.getActiveToolboxEntry())?.title ?? block.name;
201
+ const activeEntry = hasMultipleBlocksSelected
202
+ ? undefined
203
+ : await block.getActiveToolboxEntry();
204
+ const contextLabel = ((): string => {
205
+ if (hasMultipleBlocksSelected) {
206
+ return `${selectedBlocks.length} blocks`;
207
+ }
208
+
209
+ if (activeEntry) {
210
+ return translateToolTitle(this.Blok.I18n, activeEntry, block.name);
211
+ }
212
+
213
+ return translateToolName(this.Blok.I18n, undefined, block.name);
214
+ })();
204
215
 
205
216
  const PopoverClass = isMobileScreen() ? PopoverMobile : PopoverDesktop;
206
217
  const popoverParams: PopoverParams & { flipper?: Flipper } = {
@@ -237,11 +248,22 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
237
248
  this.opened = true;
238
249
  this.isOpening = false;
239
250
 
240
- /** Tell to subscribers that block settings is opened */
241
- this.eventsDispatcher.emit(this.events.opened);
242
-
251
+ /**
252
+ * Show the popover BEFORE dispatching the `opened` event.
253
+ *
254
+ * Listeners of that event toggle a data attribute on the UI wrapper
255
+ * (`data-blok-block-settings-opened=true`) whose Tailwind rule hides the
256
+ * settings toggler via `display:none`. If we emit first, the trigger
257
+ * element collapses to a zero rect before `show()` reads it, and the
258
+ * popover ends up positioned at the viewport's top-left corner.
259
+ * Measure + place the popover while the trigger is still visible,
260
+ * then announce state change.
261
+ */
243
262
  this.popover.show();
244
263
  this.attachFlipperKeydownListener(block);
264
+
265
+ /** Tell to subscribers that block settings is opened */
266
+ this.eventsDispatcher.emit(this.events.opened);
245
267
  } catch {
246
268
  this.isOpening = false;
247
269
  }
@@ -324,9 +346,34 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
324
346
  const items = [] as MenuConfigItem[];
325
347
  const selectedBlocks = this.Blok.BlockSelection.selectedBlocks;
326
348
  const hasMultipleBlocksSelected = selectedBlocks.length > 1;
349
+ const isReadOnly = this.Blok.ReadOnly.isEnabled;
327
350
 
328
351
  const allBlockTools = Array.from(this.Blok.Tools.blockTools.values());
329
352
 
353
+ /**
354
+ * Read-only (Notion-style): expose only the copy-link tune, plus the
355
+ * edit-metadata footer if present. No convert-to, no delete, no moves,
356
+ * no tool-specific tunes.
357
+ */
358
+ if (isReadOnly) {
359
+ const copyLinkItems = commonTunes.filter(
360
+ (tune): tune is MenuConfigItem & { name: string } => 'name' in tune && tune.name === 'copy-link'
361
+ );
362
+
363
+ items.push(...copyLinkItems);
364
+
365
+ if (currentBlock.lastEditedAt !== undefined) {
366
+ items.push({ type: PopoverItemType.Separator });
367
+ items.push({
368
+ type: PopoverItemType.Html,
369
+ element: this.createEditMetadataFooter(currentBlock),
370
+ name: 'edit-metadata',
371
+ });
372
+ }
373
+
374
+ return items;
375
+ }
376
+
330
377
  /**
331
378
  * Tool-specific tunes come first (e.g. heading level selector)
332
379
  */