@jackuait/blok 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blok.cjs +1 -1
- package/dist/blok.iife.js +2 -2
- package/dist/blok.mjs +2 -2
- package/dist/blok.umd.js +2 -2
- package/dist/chunks/{blok-RLzqfwql.mjs → blok-D1e9swtF.mjs} +69 -69
- package/dist/chunks/{blok-BTpZKZQ5.cjs → blok-DEVVs3xk.cjs} +3 -3
- package/dist/chunks/{constants-B1fDH6ZT.cjs → constants-B2Lcd7Kk.cjs} +1 -1
- package/dist/chunks/{constants-BUNgcIvY.mjs → constants-DfGAwzgk.mjs} +1 -1
- package/dist/chunks/messages-04T5j1ww2.cjs +1 -0
- package/dist/chunks/messages-0OyEWZDW.cjs +1 -0
- package/dist/{messages-CpqGtSQ9.mjs → chunks/messages-14GzwdH92.mjs} +7 -7
- package/dist/chunks/messages-3iHkF7Vy.cjs +1 -0
- package/dist/chunks/messages-5tb-mSXS.cjs +1 -0
- package/dist/{messages-ilnnXk3p.mjs → chunks/messages-8vGF8iWb.mjs} +8 -8
- package/dist/chunks/messages-98gouyMa.cjs +1 -0
- package/dist/chunks/messages-B-3_M44j.cjs +1 -0
- package/dist/chunks/{messages-R3IlcPVE2.mjs → messages-B3xnntgx2.mjs} +8 -8
- package/dist/chunks/{messages-Dly-_TB6.mjs → messages-B5eo-pGw.mjs} +21 -21
- package/dist/chunks/{messages-3H-mU8nV.mjs → messages-B94JmzMj.mjs} +11 -11
- package/dist/chunks/messages-BAgSlZpS.cjs +1 -0
- package/dist/chunks/{messages-BoGOF3jH.mjs → messages-BClegbPD.mjs} +15 -15
- package/dist/chunks/messages-BDNdC6-X.cjs +1 -0
- package/dist/chunks/messages-BG1Tn41d.cjs +1 -0
- package/dist/{messages-MYWse7vx2.mjs → chunks/messages-BGoPxZ5n.mjs} +8 -8
- package/dist/chunks/{messages-JiQBxj4o2.mjs → messages-BHE1mg5A2.mjs} +9 -9
- package/dist/chunks/messages-BItPVbHx.cjs +1 -0
- package/dist/chunks/messages-BJ7clJXu2.cjs +1 -0
- package/dist/chunks/messages-BPYQEADI.cjs +1 -0
- package/dist/chunks/{messages-BRWkudTR.mjs → messages-BQKWm9xB.mjs} +11 -11
- package/dist/chunks/{messages-D9MUpOtw2.mjs → messages-BSstxb1m2.mjs} +12 -12
- package/dist/chunks/messages-BSxgqWqe.cjs +1 -0
- package/dist/chunks/messages-BSyXBvUi2.cjs +1 -0
- package/dist/chunks/messages-BVuodJIJ.cjs +1 -0
- package/dist/chunks/{messages-vQ8eiHPr2.mjs → messages-BXmg4Rer2.mjs} +4 -4
- package/dist/chunks/messages-BdjiMHzU2.cjs +1 -0
- package/dist/{messages-BUfHXzRi2.mjs → chunks/messages-Beh905t72.mjs} +12 -12
- package/dist/chunks/messages-BfYWRC3o.cjs +1 -0
- package/dist/{messages-wB8V2U2i2.mjs → chunks/messages-Bh3E53-f2.mjs} +5 -5
- package/dist/chunks/{messages-BSHC8Ohs.mjs → messages-BhTV7PCN.mjs} +10 -10
- package/dist/chunks/messages-Bi3snvmH2.cjs +1 -0
- package/dist/chunks/{messages-Bh8al9kl.mjs → messages-Bnm45Rmp.mjs} +25 -25
- package/dist/{messages-CaJp3hwf2.mjs → chunks/messages-Bq7pLz_h2.mjs} +9 -9
- package/dist/chunks/{messages-DsWiXnOy2.mjs → messages-BqM6l_JM2.mjs} +12 -12
- package/dist/chunks/messages-Br3ERe172.cjs +1 -0
- package/dist/chunks/messages-Bs9JOJDc.cjs +1 -0
- package/dist/chunks/messages-BtEDKVO7.cjs +1 -0
- package/dist/chunks/messages-BtevAuQS2.cjs +1 -0
- package/dist/chunks/messages-Bttb4o0k.cjs +1 -0
- package/dist/chunks/messages-BxRX_hY12.cjs +1 -0
- package/dist/{messages-BSvuvR6i.mjs → chunks/messages-BxhJFFrR.mjs} +21 -21
- package/dist/{messages-BIRq0EVo.mjs → chunks/messages-BzC8TVYC.mjs} +15 -15
- package/dist/chunks/{messages-hT-pjCQL.mjs → messages-Bz_fTG46.mjs} +13 -13
- package/dist/chunks/messages-C-N1XBvh2.cjs +1 -0
- package/dist/chunks/messages-C2-v6HdR.cjs +1 -0
- package/dist/chunks/{messages-CHmoIrso.mjs → messages-C4Wacagz.mjs} +4 -4
- package/dist/{messages-CI7MWoEP2.mjs → chunks/messages-C62iC79d2.mjs} +20 -20
- package/dist/chunks/messages-C6Xc3L-B2.cjs +1 -0
- package/dist/chunks/messages-CEquPedm.cjs +1 -0
- package/dist/chunks/{messages-t_RiQ_y02.mjs → messages-CEslBsO62.mjs} +7 -7
- package/dist/chunks/messages-CFo-pG-t2.cjs +1 -0
- package/dist/{messages-BrycA2Yd.mjs → chunks/messages-CHizzxUv.mjs} +4 -4
- package/dist/chunks/messages-CO_hj1x6.cjs +1 -0
- package/dist/chunks/{messages-qjFVR3AK.mjs → messages-CSc7Lh_3.mjs} +5 -5
- package/dist/chunks/messages-CT025FgD2.cjs +1 -0
- package/dist/chunks/messages-CUxk6xrQ.cjs +1 -0
- package/dist/chunks/messages-CVHSfosB.cjs +1 -0
- package/dist/chunks/messages-CXlSU8cQ2.cjs +1 -0
- package/dist/chunks/{messages-BrLLU_Dm.mjs → messages-CZ4Jcn6y.mjs} +5 -5
- package/dist/chunks/messages-CZQuqbNz2.cjs +1 -0
- package/dist/{messages-BGfVV77O.mjs → chunks/messages-CZfG1cmA2.mjs} +15 -15
- package/dist/chunks/{messages-BrpXuY-6.mjs → messages-Cc56SxY7.mjs} +10 -10
- package/dist/chunks/{messages-bJ7cOoA_.mjs → messages-CcvcAZOt.mjs} +13 -13
- package/dist/chunks/{messages-Bxz0TVBv2.mjs → messages-Cd-FaIr_2.mjs} +61 -61
- package/dist/{messages-Cu5AHbR-2.mjs → chunks/messages-CdOX6JHb2.mjs} +10 -10
- package/dist/{messages-DJRg4kFv2.mjs → chunks/messages-Ced9OY9X.mjs} +12 -12
- package/dist/chunks/messages-Cf5mu1AT.cjs +1 -0
- package/dist/chunks/messages-Cf8u0aln2.cjs +1 -0
- package/dist/chunks/messages-Cg6qicee.cjs +1 -0
- package/dist/chunks/messages-CgGwGZs22.cjs +1 -0
- package/dist/chunks/messages-Cgg1HHSo.cjs +1 -0
- package/dist/chunks/messages-Ck6jEhXV.cjs +1 -0
- package/dist/chunks/{messages-36KiD2Bx2.mjs → messages-CkRbSW3z2.mjs} +7 -7
- package/dist/chunks/messages-Ckej-nnJ.cjs +1 -0
- package/dist/{messages-Bgf1E-Vj.mjs → chunks/messages-Cn0B5LU1.mjs} +17 -17
- package/dist/chunks/{messages-Dk_PadZz.mjs → messages-CpC5Cv_s.mjs} +7 -7
- package/dist/chunks/messages-CpJW0LBR.cjs +1 -0
- package/dist/chunks/messages-Cx1kdFH_2.cjs +1 -0
- package/dist/chunks/{messages-DTKpwQ9o.mjs → messages-CxVi9cnz.mjs} +11 -11
- package/dist/{messages-CwavcZov.mjs → chunks/messages-Cx_kyYnf2.mjs} +14 -14
- package/dist/chunks/messages-Cz7AbEFm.cjs +1 -0
- package/dist/{messages-B9s898dI.mjs → chunks/messages-D1gz17wt.mjs} +10 -10
- package/dist/chunks/messages-D2nTfhRa2.cjs +1 -0
- package/dist/chunks/{messages-DOCzIldx.mjs → messages-D8qYNZ_T.mjs} +10 -10
- package/dist/chunks/messages-DB6z9ybS.cjs +1 -0
- package/dist/chunks/{messages-DefTqLH32.mjs → messages-DDnB1EFE2.mjs} +20 -20
- package/dist/chunks/{messages-BoN_Bitl2.mjs → messages-DFUn1PHK2.mjs} +15 -15
- package/dist/chunks/messages-DG8Lmqf52.cjs +1 -0
- package/dist/chunks/messages-DNYtMplL2.cjs +1 -0
- package/dist/chunks/messages-DOBcfgRF.cjs +1 -0
- package/dist/{messages-7EaFUksm.mjs → chunks/messages-DQb9YRoO2.mjs} +7 -7
- package/dist/chunks/messages-DWeyV2N3.cjs +1 -0
- package/dist/{messages-C0RxvQ_B2.mjs → chunks/messages-DaqNOQ8p.mjs} +20 -20
- package/dist/chunks/{messages-BRN9bO60.mjs → messages-De0Fkl0K.mjs} +4 -4
- package/dist/chunks/{messages-D3exVYZD.mjs → messages-DgSRzW-Y.mjs} +24 -24
- package/dist/{messages-CRuD2YBl2.mjs → chunks/messages-DjSuzS2m2.mjs} +5 -5
- package/dist/chunks/messages-DkINYHo4.cjs +1 -0
- package/dist/chunks/messages-Dml6u25s2.cjs +1 -0
- package/dist/chunks/{messages-CH_Aqn-k.mjs → messages-Dp5C7vWz.mjs} +8 -8
- package/dist/chunks/{messages-B2hS--KC.mjs → messages-Dp5SW9D-.mjs} +7 -7
- package/dist/chunks/messages-DsWTIuli2.cjs +1 -0
- package/dist/{messages-BqjusG9f.mjs → chunks/messages-DuOkV5T_.mjs} +16 -16
- package/dist/{messages-D9CbvVgb.mjs → chunks/messages-DubJ63UL.mjs} +8 -8
- package/dist/chunks/{messages-VFdnkrDm2.mjs → messages-DwAl9zoh2.mjs} +4 -4
- package/dist/{messages-CasKwW-A.mjs → chunks/messages-DwU7qOBO2.mjs} +5 -5
- package/dist/{messages-CN5mXtal2.mjs → chunks/messages-DyuKfskv.mjs} +16 -16
- package/dist/chunks/{messages-M1tLUpjT.mjs → messages-DzZZDveu.mjs} +10 -10
- package/dist/chunks/{messages-D33lcfdb.mjs → messages-EI0ZLMIG.mjs} +10 -10
- package/dist/{messages-BTp7xsAK2.mjs → chunks/messages-GXQbRrHa2.mjs} +12 -12
- package/dist/{messages-D5u6vlu6.mjs → chunks/messages-ID7kZQyc.mjs} +6 -6
- package/dist/chunks/messages-JLj0J5so.cjs +1 -0
- package/dist/{messages-B-9u3fLG.mjs → chunks/messages-LWyC-1ol.mjs} +19 -19
- package/dist/{messages-BaYuAoTP2.mjs → chunks/messages-M2lNlKhI2.mjs} +33 -33
- package/dist/chunks/{messages-C3qdarW42.mjs → messages-PtDEkfSR2.mjs} +12 -12
- package/dist/chunks/{messages-CO6ZReE7.mjs → messages-S_Bmo_Qc.mjs} +7 -7
- package/dist/chunks/messages-UoKgx7_8.cjs +1 -0
- package/dist/chunks/messages-Vbqmvxs1.cjs +1 -0
- package/dist/chunks/{messages-Ci-rkkgx.mjs → messages-Vdmc6CaN.mjs} +6 -6
- package/dist/chunks/messages-XM0y9kXy2.cjs +1 -0
- package/dist/{messages-BY5WK3mB.mjs → chunks/messages-dZdV8VYV.mjs} +13 -13
- package/dist/chunks/messages-f1NcMMTR2.cjs +1 -0
- package/dist/chunks/{messages-CnvK1Abd2.mjs → messages-h43rfIyt2.mjs} +28 -28
- package/dist/chunks/messages-jAgR8EPP.cjs +1 -0
- package/dist/chunks/{messages-QeD4YPxL.mjs → messages-m_zk_AR3.mjs} +8 -8
- package/dist/{messages-DQiZK84h.mjs → chunks/messages-n1T_9w-Z.mjs} +24 -24
- package/dist/chunks/messages-o3omNKfH.cjs +1 -0
- package/dist/chunks/messages-p-1X5oFM2.cjs +1 -0
- package/dist/chunks/messages-p5w1kuc5.cjs +1 -0
- package/dist/chunks/messages-poLdFEEs2.cjs +1 -0
- package/dist/chunks/messages-px_8gpHT.cjs +1 -0
- package/dist/chunks/messages-s9I-JHCa.cjs +1 -0
- package/dist/chunks/messages-vdupz5T0.cjs +1 -0
- package/dist/chunks/{messages-DPX9kFey.mjs → messages-xMrks-Gg.mjs} +12 -12
- package/dist/chunks/tools-DiTb45BS.cjs +208 -0
- package/dist/chunks/{tools-ChneUeSu.mjs → tools-vX3wCW3a.mjs} +1228 -1203
- package/dist/full.cjs +1 -1
- package/dist/full.mjs +3 -3
- package/dist/locales.mjs +67 -67
- package/dist/{chunks/messages-7bt8ujXQ.mjs → messages-2jeEK-EB.mjs} +4 -4
- package/dist/{messages-DJMSsPuS.mjs → messages-2pXizYBd.mjs} +4 -4
- package/dist/{chunks/messages-8FnVkNsk2.mjs → messages-6RcfJ59a.mjs} +15 -15
- package/dist/{messages-Ca6_kMBT2.mjs → messages-B0n-WDK72.mjs} +12 -12
- package/dist/{messages-DCwlxqBz.mjs → messages-B4cc5O5K.mjs} +25 -25
- package/dist/{chunks/messages-BVV2uB2V2.mjs → messages-B8BXCJBA.mjs} +7 -7
- package/dist/{chunks/messages-BakdNtus2.mjs → messages-BCGyLzFB2.mjs} +5 -5
- package/dist/{messages-BfFFrhbd.mjs → messages-BCeeFrNO.mjs} +11 -11
- package/dist/{chunks/messages-c1uiUe552.mjs → messages-BEnINcno2.mjs} +12 -12
- package/dist/{messages-DGz70LLg2.mjs → messages-BInBVzW42.mjs} +12 -12
- package/dist/{messages-CSVzRRdj.mjs → messages-BOEP2ly_.mjs} +5 -5
- package/dist/{messages-B3YNVBd1.mjs → messages-BWzRZ5Un.mjs} +4 -4
- package/dist/{chunks/messages-DN9_Nlre2.mjs → messages-BXgGBpmY.mjs} +5 -5
- package/dist/{messages-B6p4UUC-.mjs → messages-BXs-Zwhx.mjs} +12 -12
- package/dist/{messages-CdLOD2b_2.mjs → messages-BYyRYlTQ2.mjs} +21 -21
- package/dist/{messages-BKrK8Axl.mjs → messages-B_XoP1A3.mjs} +11 -11
- package/dist/{chunks/messages-D21eomvf.mjs → messages-BbFJ2r9p.mjs} +8 -8
- package/dist/{messages-h1l_y01e.mjs → messages-Bd2Q-tnQ.mjs} +10 -10
- package/dist/{chunks/messages-CXbHVq05.mjs → messages-BfGAGIg-2.mjs} +16 -16
- package/dist/{messages--RL8UOhV.mjs → messages-Bj8K6_bv.mjs} +15 -15
- package/dist/{messages-BnpaaUnF2.mjs → messages-BkNVOuvO2.mjs} +7 -7
- package/dist/{messages-gmq1abXg.mjs → messages-BmKhZE7I.mjs} +10 -10
- package/dist/{chunks/messages-DiUTxAEQ.mjs → messages-BrkXHD2D2.mjs} +20 -20
- package/dist/{chunks/messages-DcgNt1Bg2.mjs → messages-BytEaMMs.mjs} +7 -7
- package/dist/{chunks/messages-Hsn-3QW0.mjs → messages-C-XKbE2c.mjs} +17 -17
- package/dist/{chunks/messages-DeK_vGCd2.mjs → messages-C1d7I7f_2.mjs} +20 -20
- package/dist/{messages-BqKW-hlt2.mjs → messages-C2pz0mJs2.mjs} +9 -9
- package/dist/{messages-BIUXljax.mjs → messages-C5sc4wjR.mjs} +8 -8
- package/dist/{chunks/messages-DqcQoY-I2.mjs → messages-C9XTx39w2.mjs} +5 -5
- package/dist/{messages-BGIle7Xo.mjs → messages-CGZPFOEr.mjs} +13 -13
- package/dist/{chunks/messages-B9kHL94V.mjs → messages-CJsMZvUv.mjs} +10 -10
- package/dist/{messages-CrcHeqGR.mjs → messages-CS6vG53A.mjs} +11 -11
- package/dist/{chunks/messages-8Qzw6Xju.mjs → messages-CSVEbRhT.mjs} +24 -24
- package/dist/{chunks/messages-7nxAnzdE2.mjs → messages-CUsdyCrN2.mjs} +10 -10
- package/dist/{messages-DZtr9UPl2.mjs → messages-CWWIbebM2.mjs} +8 -8
- package/dist/{messages-DA5IipN52.mjs → messages-CWdh59uz2.mjs} +15 -15
- package/dist/{messages-xSBQ46qE2.mjs → messages-CX2ioEBc2.mjs} +20 -20
- package/dist/{messages-eNnPQjam2.mjs → messages-CdmaH2dA2.mjs} +28 -28
- package/dist/{messages-BlkFLGrN.mjs → messages-Cg3w36Bc.mjs} +7 -7
- package/dist/{chunks/messages-CO9-5XrF2.mjs → messages-ChivLKDg2.mjs} +12 -12
- package/dist/{chunks/messages-C3ueCeDy.mjs → messages-Ck7HWiG_.mjs} +21 -21
- package/dist/{chunks/messages-CXzyyhBC.mjs → messages-CoSj68Ef2.mjs} +8 -8
- package/dist/{messages-m_U7v4rD.mjs → messages-CsHwUgSZ.mjs} +12 -12
- package/dist/{chunks/messages-BLtZ2DXE.mjs → messages-CzabNeP5.mjs} +6 -6
- package/dist/{messages-DPiPd88g.mjs → messages-D1jUHOKr.mjs} +6 -6
- package/dist/{messages-ZAVymtrA2.mjs → messages-DFKu1WGX2.mjs} +7 -7
- package/dist/{messages-CNzktVoM2.mjs → messages-DGwIRpOH2.mjs} +10 -10
- package/dist/{chunks/messages-DN6pprFJ2.mjs → messages-DMH0zRig2.mjs} +33 -33
- package/dist/{chunks/messages-ZjheBuhT2.mjs → messages-DPZsygzY.mjs} +14 -14
- package/dist/{messages-DlC9tgiV.mjs → messages-DPzZM5FG.mjs} +61 -61
- package/dist/{messages-CFSBN-tg.mjs → messages-DSmNNjPb.mjs} +7 -7
- package/dist/{chunks/messages-CIqhI4HT.mjs → messages-DaoTSrJW.mjs} +13 -13
- package/dist/{messages-CMG59Rb62.mjs → messages-DfnSbN512.mjs} +13 -13
- package/dist/{messages-DRdzJFUx2.mjs → messages-DvSC5JGC2.mjs} +7 -7
- package/dist/{messages-DO99T6qk2.mjs → messages-Dw7P8bMa2.mjs} +24 -24
- package/dist/{chunks/messages-B19gfehr.mjs → messages-GUgmAfdB.mjs} +15 -15
- package/dist/{chunks/messages-CC4xe9xv.mjs → messages-Nbssq1-N.mjs} +19 -19
- package/dist/{chunks/messages-DRKzAu-g.mjs → messages-S8uz2_bw2.mjs} +12 -12
- package/dist/{messages-DCqRZ9Pw.mjs → messages-TfPmsrxh.mjs} +8 -8
- package/dist/{messages-DL1HdFqf.mjs → messages-Z8HMjhe9.mjs} +5 -5
- package/dist/{messages-K1RIXLxa.mjs → messages-eFz25q1T.mjs} +4 -4
- package/dist/{chunks/messages-C81EnNxX.mjs → messages-gJWgJtGo.mjs} +8 -8
- package/dist/{chunks/messages-DPV70Ys22.mjs → messages-iJKNW8hW2.mjs} +9 -9
- package/dist/{messages-8wZYXCg7.mjs → messages-kb2GSl-V.mjs} +10 -10
- package/dist/{messages-mcif9RnD.mjs → messages-qjir1Zx9.mjs} +4 -4
- package/dist/{chunks/messages-R08pGvHm.mjs → messages-tcfLP2b2.mjs} +16 -16
- package/dist/{messages-C-_8o7te.mjs → messages-zoHZbvbe.mjs} +10 -10
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/tools.cjs +1 -1
- package/dist/tools.mjs +2 -2
- package/package.json +1 -1
- package/src/components/i18n/locales/am/messages.json +16 -17
- package/src/components/i18n/locales/ar/messages.json +6 -7
- package/src/components/i18n/locales/az/messages.json +15 -16
- package/src/components/i18n/locales/bg/messages.json +11 -12
- package/src/components/i18n/locales/bn/messages.json +21 -22
- package/src/components/i18n/locales/bs/messages.json +10 -11
- package/src/components/i18n/locales/cs/messages.json +13 -14
- package/src/components/i18n/locales/da/messages.json +10 -11
- package/src/components/i18n/locales/de/messages.json +12 -13
- package/src/components/i18n/locales/dv/messages.json +19 -20
- package/src/components/i18n/locales/el/messages.json +8 -9
- package/src/components/i18n/locales/es/messages.json +10 -11
- package/src/components/i18n/locales/et/messages.json +10 -11
- package/src/components/i18n/locales/fa/messages.json +8 -9
- package/src/components/i18n/locales/fi/messages.json +6 -7
- package/src/components/i18n/locales/fil/messages.json +13 -14
- package/src/components/i18n/locales/fr/messages.json +5 -6
- package/src/components/i18n/locales/gu/messages.json +8 -9
- package/src/components/i18n/locales/he/messages.json +11 -12
- package/src/components/i18n/locales/hi/messages.json +10 -11
- package/src/components/i18n/locales/hr/messages.json +17 -18
- package/src/components/i18n/locales/hu/messages.json +24 -25
- package/src/components/i18n/locales/hy/messages.json +11 -12
- package/src/components/i18n/locales/id/messages.json +15 -16
- package/src/components/i18n/locales/it/messages.json +4 -5
- package/src/components/i18n/locales/ja/messages.json +4 -5
- package/src/components/i18n/locales/ka/messages.json +7 -8
- package/src/components/i18n/locales/km/messages.json +14 -15
- package/src/components/i18n/locales/kn/messages.json +7 -8
- package/src/components/i18n/locales/ko/messages.json +7 -8
- package/src/components/i18n/locales/ku/messages.json +61 -62
- package/src/components/i18n/locales/lo/messages.json +5 -6
- package/src/components/i18n/locales/lt/messages.json +15 -16
- package/src/components/i18n/locales/lv/messages.json +4 -5
- package/src/components/i18n/locales/mk/messages.json +12 -13
- package/src/components/i18n/locales/ml/messages.json +4 -5
- package/src/components/i18n/locales/mn/messages.json +28 -29
- package/src/components/i18n/locales/mr/messages.json +8 -9
- package/src/components/i18n/locales/ms/messages.json +9 -10
- package/src/components/i18n/locales/my/messages.json +12 -13
- package/src/components/i18n/locales/ne/messages.json +12 -13
- package/src/components/i18n/locales/nl/messages.json +7 -8
- package/src/components/i18n/locales/no/messages.json +5 -6
- package/src/components/i18n/locales/pa/messages.json +33 -34
- package/src/components/i18n/locales/pl/messages.json +5 -6
- package/src/components/i18n/locales/ps/messages.json +20 -21
- package/src/components/i18n/locales/pt/messages.json +12 -13
- package/src/components/i18n/locales/ro/messages.json +12 -13
- package/src/components/i18n/locales/ru/messages.json +9 -10
- package/src/components/i18n/locales/sd/messages.json +20 -21
- package/src/components/i18n/locales/si/messages.json +15 -16
- package/src/components/i18n/locales/sk/messages.json +10 -11
- package/src/components/i18n/locales/sl/messages.json +12 -13
- package/src/components/i18n/locales/sq/messages.json +20 -21
- package/src/components/i18n/locales/sr/messages.json +24 -25
- package/src/components/i18n/locales/sv/messages.json +7 -8
- package/src/components/i18n/locales/sw/messages.json +16 -17
- package/src/components/i18n/locales/ta/messages.json +10 -11
- package/src/components/i18n/locales/te/messages.json +13 -14
- package/src/components/i18n/locales/th/messages.json +8 -9
- package/src/components/i18n/locales/tr/messages.json +7 -8
- package/src/components/i18n/locales/ug/messages.json +21 -22
- package/src/components/i18n/locales/uk/messages.json +8 -9
- package/src/components/i18n/locales/ur/messages.json +4 -5
- package/src/components/i18n/locales/vi/messages.json +5 -6
- package/src/components/i18n/locales/yi/messages.json +25 -26
- package/src/components/i18n/locales/zh/messages.json +7 -8
- package/src/styles/embed.css +4 -48
- package/src/tools/file/index.ts +30 -0
- package/src/tools/link/embed/index.ts +61 -11
- package/src/tools/link/embed/overlay.ts +12 -95
- package/src/tools/table/index.ts +37 -1
- package/src/tools/table/table-cell-blocks.ts +65 -0
- package/src/tools/table/table-operations.ts +51 -2
- package/src/tools/table/table-row-col-action-handler.ts +25 -2
- package/src/tools/table/table-subsystems.ts +6 -1
- package/dist/chunks/messages--XZLcuUK.cjs +0 -1
- package/dist/chunks/messages-6adLi-J9.cjs +0 -1
- package/dist/chunks/messages-9xZnfk_-.cjs +0 -1
- package/dist/chunks/messages-B-7wgQm5.cjs +0 -1
- package/dist/chunks/messages-B4-kmmK72.cjs +0 -1
- package/dist/chunks/messages-BBh7sF4o.cjs +0 -1
- package/dist/chunks/messages-BIhN9JOT.cjs +0 -1
- package/dist/chunks/messages-BJU_3KpD.cjs +0 -1
- package/dist/chunks/messages-BNfoWRc02.cjs +0 -1
- package/dist/chunks/messages-BOrASwT4.cjs +0 -1
- package/dist/chunks/messages-BPWs2ZiL.cjs +0 -1
- package/dist/chunks/messages-BR6HUjXI.cjs +0 -1
- package/dist/chunks/messages-BWZYYHHF.cjs +0 -1
- package/dist/chunks/messages-BY3nxQWj.cjs +0 -1
- package/dist/chunks/messages-BYpAVGd12.cjs +0 -1
- package/dist/chunks/messages-BZzpf1UP.cjs +0 -1
- package/dist/chunks/messages-B_12_UjB.cjs +0 -1
- package/dist/chunks/messages-BaZ-Dtr92.cjs +0 -1
- package/dist/chunks/messages-BeaFn5UT.cjs +0 -1
- package/dist/chunks/messages-BgosUxKq2.cjs +0 -1
- package/dist/chunks/messages-BgrhLzFS.cjs +0 -1
- package/dist/chunks/messages-BmP5kV232.cjs +0 -1
- package/dist/chunks/messages-Bnp8vNJz.cjs +0 -1
- package/dist/chunks/messages-BpkV__T7.cjs +0 -1
- package/dist/chunks/messages-BqYqYBH02.cjs +0 -1
- package/dist/chunks/messages-Bv7MXv7R.cjs +0 -1
- package/dist/chunks/messages-Byi8D3Hp.cjs +0 -1
- package/dist/chunks/messages-C2tGk63O2.cjs +0 -1
- package/dist/chunks/messages-C8lWOU7O.cjs +0 -1
- package/dist/chunks/messages-C9Usx2VK.cjs +0 -1
- package/dist/chunks/messages-C9vxfOaB2.cjs +0 -1
- package/dist/chunks/messages-CBqID_rf2.cjs +0 -1
- package/dist/chunks/messages-CKaebA4N2.cjs +0 -1
- package/dist/chunks/messages-CNuuKnxY.cjs +0 -1
- package/dist/chunks/messages-CS1dVWiH2.cjs +0 -1
- package/dist/chunks/messages-CSHcjK_N2.cjs +0 -1
- package/dist/chunks/messages-CSWjZBVp2.cjs +0 -1
- package/dist/chunks/messages-CVi9dbMY2.cjs +0 -1
- package/dist/chunks/messages-CXkEnOpM2.cjs +0 -1
- package/dist/chunks/messages-Ch4PcGQ42.cjs +0 -1
- package/dist/chunks/messages-Cj12Zgsk.cjs +0 -1
- package/dist/chunks/messages-CjFn_dGR2.cjs +0 -1
- package/dist/chunks/messages-CnFZ_js2.cjs +0 -1
- package/dist/chunks/messages-CstdYlPl.cjs +0 -1
- package/dist/chunks/messages-CzEXG3wA2.cjs +0 -1
- package/dist/chunks/messages-CzW0fnvJ2.cjs +0 -1
- package/dist/chunks/messages-D2BWvpXy.cjs +0 -1
- package/dist/chunks/messages-D2jPVYje2.cjs +0 -1
- package/dist/chunks/messages-D8DMxR-v2.cjs +0 -1
- package/dist/chunks/messages-DAF4iFuz.cjs +0 -1
- package/dist/chunks/messages-DJpBxc3X.cjs +0 -1
- package/dist/chunks/messages-DJqLD3KO.cjs +0 -1
- package/dist/chunks/messages-DSFJ_vqv.cjs +0 -1
- package/dist/chunks/messages-DW0CLNsD.cjs +0 -1
- package/dist/chunks/messages-DZFhIff62.cjs +0 -1
- package/dist/chunks/messages-Dd56p0Kf.cjs +0 -1
- package/dist/chunks/messages-DigHfTmz.cjs +0 -1
- package/dist/chunks/messages-DkuidYgG.cjs +0 -1
- package/dist/chunks/messages-DoZqsswJ.cjs +0 -1
- package/dist/chunks/messages-DvmpvSeR.cjs +0 -1
- package/dist/chunks/messages-Dvurigo8.cjs +0 -1
- package/dist/chunks/messages-Dx16KgRk2.cjs +0 -1
- package/dist/chunks/messages-EjezcPS22.cjs +0 -1
- package/dist/chunks/messages-EsgioDiN.cjs +0 -1
- package/dist/chunks/messages-cDH-bKpE.cjs +0 -1
- package/dist/chunks/messages-lhqD_WQA.cjs +0 -1
- package/dist/chunks/messages-xndoTJ282.cjs +0 -1
- package/dist/chunks/tools-I_BZLnbG.cjs +0 -208
|
@@ -9,7 +9,8 @@ import type {
|
|
|
9
9
|
PatternPasteEvent,
|
|
10
10
|
ToolboxConfig,
|
|
11
11
|
} from '../../../../types';
|
|
12
|
-
import {
|
|
12
|
+
import type { MenuConfig } from '../../../../types/tools/menu-config';
|
|
13
|
+
import { IconCopy, IconGlobe, IconLinkCopy, IconReplace } from '../../../components/icons';
|
|
13
14
|
import { attachResizeHandle, type ResizeEdge } from '../../image/resizer';
|
|
14
15
|
import { renderEmbedOverlay, type EmbedAlignment } from './overlay';
|
|
15
16
|
import { EMBED_SERVICES, matchEmbedService, isHttpUrl, type EmbedKind } from '../registry';
|
|
@@ -589,17 +590,72 @@ export class Embed implements BlockTool {
|
|
|
589
590
|
}
|
|
590
591
|
|
|
591
592
|
private buildOverlay(): HTMLElement {
|
|
592
|
-
|
|
593
|
+
const overlay = renderEmbedOverlay({
|
|
593
594
|
alignment: this.data.alignment ?? 'center',
|
|
594
595
|
captionVisible: this.isCaptionVisible(),
|
|
595
596
|
source: this.data.source ?? '',
|
|
596
597
|
i18n: this.api.i18n,
|
|
597
598
|
onAlign: (next) => this.setAlignment(next),
|
|
598
599
|
onToggleCaption: () => this.toggleCaption(),
|
|
599
|
-
onCopyLink: () => this.copyLink(),
|
|
600
|
-
onReplace: () => this.replaceSource(),
|
|
601
|
-
onDelete: () => this.deleteBlock(),
|
|
602
600
|
});
|
|
601
|
+
|
|
602
|
+
// The "more" button opens the shared block-tunes popover (same as the image
|
|
603
|
+
// block); embed-specific actions are contributed via renderSettings().
|
|
604
|
+
const moreBtn = overlay.querySelector<HTMLButtonElement>('[data-action="more"]');
|
|
605
|
+
|
|
606
|
+
moreBtn?.addEventListener('click', (event) => {
|
|
607
|
+
event.stopPropagation();
|
|
608
|
+
this.openBlockSettings(moreBtn);
|
|
609
|
+
});
|
|
610
|
+
|
|
611
|
+
return overlay;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
public renderSettings(): MenuConfig {
|
|
615
|
+
const i18n = this.api.i18n;
|
|
616
|
+
|
|
617
|
+
return [
|
|
618
|
+
{
|
|
619
|
+
icon: IconReplace,
|
|
620
|
+
title: i18n.t('tools.embed.replace'),
|
|
621
|
+
name: 'embed-replace',
|
|
622
|
+
closeOnActivate: true,
|
|
623
|
+
onActivate: (): void => this.replaceSource(),
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
icon: IconCopy,
|
|
627
|
+
title: i18n.t('tools.image.copyUrl'),
|
|
628
|
+
name: 'embed-copy-url',
|
|
629
|
+
closeOnActivate: true,
|
|
630
|
+
onActivate: (): void => this.copyLink(),
|
|
631
|
+
},
|
|
632
|
+
];
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
private openBlockSettings(trigger?: HTMLElement): void {
|
|
636
|
+
const toolbar = (this.api as unknown as {
|
|
637
|
+
toolbar?: {
|
|
638
|
+
toggleBlockSettings?: (
|
|
639
|
+
state: boolean,
|
|
640
|
+
trigger?: HTMLElement,
|
|
641
|
+
options?: { placeLeftOfAnchor?: boolean }
|
|
642
|
+
) => void;
|
|
643
|
+
};
|
|
644
|
+
}).toolbar;
|
|
645
|
+
|
|
646
|
+
if (!toolbar?.toggleBlockSettings) {
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
this.root?.setAttribute('data-settings-open', 'true');
|
|
650
|
+
trigger?.setAttribute('aria-expanded', 'true');
|
|
651
|
+
const onClosed = (): void => {
|
|
652
|
+
this.root?.removeAttribute('data-settings-open');
|
|
653
|
+
trigger?.setAttribute('aria-expanded', 'false');
|
|
654
|
+
this.api.events.off('block-settings-closed', onClosed);
|
|
655
|
+
};
|
|
656
|
+
|
|
657
|
+
this.api.events.on('block-settings-closed', onClosed);
|
|
658
|
+
toolbar.toggleBlockSettings(true, trigger, { placeLeftOfAnchor: false });
|
|
603
659
|
}
|
|
604
660
|
|
|
605
661
|
private replaceSource(): void {
|
|
@@ -716,10 +772,4 @@ export class Embed implements BlockTool {
|
|
|
716
772
|
|
|
717
773
|
void clip?.writeText(this.data.source ?? '');
|
|
718
774
|
}
|
|
719
|
-
|
|
720
|
-
private deleteBlock(): void {
|
|
721
|
-
const blocks = (this.api as unknown as { blocks?: { delete?: (id: string) => void } }).blocks;
|
|
722
|
-
|
|
723
|
-
blocks?.delete?.(this.block.id);
|
|
724
|
-
}
|
|
725
775
|
}
|
|
@@ -3,11 +3,8 @@ import {
|
|
|
3
3
|
IconImageAlignCenter,
|
|
4
4
|
IconImageAlignLeft,
|
|
5
5
|
IconImageAlignRight,
|
|
6
|
-
IconLink,
|
|
7
6
|
IconLinkExternal,
|
|
8
7
|
IconMoreHorizontal,
|
|
9
|
-
IconReplace,
|
|
10
|
-
IconTrash,
|
|
11
8
|
} from '../../../components/icons';
|
|
12
9
|
|
|
13
10
|
export type EmbedAlignment = 'left' | 'center' | 'right';
|
|
@@ -24,9 +21,6 @@ export interface EmbedOverlayOptions {
|
|
|
24
21
|
i18n: EmbedOverlayI18n;
|
|
25
22
|
onAlign(next: EmbedAlignment): void;
|
|
26
23
|
onToggleCaption(): void;
|
|
27
|
-
onCopyLink(): void;
|
|
28
|
-
onReplace(): void;
|
|
29
|
-
onDelete(): void;
|
|
30
24
|
}
|
|
31
25
|
|
|
32
26
|
const ALIGN_ICON: Record<EmbedAlignment, string> = {
|
|
@@ -45,9 +39,9 @@ const ALIGN_ORDER: EmbedAlignment[] = ['left', 'center', 'right'];
|
|
|
45
39
|
|
|
46
40
|
/**
|
|
47
41
|
* Hover toolbar for an iframe embed — alignment, caption toggle, "open original"
|
|
48
|
-
* and a "more"
|
|
49
|
-
*
|
|
50
|
-
*
|
|
42
|
+
* and a "more" button. Modeled on the image overlay and scoped to the embed tool.
|
|
43
|
+
* Pure builder: it wires the provided callbacks. The "more" button only carries
|
|
44
|
+
* the trigger markup; the tool wires it to the shared block-tunes popover.
|
|
51
45
|
*/
|
|
52
46
|
export function renderEmbedOverlay(opts: EmbedOverlayOptions): HTMLElement {
|
|
53
47
|
const root = document.createElement('div');
|
|
@@ -66,7 +60,7 @@ export function renderEmbedOverlay(opts: EmbedOverlayOptions): HTMLElement {
|
|
|
66
60
|
});
|
|
67
61
|
appendOpenOriginal(root, opts);
|
|
68
62
|
appendDivider(root);
|
|
69
|
-
|
|
63
|
+
appendMoreButton(root, opts);
|
|
70
64
|
|
|
71
65
|
return root;
|
|
72
66
|
}
|
|
@@ -133,62 +127,22 @@ function appendOpenOriginal(root: HTMLElement, opts: EmbedOverlayOptions): void
|
|
|
133
127
|
root.appendChild(anchor);
|
|
134
128
|
}
|
|
135
129
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
130
|
+
/**
|
|
131
|
+
* "More options" trigger. Carries only the markup — the embed tool attaches the
|
|
132
|
+
* click handler that opens the shared block-tunes popover, so the rich menu
|
|
133
|
+
* (search, sections, shortcuts, footer) is identical to the image block's.
|
|
134
|
+
*/
|
|
135
|
+
function appendMoreButton(root: HTMLElement, opts: EmbedOverlayOptions): void {
|
|
142
136
|
const trigger = document.createElement('button');
|
|
143
137
|
|
|
144
138
|
trigger.type = 'button';
|
|
139
|
+
trigger.className = 'blok-embed-toolbar__btn';
|
|
145
140
|
trigger.setAttribute('data-action', 'more');
|
|
146
141
|
trigger.setAttribute('aria-label', opts.i18n.t('tools.image.moreOptions'));
|
|
147
142
|
trigger.setAttribute('aria-haspopup', 'menu');
|
|
148
143
|
trigger.setAttribute('aria-expanded', 'false');
|
|
149
144
|
trigger.innerHTML = IconMoreHorizontal;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const popover = document.createElement('div');
|
|
153
|
-
|
|
154
|
-
popover.setAttribute('data-role', 'more-popover');
|
|
155
|
-
popover.setAttribute('role', 'menu');
|
|
156
|
-
popover.className = 'blok-embed-toolbar__more-popover';
|
|
157
|
-
popover.hidden = true;
|
|
158
|
-
|
|
159
|
-
const toggle = bindPopover(trigger, popover);
|
|
160
|
-
|
|
161
|
-
appendMenuItem(popover, {
|
|
162
|
-
action: 'replace',
|
|
163
|
-
label: opts.i18n.t('tools.embed.replace'),
|
|
164
|
-
icon: IconReplace,
|
|
165
|
-
onClick: () => {
|
|
166
|
-
toggle(false);
|
|
167
|
-
opts.onReplace();
|
|
168
|
-
},
|
|
169
|
-
});
|
|
170
|
-
appendMenuItem(popover, {
|
|
171
|
-
action: 'copy-link',
|
|
172
|
-
label: opts.i18n.t('tools.image.copyUrl'),
|
|
173
|
-
icon: IconLink,
|
|
174
|
-
onClick: () => {
|
|
175
|
-
toggle(false);
|
|
176
|
-
opts.onCopyLink();
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
appendMenuItem(popover, {
|
|
180
|
-
action: 'delete',
|
|
181
|
-
label: opts.i18n.t('blockSettings.delete'),
|
|
182
|
-
icon: IconTrash,
|
|
183
|
-
danger: true,
|
|
184
|
-
onClick: () => {
|
|
185
|
-
toggle(false);
|
|
186
|
-
opts.onDelete();
|
|
187
|
-
},
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
wrapper.appendChild(popover);
|
|
191
|
-
root.appendChild(wrapper);
|
|
145
|
+
root.appendChild(trigger);
|
|
192
146
|
}
|
|
193
147
|
|
|
194
148
|
interface IconButtonSpec {
|
|
@@ -217,43 +171,6 @@ function appendIconButton(parent: HTMLElement, spec: IconButtonSpec): void {
|
|
|
217
171
|
parent.appendChild(btn);
|
|
218
172
|
}
|
|
219
173
|
|
|
220
|
-
interface MenuItemSpec {
|
|
221
|
-
action: string;
|
|
222
|
-
label: string;
|
|
223
|
-
icon: string;
|
|
224
|
-
danger?: boolean;
|
|
225
|
-
onClick(): void;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
function appendMenuItem(parent: HTMLElement, spec: MenuItemSpec): void {
|
|
229
|
-
const btn = document.createElement('button');
|
|
230
|
-
|
|
231
|
-
btn.type = 'button';
|
|
232
|
-
btn.setAttribute('role', 'menuitem');
|
|
233
|
-
btn.setAttribute('data-action', spec.action);
|
|
234
|
-
btn.setAttribute('aria-label', spec.label);
|
|
235
|
-
btn.className = spec.danger
|
|
236
|
-
? 'blok-embed-toolbar__menu-item is-danger'
|
|
237
|
-
: 'blok-embed-toolbar__menu-item';
|
|
238
|
-
|
|
239
|
-
const icon = document.createElement('span');
|
|
240
|
-
|
|
241
|
-
icon.className = 'blok-embed-toolbar__menu-icon';
|
|
242
|
-
icon.setAttribute('aria-hidden', 'true');
|
|
243
|
-
icon.innerHTML = spec.icon;
|
|
244
|
-
|
|
245
|
-
const text = document.createElement('span');
|
|
246
|
-
|
|
247
|
-
text.textContent = spec.label;
|
|
248
|
-
|
|
249
|
-
btn.append(icon, text);
|
|
250
|
-
btn.addEventListener('click', (event) => {
|
|
251
|
-
event.stopPropagation();
|
|
252
|
-
spec.onClick();
|
|
253
|
-
});
|
|
254
|
-
parent.appendChild(btn);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
174
|
function appendDivider(parent: HTMLElement): void {
|
|
258
175
|
const divider = document.createElement('div');
|
|
259
176
|
|
package/src/tools/table/index.ts
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
normalizeTableData,
|
|
31
31
|
populateNewCells,
|
|
32
32
|
readPixelWidths,
|
|
33
|
+
rectangularizeContent,
|
|
33
34
|
SCROLL_OVERFLOW_CLASSES,
|
|
34
35
|
setupKeyboardNavigation,
|
|
35
36
|
updateHeadingColumnStyles,
|
|
@@ -247,8 +248,43 @@ export class Table implements BlockTool {
|
|
|
247
248
|
|
|
248
249
|
this.mountBlockHoldersInNewTbody(content, newTbody, blockHolders);
|
|
249
250
|
|
|
251
|
+
// Reconcile the <colgroup> when the column COUNT changed (delete-col /
|
|
252
|
+
// insert-col on a merged grid route through here). Only swapping <tbody>
|
|
253
|
+
// would leave a stale <col> count, so the rendered grid width and
|
|
254
|
+
// getColumnCount() would disagree with the model. Scoped to count changes
|
|
255
|
+
// so same-width rebuilds (merge/split) keep their existing <col> widths
|
|
256
|
+
// untouched (avoids resetting custom percent/pixel widths).
|
|
257
|
+
const oldColgroup = gridEl.querySelector('colgroup');
|
|
258
|
+
const newColgroup = newTable.querySelector('colgroup');
|
|
259
|
+
|
|
260
|
+
if (
|
|
261
|
+
oldColgroup
|
|
262
|
+
&& newColgroup
|
|
263
|
+
&& oldColgroup.querySelectorAll('col').length !== newColgroup.querySelectorAll('col').length
|
|
264
|
+
) {
|
|
265
|
+
oldColgroup.replaceWith(newColgroup);
|
|
266
|
+
}
|
|
267
|
+
|
|
250
268
|
// Replace old tbody with new
|
|
251
269
|
oldTbody.replaceWith(newTbody);
|
|
270
|
+
|
|
271
|
+
// Editability backstop. splitCell empties the revealed cells (blocks: []),
|
|
272
|
+
// and mountBlockHoldersInNewTbody only re-mounts EXISTING holders — so a
|
|
273
|
+
// revealed (or merged-into-empty origin) cell would have no paragraph and
|
|
274
|
+
// be impossible to click into or type in. The initializeCells completeness
|
|
275
|
+
// sweep cannot cover this: it is skipped for merge tables and the split
|
|
276
|
+
// path never runs it. Mirror the read-only→edit fix by guaranteeing every
|
|
277
|
+
// rendered cell holds at least one editable block. Skipped in read-only
|
|
278
|
+
// (no editing surface) — merge/split are edit-only anyway. Wrapped in a
|
|
279
|
+
// structural op so the synthesized block-added events are deferred instead
|
|
280
|
+
// of being double-claimed by the cell mutation handler.
|
|
281
|
+
if (!this.readOnly) {
|
|
282
|
+
this.runTransactedStructuralOp(() => {
|
|
283
|
+
newTbody.querySelectorAll<HTMLElement>(`[${CELL_ATTR}]`).forEach(cell => {
|
|
284
|
+
this.cellBlocks?.ensureCellHasBlock(cell);
|
|
285
|
+
});
|
|
286
|
+
}, true);
|
|
287
|
+
}
|
|
252
288
|
}
|
|
253
289
|
|
|
254
290
|
/**
|
|
@@ -931,7 +967,7 @@ export class Table implements BlockTool {
|
|
|
931
967
|
const hasThHeadings = rows[0]?.querySelector('th') !== null;
|
|
932
968
|
const withHeadings = hasTheadHeadings || hasThHeadings;
|
|
933
969
|
|
|
934
|
-
this.initialContent = tableContent;
|
|
970
|
+
this.initialContent = rectangularizeContent(tableContent);
|
|
935
971
|
this.model.setWithHeadings(withHeadings);
|
|
936
972
|
this.model.setWithHeadingColumn(false);
|
|
937
973
|
this.model.setColWidths(undefined);
|
|
@@ -378,6 +378,10 @@ export class TableCellBlocks {
|
|
|
378
378
|
): CellContent[][] {
|
|
379
379
|
const rowElements = this.gridElement.querySelectorAll(`[${ROW_ATTR}]`);
|
|
380
380
|
const normalizedContent: CellContent[][] = [];
|
|
381
|
+
// Every (row, col) the model-driven loop below describes. The completeness
|
|
382
|
+
// sweep uses this to find rendered cells the model never covered — without
|
|
383
|
+
// depending on DOM/holder state, which varies across call sites and tests.
|
|
384
|
+
const visited = new Set<string>();
|
|
381
385
|
|
|
382
386
|
content.forEach((rowData, rowIndex) => {
|
|
383
387
|
const row = rowElements[rowIndex];
|
|
@@ -389,6 +393,8 @@ export class TableCellBlocks {
|
|
|
389
393
|
const normalizedRow: CellContent[] = [];
|
|
390
394
|
|
|
391
395
|
rowData.forEach((cellContent, colIndex) => {
|
|
396
|
+
visited.add(`${rowIndex}:${colIndex}`);
|
|
397
|
+
|
|
392
398
|
// A merge-covered cell has no rendered <td> (createGridFromModel skips
|
|
393
399
|
// spanned cells). Preserve its placeholder so the rebuilt model keeps
|
|
394
400
|
// the merge structure and column count — otherwise loading a saved
|
|
@@ -481,6 +487,65 @@ export class TableCellBlocks {
|
|
|
481
487
|
normalizedContent.push(normalizedRow);
|
|
482
488
|
});
|
|
483
489
|
|
|
490
|
+
// ── Model==grid completeness sweep ──────────────────────────────────
|
|
491
|
+
// The loop above is driven by the STORED model, so it only touches cells
|
|
492
|
+
// the model actually describes. When the rendered grid is WIDER (ragged
|
|
493
|
+
// rows) or has columns the model never had (empty rows that make
|
|
494
|
+
// createFlatGrid fall back to DEFAULT_COLS), those extra DOM cells get no
|
|
495
|
+
// block → zero contenteditable target → impossible to click into or type.
|
|
496
|
+
// Walk every rendered cell and synthesize a paragraph for any still-empty,
|
|
497
|
+
// non-merge cell, recording it into the returned model so save/reload stays
|
|
498
|
+
// rectangular. This is the invariant enforcer that makes the non-editable
|
|
499
|
+
// cell bug impossible regardless of HOW the model and grid widths diverged
|
|
500
|
+
// — it backstops rectangularizeContent at the consuming layer and also
|
|
501
|
+
// covers any future code path that bypasses it.
|
|
502
|
+
//
|
|
503
|
+
// Skipped during a Yjs sync replay: fabricating blocks there orphans the
|
|
504
|
+
// blocks Yjs is about to restore via separate ops (regression:
|
|
505
|
+
// table-undo-redo-orphans). That path reconciles empty cells on its own.
|
|
506
|
+
//
|
|
507
|
+
// Skipped for merge tables: their rows are already full-width via mergedInto
|
|
508
|
+
// placeholders (so the bug cannot occur), and CELL_COL_ATTR is physical- vs
|
|
509
|
+
// logical-column ambiguous under merges — driving a model write off it would
|
|
510
|
+
// corrupt colspan/rowspan/mergedInto metadata.
|
|
511
|
+
if (!this.api.blocks.isSyncingFromYjs && !this.model.hasMerges()) {
|
|
512
|
+
rowElements.forEach((row, rowIndex) => {
|
|
513
|
+
const normalizedRow = normalizedContent[rowIndex] ?? (normalizedContent[rowIndex] = []);
|
|
514
|
+
const cellElements = row.querySelectorAll<HTMLElement>(`[${CELL_ATTR}]`);
|
|
515
|
+
|
|
516
|
+
cellElements.forEach(cell => {
|
|
517
|
+
const colIndex = Number(cell.getAttribute(CELL_COL_ATTR));
|
|
518
|
+
|
|
519
|
+
if (!Number.isInteger(colIndex) || visited.has(`${rowIndex}:${colIndex}`)) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
const container = cell.querySelector<HTMLElement>(`[${CELL_BLOCKS_ATTR}]`);
|
|
524
|
+
|
|
525
|
+
// No container → merge-covered cell (no editable target by design).
|
|
526
|
+
if (!container) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const block = this.api.blocks.insert('paragraph', { text: '' }, {}, this.api.blocks.getBlocksCount(), false);
|
|
531
|
+
|
|
532
|
+
container.appendChild(block.holder);
|
|
533
|
+
this.api.blocks.setBlockParent(block.id, this.tableBlockId);
|
|
534
|
+
this.stripPlaceholders(container);
|
|
535
|
+
|
|
536
|
+
normalizedRow[colIndex] = { blocks: [block.id] };
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
// A covered/skipped column can leave an undefined hole between filled
|
|
540
|
+
// cells; rebuild the row dense so the persisted width matches the
|
|
541
|
+
// rendered grid and no index is left undefined.
|
|
542
|
+
normalizedContent[rowIndex] = Array.from(
|
|
543
|
+
{ length: normalizedRow.length },
|
|
544
|
+
(_, col) => normalizedRow[col] ?? { blocks: [] }
|
|
545
|
+
);
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
|
|
484
549
|
return normalizedContent;
|
|
485
550
|
}
|
|
486
551
|
|
|
@@ -373,6 +373,54 @@ export const mountCellBlocksReadOnly = (
|
|
|
373
373
|
|
|
374
374
|
// ─── Data normalization ─────────────────────────────────────────────
|
|
375
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Pad ragged rows out to the widest row's column count with empty
|
|
378
|
+
* `{ blocks: [] }` cells, producing a rectangular grid.
|
|
379
|
+
*
|
|
380
|
+
* Older published articles (and HTML-pasted tables with rowspan/colspan) can
|
|
381
|
+
* store rows SHORTER than the widest row — e.g. a 3-column table whose later
|
|
382
|
+
* rows only carry 1–2 cells. The grid is rendered to the widest row's column
|
|
383
|
+
* count, so createGrid pads every short row out to full width in the DOM, but
|
|
384
|
+
* initializeCells() iterates the STORED row, never visiting the padded trailing
|
|
385
|
+
* cells. Those gap cells get no paragraph block → zero contenteditable target →
|
|
386
|
+
* the cell is impossible to click into or type in (observed live: KB table
|
|
387
|
+
* block DQfJHidzTi). Rectangularizing up front makes the whole edit pipeline
|
|
388
|
+
* (grid, model, initializeCells, save) see one rectangular grid so every cell
|
|
389
|
+
* is editable.
|
|
390
|
+
*
|
|
391
|
+
* Rows already at or above the max width (including merge tables, whose rows
|
|
392
|
+
* carry full-width mergedInto placeholders) are returned untouched.
|
|
393
|
+
*/
|
|
394
|
+
export const rectangularizeContent = (
|
|
395
|
+
content: LegacyCellContent[][],
|
|
396
|
+
): LegacyCellContent[][] => {
|
|
397
|
+
const maxCols = content.reduce((max, row) => Math.max(max, row?.length ?? 0), 0);
|
|
398
|
+
|
|
399
|
+
// A null/undefined row would crash initializeCells' `rowData.forEach`, so it
|
|
400
|
+
// counts as needing work even when it is not strictly shorter than maxCols
|
|
401
|
+
// (e.g. an all-null grid where maxCols === 0). Bailing only on length checks
|
|
402
|
+
// would let those rows slip through untouched.
|
|
403
|
+
if (!content.some(row => row == null || row.length < maxCols)) {
|
|
404
|
+
return content;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return content.map(row => {
|
|
408
|
+
const cells = row ?? [];
|
|
409
|
+
|
|
410
|
+
if (cells.length >= maxCols) {
|
|
411
|
+
return cells;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const padded = [...cells];
|
|
415
|
+
|
|
416
|
+
while (padded.length < maxCols) {
|
|
417
|
+
padded.push({ blocks: [] });
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return padded;
|
|
421
|
+
});
|
|
422
|
+
};
|
|
423
|
+
|
|
376
424
|
export const normalizeTableData = (
|
|
377
425
|
data: TableData | Record<string, never>,
|
|
378
426
|
config: { withHeadings?: boolean; stretched?: boolean },
|
|
@@ -389,7 +437,8 @@ export const normalizeTableData = (
|
|
|
389
437
|
}
|
|
390
438
|
|
|
391
439
|
const tableData = data as TableData;
|
|
392
|
-
const
|
|
440
|
+
const content = rectangularizeContent(tableData.content ?? []);
|
|
441
|
+
const cols = content[0]?.length;
|
|
393
442
|
const colWidths = tableData.colWidths;
|
|
394
443
|
const validWidths = colWidths
|
|
395
444
|
&& cols
|
|
@@ -402,7 +451,7 @@ export const normalizeTableData = (
|
|
|
402
451
|
withHeadings: tableData.withHeadings ?? config.withHeadings ?? false,
|
|
403
452
|
withHeadingColumn: tableData.withHeadingColumn ?? false,
|
|
404
453
|
stretched: tableData.stretched ?? config.stretched ?? false,
|
|
405
|
-
content
|
|
454
|
+
content,
|
|
406
455
|
colWidths: validWidths,
|
|
407
456
|
initialColWidth: tableData.initialColWidth,
|
|
408
457
|
};
|
|
@@ -36,6 +36,15 @@ interface ActionContext {
|
|
|
36
36
|
data: ActionData;
|
|
37
37
|
cellBlocks: TableCellBlocks | null;
|
|
38
38
|
blocksToDelete?: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Rebuild the whole <tbody> from the current model. Used for deletes on a
|
|
41
|
+
* merged grid: the physical-index DOM delete (grid.deleteRow/deleteColumn)
|
|
42
|
+
* cannot create a <td> for a cell the model PROMOTES out of a merge (a
|
|
43
|
+
* previously-covered cell becoming standalone), leaving it non-editable with
|
|
44
|
+
* an orphaned holder. Rebuilding from the post-delete model renders every
|
|
45
|
+
* revealed cell and runs the editability backstop.
|
|
46
|
+
*/
|
|
47
|
+
rebuildTableBody?: () => void;
|
|
39
48
|
}
|
|
40
49
|
|
|
41
50
|
interface ActionResult {
|
|
@@ -140,7 +149,14 @@ const handleDeleteRow = (
|
|
|
140
149
|
ctx: ActionContext,
|
|
141
150
|
): ActionResult => {
|
|
142
151
|
ctx.cellBlocks?.deleteBlocks(ctx.blocksToDelete ?? []);
|
|
143
|
-
|
|
152
|
+
|
|
153
|
+
// On a merged grid the physical-index DOM delete can't render cells the model
|
|
154
|
+
// promotes out of a merge. Rebuild from the (already-updated) model instead.
|
|
155
|
+
if (ctx.data.hasMerges && ctx.rebuildTableBody) {
|
|
156
|
+
ctx.rebuildTableBody();
|
|
157
|
+
} else {
|
|
158
|
+
ctx.grid.deleteRow(gridEl, index);
|
|
159
|
+
}
|
|
144
160
|
|
|
145
161
|
const newRowCount = ctx.grid.getRowCount(gridEl);
|
|
146
162
|
const neighborRow = index < newRowCount ? index : index - 1;
|
|
@@ -160,7 +176,14 @@ const handleDeleteCol = (
|
|
|
160
176
|
ctx: ActionContext,
|
|
161
177
|
): ActionResult => {
|
|
162
178
|
ctx.cellBlocks?.deleteBlocks(ctx.blocksToDelete ?? []);
|
|
163
|
-
|
|
179
|
+
|
|
180
|
+
// See handleDeleteRow: merged grids must rebuild from the model so promoted
|
|
181
|
+
// cells render with an editable target instead of vanishing.
|
|
182
|
+
if (ctx.data.hasMerges && ctx.rebuildTableBody) {
|
|
183
|
+
ctx.rebuildTableBody();
|
|
184
|
+
} else {
|
|
185
|
+
ctx.grid.deleteColumn(gridEl, index);
|
|
186
|
+
}
|
|
164
187
|
|
|
165
188
|
const colWidths = syncColWidthsAfterDeleteColumn(ctx.data.colWidths, index);
|
|
166
189
|
|
|
@@ -522,6 +522,10 @@ export class TableSubsystems {
|
|
|
522
522
|
// also transform widths — passing post-mutation widths would double-apply
|
|
523
523
|
// the transformation.
|
|
524
524
|
const colWidthsBeforeMutation = this.host.model.colWidths;
|
|
525
|
+
// Capture BEFORE the model mutation: deleting a merge-origin row/column
|
|
526
|
+
// can remove the last merge, so a post-mutation read would miss that the
|
|
527
|
+
// delete straddled a merge and the DOM needs a full rebuild.
|
|
528
|
+
const hasMergesBeforeMutation = this.host.model.hasMerges();
|
|
525
529
|
|
|
526
530
|
// Sync model structural operation before DOM changes
|
|
527
531
|
const { blocksToDelete } = this.syncModelForAction(action);
|
|
@@ -536,10 +540,11 @@ export class TableSubsystems {
|
|
|
536
540
|
withHeadings: this.host.model.withHeadings,
|
|
537
541
|
withHeadingColumn: this.host.model.withHeadingColumn,
|
|
538
542
|
initialColWidth: this.host.model.initialColWidth,
|
|
539
|
-
hasMerges:
|
|
543
|
+
hasMerges: hasMergesBeforeMutation,
|
|
540
544
|
},
|
|
541
545
|
cellBlocks: this.host.cellBlocks,
|
|
542
546
|
blocksToDelete,
|
|
547
|
+
rebuildTableBody: () => this.host.rebuildTableBody(),
|
|
543
548
|
},
|
|
544
549
|
);
|
|
545
550
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={"blockSettings.dragToMove":`拖动以移动`,"blockSettings.clickToOpenMenu":`点击打开菜单`,"blockSettings.clickOrShortcutToOpenMenu":`点击或 {shortcut} 打开菜单`,"blockSettings.menuShortcutMac":`⌘/`,"blockSettings.menuShortcutWin":`Ctrl+/`,"toolbox.addBelow":`添加内容块`,"toolbox.optionAddAbove":`⌥ 在上方添加`,"toolbox.ctrlAddAbove":`Ctrl 在上方添加`,"toolbox.typeToSearch":`输入以搜索`,"popover.search":`搜索`,"popover.nothingFound":`未找到结果`,"popover.convertTo":`转换为`,"toolNames.text":`文本`,"toolNames.heading":`标题`,"toolNames.link":`链接`,"toolNames.bold":`加粗`,"toolNames.italic":`斜体`,"toolNames.marker":`颜色`,"toolNames.bulletedList":`无序列表`,"toolNames.numberedList":`有序列表`,"toolNames.todoList":`清单`,"toolNames.toggleList":`折叠列表`,"toolNames.board":`看板`,"toolNames.database":`数据库`,"tools.link.addLink":`添加链接`,"tools.link.invalidLink":`链接无效`,"tools.marker.textColor":`文字`,"tools.marker.background":`背景`,"tools.marker.default":`默认`,"tools.colorPicker.defaultSwatchLabel":`{mode} {default}`,"tools.colorPicker.colorSwatchLabel":`{mode} {color}`,"tools.colorPicker.color.gray":`灰色`,"tools.colorPicker.color.brown":`棕色`,"tools.colorPicker.color.orange":`橙色`,"tools.colorPicker.color.yellow":`黄色`,"tools.colorPicker.color.green":`绿色`,"tools.colorPicker.color.blue":`蓝色`,"tools.colorPicker.color.purple":`紫色`,"tools.colorPicker.color.pink":`粉色`,"tools.colorPicker.color.red":`红色`,"tools.stub.error":`错误`,"tools.stub.blockCannotBeDisplayed":`无法显示此内容块`,"tools.header.heading1":`一级标题`,"tools.header.heading2":`二级标题`,"tools.header.heading3":`三级标题`,"tools.header.heading4":`四级标题`,"tools.header.heading5":`五级标题`,"tools.header.heading6":`六级标题`,"tools.header.toggleHeading":`折叠标题`,"tools.header.toggleHeading1":`折叠一级标题`,"tools.header.toggleHeading2":`折叠二级标题`,"tools.header.toggleHeading3":`折叠三级标题`,"tools.list.placeholder":`列表`,"tools.paragraph.placeholder":`输入内容或按 / 选择工具`,"tools.toggle.placeholder":`折叠`,"tools.toggle.bodyPlaceholder":`空的折叠块。点击或将块拖入其中。`,"tools.toggle.ariaLabelCollapse":`折叠`,"tools.toggle.ariaLabelExpand":`展开`,"blockSettings.delete":`删除`,"blockSettings.copyLink":`复制块链接`,"blockSettings.lastEdited":`上次编辑`,"blockSettings.lastEditedBy":`{name} 上次编辑`,"a11y.dragHandle":`拖动移动或点击打开菜单`,"a11y.dragHandleRole":`拖动控件`,"a11y.dragStarted":`正在拖动内容块`,"a11y.dragStartedMultiple":`正在拖动 {count} 个内容块`,"a11y.dropPosition":`将移动至第 {position} 位,共 {total} 个`,"a11y.dropCancelled":`已取消拖动`,"a11y.blockMoved":`内容块已移动至第 {position} 位,共 {total} 个`,"a11y.blocksMoved":`已移动 {count} 个内容块至第 {position} 位`,"a11y.blockDuplicated":`内容块已复制至第 {position} 位,共 {total} 个`,"a11y.blocksDuplicated":`已复制 {count} 个内容块,起始位置第 {position} 位`,"a11y.movedUp":`内容块已上移至第 {position} 位,共 {total} 个`,"a11y.movedDown":`内容块已下移至第 {position} 位,共 {total} 个`,"a11y.atTop":`内容块已在顶部,无法上移`,"a11y.atBottom":`内容块已在底部,无法下移`,"tools.table.title":`表格`,"tools.table.clearSelection":`清除`,"tools.table.copySelection":`复制`,"tools.table.cellColor":`颜色`,"tools.table.mergeCells":`合并单元格`,"tools.table.splitCell":`拆分单元格`,"tools.table.headerColumn":`标题列`,"tools.table.insertColumnLeft":`在左侧插入列`,"tools.table.insertColumnRight":`在右侧插入列`,"tools.table.deleteColumn":`删除`,"tools.table.headerRow":`标题行`,"tools.table.insertRowAbove":`在上方插入行`,"tools.table.insertRowBelow":`在下方插入行`,"tools.table.deleteRow":`删除`,"tools.table.clickToAddRow":`点击添加新行`,"tools.table.dragToAddRemoveRows":`拖动以添加或删除行`,"tools.table.clickToAddColumn":`点击添加新列`,"tools.table.dragToAddRemoveColumns":`拖动以添加或删除列`,"blockSettings.convertWithChildrenWarning":`此内容块包含 {count} 个嵌套块。转换后,这些嵌套块将被提升至顶层。是否继续?`,"toolNames.underline":`下划线`,"toolNames.strikethrough":`删除线`,"toolNames.callout":`标注`,"toolNames.divider":`分隔线`,"toolNames.quote":`引用`,"toolNames.columns":`分栏`,"tools.columns.col2":`2 列`,"tools.columns.col3":`3 列`,"tools.columns.col4":`4 列`,"tools.columns.col5":`5 列`,"tools.columns.resizeAriaLabel":`调整列宽`,"tools.columns.turnInto":`转换为列`,"searchTerms.columns":`分栏`,"searchTerms.layout":`布局`,"searchTerms.divider":`分割线`,"searchTerms.separator":`分隔符`,"searchTerms.delimiter":`定界符`,"searchTerms.splitter":`拆分线`,"searchTerms.paragraph":`段落`,"searchTerms.plain":`纯文本`,"searchTerms.title":`名称`,"searchTerms.header":`标头`,"searchTerms.heading":`标题`,"searchTerms.toggle":`折叠`,"searchTerms.collapsible":`可折叠`,"searchTerms.bullet":`项目符号`,"searchTerms.unordered":`无序`,"searchTerms.list":`列表`,"searchTerms.ordered":`有序`,"searchTerms.number":`编号`,"searchTerms.checkbox":`复选框`,"searchTerms.task":`任务`,"searchTerms.todo":`待办`,"searchTerms.check":`勾选`,"searchTerms.collapse":`收起`,"searchTerms.expand":`展开`,"searchTerms.accordion":`折叠面板`,"searchTerms.table":`表格`,"searchTerms.grid":`网格`,"searchTerms.spreadsheet":`电子表格`,"searchTerms.callout":`标注`,"searchTerms.note":`备注`,"searchTerms.info":`信息`,"searchTerms.warning":`警告`,"searchTerms.tip":`提示`,"searchTerms.alert":`提醒`,"searchTerms.quote":`引用`,"searchTerms.blockquote":`块引用`,"searchTerms.citation":`出处`,"tools.callout.placeholder":`标注`,"tools.callout.addEmoji":`添加表情`,"tools.callout.editIcon":`编辑图标`,"tools.callout.removeEmoji":`删除图标`,"tools.callout.filterEmojis":`搜索…`,"tools.callout.calloutEmojiCategory":`标注`,"tools.callout.noEmojisFound":`未找到表情符号`,"tools.callout.pickRandom":`随机`,"tools.callout.skinTone":`肤色`,"tools.callout.emojiCategoryPeople":`人物`,"tools.callout.emojiCategoryNature":`自然`,"tools.callout.emojiCategoryFood":`食物`,"tools.callout.emojiCategoryActivity":`活动`,"tools.callout.emojiCategoryTravel":`旅行`,"tools.callout.emojiCategoryObjects":`物品`,"tools.callout.emojiCategorySymbols":`符号`,"tools.callout.emojiCategoryFlags":`旗帜`,"tools.database.addCard":`添加卡片`,"tools.database.newPage":`新页面`,"tools.database.addColumn":`添加列`,"tools.database.cardTitlePlaceholder":`空白页面`,"tools.database.columnTitlePlaceholder":`列`,"tools.database.deleteCard":`删除卡片`,"tools.database.editCardTitle":`编辑标题`,"tools.database.cardMenuLabel":`卡片选项`,"tools.database.deleteColumn":`删除列`,"tools.database.emptyColumn":`没有卡片`,"tools.database.rowTitlePlaceholder":`空白页面`,"tools.database.addRow":`添加行`,"tools.database.newRow":`新行`,"tools.database.openRow":`打开行`,"tools.database.deleteRow":`删除行`,"tools.database.renameColumn":`重命名列`,"tools.callout.color":`颜色`,"tools.callout.colorDefault":`默认`,"tools.callout.colorGray":`灰色`,"tools.callout.colorBrown":`棕色`,"tools.callout.colorOrange":`橙色`,"tools.callout.colorYellow":`黄色`,"tools.callout.colorGreen":`绿色`,"tools.callout.colorTeal":`青色`,"tools.callout.colorBlue":`蓝色`,"tools.callout.colorPurple":`紫色`,"tools.callout.colorPink":`粉色`,"tools.callout.colorRed":`红色`,"tools.quote.size":`引用大小`,"tools.quote.placeholder":`引用`,"tools.quote.defaultSize":`默认`,"tools.quote.largeSize":`大`,"tools.code.codeTab":`代码`,"tools.code.previewTab":`预览`,"tools.code.sideBySide":`并排`,"tools.table.placement":`位置`,"tools.table.placementTopLeft":`左上`,"tools.table.placementTopCenter":`居中上`,"tools.table.placementTopRight":`右上`,"tools.table.placementMiddleLeft":`左中`,"tools.table.placementMiddleCenter":`居中`,"tools.table.placementMiddleRight":`右中`,"tools.table.placementBottomLeft":`左下`,"tools.table.placementBottomCenter":`居中下`,"tools.table.placementBottomRight":`右下`,"toolNames.code":`代码`,"toolNames.inlineCode":`代码`,"tools.code.placeholder":`编写代码…`,"tools.code.language":`语言`,"tools.code.copied":`已复制!`,"tools.code.copyCode":`复制代码`,"tools.code.wrapLines":`自动换行`,"tools.code.searchLanguage":`搜索语言...`,"tools.code.lineNumbers":`行号`,"searchTerms.code":`代码`,"searchTerms.snippet":`片段`,"searchTerms.program":`程序`,"searchTerms.pre":`预格式化`,"toolNames.image":`图片`,"blockSettings.blocksSelected":`{count} 个块`,"blockSettings.copyLinkSuccess":`链接已复制到剪贴板`,"blockSettings.copyLinkError":`无法复制块链接`,"popover.actions":`操作`,"tools.link.keepTyping":`继续输入以添加链接`,"tools.link.emailAddress":`电子邮件地址`,"tools.link.jumpToSection":`跳转到章节`,"tools.link.webLink":`链接到网页`,"tools.code.autoDetected":`自动`,"tools.code.plainText":`纯文本`,"tools.image.alignment":`对齐`,"tools.image.alignmentLeft":`左对齐`,"tools.image.alignmentCenter":`居中`,"tools.image.alignmentRight":`右对齐`,"tools.image.alignmentLeftAria":`左对齐`,"tools.image.alignmentCenterAria":`居中对齐`,"tools.image.alignmentRightAria":`右对齐`,"tools.image.size":`大小`,"tools.image.sizeSmall":`小`,"tools.image.sizeMedium":`中`,"tools.image.sizeLarge":`大`,"tools.image.sizeFull":`全宽`,"tools.image.caption":`说明`,"tools.image.toggleCaption":`显示/隐藏说明`,"tools.image.captionPlaceholder":`添加说明…`,"tools.image.replace":`替换图片`,"tools.image.crop":`裁剪`,"tools.image.viewFullscreen":`全屏查看`,"tools.image.exitFullscreen":`退出全屏`,"tools.image.downloadOriginal":`下载原图`,"tools.image.download":`下载`,"tools.image.copyUrl":`复制链接`,"tools.image.moreOptions":`更多选项`,"tools.image.uploading":`上传中…`,"tools.image.uploadingLabel":`上传中`,"tools.image.cancelUpload":`取消上传`,"tools.image.uploadProgress":`上传进度`,"tools.image.altEdit":`编辑替代文本`,"tools.image.altButton":`替代文本`,"tools.image.altDescription":`添加替代文本以描述此图片。这能让页面对视障或失明用户更易访问。`,"tools.image.altPlaceholder":`替代文本`,"tools.image.preview":`图片预览`,"tools.image.previewControls":`图片预览控件`,"tools.image.navigationControls":`图片导航`,"tools.image.previousImage":`上一张图片`,"tools.image.nextImage":`下一张图片`,"tools.image.zoomIn":`放大`,"tools.image.zoomOut":`缩小`,"tools.image.resetZoom":`重置缩放`,"tools.image.errorUploadFailed":`上传失败`,"tools.image.errorUploadFailedTitle":`上传失败`,"tools.image.errorSourceOffline":`来源可能已更改或离线。`,"tools.image.errorUnavailable":`图片不可用`,"tools.image.errorImageFailedToLoad":`无法加载图片`,"tools.image.errorDefaultTitle":`无法加载图片`,"tools.image.errorDefaultMessage":`URL 返回错误。请尝试其他来源或重新上传文件。`,"tools.image.errorRetry":`重试`,"tools.image.errorReplace":`替换`,"tools.image.emptyAddImage":`添加图片`,"tools.image.emptyUpload":`上传`,"tools.image.emptyLink":`链接`,"tools.image.emptyInsert":`插入`,"tools.image.emptyChooseFile":`选择文件`,"tools.image.emptyOrDropHere":`或将图片拖放到此处`,"tools.image.emptyDropToUpload":`拖放以上传`,"tools.image.emptyMaxSize":`最大 {size}`,"tools.image.emptyUrlPlaceholder":`粘贴图片 URL…`,"tools.image.emptyUrlAria":`图片 URL`,"tools.image.emptySourceAria":`图片来源`,"tools.image.cropAspectRatio":`宽高比`,"tools.image.cropRatioFree":`自由`,"tools.image.cropRatio1to1":`1:1`,"tools.image.cropRatio4to3":`4:3`,"tools.image.cropRatio16to9":`16:9`,"tools.image.cropRatioCircle":`圆形`,"tools.image.cropRatioOval":`椭圆`,"tools.image.cropReset":`重置`,"tools.image.cropCancel":`取消`,"tools.image.cropDone":`完成`,"tools.image.cropDialogLabel":`裁剪图片`,"tools.database.titlePlaceholder":`新数据库`,"tools.database.renameView":`重命名`,"tools.database.duplicateView":`复制`,"tools.database.deleteView":`删除`,"tools.database.addView":`添加视图`,"tools.database.viewTypeBoard":`看板`,"tools.database.viewTypeList":`列表`,"tools.database.viewTypeBoardDescription":`以列的形式查看任务`,"tools.database.viewTypeListDescription":`简洁的线性视图`,"tools.database.propertyTypeHeading":`属性类型`,"tools.database.propertyTypeText":`文本`,"tools.database.propertyTypeNumber":`数字`,"tools.database.propertyTypeSelect":`单选`,"tools.database.propertyTypeMultiSelect":`多选`,"tools.database.propertyTypeDate":`日期`,"tools.database.propertyTypeCheckbox":`复选框`,"tools.database.propertyTypeUrl":`URL`,"tools.database.listView":`列表视图`,"tools.database.kanbanBoard":`看板`,"tools.database.cardDetails":`卡片详情`,"tools.database.cardTitle":`卡片标题`,"tools.database.close":`关闭`,"tools.database.defaultTitleProperty":`标题`,"tools.database.defaultStatusProperty":`状态`,"tools.database.defaultStatusNotStarted":`未开始`,"tools.database.defaultStatusInProgress":`进行中`,"tools.database.defaultStatusDone":`已完成`,"tools.database.defaultViewBoard":`看板`,"toolNames.bookmark":`书签`,"toolNames.embed":`嵌入`,"tools.bookmark.empty":`粘贴链接以创建书签`,"tools.bookmark.loading":`正在加载链接预览`,"tools.bookmark.error":`无法加载链接预览`,"tools.embed.empty":`粘贴链接以嵌入`,"tools.embed.openOriginal":`打开原文`,"tools.embed.captionPlaceholder":`添加说明…`,"tools.embed.replace":`替换`,"tools.embed.urlPlaceholder":`粘贴要嵌入的链接…`,"tools.embed.urlSubmit":`嵌入链接`,"tools.embed.invalidUrl":`无法嵌入该链接`,"tools.linkPaste.plain":`保留为链接`,"tools.linkPaste.bookmark":`创建书签`,"tools.linkPaste.embed":`创建嵌入`,"tools.linkPaste.embedVideo":`嵌入 {provider} 视频`,"tools.linkPaste.embedAudio":`嵌入 {provider} 音频`,"tools.linkPaste.embedImage":`嵌入 {provider} 图片`,"tools.linkPaste.embedSocial":`嵌入 {provider} 帖子`,"tools.linkPaste.embedDocument":`嵌入 {provider} 文档`,"tools.linkPaste.embedTable":`嵌入 {provider} 表格`,"tools.linkPaste.embedForm":`嵌入 {provider} 表单`,"tools.linkPaste.embedCode":`嵌入 {provider} 代码`,"tools.linkPaste.embedDesign":`嵌入 {provider} 设计`,"tools.linkPaste.embedChart":`嵌入 {provider} 图表`,"tools.linkPaste.embedMap":`嵌入 {provider} 地图`,"tools.linkPaste.embedCalendar":`嵌入 {provider} 日历`,"tools.linkPaste.mention":`提及`,"toolNames.file":`文件`,"tools.file.emptyAddFile":`添加文件`,"tools.file.emptyUpload":`上传`,"tools.file.emptyLink":`链接`,"tools.file.emptyChooseFile":`选择文件`,"tools.file.emptyDropHint":`或将文件拖放到此处`,"tools.file.emptyDropToUpload":`拖放以上传`,"tools.file.emptySourceAria":`文件来源`,"tools.file.emptyUrlPlaceholder":`粘贴文件 URL…`,"tools.file.emptyUrlAria":`文件 URL`,"tools.file.emptyInsert":`插入`,"tools.file.uploading":`上传中…`,"tools.file.cancelUpload":`取消上传`,"tools.file.uploadProgress":`上传进度`,"tools.file.toggleCaption":`显示/隐藏说明`,"tools.file.captionPlaceholder":`添加说明…`,"tools.file.replace":`替换文件`,"tools.file.download":`下载`,"tools.file.copyUrl":`复制链接`,"tools.file.errorUploadFailed":`上传失败`,"tools.file.errorReplace":`替换`,"tools.file.preview":`预览`,"tools.file.previewClose":`关闭预览`,"tools.file.previewRaw":`源码`,"tools.file.previewRender":`渲染`,"tools.file.previewLoading":`正在加载预览…`,"tools.file.previewError":`无法加载预览`,"tools.file.previewDownload":`下载`,"tools.file.previewOpenInNewTab":`在新标签页中打开`};exports.default=e;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={"blockSettings.dragToMove":`Prevucite za premještanje`,"blockSettings.clickToOpenMenu":`Kliknite za otvaranje menija`,"blockSettings.clickOrShortcutToOpenMenu":`Kliknite ili {shortcut} za otvaranje menija`,"blockSettings.menuShortcutMac":`⌘/`,"blockSettings.menuShortcutWin":`Ctrl+/`,"toolbox.addBelow":`Kliknite za dodavanje ispod`,"toolbox.optionAddAbove":`Option-klik za dodavanje iznad`,"toolbox.ctrlAddAbove":`Ctrl-klik za dodavanje iznad`,"toolbox.typeToSearch":`Ukucajte za pretragu`,"popover.search":`Pretraži`,"popover.nothingFound":`Ništa nije pronađeno`,"popover.convertTo":`Pretvori u`,"toolNames.text":`Tekst`,"toolNames.heading":`Naslov`,"toolNames.link":`Poveznica`,"toolNames.bold":`Podebljano`,"toolNames.italic":`Kurziv`,"toolNames.marker":`Boja`,"toolNames.bulletedList":`Lista s tačkama`,"toolNames.numberedList":`Numerirana lista`,"toolNames.todoList":`Lista zadataka`,"toolNames.toggleList":`Preklopna lista`,"tools.link.addLink":`Dodaj link`,"tools.link.invalidLink":`Nevažeći link`,"tools.marker.textColor":`Tekst`,"tools.marker.background":`Pozadina`,"tools.marker.default":`Podrazumijevano`,"tools.colorPicker.defaultSwatchLabel":`{mode} {default}`,"tools.colorPicker.colorSwatchLabel":`{mode} {color}`,"tools.colorPicker.color.gray":`Sivo`,"tools.colorPicker.color.brown":`Smeđe`,"tools.colorPicker.color.orange":`Narančasto`,"tools.colorPicker.color.yellow":`Žuto`,"tools.colorPicker.color.green":`Zeleno`,"tools.colorPicker.color.blue":`Plavo`,"tools.colorPicker.color.purple":`Ljubičasto`,"tools.colorPicker.color.pink":`Ružičasto`,"tools.colorPicker.color.red":`Crveno`,"tools.stub.error":`Greška`,"tools.stub.blockCannotBeDisplayed":`Ovaj blok se ne može prikazati`,"tools.header.heading1":`Naslov 1`,"tools.header.heading2":`Naslov 2`,"tools.header.heading3":`Naslov 3`,"tools.header.heading4":`Naslov 4`,"tools.header.heading5":`Naslov 5`,"tools.header.heading6":`Naslov 6`,"tools.header.toggleHeading":`Preklopni naslov`,"tools.header.toggleHeading1":`Preklopni naslov 1`,"tools.header.toggleHeading2":`Preklopni naslov 2`,"tools.header.toggleHeading3":`Preklopni naslov 3`,"tools.list.placeholder":`Lista`,"tools.paragraph.placeholder":`Napišite nešto ili pritisnite / za odabir`,"tools.toggle.placeholder":`Preklop`,"tools.toggle.bodyPlaceholder":`Prazan prekidač. Kliknite ili ispustite blokove unutra.`,"tools.toggle.ariaLabelCollapse":`Sažmi`,"tools.toggle.ariaLabelExpand":`Proširi`,"blockSettings.delete":`Obriši`,"blockSettings.copyLink":`Kopiraj link na blok`,"blockSettings.lastEdited":`Posljednja izmjena`,"blockSettings.lastEditedBy":`Posljednju izmjenu napravio/la {name}`,"a11y.dragHandle":`Prevucite za premještanje bloka ili kliknite za meni`,"a11y.dragHandleRole":`ručka za povlačenje`,"a11y.dragStarted":`Povlačenje bloka`,"a11y.dragStartedMultiple":`Povlačenje {count} blokova`,"a11y.dropPosition":`Bit će postavljeno na poziciju {position} od {total}`,"a11y.dropCancelled":`Povlačenje je otkazano`,"a11y.blockMoved":`Blok je premješten na poziciju {position} od {total}`,"a11y.blocksMoved":`{count} blokova je premješteno na poziciju {position}`,"a11y.blockDuplicated":`Blok je dupliran na poziciju {position} od {total}`,"a11y.blocksDuplicated":`{count} blokova je duplirano počevši od pozicije {position}`,"a11y.movedUp":`Blok je pomjeren gore na poziciju {position} od {total}`,"a11y.movedDown":`Blok je pomjeren dolje na poziciju {position} od {total}`,"a11y.atTop":`Blok je na vrhu, ne može se pomjeriti gore`,"a11y.atBottom":`Blok je na dnu, ne može se pomjeriti dolje`,"tools.table.title":`Tabela`,"tools.table.clearSelection":`Očisti`,"tools.table.copySelection":`Kopiraj`,"tools.table.cellColor":`Boja`,"tools.table.mergeCells":`Spoji ćelije`,"tools.table.splitCell":`Razdvoji ćeliju`,"tools.table.headerColumn":`Kolona zaglavlja`,"tools.table.insertColumnLeft":`Umetni kolonu lijevo`,"tools.table.insertColumnRight":`Umetni kolonu desno`,"tools.table.deleteColumn":`Obriši`,"tools.table.headerRow":`Red zaglavlja`,"tools.table.insertRowAbove":`Umetni red iznad`,"tools.table.insertRowBelow":`Umetni red ispod`,"tools.table.deleteRow":`Obriši`,"tools.table.clickToAddRow":`Kliknite za dodavanje novog reda`,"tools.table.dragToAddRemoveRows":`Prevucite za dodavanje ili uklanjanje redova`,"tools.table.clickToAddColumn":`Kliknite za dodavanje nove kolone`,"tools.table.dragToAddRemoveColumns":`Prevucite za dodavanje ili uklanjanje kolona`,"blockSettings.convertWithChildrenWarning":`Ovaj blok sadrži {count} ugniježđenih blokova. Konverzijom će biti premješteni na najviši nivo. Nastaviti?`,"toolNames.underline":`Podcrtano`,"toolNames.strikethrough":`Precrtano`,"toolNames.callout":`Isticanje`,"toolNames.database":`Baza podataka`,"toolNames.board":`Tabla`,"toolNames.divider":`Razdjelnik`,"toolNames.quote":`Citat`,"toolNames.columns":`Kolone`,"tools.columns.col2":`2 kolone`,"tools.columns.col3":`3 kolone`,"tools.columns.col4":`4 kolone`,"tools.columns.col5":`5 kolona`,"tools.columns.resizeAriaLabel":`Promijeni veličinu stupaca`,"tools.columns.turnInto":`Pretvori u stupce`,"searchTerms.columns":`kolone`,"searchTerms.layout":`raspored`,"searchTerms.divider":`razdjelnik`,"searchTerms.separator":`odjeljivač`,"searchTerms.delimiter":`graničnik`,"searchTerms.splitter":`razdvajač`,"searchTerms.paragraph":`paragraf`,"searchTerms.plain":`običan`,"searchTerms.title":`naziv`,"searchTerms.header":`zaglavlje`,"searchTerms.heading":`naslov`,"searchTerms.toggle":`preklop`,"searchTerms.collapsible":`sklopivo`,"searchTerms.bullet":`tačka`,"searchTerms.unordered":`neumerirana`,"searchTerms.list":`lista`,"searchTerms.ordered":`numerirana`,"searchTerms.number":`broj`,"searchTerms.checkbox":`potvrdni okvir`,"searchTerms.task":`zadatak`,"searchTerms.todo":`zadaci`,"searchTerms.check":`kvačica`,"searchTerms.collapse":`sažmi`,"searchTerms.expand":`proširi`,"searchTerms.accordion":`harmonika`,"searchTerms.table":`tabela`,"searchTerms.grid":`mreža`,"searchTerms.spreadsheet":`proračunska tablica`,"searchTerms.callout":`isticanje`,"searchTerms.note":`napomena`,"searchTerms.info":`informacija`,"searchTerms.warning":`upozorenje`,"searchTerms.tip":`savjet`,"searchTerms.alert":`obavještenje`,"searchTerms.quote":`citat`,"searchTerms.blockquote":`blok citat`,"searchTerms.citation":`navod`,"tools.callout.placeholder":`Isticanje`,"tools.callout.addEmoji":`Dodaj emoji`,"tools.callout.editIcon":`Uredi ikonu`,"tools.callout.removeEmoji":`Ukloni ikonu`,"tools.callout.filterEmojis":`Filtriraj…`,"tools.callout.calloutEmojiCategory":`Isticanje`,"tools.callout.noEmojisFound":`Nisu pronađeni emojiji`,"tools.callout.pickRandom":`Nasumično`,"tools.callout.skinTone":`Boja kože`,"tools.callout.emojiCategoryPeople":`Ljudi`,"tools.callout.emojiCategoryNature":`Priroda`,"tools.callout.emojiCategoryFood":`Hrana`,"tools.callout.emojiCategoryActivity":`Aktivnosti`,"tools.callout.emojiCategoryTravel":`Putovanja`,"tools.callout.emojiCategoryObjects":`Predmeti`,"tools.callout.emojiCategorySymbols":`Simboli`,"tools.callout.emojiCategoryFlags":`Zastave`,"tools.database.addColumn":`Dodaj kolonu`,"tools.database.renameColumn":`Preimenuj kolonu`,"tools.database.deleteColumn":`Obriši kolonu`,"tools.database.addCard":`Dodaj karticu`,"tools.database.newPage":`Nova stranica`,"tools.database.deleteCard":`Obriši karticu`,"tools.database.editCardTitle":`Uredi naslov`,"tools.database.cardMenuLabel":`Opcije kartice`,"tools.database.cardTitlePlaceholder":`Prazna stranica`,"tools.database.columnTitlePlaceholder":`Kolona`,"tools.database.emptyColumn":`Nema kartica`,"tools.database.rowTitlePlaceholder":`Prazna stranica`,"tools.database.addRow":`Dodaj red`,"tools.database.newRow":`Novi red`,"tools.database.openRow":`Otvori red`,"tools.database.deleteRow":`Obriši red`,"tools.callout.color":`Boja`,"tools.callout.colorDefault":`Podrazumijevano`,"tools.callout.colorGray":`Sivo`,"tools.callout.colorBrown":`Smeđe`,"tools.callout.colorOrange":`Narančasto`,"tools.callout.colorYellow":`Žuto`,"tools.callout.colorGreen":`Zeleno`,"tools.callout.colorTeal":`Tirkizna`,"tools.callout.colorBlue":`Plavo`,"tools.callout.colorPurple":`Ljubičasto`,"tools.callout.colorPink":`Ružičasto`,"tools.callout.colorRed":`Crveno`,"tools.quote.size":`Veličina citata`,"tools.quote.placeholder":`Citat`,"tools.quote.defaultSize":`Podrazumijevano`,"tools.quote.largeSize":`Veliko`,"tools.code.codeTab":`Kod`,"tools.code.previewTab":`Pregled`,"tools.code.sideBySide":`Uporedno`,"tools.table.placement":`Položaj`,"tools.table.placementTopLeft":`Gore lijevo`,"tools.table.placementTopCenter":`Gore sredina`,"tools.table.placementTopRight":`Gore desno`,"tools.table.placementMiddleLeft":`Sredina lijevo`,"tools.table.placementMiddleCenter":`Sredina`,"tools.table.placementMiddleRight":`Sredina desno`,"tools.table.placementBottomLeft":`Dolje lijevo`,"tools.table.placementBottomCenter":`Dolje sredina`,"tools.table.placementBottomRight":`Dolje desno`,"toolNames.code":`Kod`,"toolNames.inlineCode":`Kod`,"tools.code.placeholder":`Napišite kod…`,"tools.code.language":`Jezik`,"tools.code.copied":`Kopirano!`,"tools.code.copyCode":`Kopiraj kod`,"tools.code.wrapLines":`Prelom redova`,"tools.code.searchLanguage":`Pretraži jezik...`,"tools.code.lineNumbers":`Brojevi redova`,"searchTerms.code":`kod`,"searchTerms.snippet":`isječak`,"searchTerms.program":`programiranje`,"searchTerms.pre":`preformatiran`,"toolNames.image":`Slika`,"blockSettings.blocksSelected":`Blokova: {count}`,"blockSettings.copyLinkSuccess":`Link je kopiran`,"blockSettings.copyLinkError":`Link nije moguće kopirati`,"popover.actions":`Radnje`,"tools.link.keepTyping":`Nastavite pisati da dodate link`,"tools.link.emailAddress":`Email adresa`,"tools.link.jumpToSection":`Idi na odjeljak`,"tools.link.webLink":`Link ka web stranici`,"tools.code.autoDetected":`automatski`,"tools.code.plainText":`Običan tekst`,"tools.image.alignment":`Poravnanje`,"tools.image.alignmentLeft":`Lijevo`,"tools.image.alignmentCenter":`Centar`,"tools.image.alignmentRight":`Desno`,"tools.image.alignmentLeftAria":`Poravnaj lijevo`,"tools.image.alignmentCenterAria":`Poravnaj po sredini`,"tools.image.alignmentRightAria":`Poravnaj desno`,"tools.image.size":`Veličina`,"tools.image.sizeSmall":`Mala`,"tools.image.sizeMedium":`Srednja`,"tools.image.sizeLarge":`Velika`,"tools.image.sizeFull":`Puna širina`,"tools.image.caption":`Natpis`,"tools.image.toggleCaption":`Prikaži natpis`,"tools.image.captionPlaceholder":`Unesite natpis…`,"tools.image.replace":`Zamijeni sliku`,"tools.image.crop":`Isjeci`,"tools.image.viewFullscreen":`Cijeli ekran`,"tools.image.exitFullscreen":`Izađi iz cijelog ekrana`,"tools.image.downloadOriginal":`Preuzmi original`,"tools.image.download":`Preuzmi`,"tools.image.copyUrl":`Kopiraj URL`,"tools.image.moreOptions":`Više`,"tools.image.uploading":`Slanje…`,"tools.image.uploadingLabel":`Slanje`,"tools.image.cancelUpload":`Otkaži slanje`,"tools.image.uploadProgress":`Napredak slanja`,"tools.image.altEdit":`Uredi alternativni tekst`,"tools.image.altButton":`Alt`,"tools.image.altDescription":`Dodajte opis slike. Time stranicu činite pristupačnijom osobama oštećenog vida.`,"tools.image.altPlaceholder":`Alternativni tekst`,"tools.image.preview":`Pregled slike`,"tools.image.previewControls":`Kontrole pregleda`,"tools.image.navigationControls":`Navigacija slikama`,"tools.image.previousImage":`Prethodna slika`,"tools.image.nextImage":`Sljedeća slika`,"tools.image.zoomIn":`Uvećaj`,"tools.image.zoomOut":`Umanji`,"tools.image.resetZoom":`Resetuj uvećanje`,"tools.image.errorUploadFailed":`Slanje nije uspjelo`,"tools.image.errorUploadFailedTitle":`Otpremanje nije uspjelo`,"tools.image.errorSourceOffline":`Izvor je možda premješten ili nedostupan.`,"tools.image.errorUnavailable":`Slika nije dostupna`,"tools.image.errorImageFailedToLoad":`Slika se ne može učitati`,"tools.image.errorDefaultTitle":`Slika se ne može učitati`,"tools.image.errorDefaultMessage":`Server je vratio grešku. Pokušajte drugi izvor ili ponovo pošaljite datoteku.`,"tools.image.errorRetry":`Pokušaj ponovo`,"tools.image.errorReplace":`Zamijeni`,"tools.image.emptyAddImage":`Dodajte sliku`,"tools.image.emptyUpload":`Pošalji`,"tools.image.emptyLink":`Veza`,"tools.image.emptyInsert":`Umetni`,"tools.image.emptyChooseFile":`Odaberi datoteku`,"tools.image.emptyOrDropHere":`ili ispustite sliku ovdje`,"tools.image.emptyDropToUpload":`Ispustite za slanje`,"tools.image.emptyMaxSize":`do {size}`,"tools.image.emptyUrlPlaceholder":`Zalijepite URL slike…`,"tools.image.emptyUrlAria":`URL slike`,"tools.image.emptySourceAria":`Izvor slike`,"tools.image.cropAspectRatio":`Omjer stranica`,"tools.image.cropRatioFree":`Slobodno`,"tools.image.cropRatio1to1":`1:1`,"tools.image.cropRatio4to3":`4:3`,"tools.image.cropRatio16to9":`16:9`,"tools.image.cropRatioCircle":`Krug`,"tools.image.cropRatioOval":`Ovalno`,"tools.image.cropReset":`Resetuj`,"tools.image.cropCancel":`Otkaži`,"tools.image.cropDone":`Gotovo`,"tools.image.cropDialogLabel":`Isjeci sliku`,"tools.database.titlePlaceholder":`Nova baza podataka`,"tools.database.renameView":`Preimenuj`,"tools.database.duplicateView":`Dupliraj`,"tools.database.deleteView":`Obriši`,"tools.database.addView":`Dodaj prikaz`,"tools.database.viewTypeBoard":`Tabla`,"tools.database.viewTypeList":`Lista`,"tools.database.viewTypeBoardDescription":`Prikaži rad kao kolone`,"tools.database.viewTypeListDescription":`Jednostavan linearni prikaz`,"tools.database.propertyTypeHeading":`Tip svojstva`,"tools.database.propertyTypeText":`Tekst`,"tools.database.propertyTypeNumber":`Broj`,"tools.database.propertyTypeSelect":`Izbor`,"tools.database.propertyTypeMultiSelect":`Višestruki izbor`,"tools.database.propertyTypeDate":`Datum`,"tools.database.propertyTypeCheckbox":`Kvadratić`,"tools.database.propertyTypeUrl":`URL`,"tools.database.listView":`Lista`,"tools.database.kanbanBoard":`Kanban tabla`,"tools.database.cardDetails":`Kartica`,"tools.database.cardTitle":`Naslov kartice`,"tools.database.close":`Zatvori`,"tools.database.defaultTitleProperty":`Naslov`,"tools.database.defaultStatusProperty":`Stanje`,"tools.database.defaultStatusNotStarted":`Nije započeto`,"tools.database.defaultStatusInProgress":`U toku`,"tools.database.defaultStatusDone":`Gotovo`,"tools.database.defaultViewBoard":`Tabla`,"toolNames.bookmark":`Knjižna oznaka`,"toolNames.embed":`Ugradi`,"tools.bookmark.empty":`Zalijepite link da kreirate knjižnu oznaku`,"tools.bookmark.loading":`Učitavanje pregleda linka`,"tools.bookmark.error":`Pregled linka nije moguće učitati`,"tools.embed.empty":`Zalijepite link za ugradnju`,"tools.embed.openOriginal":`Otvori original`,"tools.embed.captionPlaceholder":`Unesite natpis…`,"tools.embed.replace":`Zamijeni`,"tools.embed.urlPlaceholder":`Zalijepite link za ugrađivanje…`,"tools.embed.urlSubmit":`Ugradi link`,"tools.embed.invalidUrl":`Ovaj link nije moguće ugraditi`,"tools.linkPaste.plain":`Zadrži kao link`,"tools.linkPaste.bookmark":`Kreiraj knjižnu oznaku`,"tools.linkPaste.embed":`Kreiraj ugradnju`,"tools.linkPaste.embedVideo":`Ugradi {provider} video`,"tools.linkPaste.embedAudio":`Ugradi {provider} audio`,"tools.linkPaste.embedImage":`Ugradi {provider} sliku`,"tools.linkPaste.embedSocial":`Ugradi {provider} objavu`,"tools.linkPaste.embedDocument":`Ugradi {provider} dokument`,"tools.linkPaste.embedTable":`Ugradi {provider} tabelu`,"tools.linkPaste.embedForm":`Ugradi {provider} obrazac`,"tools.linkPaste.embedCode":`Ugradi {provider} kod`,"tools.linkPaste.embedDesign":`Ugradi {provider} dizajn`,"tools.linkPaste.embedChart":`Ugradi {provider} grafikon`,"tools.linkPaste.embedMap":`Ugradi {provider} mapu`,"tools.linkPaste.embedCalendar":`Ugradi {provider} kalendar`,"tools.linkPaste.mention":`Spomeni`,"toolNames.file":`Datoteka`,"tools.file.emptyAddFile":`Dodajte datoteku`,"tools.file.emptyUpload":`Pošalji`,"tools.file.emptyLink":`Veza`,"tools.file.emptyChooseFile":`Odaberi datoteku`,"tools.file.emptyDropHint":`ili prevuci datoteku ovdje`,"tools.file.emptyDropToUpload":`Ispustite za slanje`,"tools.file.emptySourceAria":`Izvor datoteke`,"tools.file.emptyUrlPlaceholder":`Zalijepite URL datoteke…`,"tools.file.emptyUrlAria":`URL datoteke`,"tools.file.emptyInsert":`Umetni`,"tools.file.uploading":`Slanje…`,"tools.file.cancelUpload":`Otkaži slanje`,"tools.file.uploadProgress":`Napredak slanja`,"tools.file.toggleCaption":`Prikaži natpis`,"tools.file.captionPlaceholder":`Unesite natpis…`,"tools.file.replace":`Zamijeni datoteku`,"tools.file.download":`Preuzmi`,"tools.file.copyUrl":`Kopiraj URL`,"tools.file.errorUploadFailed":`Slanje nije uspjelo`,"tools.file.errorReplace":`Zamijeni`,"tools.file.preview":`Pregled`,"tools.file.previewClose":`Zatvori pregled`,"tools.file.previewRaw":`Izvor`,"tools.file.previewRender":`Prikaz`,"tools.file.previewLoading":`Učitavanje pregleda…`,"tools.file.previewError":`Pregled nije moguće učitati`,"tools.file.previewDownload":`Preuzmi`,"tools.file.previewOpenInNewTab":`Otvori u novoj kartici`};exports.default=e;
|