@jackuait/blok 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blok.cjs +1 -1
- package/dist/blok.iife.js +30 -30
- package/dist/blok.mjs +2 -2
- package/dist/chunks/blok-Da-GaWJ8.cjs +17 -0
- package/dist/chunks/{blok-Du6vYONn.mjs → blok-PpFnlqXZ.mjs} +2722 -2322
- package/dist/chunks/constants-C-OQpSwB.cjs +457 -0
- package/dist/chunks/{constants-DUuYY64n.mjs → constants-DdfiMdC1.mjs} +390 -299
- package/dist/chunks/{i18next-loader-GIrBCFrC.mjs → i18next-loader-BEWWek8j.mjs} +1 -1
- package/dist/chunks/{i18next-loader-DC1uN-wc.cjs → i18next-loader-BRLYf-CW.cjs} +1 -1
- package/dist/chunks/{lightweight-i18n-DF9Pupws.mjs → lightweight-i18n-GbzxWVgl.mjs} +9 -0
- package/dist/chunks/lightweight-i18n-lNYVKCfj.cjs +1 -0
- package/dist/chunks/messages-085GG-gT.cjs +1 -0
- package/dist/{messages-3j4yi-DF.mjs → chunks/messages-46QopBh4.mjs} +9 -0
- package/dist/chunks/messages-5kQujjf1.cjs +1 -0
- package/dist/chunks/{messages-CTWXEx_o.mjs → messages-6r3Lrqpf.mjs} +9 -0
- package/dist/chunks/messages-8vjbwhvK.cjs +1 -0
- package/dist/chunks/messages-ACbZDExx.cjs +1 -0
- package/dist/chunks/messages-B05XREvI.cjs +1 -0
- package/dist/chunks/{messages-CQg2_vmm.mjs → messages-B0y97-C9.mjs} +9 -0
- package/dist/chunks/{messages-ZHNvKiIX.mjs → messages-B26pkAIj.mjs} +9 -0
- package/dist/chunks/messages-B2J7kDKI.cjs +1 -0
- package/dist/chunks/messages-B3jMjjFG.cjs +1 -0
- package/dist/chunks/messages-B4_c-uS0.cjs +1 -0
- package/dist/chunks/messages-B6zoVYEd.cjs +1 -0
- package/dist/chunks/{messages-DI9Ifrgt.mjs → messages-B73uch0z.mjs} +9 -0
- package/dist/chunks/{messages-AgmrT2Id.mjs → messages-B74xK8Ux.mjs} +9 -0
- package/dist/chunks/messages-B7efcz_S2.cjs +1 -0
- package/dist/chunks/{messages-sqdfYuVj2.mjs → messages-B9u3UJRu2.mjs} +9 -0
- package/dist/chunks/messages-BB9huoLU.cjs +1 -0
- package/dist/{messages-Cx7sqvx02.mjs → chunks/messages-BEzCtzW3.mjs} +9 -0
- package/dist/chunks/messages-BGQdk2zV2.cjs +1 -0
- package/dist/chunks/messages-BGmUrVtN2.cjs +1 -0
- package/dist/chunks/messages-BH-3FR4b2.cjs +1 -0
- package/dist/chunks/{messages-BZ4d5yNH.mjs → messages-BHqAQF6C.mjs} +9 -0
- package/dist/{messages-DzkZ434Z.mjs → chunks/messages-BI_-Ub99.mjs} +9 -0
- package/dist/chunks/messages-BNa6_BYq2.cjs +1 -0
- package/dist/chunks/{messages-BvupGuDw2.mjs → messages-BOMNOs8T2.mjs} +9 -0
- package/dist/chunks/{messages-fSeXd6-z.mjs → messages-BPYPnKHy.mjs} +9 -0
- package/dist/{messages-B3PWaMcw.mjs → chunks/messages-BQmUOeft.mjs} +9 -0
- package/dist/chunks/messages-BRfutnCs.cjs +1 -0
- package/dist/chunks/messages-BT_0dgL1.cjs +1 -0
- package/dist/chunks/{messages-BWGqOZ9J.mjs → messages-BWSXW4jk.mjs} +9 -0
- package/dist/chunks/messages-BWpKvkND2.cjs +1 -0
- package/dist/chunks/messages-BY6gCAsA2.cjs +1 -0
- package/dist/{messages-BDwU9rYR2.mjs → chunks/messages-BbfZo0kw2.mjs} +9 -0
- package/dist/{messages-gQ5PFa2t2.mjs → chunks/messages-BfqzgRP72.mjs} +9 -0
- package/dist/chunks/messages-Bk2Xs7_v.cjs +1 -0
- package/dist/{messages-CmN2OfuB.mjs → chunks/messages-BmkavfpK.mjs} +9 -0
- package/dist/chunks/{messages-B1k4DgVe.mjs → messages-BmzMikmq.mjs} +9 -0
- package/dist/chunks/messages-BniEGAW32.cjs +1 -0
- package/dist/chunks/{messages-BP77P9ER.mjs → messages-BplwYBhA.mjs} +9 -0
- package/dist/chunks/{messages-B1xgsCNQ.cjs → messages-BqJ-xe8R.cjs} +1 -1
- package/dist/chunks/messages-Bry43U_U.cjs +1 -0
- package/dist/{messages-DFfhoDWZ2.mjs → chunks/messages-BuzGjYKw.mjs} +9 -0
- package/dist/chunks/messages-ByT63R7v2.cjs +1 -0
- package/dist/{messages-C_gdsU952.mjs → chunks/messages-C0S7KViA2.mjs} +9 -0
- package/dist/chunks/{messages-DzY53I67.mjs → messages-C0Tt7Odx.mjs} +9 -0
- package/dist/{messages-B8Tq9Txy.mjs → chunks/messages-C3A1iLjY.mjs} +9 -0
- package/dist/chunks/{messages-B6You-RA.mjs → messages-C3gh1rpr.mjs} +9 -0
- package/dist/chunks/{messages-CXxz5HYQ.mjs → messages-C7JE4SUS.mjs} +9 -0
- package/dist/chunks/messages-C9IWDnCh2.cjs +1 -0
- package/dist/chunks/messages-CBc3S61g2.cjs +1 -0
- package/dist/chunks/{messages-DefZ3ihx.mjs → messages-CHpkDOiI.mjs} +9 -0
- package/dist/{messages-BcD7xtJA.mjs → chunks/messages-CImQCp-z2.mjs} +9 -0
- package/dist/chunks/messages-CJ--z80t2.cjs +1 -0
- package/dist/chunks/messages-CNH8YFuv.cjs +1 -0
- package/dist/chunks/{messages-bjSJwsXK2.mjs → messages-CQ2KWTbV2.mjs} +9 -0
- package/dist/{messages-C8RMjnBe.mjs → chunks/messages-CWAukiLC.mjs} +9 -0
- package/dist/{messages-B3oFjWq3.mjs → chunks/messages-C_BUhMkZ.mjs} +9 -0
- package/dist/chunks/{messages-BvuEffoe.mjs → messages-CcBT1o1B.mjs} +9 -0
- package/dist/chunks/messages-CdqejEof.cjs +1 -0
- package/dist/chunks/messages-Chdejshy2.cjs +1 -0
- package/dist/{messages-D-rvoUSJ.mjs → chunks/messages-CijMg_B_.mjs} +9 -0
- package/dist/{messages-JKXCsFKZ.mjs → chunks/messages-Ciz80Z2u2.mjs} +9 -0
- package/dist/{messages-Dq2WEsEu.mjs → chunks/messages-CjuGKMoT.mjs} +9 -0
- package/dist/chunks/{messages-BxKobpJ22.mjs → messages-ClOfUECP2.mjs} +9 -0
- package/dist/chunks/messages-CrF-Q_ML.cjs +1 -0
- package/dist/chunks/messages-Cww_rBCM.cjs +1 -0
- package/dist/chunks/messages-CxPVYl2H2.cjs +1 -0
- package/dist/chunks/{messages-BA2sVGrR2.mjs → messages-Cyiqo_dk2.mjs} +9 -0
- package/dist/{messages-D788KtGe.mjs → chunks/messages-D-u_SWhb.mjs} +9 -0
- package/dist/chunks/messages-D0H-D5FQ2.cjs +1 -0
- package/dist/chunks/messages-D195RH3A.cjs +1 -0
- package/dist/chunks/{messages-Dd4nzvLj2.mjs → messages-D5-DG-_u2.mjs} +9 -0
- package/dist/chunks/messages-D6kDQgDP2.cjs +1 -0
- package/dist/{messages-CAGQtm7T.mjs → chunks/messages-D8-hiQgf.mjs} +9 -0
- package/dist/{messages-ftPYsH6d2.mjs → chunks/messages-D8nb9CKr2.mjs} +9 -0
- package/dist/{messages-DPqFBtJR.mjs → chunks/messages-DAd5yWtH2.mjs} +9 -0
- package/dist/chunks/messages-DAdsFLpE.cjs +1 -0
- package/dist/chunks/messages-DCUsbiUQ.cjs +1 -0
- package/dist/{messages-AycxTjmw.mjs → chunks/messages-DCVZaAT9.mjs} +9 -0
- package/dist/chunks/messages-DHXttezt2.cjs +1 -0
- package/dist/chunks/messages-DIgxCixa.cjs +1 -0
- package/dist/chunks/messages-DJ0Wr-Bt2.cjs +1 -0
- package/dist/chunks/messages-DJBdlmxR.cjs +1 -0
- package/dist/chunks/{messages-5AxgjKgf2.mjs → messages-DJm-uLwr2.mjs} +9 -0
- package/dist/chunks/{messages-BVarbXYD2.mjs → messages-DKF4qWhw2.mjs} +9 -0
- package/dist/chunks/messages-DLAWSVlE.cjs +1 -0
- package/dist/{messages-Bj03XD-02.mjs → chunks/messages-DLI8m6z_2.mjs} +9 -0
- package/dist/{messages-CTzO11jz.mjs → chunks/messages-DNiWBVQr.mjs} +9 -0
- package/dist/chunks/messages-DNsgR3ZH.cjs +1 -0
- package/dist/{messages-CgaGkQi32.mjs → chunks/messages-DPI5-TrO2.mjs} +9 -0
- package/dist/chunks/{messages-CyCl8la6.mjs → messages-DQ1z_srP.mjs} +9 -0
- package/dist/chunks/{messages-C4bHKGnB2.mjs → messages-DSxYO-_j2.mjs} +9 -0
- package/dist/chunks/messages-DTrrEqf02.cjs +1 -0
- package/dist/chunks/{messages-D7YPlNAK.mjs → messages-DYLfoakZ.mjs} +9 -0
- package/dist/chunks/messages-DZCWq8nI2.cjs +1 -0
- package/dist/{messages-PQVh93mt.mjs → chunks/messages-D_JT9POv.mjs} +9 -0
- package/dist/chunks/{messages-Uc3Uc2862.mjs → messages-DaTniq4w2.mjs} +9 -0
- package/dist/{messages-DiL61awK.mjs → chunks/messages-De2tXe0o.mjs} +9 -0
- package/dist/chunks/{messages-l5xHQb_m.mjs → messages-DiwyN3uU.mjs} +9 -0
- package/dist/chunks/messages-DkQGwmom.cjs +1 -0
- package/dist/chunks/{messages-B6t1xShv.mjs → messages-Dl-C7Pdf.mjs} +9 -0
- package/dist/chunks/{messages-bSVgJ1cu.mjs → messages-DlDyYt5x.mjs} +9 -0
- package/dist/chunks/messages-Dmhwr_Ow2.cjs +1 -0
- package/dist/chunks/messages-DrQQ1Hky.cjs +1 -0
- package/dist/chunks/messages-DtQ_pCWn.cjs +1 -0
- package/dist/{messages-uy3FE24_2.mjs → chunks/messages-Du-inLpi2.mjs} +9 -0
- package/dist/{messages-DqXJJPx9.mjs → chunks/messages-Duu9LiF32.mjs} +9 -0
- package/dist/chunks/messages-DxCc14pu2.cjs +1 -0
- package/dist/chunks/{messages-DNqFlfOd.mjs → messages-Dz3cVqxu.mjs} +9 -0
- package/dist/chunks/messages-EJkYSgsP.cjs +1 -0
- package/dist/chunks/messages-F3QeKduK.cjs +1 -0
- package/dist/chunks/messages-HfCZ1oPV.cjs +1 -0
- package/dist/chunks/{messages-BVZONUH9.mjs → messages-Ji3WDjrp.mjs} +9 -0
- package/dist/chunks/messages-MTnjMh07.cjs +1 -0
- package/dist/{messages-DL7JAwpC.mjs → chunks/messages-NU3n_1t9.mjs} +9 -0
- package/dist/chunks/messages-NpCBoXqi.cjs +1 -0
- package/dist/chunks/messages-PMZIH3mH.cjs +1 -0
- package/dist/{messages-7fwJIrld2.mjs → chunks/messages-TFu4tdzc2.mjs} +9 -0
- package/dist/{messages-BSHFypGE2.mjs → chunks/messages-Ti4ZdnqM2.mjs} +9 -0
- package/dist/chunks/messages-UOTfsDv3.cjs +1 -0
- package/dist/chunks/messages-WDBEGpNu.cjs +1 -0
- package/dist/chunks/messages-Zg6PFQ87.cjs +1 -0
- package/dist/chunks/messages-bdVhFVzt2.cjs +1 -0
- package/dist/chunks/messages-dnnjc_oR2.cjs +1 -0
- package/dist/{messages-BmWP4vpV2.mjs → chunks/messages-fI_5bRwV2.mjs} +9 -0
- package/dist/{messages-CIjSE2_O2.mjs → chunks/messages-g80Luov_2.mjs} +9 -0
- package/dist/chunks/messages-hlzAtKI5.cjs +1 -0
- package/dist/chunks/messages-kuh4lSUE2.cjs +1 -0
- package/dist/chunks/messages-m20Eebmt2.cjs +1 -0
- package/dist/chunks/messages-o1__8Rul.cjs +1 -0
- package/dist/chunks/messages-pBYvH88_.cjs +1 -0
- package/dist/chunks/{messages-CMRjQYxi2.mjs → messages-u1hpTCvK2.mjs} +9 -0
- package/dist/chunks/{messages-BoCUgrkI.mjs → messages-vq5ZvFTF.mjs} +9 -0
- package/dist/chunks/tools-DeTgjuIK.cjs +116 -0
- package/dist/chunks/{tools-Tt-NXbRZ.mjs → tools-omGeunql.mjs} +1818 -1686
- package/dist/full.cjs +1 -1
- package/dist/full.mjs +8 -8
- package/dist/locales.mjs +76 -67
- package/dist/{chunks/messages-DHdoaaFq2.mjs → messages-2hSOMnir2.mjs} +9 -0
- package/dist/{chunks/messages-DlcI-0Sy.mjs → messages-3VCxXECx.mjs} +9 -0
- package/dist/{messages-CxX23Jsk2.mjs → messages-8xGEIh_m2.mjs} +9 -0
- package/dist/{chunks/messages-DmErSGPk2.mjs → messages-B-QcHnuI2.mjs} +9 -0
- package/dist/{messages-BKCuCTFM.mjs → messages-B8zoeMf9.mjs} +9 -0
- package/dist/{chunks/messages-BmdkDNYv.mjs → messages-B9CF0GcE.mjs} +9 -0
- package/dist/{messages-1ufJbdRv2.mjs → messages-B9W0pRCr2.mjs} +9 -0
- package/dist/{messages-DQik3_xv2.mjs → messages-BFM2ljkf2.mjs} +9 -0
- package/dist/{chunks/messages-BNxTGhHu.mjs → messages-BLm4FSbz2.mjs} +9 -0
- package/dist/{chunks/messages-GHsufIGi2.mjs → messages-BLpeYPKv2.mjs} +9 -0
- package/dist/{messages-D_WzyzUt.mjs → messages-BM73sjxy.mjs} +9 -0
- package/dist/{messages-CX8egsiA2.mjs → messages-BOpqKi6Y2.mjs} +9 -0
- package/dist/{chunks/messages-eyGOcbhV.mjs → messages-BUGdUeTK.mjs} +9 -0
- package/dist/{chunks/messages-DhZwMl9x2.mjs → messages-BZm7MzSJ2.mjs} +9 -0
- package/dist/{messages-C31VIrlL.mjs → messages-BtBhP1sv.mjs} +9 -0
- package/dist/{messages-D1Fjr4OK2.mjs → messages-BthFu3bN2.mjs} +9 -0
- package/dist/{chunks/messages-COMdnGQV2.mjs → messages-BurjwjCQ2.mjs} +9 -0
- package/dist/{messages-DTkd9ND8.mjs → messages-ByIHkus-.mjs} +9 -0
- package/dist/{messages-C9GFRcVj.mjs → messages-ByVKFMH3.mjs} +9 -0
- package/dist/{chunks/messages-B5CFhyI8.mjs → messages-C6FDRqcf.mjs} +9 -0
- package/dist/{chunks/messages-OSIAf0Wk2.mjs → messages-C9dJ_N542.mjs} +9 -0
- package/dist/{messages-CRR1VRO6.mjs → messages-CCw8aJgW.mjs} +9 -0
- package/dist/{chunks/messages-AtUsRyWK2.mjs → messages-CO3NEwf22.mjs} +9 -0
- package/dist/{chunks/messages-CcboYTP8.mjs → messages-CPB2xkpC.mjs} +9 -0
- package/dist/{messages-CITYhXUz.mjs → messages-CPDsEORY.mjs} +9 -0
- package/dist/{chunks/messages-B2zrJyAc2.mjs → messages-CYyPOGy7.mjs} +9 -0
- package/dist/{chunks/messages-C03LZxma.mjs → messages-CZAODRjY.mjs} +9 -0
- package/dist/{messages-Duk7VVeY.mjs → messages-C_rns7Ku.mjs} +9 -0
- package/dist/{chunks/messages-CdWXgq_r.mjs → messages-CaUUIQvU.mjs} +9 -0
- package/dist/{messages-Cp0fjsey.mjs → messages-Cc-A7Vip.mjs} +9 -0
- package/dist/{chunks/messages-B7KbtBAE.mjs → messages-Ccf81JsG.mjs} +9 -0
- package/dist/{chunks/messages-rEsI_fAk.mjs → messages-CerTDuSC.mjs} +9 -0
- package/dist/{messages-BkTBwYet.mjs → messages-CgmDwRRE.mjs} +9 -0
- package/dist/{chunks/messages-DsyO86r3.mjs → messages-Cn3PWtLp.mjs} +9 -0
- package/dist/{chunks/messages-CWTFEPbA2.mjs → messages-Cu1rTEkB.mjs} +9 -0
- package/dist/{messages-oIa8wahx.mjs → messages-CxEHfUNH.mjs} +9 -0
- package/dist/{messages-C_mN4lx0.mjs → messages-D1B41i8X.mjs} +9 -0
- package/dist/{messages-NVepzgE3.mjs → messages-D6954zcl.mjs} +9 -0
- package/dist/{messages-C2TRJroV2.mjs → messages-DBwWssfL2.mjs} +9 -0
- package/dist/{messages-Cdgz3urh.mjs → messages-DFHRMYke.mjs} +9 -0
- package/dist/{messages-DXCyNanc2.mjs → messages-DJVrq0Xa2.mjs} +9 -0
- package/dist/{chunks/messages-OYoN_rp1.mjs → messages-DMJz28kt.mjs} +9 -0
- package/dist/{chunks/messages-B_U10evN2.mjs → messages-DOnOpXFJ2.mjs} +9 -0
- package/dist/{messages-5USazVPA2.mjs → messages-DR1Tf-Kj2.mjs} +9 -0
- package/dist/{chunks/messages-C4sIqArW2.mjs → messages-DSUXwuzH2.mjs} +9 -0
- package/dist/{chunks/messages-DGHTTk1S2.mjs → messages-DTNO7tw1.mjs} +9 -0
- package/dist/{messages-Ddz6eH0-2.mjs → messages-DWBtyom42.mjs} +9 -0
- package/dist/{messages-DKsyrVp5.mjs → messages-DZQALZIU.mjs} +9 -0
- package/dist/{chunks/messages-V8K7-1l2.mjs → messages-D_i86vbQ.mjs} +9 -0
- package/dist/{chunks/messages-BmiN0JGP2.mjs → messages-Da1VKvvf2.mjs} +9 -0
- package/dist/{messages-D5qgCWmB2.mjs → messages-Ddimgqvp2.mjs} +9 -0
- package/dist/{chunks/messages-MPF8o3EP.mjs → messages-DdmXBLUC.mjs} +9 -0
- package/dist/{messages-D4U4wkYM.mjs → messages-Devcsnrv.mjs} +9 -0
- package/dist/{chunks/messages-DiGsu5XN.mjs → messages-DhS-j4Hp.mjs} +9 -0
- package/dist/{messages-BGzpwNrz.mjs → messages-DrRVvVPI.mjs} +9 -0
- package/dist/{chunks/messages-Z9mDYT3w.mjs → messages-Ds4gQbVR2.mjs} +9 -0
- package/dist/{chunks/messages-vQ5kblO8.mjs → messages-DxkB7LL6.mjs} +9 -0
- package/dist/{chunks/messages-LTkIIrSe2.mjs → messages-GgHHrLBU2.mjs} +9 -0
- package/dist/{messages-CntTlSE22.mjs → messages-IycPaZe22.mjs} +9 -0
- package/dist/{messages-BtDz-sw92.mjs → messages-ST8f_nDx2.mjs} +9 -0
- package/dist/{messages-CgVEHCQ-.mjs → messages-SV8lf6F0.mjs} +9 -0
- package/dist/{messages-Bt4TLGth.mjs → messages-lVrQmsky.mjs} +9 -0
- package/dist/{messages-rpO1POP02.mjs → messages-lcoIGSX82.mjs} +9 -0
- package/dist/{chunks/messages-BuYnNUtU2.mjs → messages-mqRVfUUq.mjs} +9 -0
- package/dist/{chunks/messages-C24IC_eR.mjs → messages-qWFvoPY1.mjs} +9 -0
- package/dist/{messages-CacRpQpm.mjs → messages-yte1QPX5.mjs} +9 -0
- package/dist/{messages-DNlrcG5Z.mjs → messages-zyiti_A8.mjs} +9 -0
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/tools.cjs +1 -1
- package/dist/tools.mjs +3 -3
- package/package.json +1 -1
- package/src/components/blocks.ts +30 -7
- package/src/components/i18n/locales/am/messages.json +9 -0
- package/src/components/i18n/locales/ar/messages.json +9 -0
- package/src/components/i18n/locales/az/messages.json +9 -0
- package/src/components/i18n/locales/bg/messages.json +9 -0
- package/src/components/i18n/locales/bn/messages.json +9 -0
- package/src/components/i18n/locales/bs/messages.json +9 -0
- package/src/components/i18n/locales/cs/messages.json +9 -0
- package/src/components/i18n/locales/da/messages.json +9 -0
- package/src/components/i18n/locales/de/messages.json +9 -0
- package/src/components/i18n/locales/dv/messages.json +9 -0
- package/src/components/i18n/locales/el/messages.json +9 -0
- package/src/components/i18n/locales/en/messages.json +9 -0
- package/src/components/i18n/locales/es/messages.json +9 -0
- package/src/components/i18n/locales/et/messages.json +9 -0
- package/src/components/i18n/locales/fa/messages.json +9 -0
- package/src/components/i18n/locales/fi/messages.json +9 -0
- package/src/components/i18n/locales/fil/messages.json +9 -0
- package/src/components/i18n/locales/fr/messages.json +9 -0
- package/src/components/i18n/locales/gu/messages.json +9 -0
- package/src/components/i18n/locales/he/messages.json +9 -0
- package/src/components/i18n/locales/hi/messages.json +9 -0
- package/src/components/i18n/locales/hr/messages.json +9 -0
- package/src/components/i18n/locales/hu/messages.json +9 -0
- package/src/components/i18n/locales/hy/messages.json +9 -0
- package/src/components/i18n/locales/id/messages.json +9 -0
- package/src/components/i18n/locales/it/messages.json +9 -0
- package/src/components/i18n/locales/ja/messages.json +9 -0
- package/src/components/i18n/locales/ka/messages.json +9 -0
- package/src/components/i18n/locales/km/messages.json +9 -0
- package/src/components/i18n/locales/kn/messages.json +9 -0
- package/src/components/i18n/locales/ko/messages.json +9 -0
- package/src/components/i18n/locales/ku/messages.json +9 -0
- package/src/components/i18n/locales/lo/messages.json +9 -0
- package/src/components/i18n/locales/lt/messages.json +9 -0
- package/src/components/i18n/locales/lv/messages.json +9 -0
- package/src/components/i18n/locales/mk/messages.json +9 -0
- package/src/components/i18n/locales/ml/messages.json +9 -0
- package/src/components/i18n/locales/mn/messages.json +9 -0
- package/src/components/i18n/locales/mr/messages.json +9 -0
- package/src/components/i18n/locales/ms/messages.json +9 -0
- package/src/components/i18n/locales/my/messages.json +9 -0
- package/src/components/i18n/locales/ne/messages.json +9 -0
- package/src/components/i18n/locales/nl/messages.json +9 -0
- package/src/components/i18n/locales/no/messages.json +9 -0
- package/src/components/i18n/locales/pa/messages.json +9 -0
- package/src/components/i18n/locales/pl/messages.json +9 -0
- package/src/components/i18n/locales/ps/messages.json +9 -0
- package/src/components/i18n/locales/pt/messages.json +9 -0
- package/src/components/i18n/locales/ro/messages.json +9 -0
- package/src/components/i18n/locales/ru/messages.json +9 -0
- package/src/components/i18n/locales/sd/messages.json +9 -0
- package/src/components/i18n/locales/si/messages.json +9 -0
- package/src/components/i18n/locales/sk/messages.json +9 -0
- package/src/components/i18n/locales/sl/messages.json +9 -0
- package/src/components/i18n/locales/sq/messages.json +9 -0
- package/src/components/i18n/locales/sr/messages.json +9 -0
- package/src/components/i18n/locales/sv/messages.json +9 -0
- package/src/components/i18n/locales/sw/messages.json +9 -0
- package/src/components/i18n/locales/ta/messages.json +9 -0
- package/src/components/i18n/locales/te/messages.json +9 -0
- package/src/components/i18n/locales/th/messages.json +9 -0
- package/src/components/i18n/locales/tr/messages.json +9 -0
- package/src/components/i18n/locales/ug/messages.json +9 -0
- package/src/components/i18n/locales/uk/messages.json +9 -0
- package/src/components/i18n/locales/ur/messages.json +9 -0
- package/src/components/i18n/locales/vi/messages.json +9 -0
- package/src/components/i18n/locales/yi/messages.json +9 -0
- package/src/components/i18n/locales/zh/messages.json +9 -0
- package/src/components/icons/index.ts +24 -0
- package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +67 -6
- package/src/components/modules/blockManager/hierarchy.ts +150 -8
- package/src/components/modules/blockManager/operations.ts +207 -8
- package/src/components/modules/blockManager/yjs-sync.ts +36 -1
- package/src/components/modules/caret.ts +205 -31
- package/src/components/modules/drag/DragController.ts +219 -2
- package/src/components/modules/drag/a11y/DragA11y.ts +9 -1
- package/src/components/modules/drag/state/DragStateMachine.ts +1 -1
- package/src/components/modules/drag/target/DropTargetDetector.ts +513 -3
- package/src/components/modules/drag/utils/drag.constants.ts +9 -0
- package/src/components/modules/toolbar/blockSettings.ts +75 -5
- package/src/components/modules/toolbar/index.ts +12 -1
- package/src/components/modules/uiControllers/controllers/blockHover.ts +24 -2
- package/src/components/modules/uiControllers/controllers/selection.ts +50 -0
- package/src/components/utils/blocks.ts +21 -7
- package/src/styles/colors.css +3 -0
- package/src/styles/columns.css +105 -0
- package/src/styles/main.css +48 -3
- package/src/styles/popover-animation.css +8 -0
- package/src/tools/column/index.ts +189 -0
- package/src/tools/column/types.ts +26 -0
- package/src/tools/column-drop.ts +273 -0
- package/src/tools/column-list/index.ts +142 -0
- package/src/tools/column-list/types.ts +17 -0
- package/src/tools/columns-shared.ts +343 -0
- package/src/tools/divider/index.ts +1 -0
- package/src/tools/index.ts +4 -0
- package/src/tools/nested-blocks.ts +23 -2
- package/src/tools/table/table-restrictions.ts +1 -1
- package/types/tools/column-list.d.ts +15 -0
- package/types/tools/column.d.ts +13 -0
- package/types/tools-entry.d.ts +8 -0
- package/dist/chunks/blok-Xu27QC2G.cjs +0 -17
- package/dist/chunks/constants-DDTVRO2H.cjs +0 -457
- package/dist/chunks/lightweight-i18n-Bbl1cNYK.cjs +0 -1
- package/dist/chunks/messages-1qYt6EhZ2.cjs +0 -1
- package/dist/chunks/messages-2fxvN3Nb.cjs +0 -1
- package/dist/chunks/messages-B1Vs2HmR.cjs +0 -1
- package/dist/chunks/messages-B780gS332.cjs +0 -1
- package/dist/chunks/messages-B7T5Notn.cjs +0 -1
- package/dist/chunks/messages-BE9aZQ1Q.cjs +0 -1
- package/dist/chunks/messages-BIQpTYfm.cjs +0 -1
- package/dist/chunks/messages-BIRvUJ0t.cjs +0 -1
- package/dist/chunks/messages-BIodfkjv.cjs +0 -1
- package/dist/chunks/messages-BL-zBcuM.cjs +0 -1
- package/dist/chunks/messages-BQr0zpmu2.cjs +0 -1
- package/dist/chunks/messages-BTHi6rVW2.cjs +0 -1
- package/dist/chunks/messages-BZOAdcmO2.cjs +0 -1
- package/dist/chunks/messages-BbsGeVs_2.cjs +0 -1
- package/dist/chunks/messages-Bc1NYJVS.cjs +0 -1
- package/dist/chunks/messages-BdORNG8X.cjs +0 -1
- package/dist/chunks/messages-Bg2kheTv.cjs +0 -1
- package/dist/chunks/messages-Bj1eQtQw.cjs +0 -1
- package/dist/chunks/messages-BkJJCHNK.cjs +0 -1
- package/dist/chunks/messages-BkdGQfIX.cjs +0 -1
- package/dist/chunks/messages-BkgsB-cj2.cjs +0 -1
- package/dist/chunks/messages-Bn0vGFEP.cjs +0 -1
- package/dist/chunks/messages-BoIUXwWe.cjs +0 -1
- package/dist/chunks/messages-BpDEh8rW.cjs +0 -1
- package/dist/chunks/messages-BwknPZJ8.cjs +0 -1
- package/dist/chunks/messages-ByicRCge2.cjs +0 -1
- package/dist/chunks/messages-C2oBmyTn.cjs +0 -1
- package/dist/chunks/messages-C9wBMmxr2.cjs +0 -1
- package/dist/chunks/messages-CDK5-8vW.cjs +0 -1
- package/dist/chunks/messages-CKHbPcfh.cjs +0 -1
- package/dist/chunks/messages-CNFfwTfw.cjs +0 -1
- package/dist/chunks/messages-CNiuofck2.cjs +0 -1
- package/dist/chunks/messages-CWszAGkF.cjs +0 -1
- package/dist/chunks/messages-CWzQNagc2.cjs +0 -1
- package/dist/chunks/messages-CYf1gv722.cjs +0 -1
- package/dist/chunks/messages-CfcCwbQo.cjs +0 -1
- package/dist/chunks/messages-CkvqOnAR.cjs +0 -1
- package/dist/chunks/messages-Cnrug7nz2.cjs +0 -1
- package/dist/chunks/messages-Cr51zCHy.cjs +0 -1
- package/dist/chunks/messages-CsLvvl2F2.cjs +0 -1
- package/dist/chunks/messages-CuO-Rx4g.cjs +0 -1
- package/dist/chunks/messages-Cv4I3k1W2.cjs +0 -1
- package/dist/chunks/messages-CwHRv6g8.cjs +0 -1
- package/dist/chunks/messages-CzXnHfGb2.cjs +0 -1
- package/dist/chunks/messages-D2QxLx1a.cjs +0 -1
- package/dist/chunks/messages-D4LUPpX_.cjs +0 -1
- package/dist/chunks/messages-DJFL-bxd2.cjs +0 -1
- package/dist/chunks/messages-DLEeNpMi2.cjs +0 -1
- package/dist/chunks/messages-DTNU_cq0.cjs +0 -1
- package/dist/chunks/messages-DVKsYqpJ.cjs +0 -1
- package/dist/chunks/messages-DXlfz-nC.cjs +0 -1
- package/dist/chunks/messages-DbA_Zja3.cjs +0 -1
- package/dist/chunks/messages-Dc2TTEx_2.cjs +0 -1
- package/dist/chunks/messages-DeDMMmRC.cjs +0 -1
- package/dist/chunks/messages-DlQNXqzr.cjs +0 -1
- package/dist/chunks/messages-DqMqZLcn.cjs +0 -1
- package/dist/chunks/messages-DqqDuEE22.cjs +0 -1
- package/dist/chunks/messages-DzppdmWe.cjs +0 -1
- package/dist/chunks/messages-HzLF-BQL2.cjs +0 -1
- package/dist/chunks/messages-Jb9n97oP2.cjs +0 -1
- package/dist/chunks/messages-K_vSdSoF2.cjs +0 -1
- package/dist/chunks/messages-Nh7wrRdm.cjs +0 -1
- package/dist/chunks/messages-QHS-Ydg_.cjs +0 -1
- package/dist/chunks/messages-SpiG5vT-2.cjs +0 -1
- package/dist/chunks/messages-XFaJzdhP2.cjs +0 -1
- package/dist/chunks/messages-y03BGg692.cjs +0 -1
- package/dist/chunks/tools-DOuVjow8.cjs +0 -116
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.board": "బోర్డ్",
|
|
100
100
|
"toolNames.divider": "విభజకం",
|
|
101
101
|
"toolNames.quote": "ఉల్లేఖనం",
|
|
102
|
+
"toolNames.columns": "నిలువు వరుసలు",
|
|
103
|
+
"tools.columns.col2": "2 నిలువు వరుసలు",
|
|
104
|
+
"tools.columns.col3": "3 నిలువు వరుసలు",
|
|
105
|
+
"tools.columns.col4": "4 నిలువు వరుసలు",
|
|
106
|
+
"tools.columns.col5": "5 నిలువు వరుసలు",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "నిలువు వరుసల పరిమాణం మార్చు",
|
|
108
|
+
"tools.columns.turnInto": "నిలువు వరుసలకు మార్చు",
|
|
109
|
+
"searchTerms.columns": "నిలువు వరుసలు",
|
|
110
|
+
"searchTerms.layout": "లేఅవుట్",
|
|
102
111
|
"searchTerms.divider": "విభజకం",
|
|
103
112
|
"searchTerms.separator": "వేరుచేయు",
|
|
104
113
|
"searchTerms.delimiter": "వరంబుగుర్తు",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "กล่องเน้น",
|
|
100
100
|
"toolNames.divider": "เส้นคั่น",
|
|
101
101
|
"toolNames.quote": "อ้างอิง",
|
|
102
|
+
"toolNames.columns": "คอลัมน์",
|
|
103
|
+
"tools.columns.col2": "2 คอลัมน์",
|
|
104
|
+
"tools.columns.col3": "3 คอลัมน์",
|
|
105
|
+
"tools.columns.col4": "4 คอลัมน์",
|
|
106
|
+
"tools.columns.col5": "5 คอลัมน์",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "ปรับขนาดคอลัมน์",
|
|
108
|
+
"tools.columns.turnInto": "แปลงเป็นคอลัมน์",
|
|
109
|
+
"searchTerms.columns": "คอลัมน์",
|
|
110
|
+
"searchTerms.layout": "เลย์เอาต์",
|
|
102
111
|
"searchTerms.divider": "ตัวแบ่ง",
|
|
103
112
|
"searchTerms.separator": "ตัวคั่น",
|
|
104
113
|
"searchTerms.delimiter": "ตัวแบ่งเขต",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "Bilgi kutusu",
|
|
100
100
|
"toolNames.divider": "Ayırıcı",
|
|
101
101
|
"toolNames.quote": "Alıntı",
|
|
102
|
+
"toolNames.columns": "Sütunlar",
|
|
103
|
+
"tools.columns.col2": "2 sütun",
|
|
104
|
+
"tools.columns.col3": "3 sütun",
|
|
105
|
+
"tools.columns.col4": "4 sütun",
|
|
106
|
+
"tools.columns.col5": "5 sütun",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "Sütunları yeniden boyutlandır",
|
|
108
|
+
"tools.columns.turnInto": "Sütunlara dönüştür",
|
|
109
|
+
"searchTerms.columns": "sütunlar",
|
|
110
|
+
"searchTerms.layout": "düzen",
|
|
102
111
|
"searchTerms.divider": "ayırıcı",
|
|
103
112
|
"searchTerms.separator": "ayraç",
|
|
104
113
|
"searchTerms.delimiter": "sınırlayıcı",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "ئەسكەرتىش",
|
|
100
100
|
"toolNames.divider": "بۆلگۈچ",
|
|
101
101
|
"toolNames.quote": "نەقىل",
|
|
102
|
+
"toolNames.columns": "ئىستونلار",
|
|
103
|
+
"tools.columns.col2": "2 ئىستون",
|
|
104
|
+
"tools.columns.col3": "3 ئىستون",
|
|
105
|
+
"tools.columns.col4": "4 ئىستون",
|
|
106
|
+
"tools.columns.col5": "5 ئىستون",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "ئىستونلار ئۆلچىمىنى ئۆزگەرتىش",
|
|
108
|
+
"tools.columns.turnInto": "ئىستونلارغا ئايلاندۇرۇش",
|
|
109
|
+
"searchTerms.columns": "ئىستونلار",
|
|
110
|
+
"searchTerms.layout": "تەرتىپ",
|
|
102
111
|
"searchTerms.divider": "بۆلگۈچ",
|
|
103
112
|
"searchTerms.separator": "ئايرىغۇچ",
|
|
104
113
|
"searchTerms.delimiter": "چەكلىگۈچ",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "Виноска",
|
|
100
100
|
"toolNames.divider": "Роздільник",
|
|
101
101
|
"toolNames.quote": "Цитата",
|
|
102
|
+
"toolNames.columns": "Стовпці",
|
|
103
|
+
"tools.columns.col2": "2 стовпці",
|
|
104
|
+
"tools.columns.col3": "3 стовпці",
|
|
105
|
+
"tools.columns.col4": "4 стовпці",
|
|
106
|
+
"tools.columns.col5": "5 стовпців",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "Змінити розмір колонок",
|
|
108
|
+
"tools.columns.turnInto": "Перетворити на колонки",
|
|
109
|
+
"searchTerms.columns": "стовпці",
|
|
110
|
+
"searchTerms.layout": "макет",
|
|
102
111
|
"searchTerms.divider": "роздільник",
|
|
103
112
|
"searchTerms.separator": "сепаратор",
|
|
104
113
|
"searchTerms.delimiter": "обмежувач",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "نوٹ",
|
|
100
100
|
"toolNames.divider": "تقسیم کار",
|
|
101
101
|
"toolNames.quote": "اقتباس",
|
|
102
|
+
"toolNames.columns": "کالم",
|
|
103
|
+
"tools.columns.col2": "2 کالم",
|
|
104
|
+
"tools.columns.col3": "3 کالم",
|
|
105
|
+
"tools.columns.col4": "4 کالم",
|
|
106
|
+
"tools.columns.col5": "5 کالم",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "کالموں کا سائز تبدیل کریں",
|
|
108
|
+
"tools.columns.turnInto": "کالموں میں تبدیل کریں",
|
|
109
|
+
"searchTerms.columns": "کالم",
|
|
110
|
+
"searchTerms.layout": "ترتیب",
|
|
102
111
|
"searchTerms.divider": "تقسیم کار",
|
|
103
112
|
"searchTerms.separator": "جداکار",
|
|
104
113
|
"searchTerms.delimiter": "حد بندی",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "Chú thích",
|
|
100
100
|
"toolNames.divider": "Đường phân cách",
|
|
101
101
|
"toolNames.quote": "Trích dẫn",
|
|
102
|
+
"toolNames.columns": "Cột",
|
|
103
|
+
"tools.columns.col2": "2 cột",
|
|
104
|
+
"tools.columns.col3": "3 cột",
|
|
105
|
+
"tools.columns.col4": "4 cột",
|
|
106
|
+
"tools.columns.col5": "5 cột",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "Thay đổi kích thước cột",
|
|
108
|
+
"tools.columns.turnInto": "Chuyển thành cột",
|
|
109
|
+
"searchTerms.columns": "cột",
|
|
110
|
+
"searchTerms.layout": "bố cục",
|
|
102
111
|
"searchTerms.divider": "đường phân chia",
|
|
103
112
|
"searchTerms.separator": "dấu phân cách",
|
|
104
113
|
"searchTerms.delimiter": "dấu phân tách",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "באַמערקונג",
|
|
100
100
|
"toolNames.divider": "טיילער",
|
|
101
101
|
"toolNames.quote": "ציטאַט",
|
|
102
|
+
"toolNames.columns": "שפּאַלטן",
|
|
103
|
+
"tools.columns.col2": "2 שפּאַלטן",
|
|
104
|
+
"tools.columns.col3": "3 שפּאַלטן",
|
|
105
|
+
"tools.columns.col4": "4 שפּאַלטן",
|
|
106
|
+
"tools.columns.col5": "5 שפּאַלטן",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "ענדערן קאָלאָנען גרייס",
|
|
108
|
+
"tools.columns.turnInto": "פֿאַרוואַנדלען אין קאָלאָנען",
|
|
109
|
+
"searchTerms.columns": "שפּאַלטן",
|
|
110
|
+
"searchTerms.layout": "לייאַוט",
|
|
102
111
|
"searchTerms.divider": "טיילער",
|
|
103
112
|
"searchTerms.separator": "אָפּטיילער",
|
|
104
113
|
"searchTerms.delimiter": "באגרענעצער",
|
|
@@ -99,6 +99,15 @@
|
|
|
99
99
|
"toolNames.callout": "标注",
|
|
100
100
|
"toolNames.divider": "分隔线",
|
|
101
101
|
"toolNames.quote": "引用",
|
|
102
|
+
"toolNames.columns": "分栏",
|
|
103
|
+
"tools.columns.col2": "2 列",
|
|
104
|
+
"tools.columns.col3": "3 列",
|
|
105
|
+
"tools.columns.col4": "4 列",
|
|
106
|
+
"tools.columns.col5": "5 列",
|
|
107
|
+
"tools.columns.resizeAriaLabel": "调整列宽",
|
|
108
|
+
"tools.columns.turnInto": "转换为列",
|
|
109
|
+
"searchTerms.columns": "分栏",
|
|
110
|
+
"searchTerms.layout": "布局",
|
|
102
111
|
"searchTerms.divider": "分割线",
|
|
103
112
|
"searchTerms.separator": "分隔符",
|
|
104
113
|
"searchTerms.delimiter": "定界符",
|
|
@@ -753,3 +753,27 @@ export const IconCrossSmall = '<svg width="14" height="14" viewBox="0 0 14 14" f
|
|
|
753
753
|
|
|
754
754
|
// Toggle expand/collapse chevron — 12×12 so it fits the toggle arrow button
|
|
755
755
|
export const IconChevronRightSmall = '<svg aria-hidden="true" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 2.5L8.5 6L4.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
|
756
|
+
|
|
757
|
+
// Columns layout tool — two side-by-side column rectangles
|
|
758
|
+
export const IconColumns = `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="7" height="16" rx="1"/><rect x="14" y="4" width="7" height="16" rx="1"/></svg>`;
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* Builds a columns-preset icon: one rounded frame split by `count - 1` evenly
|
|
762
|
+
* spaced dividers, so it reads as a container holding exactly `count` columns
|
|
763
|
+
* and keeps a constant stroke weight at any count (avoids the cramped barcode
|
|
764
|
+
* look of N separate bars). Used by the ColumnList toolbox presets (2–5).
|
|
765
|
+
*/
|
|
766
|
+
export const buildIconColumnsCount = (count: number): string => {
|
|
767
|
+
const x = 3;
|
|
768
|
+
const y = 4;
|
|
769
|
+
const w = 18;
|
|
770
|
+
const h = 16;
|
|
771
|
+
const step = w / count;
|
|
772
|
+
const dividers = Array.from({ length: count - 1 }, (_, i) => {
|
|
773
|
+
const dx = +(x + step * (i + 1)).toFixed(2);
|
|
774
|
+
|
|
775
|
+
return `<line x1="${dx}" y1="${y}" x2="${dx}" y2="${y + h}"/>`;
|
|
776
|
+
}).join('');
|
|
777
|
+
|
|
778
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="${x}" y="${y}" width="${w}" height="${h}" rx="2"/>${dividers}</svg>`;
|
|
779
|
+
};
|
|
@@ -235,6 +235,19 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
235
235
|
return null;
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Columns must never be unwrapped by Enter. A 'column' is a single-child
|
|
240
|
+
* non-toggle container whose own parent is a 'column_list'. Promoting its
|
|
241
|
+
* empty sole child after the parent index would insert a new block at the
|
|
242
|
+
* document root (parentId=null), escaping the column and stranding the
|
|
243
|
+
* holder at the workingArea root. Returning null falls through to the
|
|
244
|
+
* normal Case 2 path, which re-parents the new sibling into the same
|
|
245
|
+
* column and leaves the column_list intact.
|
|
246
|
+
*/
|
|
247
|
+
if (parentBlock.name === 'column' || parentBlock.name === 'column_list') {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
|
|
238
251
|
/**
|
|
239
252
|
* Non-toggle containers (e.g. callout): when the only child is empty,
|
|
240
253
|
* exit by inserting a new block after the container. The container and
|
|
@@ -372,14 +385,19 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
372
385
|
*
|
|
373
386
|
* Skip this guard for table cell blocks — they use a separate mechanism.
|
|
374
387
|
*/
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
this.removeEmptyToggleChildAndFocusNext(currentBlock);
|
|
388
|
+
const hasNoPreviousSiblingInParent = previousBlock === null ||
|
|
389
|
+
previousBlock.parentId !== currentBlock.parentId;
|
|
378
390
|
|
|
379
|
-
|
|
391
|
+
if (currentBlock.parentId != null && !this.isCurrentBlockInsideTableCell && hasNoPreviousSiblingInParent) {
|
|
392
|
+
// A column's sole empty child collapses the column itself; otherwise
|
|
393
|
+
// fall back to the toggle-child behaviour (remove + focus next sibling).
|
|
394
|
+
if (!this.removeSoleEmptyColumnChild(currentBlock)) {
|
|
395
|
+
this.removeEmptyToggleChildAndFocusNext(currentBlock);
|
|
380
396
|
}
|
|
381
|
-
|
|
397
|
+
|
|
398
|
+
return;
|
|
382
399
|
}
|
|
400
|
+
// Previous sibling exists in the same parent — fall through to merge/remove logic
|
|
383
401
|
|
|
384
402
|
/**
|
|
385
403
|
* Don't merge across table cell boundaries.
|
|
@@ -525,7 +543,15 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
525
543
|
*/
|
|
526
544
|
const prevBlock = BlockManager.previousBlock;
|
|
527
545
|
|
|
528
|
-
|
|
546
|
+
const hasNoPrevSiblingInParent = prevBlock === null || prevBlock.parentId !== currentBlock.parentId;
|
|
547
|
+
|
|
548
|
+
if (currentBlock.parentId !== null && hasNoPrevSiblingInParent) {
|
|
549
|
+
// A column's sole empty child collapses the column itself rather than
|
|
550
|
+
// being a no-op like a toggle child.
|
|
551
|
+
const collapsed = this.removeSoleEmptyColumnChild(currentBlock);
|
|
552
|
+
|
|
553
|
+
collapsed && this.closeToolbarIfNotInTableCell();
|
|
554
|
+
|
|
529
555
|
return;
|
|
530
556
|
}
|
|
531
557
|
|
|
@@ -879,4 +905,39 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
879
905
|
}
|
|
880
906
|
}
|
|
881
907
|
|
|
908
|
+
/**
|
|
909
|
+
* When `block` is the SOLE child of a `column` and is empty, remove it so the
|
|
910
|
+
* now-empty column is dropped: a column is pure layout and must not linger
|
|
911
|
+
* empty. BlockManager.removeBlock cascades — deleting the last child removes
|
|
912
|
+
* the column, which unwraps the column_list if it collapses to one column.
|
|
913
|
+
*
|
|
914
|
+
* Returns true when it handled the removal. A column with OTHER children is
|
|
915
|
+
* left to the generic empty-child path so the column survives, so this only
|
|
916
|
+
* fires for the sole-child case (returns false otherwise — including for
|
|
917
|
+
* non-column parents such as toggles/callouts).
|
|
918
|
+
*/
|
|
919
|
+
private removeSoleEmptyColumnChild(block: Block): boolean {
|
|
920
|
+
if (!block.isEmpty || block.parentId === null) {
|
|
921
|
+
return false;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
const parentBlock = this.Blok.BlockManager.getBlockById(block.parentId);
|
|
925
|
+
|
|
926
|
+
if (parentBlock === undefined || parentBlock.name !== 'column' || parentBlock.contentIds.length > 1) {
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
const { BlockManager, Caret } = this.Blok;
|
|
931
|
+
|
|
932
|
+
void BlockManager.removeBlock(block);
|
|
933
|
+
|
|
934
|
+
const newCurrentBlock = BlockManager.currentBlock;
|
|
935
|
+
|
|
936
|
+
if (newCurrentBlock) {
|
|
937
|
+
Caret.setToBlock(newCurrentBlock, Caret.positions.END);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
return true;
|
|
941
|
+
}
|
|
942
|
+
|
|
882
943
|
}
|
|
@@ -212,7 +212,18 @@ export class BlockHierarchy {
|
|
|
212
212
|
// If old parent had a toggle child container and this block was in it, move it to the
|
|
213
213
|
// position indicated by the flat array. moveBlocks() updates the flat array before
|
|
214
214
|
// setBlockParent() is called, so getBlockIndex() reflects the intended drop position.
|
|
215
|
-
|
|
215
|
+
//
|
|
216
|
+
// Guard: only relocate the holder OUT of the toggle when the block is actually
|
|
217
|
+
// LEAVING its toggle parent (new parent differs from the old one). When the
|
|
218
|
+
// parent is unchanged the block is merely following its own relocated parent —
|
|
219
|
+
// e.g. a toggle dragged between columns carries its child along, and
|
|
220
|
+
// DragController re-asserts the child's parent via setBlockParent(child, sameToggle)
|
|
221
|
+
// to fix DOM placement. Yanking it to root here would strand the child outside
|
|
222
|
+
// the toggle even though it still belongs to it (the toggle-child-rides-along bug).
|
|
223
|
+
const oldContainer =
|
|
224
|
+
oldParent !== undefined && sanitizedParentId !== oldParentId
|
|
225
|
+
? oldParent.holder.querySelector('[data-blok-toggle-children]')
|
|
226
|
+
: null;
|
|
216
227
|
|
|
217
228
|
if (oldContainer && block.holder.parentElement === oldContainer) {
|
|
218
229
|
// Scan backwards in the flat array for the nearest block whose holder is at root
|
|
@@ -268,13 +279,68 @@ export class BlockHierarchy {
|
|
|
268
279
|
}
|
|
269
280
|
}
|
|
270
281
|
|
|
271
|
-
// Move block holder into
|
|
272
|
-
//
|
|
273
|
-
//
|
|
274
|
-
//
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
282
|
+
// Move block holder into the new parent's direct child container, honouring
|
|
283
|
+
// the flat-array order so the DOM order matches the logical order.
|
|
284
|
+
//
|
|
285
|
+
// The target container may be a toggle/callout container ([data-blok-toggle-children])
|
|
286
|
+
// or a generic nested-blocks container ([data-blok-nested-blocks], used by
|
|
287
|
+
// columns and column_list). querySelector returns the FIRST match in
|
|
288
|
+
// document order: because a parent's own child container is a direct child of
|
|
289
|
+
// its wrapper, it always precedes any grandchild container (which lives INSIDE
|
|
290
|
+
// it, deeper in document order). So this resolves to the parent's own direct
|
|
291
|
+
// container, never a deeper one belonging to a nested block.
|
|
292
|
+
//
|
|
293
|
+
// Skip guard: keep the original behaviour of refusing to move a holder that
|
|
294
|
+
// is already claimed by SOME nested-blocks container (e.g. a table cell) —
|
|
295
|
+
// moving it would steal it from that container. The one loosening Track C
|
|
296
|
+
// needs is to still mount when the target is the holder's CURRENT container
|
|
297
|
+
// already (a no-op insertBefore that re-asserts flat order); we express that
|
|
298
|
+
// by only skipping when the holder's nearest nested container is DIFFERENT
|
|
299
|
+
// from the target container.
|
|
300
|
+
if (sanitizedParentId !== null && newParent !== undefined) {
|
|
301
|
+
const newContainer = newParent.holder.querySelector(
|
|
302
|
+
'[data-blok-toggle-children], [data-blok-nested-blocks]'
|
|
303
|
+
);
|
|
304
|
+
const currentNestedContainer = block.holder.closest(`[${DATA_ATTR.nestedBlocks}]`);
|
|
305
|
+
|
|
306
|
+
// A column→column move is a legitimate reparent driven by the drag system:
|
|
307
|
+
// the holder must follow the model into the destination column. The
|
|
308
|
+
// anti-stealing guard targets corrupted multi-references across tool
|
|
309
|
+
// containers (table cell / toggle / callout / header), never the columns
|
|
310
|
+
// flex layout. A column's child container is identifiable because its
|
|
311
|
+
// PARENT is the [data-blok-column] wrapper — that precisely separates the
|
|
312
|
+
// two cases (a toggle nested inside a column would not match).
|
|
313
|
+
const isColumnContainer = (container: Element | null): boolean =>
|
|
314
|
+
container?.parentElement?.matches('[data-blok-column]') === true;
|
|
315
|
+
// The column_list's own child container is the columns row. A `column`
|
|
316
|
+
// block always belongs to a columns row, so mounting one into a row is a
|
|
317
|
+
// legitimate structural reparent — never a steal. This is the case the
|
|
318
|
+
// drag-beside "add a column" path hits: api.blocks.insert anchors the new
|
|
319
|
+
// column's holder next to a SIBLING column's child block (the new column's
|
|
320
|
+
// flat index falls inside that sibling's child range), so the holder lands
|
|
321
|
+
// inside that sibling column's container. Without this allowance the guard
|
|
322
|
+
// below refuses to move it out, stranding the new column nested INSIDE its
|
|
323
|
+
// sibling instead of placing it beside it in the row.
|
|
324
|
+
const isColumnsRow = (container: Element | null): boolean =>
|
|
325
|
+
container?.matches('[data-blok-columns]') === true;
|
|
326
|
+
// A block whose model parent is a column but whose holder is currently
|
|
327
|
+
// stranded in the column_list's flex row (the columns row) must be
|
|
328
|
+
// relocated INTO the target column's child container. This is the
|
|
329
|
+
// Enter/split-in-column strand: the split insert anchors the new holder
|
|
330
|
+
// 'beforebegin' the sibling column in the row, so its nearest nested
|
|
331
|
+
// container resolves to the columns row, not a real column. Allow the
|
|
332
|
+
// move when the holder sits in the row and the destination is a genuine
|
|
333
|
+
// column child container — it was never legitimately "claimed" by the row.
|
|
334
|
+
const strandedInColumnsRow =
|
|
335
|
+
isColumnsRow(currentNestedContainer) && isColumnContainer(newContainer);
|
|
336
|
+
const claimedByOtherContainer =
|
|
337
|
+
currentNestedContainer !== null &&
|
|
338
|
+
currentNestedContainer !== newContainer &&
|
|
339
|
+
!(isColumnContainer(currentNestedContainer) && isColumnContainer(newContainer)) &&
|
|
340
|
+
!isColumnsRow(newContainer) &&
|
|
341
|
+
!strandedInColumnsRow;
|
|
342
|
+
|
|
343
|
+
if (newContainer && !claimedByOtherContainer) {
|
|
278
344
|
const allBlocks = this.repository.blocks;
|
|
279
345
|
const blockIdx = allBlocks.indexOf(block);
|
|
280
346
|
const nextSiblingHolder = allBlocks.slice(blockIdx + 1).find(
|
|
@@ -286,6 +352,30 @@ export class BlockHierarchy {
|
|
|
286
352
|
}
|
|
287
353
|
}
|
|
288
354
|
|
|
355
|
+
// Escaping a column for ROOT. The positional blocksStore.move() skips the
|
|
356
|
+
// DOM move while the holder is nested (it follows its parent container by
|
|
357
|
+
// default — correct for table cells), and the mount-into-container branch
|
|
358
|
+
// above only runs for a non-null parent — so a block dragged OUT of a
|
|
359
|
+
// column to root would otherwise stay stranded in the column's container
|
|
360
|
+
// while the model says root (a model-vs-DOM divergence). Relocate the
|
|
361
|
+
// holder to the workingArea at its flat-array position. Toggle/callout/
|
|
362
|
+
// header escapes are handled by the [data-blok-toggle-children] block near
|
|
363
|
+
// the top of this method; table cells manage their own DOM and block
|
|
364
|
+
// cross-cell drops upstream — so this is scoped to columns only.
|
|
365
|
+
if (sanitizedParentId === null && block.holder.closest('[data-blok-column]') !== null) {
|
|
366
|
+
const allBlocks = this.repository.blocks;
|
|
367
|
+
const blockIndex = allBlocks.indexOf(block);
|
|
368
|
+
const isAtRoot = (b: Block): boolean => b.holder.closest(`[${DATA_ATTR.nestedBlocks}]`) === null;
|
|
369
|
+
const precedingRoot = allBlocks.slice(0, blockIndex).reverse().find(isAtRoot);
|
|
370
|
+
const followingRoot = allBlocks.slice(blockIndex + 1).find(isAtRoot);
|
|
371
|
+
|
|
372
|
+
if (precedingRoot !== undefined) {
|
|
373
|
+
precedingRoot.holder.insertAdjacentElement('afterend', block.holder);
|
|
374
|
+
} else if (followingRoot !== undefined) {
|
|
375
|
+
followingRoot.holder.insertAdjacentElement('beforebegin', block.holder);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
289
379
|
// Update visual indentation
|
|
290
380
|
this.updateBlockIndentation(block);
|
|
291
381
|
|
|
@@ -295,6 +385,37 @@ export class BlockHierarchy {
|
|
|
295
385
|
}
|
|
296
386
|
}
|
|
297
387
|
|
|
388
|
+
/**
|
|
389
|
+
* Walks the block's parentId chain and returns true if any ancestor is a
|
|
390
|
+
* `column` or `column_list` block — i.e. the block lives inside a columns
|
|
391
|
+
* layout in the block tree, regardless of whether its holder has been
|
|
392
|
+
* mounted into the columns DOM yet. Cycle-safe via a visited set.
|
|
393
|
+
* @param block - the block to test
|
|
394
|
+
* @returns true if a column/column_list ancestor exists
|
|
395
|
+
*/
|
|
396
|
+
private hasColumnAncestor(block: Block): boolean {
|
|
397
|
+
const walk = (parentId: string | null, visited: Set<string>): boolean => {
|
|
398
|
+
if (parentId === null || visited.has(parentId)) {
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
visited.add(parentId);
|
|
402
|
+
|
|
403
|
+
const parent = this.repository.getBlockById(parentId);
|
|
404
|
+
|
|
405
|
+
if (parent === undefined) {
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (parent.name === 'column' || parent.name === 'column_list') {
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
return walk(parent.parentId, visited);
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
return walk(block.parentId, new Set<string>());
|
|
417
|
+
}
|
|
418
|
+
|
|
298
419
|
/**
|
|
299
420
|
* Updates the visual indentation of a block based on its depth in the hierarchy.
|
|
300
421
|
* @param block - the block to update indentation for
|
|
@@ -319,6 +440,27 @@ export class BlockHierarchy {
|
|
|
319
440
|
return;
|
|
320
441
|
}
|
|
321
442
|
|
|
443
|
+
// Columns are a flex layout: the column_list block, its column children, and
|
|
444
|
+
// every block inside a column are positioned by flex, not block-tree depth.
|
|
445
|
+
// Depth-based margin would push the column holders off their even split and
|
|
446
|
+
// indent the column content. Keep them flush.
|
|
447
|
+
//
|
|
448
|
+
// The DOM check (`closest`) misses blocks indented BEFORE their holder is
|
|
449
|
+
// mounted into the columns container — e.g. a toolbox-seeded paragraph,
|
|
450
|
+
// whose indentation runs during insertInsideParent, before the Column tool
|
|
451
|
+
// appends it. The column ancestry is always in the block tree, so consult
|
|
452
|
+
// that too rather than relying on DOM placement timing.
|
|
453
|
+
if (
|
|
454
|
+
block.name === 'column_list' ||
|
|
455
|
+
holder.closest('[data-blok-columns]') ||
|
|
456
|
+
this.hasColumnAncestor(block)
|
|
457
|
+
) {
|
|
458
|
+
holder.style.marginLeft = '';
|
|
459
|
+
holder.setAttribute('data-blok-depth', '0');
|
|
460
|
+
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
|
|
322
464
|
const depth = this.getBlockDepth(block);
|
|
323
465
|
const indentationPx = depth * 24; // 24px per level
|
|
324
466
|
|