@jackuait/blok 0.16.0 → 0.17.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 +4 -4
- package/dist/blok.mjs +2 -2
- package/dist/blok.umd.js +4 -4
- package/dist/chunks/{blok-BTpZKZQ5.cjs → blok-BPd65xOj.cjs} +11 -11
- package/dist/chunks/{blok-RLzqfwql.mjs → blok-D4ApwnD7.mjs} +776 -780
- package/dist/chunks/constants-C3wBsvmH.cjs +606 -0
- package/dist/chunks/{constants-BUNgcIvY.mjs → constants-DObdf8NU.mjs} +274 -274
- package/dist/chunks/{i18next-loader-BH_a6G9t.mjs → i18next-loader-BMhspWFn.mjs} +1 -1
- package/dist/chunks/{i18next-loader-BID4jAFG.cjs → i18next-loader-CNLosgId.cjs} +1 -1
- package/dist/chunks/{lightweight-i18n-Clk37huC.cjs → lightweight-i18n-ByswFbdt.cjs} +1 -1
- package/dist/chunks/{lightweight-i18n-B0VO8Rft.mjs → lightweight-i18n-Ck1HlVxq.mjs} +32 -0
- package/dist/{messages-MYWse7vx2.mjs → chunks/messages--uPFKcl3.mjs} +41 -9
- package/dist/{messages-gmq1abXg.mjs → chunks/messages-0ZOxg81Y.mjs} +43 -11
- package/dist/{messages-BSvuvR6i.mjs → chunks/messages-1H2SY5H1.mjs} +54 -22
- package/dist/chunks/messages-1bAMgAsO.cjs +1 -0
- package/dist/chunks/messages-3B44ZmLZ.cjs +1 -0
- package/dist/chunks/messages-3iZ6jJ6e.cjs +1 -0
- package/dist/chunks/messages-5Rp1xyL4.cjs +1 -0
- package/dist/chunks/messages-5Vbzn-DL2.cjs +1 -0
- package/dist/{messages-K1RIXLxa.mjs → chunks/messages-61uWTg1y.mjs} +37 -5
- package/dist/chunks/messages-6lqZ4lhc2.cjs +1 -0
- package/dist/chunks/messages-795D2ldP2.cjs +1 -0
- package/dist/chunks/messages-79WWudxY.cjs +1 -0
- package/dist/chunks/messages-8uD5ctYP.cjs +1 -0
- package/dist/{messages-DL1HdFqf.mjs → chunks/messages-9gvi5jul.mjs} +38 -6
- package/dist/chunks/messages-B0o3rVBB.cjs +1 -0
- package/dist/chunks/messages-B1h0nDQW.cjs +1 -0
- package/dist/chunks/messages-B37vUkBi.cjs +1 -0
- package/dist/{messages-C0RxvQ_B2.mjs → chunks/messages-B4BvJtlu.mjs} +53 -21
- package/dist/{messages-m_U7v4rD.mjs → chunks/messages-BChCPw99.mjs} +45 -13
- package/dist/chunks/messages-BDs_gdD_.cjs +1 -0
- package/dist/chunks/messages-BE6rW2R-.cjs +1 -0
- package/dist/{messages-ZAVymtrA2.mjs → chunks/messages-BFGgLdIA2.mjs} +40 -8
- package/dist/chunks/{messages-Ci-rkkgx.mjs → messages-BFcq7wsx.mjs} +39 -7
- package/dist/{messages-ilnnXk3p.mjs → chunks/messages-BGaAuDRS.mjs} +41 -9
- package/dist/chunks/messages-BGoJHXUk2.cjs +1 -0
- package/dist/{messages-xSBQ46qE2.mjs → chunks/messages-BIHeeP7X2.mjs} +53 -21
- package/dist/chunks/{messages-8FnVkNsk2.mjs → messages-BIQ2VT8X2.mjs} +48 -16
- package/dist/{messages-DCwlxqBz.mjs → chunks/messages-BK32XCpH.mjs} +58 -26
- package/dist/{messages-BnpaaUnF2.mjs → chunks/messages-BKSDnjOs.mjs} +40 -8
- package/dist/chunks/{messages-7nxAnzdE2.mjs → messages-BMNmXaC8.mjs} +43 -11
- package/dist/{messages-BlkFLGrN.mjs → chunks/messages-BNuGVAEy.mjs} +40 -8
- package/dist/{messages-CI7MWoEP2.mjs → chunks/messages-BQEh67Mi2.mjs} +53 -21
- package/dist/chunks/messages-BQOx3XGd.cjs +1 -0
- package/dist/chunks/{messages-CIqhI4HT.mjs → messages-BQUzqXIO.mjs} +46 -14
- package/dist/{messages-BqjusG9f.mjs → chunks/messages-BTKPcoLu.mjs} +49 -17
- package/dist/chunks/messages-BXgTHDIw.cjs +1 -0
- package/dist/chunks/messages-BXvKhyQH.cjs +1 -0
- package/dist/chunks/messages-BYW-U0iT.cjs +1 -0
- package/dist/chunks/messages-B_lkWkPQ.cjs +1 -0
- package/dist/{messages-CaJp3hwf2.mjs → chunks/messages-BaWaLwcn2.mjs} +42 -10
- package/dist/chunks/messages-BeTQxvmX2.cjs +1 -0
- package/dist/chunks/messages-BfWGa4V82.cjs +1 -0
- package/dist/chunks/{messages-B19gfehr.mjs → messages-Bgzyr5Lh.mjs} +48 -16
- package/dist/chunks/messages-BjFB8sow.cjs +1 -0
- package/dist/chunks/messages-Bjmg_8lv2.cjs +1 -0
- package/dist/chunks/messages-BlOVJtaj.cjs +1 -0
- package/dist/{messages-DQiZK84h.mjs → chunks/messages-BnW_Fwro.mjs} +57 -25
- package/dist/chunks/messages-Bpvja9xW2.cjs +1 -0
- package/dist/chunks/messages-BtMQ6v_L.cjs +1 -0
- package/dist/chunks/messages-BvChjyuU2.cjs +1 -0
- package/dist/{messages-Ca6_kMBT2.mjs → chunks/messages-Bvge__AJ2.mjs} +45 -13
- package/dist/chunks/{messages-BSHC8Ohs.mjs → messages-BwxzN2q3.mjs} +43 -11
- package/dist/chunks/{messages-C81EnNxX.mjs → messages-Byntrl2c.mjs} +41 -9
- package/dist/chunks/{messages-CXbHVq05.mjs → messages-C3B8l3Hy.mjs} +49 -17
- package/dist/chunks/messages-C3fAHxfE2.cjs +1 -0
- package/dist/chunks/{messages-qjFVR3AK.mjs → messages-C56BTPcC.mjs} +38 -6
- package/dist/{messages-B3YNVBd1.mjs → chunks/messages-C6vijVZv2.mjs} +37 -5
- package/dist/{messages-C-_8o7te.mjs → chunks/messages-C79Ef9MU.mjs} +43 -11
- package/dist/{messages-D5u6vlu6.mjs → chunks/messages-C93gDUHr.mjs} +39 -7
- package/dist/chunks/messages-CAix8jdZ.cjs +1 -0
- package/dist/{messages-BqKW-hlt2.mjs → chunks/messages-CEUDK26P2.mjs} +42 -10
- package/dist/chunks/messages-CEZ528TO2.cjs +1 -0
- package/dist/chunks/{messages-DRKzAu-g.mjs → messages-CHx6m_Bo.mjs} +45 -13
- package/dist/chunks/messages-CKiWXTe1.cjs +1 -0
- package/dist/chunks/{messages-bJ7cOoA_.mjs → messages-CMFcaa9C.mjs} +46 -14
- package/dist/chunks/messages-CO4J7Nns.cjs +1 -0
- package/dist/chunks/messages-COTP4ZJ_2.cjs +1 -0
- package/dist/chunks/{messages-QeD4YPxL.mjs → messages-CV3U2Vsm.mjs} +41 -9
- package/dist/{messages--RL8UOhV.mjs → chunks/messages-CYOersvL.mjs} +48 -16
- package/dist/{messages-DZtr9UPl2.mjs → chunks/messages-C_s-wv1r2.mjs} +41 -9
- package/dist/{messages-CFSBN-tg.mjs → chunks/messages-CbdaJSfC2.mjs} +40 -8
- package/dist/chunks/{messages-DTKpwQ9o.mjs → messages-Ccng4hJ2.mjs} +44 -12
- package/dist/chunks/messages-Cgph4q9d.cjs +1 -0
- package/dist/chunks/messages-Cp7wFDrY2.cjs +1 -0
- package/dist/chunks/messages-CpZneXUI.cjs +1 -0
- package/dist/chunks/messages-CpbireNX.cjs +1 -0
- package/dist/{messages-BIUXljax.mjs → chunks/messages-CpcZgGYg.mjs} +41 -9
- package/dist/chunks/{messages-Bxz0TVBv2.mjs → messages-CqhQuuRo2.mjs} +93 -61
- package/dist/chunks/{messages-BVV2uB2V2.mjs → messages-CrFIbrXr2.mjs} +40 -8
- package/dist/chunks/messages-CrwZs1Gq.cjs +1 -0
- package/dist/{messages-7EaFUksm.mjs → chunks/messages-D0_Mxuh62.mjs} +40 -8
- package/dist/{messages-BrycA2Yd.mjs → chunks/messages-D1q601Wg.mjs} +37 -5
- package/dist/{messages-CRuD2YBl2.mjs → chunks/messages-D3kC7iDa2.mjs} +38 -6
- package/dist/{messages-CasKwW-A.mjs → chunks/messages-D4UnR6e52.mjs} +38 -6
- package/dist/chunks/messages-D5CeQW1e2.cjs +1 -0
- package/dist/chunks/messages-D8UH8jc6.cjs +1 -0
- package/dist/chunks/messages-DAmOTPVW2.cjs +1 -0
- package/dist/chunks/{messages-ZjheBuhT2.mjs → messages-DBPkzBZO2.mjs} +47 -15
- package/dist/chunks/messages-DEduQerF.cjs +1 -0
- package/dist/chunks/{messages-c1uiUe552.mjs → messages-DFA5OVrs2.mjs} +45 -13
- package/dist/chunks/messages-DHah-frn.cjs +1 -0
- package/dist/chunks/messages-DI1ZLPxM.cjs +1 -0
- package/dist/chunks/{messages-DsWiXnOy2.mjs → messages-DKJ5CX9h2.mjs} +45 -13
- package/dist/chunks/messages-DKjhx7Y3.cjs +1 -0
- package/dist/chunks/{messages-CO9-5XrF2.mjs → messages-DR5DyRRY2.mjs} +45 -13
- package/dist/{messages-BKrK8Axl.mjs → chunks/messages-DWjHAdb3.mjs} +44 -12
- package/dist/chunks/{messages-Hsn-3QW0.mjs → messages-DYsO5SIA.mjs} +50 -18
- package/dist/{messages-BaYuAoTP2.mjs → chunks/messages-DZwozMZD2.mjs} +66 -34
- package/dist/chunks/{messages-BrpXuY-6.mjs → messages-Db_L5RNl.mjs} +43 -11
- package/dist/chunks/messages-DeXUZcFn2.cjs +1 -0
- package/dist/chunks/messages-Dgp7Wk4H.cjs +1 -0
- package/dist/chunks/messages-DhnCZQEY.cjs +1 -0
- package/dist/chunks/messages-DjU1jbKf.cjs +1 -0
- package/dist/{messages-B9s898dI.mjs → chunks/messages-DkqiXPS7.mjs} +43 -11
- package/dist/chunks/messages-Dl6VC9Q9.cjs +1 -0
- package/dist/chunks/messages-Dlc1DdZ22.cjs +1 -0
- package/dist/chunks/{messages-DOCzIldx.mjs → messages-Dna-8bQq.mjs} +43 -11
- package/dist/chunks/{messages-D3exVYZD.mjs → messages-DtTgOx9a.mjs} +57 -25
- package/dist/{messages-eNnPQjam2.mjs → chunks/messages-Duj8jpve2.mjs} +61 -29
- package/dist/chunks/messages-DvxZjb5g2.cjs +1 -0
- package/dist/chunks/messages-Dz8AmvFq.cjs +1 -0
- package/dist/chunks/messages-DzarYc1J2.cjs +1 -0
- package/dist/{messages-B6p4UUC-.mjs → chunks/messages-FIgYAomz2.mjs} +45 -13
- package/dist/chunks/messages-FM0KHIkQ2.cjs +1 -0
- package/dist/chunks/messages-JsmKjXPZ.cjs +1 -0
- package/dist/chunks/{messages-CO6ZReE7.mjs → messages-LW9Kd-vn.mjs} +40 -8
- package/dist/chunks/{messages-CC4xe9xv.mjs → messages-R2RH1RLt.mjs} +52 -20
- package/dist/chunks/messages-RWVOHsZu.cjs +1 -0
- package/dist/{messages-DJMSsPuS.mjs → chunks/messages-X90YfYzG2.mjs} +37 -5
- package/dist/chunks/messages-YhmR1nl02.cjs +1 -0
- package/dist/chunks/messages-Ywb6VdfO2.cjs +1 -0
- package/dist/{messages-mcif9RnD.mjs → chunks/messages-ZPOc6IQC.mjs} +37 -5
- package/dist/chunks/messages-_ECIn1VC2.cjs +1 -0
- package/dist/chunks/messages-cYjlWqco.cjs +1 -0
- package/dist/chunks/{messages-BRWkudTR.mjs → messages-dp4NwDVM.mjs} +44 -12
- package/dist/{messages-BGIle7Xo.mjs → chunks/messages-hhT3Vii-.mjs} +46 -14
- package/dist/chunks/messages-iwzDjgrP.cjs +1 -0
- package/dist/chunks/{messages-Dly-_TB6.mjs → messages-k4Do3gkF.mjs} +54 -22
- package/dist/chunks/messages-l0nKmGOV.cjs +1 -0
- package/dist/chunks/messages-l7DqwqOu2.cjs +1 -0
- package/dist/{messages-wB8V2U2i2.mjs → chunks/messages-oLqnmqJf2.mjs} +38 -6
- package/dist/chunks/messages-sLVwrcar.cjs +1 -0
- package/dist/chunks/{messages-BoN_Bitl2.mjs → messages-yGQn67fw2.mjs} +48 -16
- package/dist/chunks/messages-zkunMjZf2.cjs +1 -0
- package/dist/chunks/{tools-ChneUeSu.mjs → tools-CM6aPuR4.mjs} +3542 -2301
- package/dist/chunks/tools-kfoXLTzY.cjs +208 -0
- package/dist/chunks/webm-muxer-CC98PYSV.cjs +5 -0
- package/dist/chunks/webm-muxer-CUUz719e.mjs +864 -0
- package/dist/full.cjs +1 -1
- package/dist/full.mjs +13 -13
- package/dist/locales.mjs +99 -67
- package/dist/{chunks/messages-DPV70Ys22.mjs → messages-1ZSVxDYN2.mjs} +42 -10
- package/dist/{messages-BY5WK3mB.mjs → messages-AK_9q2yu.mjs} +46 -14
- package/dist/{chunks/messages-BRN9bO60.mjs → messages-B0Gc0lBw.mjs} +37 -5
- package/dist/{messages-BTp7xsAK2.mjs → messages-B5THTOwb2.mjs} +45 -13
- package/dist/{messages-h1l_y01e.mjs → messages-B5xy5hCa.mjs} +43 -11
- package/dist/{messages-CSVzRRdj.mjs → messages-B6J8l1aF.mjs} +38 -6
- package/dist/{chunks/messages-R08pGvHm.mjs → messages-B7E1zFAv.mjs} +49 -17
- package/dist/{messages-D9CbvVgb.mjs → messages-B87GXoqt.mjs} +41 -9
- package/dist/{chunks/messages-D21eomvf.mjs → messages-B95smO_C.mjs} +41 -9
- package/dist/{messages-DO99T6qk2.mjs → messages-B9h-mKVO2.mjs} +57 -25
- package/dist/{chunks/messages-B9kHL94V.mjs → messages-BBb_hXxm.mjs} +43 -11
- package/dist/{messages-8wZYXCg7.mjs → messages-BDJfFuXR.mjs} +43 -11
- package/dist/{chunks/messages-DeK_vGCd2.mjs → messages-BH5AKf_i2.mjs} +53 -21
- package/dist/{chunks/messages-BrLLU_Dm.mjs → messages-BLslMhf-.mjs} +38 -6
- package/dist/{chunks/messages-C3qdarW42.mjs → messages-BPsdJnwT.mjs} +45 -13
- package/dist/{messages-CrcHeqGR.mjs → messages-BTrok9K8.mjs} +44 -12
- package/dist/{chunks/messages-D9MUpOtw2.mjs → messages-BctWdAZP2.mjs} +45 -13
- package/dist/{chunks/messages-DefTqLH32.mjs → messages-BhGHyHKC2.mjs} +53 -21
- package/dist/{messages-DA5IipN52.mjs → messages-BlInN8XP2.mjs} +48 -16
- package/dist/{chunks/messages-DPX9kFey.mjs → messages-Bn19MGza.mjs} +45 -13
- package/dist/{messages-CNzktVoM2.mjs → messages-BqFRlEJE2.mjs} +43 -11
- package/dist/{chunks/messages-DN6pprFJ2.mjs → messages-Bt5Sbl952.mjs} +66 -34
- package/dist/{chunks/messages-7bt8ujXQ.mjs → messages-Bumbqs6s.mjs} +37 -5
- package/dist/{chunks/messages-DcgNt1Bg2.mjs → messages-BvwVDbII.mjs} +40 -8
- package/dist/{chunks/messages-M1tLUpjT.mjs → messages-Bwese2OQ.mjs} +43 -11
- package/dist/{messages-DPiPd88g.mjs → messages-Bx5KWmyJ.mjs} +39 -7
- package/dist/{messages-BIRq0EVo.mjs → messages-ByntluqZ.mjs} +48 -16
- package/dist/{chunks/messages-JiQBxj4o2.mjs → messages-C-8BMvSp2.mjs} +42 -10
- package/dist/{messages-DGz70LLg2.mjs → messages-C-ytN6Dz2.mjs} +45 -13
- package/dist/{messages-Cu5AHbR-2.mjs → messages-C8QB980F2.mjs} +43 -11
- package/dist/{chunks/messages-BLtZ2DXE.mjs → messages-CCdDP2DE.mjs} +39 -7
- package/dist/{messages-CwavcZov.mjs → messages-CCgDqF-e.mjs} +47 -15
- package/dist/{messages-CN5mXtal2.mjs → messages-CLkbvdRh2.mjs} +49 -17
- package/dist/{messages-DlC9tgiV.mjs → messages-CQ6A0zI9.mjs} +93 -61
- package/dist/{chunks/messages-BakdNtus2.mjs → messages-CQnz6pXD2.mjs} +38 -6
- package/dist/{chunks/messages-R3IlcPVE2.mjs → messages-CQotju8u2.mjs} +41 -9
- package/dist/{chunks/messages-CHmoIrso.mjs → messages-CRL2ecWR.mjs} +37 -5
- package/dist/{chunks/messages-36KiD2Bx2.mjs → messages-CRhhyqEy2.mjs} +40 -8
- package/dist/{messages-BGfVV77O.mjs → messages-CSf1g9n_.mjs} +48 -16
- package/dist/{chunks/messages-C3ueCeDy.mjs → messages-CYuTyoK6.mjs} +54 -22
- package/dist/{messages-BUfHXzRi2.mjs → messages-Co2GV7rA2.mjs} +45 -13
- package/dist/{chunks/messages-Dk_PadZz.mjs → messages-CqtZ_gtb.mjs} +40 -8
- package/dist/{chunks/messages-CH_Aqn-k.mjs → messages-CxK_Vgra.mjs} +41 -9
- package/dist/{chunks/messages-VFdnkrDm2.mjs → messages-D08TSj5Q.mjs} +37 -5
- package/dist/{chunks/messages-8Qzw6Xju.mjs → messages-DFDw0nkI.mjs} +57 -25
- package/dist/{messages-DJRg4kFv2.mjs → messages-DKoeDmZV2.mjs} +45 -13
- package/dist/{chunks/messages-D33lcfdb.mjs → messages-DLKTwtBI.mjs} +43 -11
- package/dist/{messages-CMG59Rb62.mjs → messages-DQaDNQat2.mjs} +46 -14
- package/dist/{chunks/messages-Bh8al9kl.mjs → messages-DZlYqaxx.mjs} +58 -26
- package/dist/{chunks/messages-CnvK1Abd2.mjs → messages-D_ql7LL-2.mjs} +61 -29
- package/dist/{chunks/messages-CXzyyhBC.mjs → messages-Da09byG42.mjs} +41 -9
- package/dist/{chunks/messages-DN9_Nlre2.mjs → messages-DaKjx7Gh.mjs} +38 -6
- package/dist/{messages-Bgf1E-Vj.mjs → messages-Dc1aAz5V.mjs} +50 -18
- package/dist/{chunks/messages-t_RiQ_y02.mjs → messages-DlxBkSUv.mjs} +40 -8
- package/dist/{messages-CdLOD2b_2.mjs → messages-DoahmNMI2.mjs} +54 -22
- package/dist/{chunks/messages-hT-pjCQL.mjs → messages-DpbHfnge.mjs} +46 -14
- package/dist/{messages-DCqRZ9Pw.mjs → messages-DrjZz7u9.mjs} +41 -9
- package/dist/{chunks/messages-DiUTxAEQ.mjs → messages-DrwEVbKk2.mjs} +53 -21
- package/dist/{chunks/messages-3H-mU8nV.mjs → messages-DvIPbDsq.mjs} +44 -12
- package/dist/{chunks/messages-vQ8eiHPr2.mjs → messages-Dy3mYP_n.mjs} +37 -5
- package/dist/{chunks/messages-B2hS--KC.mjs → messages-STUXoPH72.mjs} +40 -8
- package/dist/{messages-BfFFrhbd.mjs → messages-Vfl9lWod.mjs} +44 -12
- package/dist/{messages-B-9u3fLG.mjs → messages-YPF71WjJ.mjs} +52 -20
- package/dist/{messages-CpqGtSQ9.mjs → messages-aPBlKHzr.mjs} +40 -8
- package/dist/{chunks/messages-BoGOF3jH.mjs → messages-bCZW7LiC.mjs} +48 -16
- package/dist/{chunks/messages-DqcQoY-I2.mjs → messages-kjO2WeG-2.mjs} +38 -6
- package/dist/{messages-DRdzJFUx2.mjs → messages-un7M6YZC2.mjs} +40 -8
- 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/dist/vendor.LICENSE.txt +35 -0
- package/package.json +2 -1
- package/src/components/i18n/locales/am/messages.json +48 -17
- package/src/components/i18n/locales/ar/messages.json +38 -7
- package/src/components/i18n/locales/az/messages.json +47 -16
- package/src/components/i18n/locales/bg/messages.json +43 -12
- package/src/components/i18n/locales/bn/messages.json +53 -22
- package/src/components/i18n/locales/bs/messages.json +42 -11
- package/src/components/i18n/locales/cs/messages.json +45 -14
- package/src/components/i18n/locales/da/messages.json +42 -11
- package/src/components/i18n/locales/de/messages.json +44 -13
- package/src/components/i18n/locales/dv/messages.json +51 -20
- package/src/components/i18n/locales/el/messages.json +40 -9
- package/src/components/i18n/locales/en/messages.json +32 -0
- package/src/components/i18n/locales/es/messages.json +42 -11
- package/src/components/i18n/locales/et/messages.json +42 -11
- package/src/components/i18n/locales/fa/messages.json +40 -9
- package/src/components/i18n/locales/fi/messages.json +38 -7
- package/src/components/i18n/locales/fil/messages.json +45 -14
- package/src/components/i18n/locales/fr/messages.json +37 -6
- package/src/components/i18n/locales/gu/messages.json +40 -9
- package/src/components/i18n/locales/he/messages.json +43 -12
- package/src/components/i18n/locales/hi/messages.json +42 -11
- package/src/components/i18n/locales/hr/messages.json +49 -18
- package/src/components/i18n/locales/hu/messages.json +56 -25
- package/src/components/i18n/locales/hy/messages.json +43 -12
- package/src/components/i18n/locales/id/messages.json +47 -16
- package/src/components/i18n/locales/it/messages.json +36 -5
- package/src/components/i18n/locales/ja/messages.json +36 -5
- package/src/components/i18n/locales/ka/messages.json +39 -8
- package/src/components/i18n/locales/km/messages.json +46 -15
- package/src/components/i18n/locales/kn/messages.json +39 -8
- package/src/components/i18n/locales/ko/messages.json +39 -8
- package/src/components/i18n/locales/ku/messages.json +93 -62
- package/src/components/i18n/locales/lo/messages.json +37 -6
- package/src/components/i18n/locales/lt/messages.json +47 -16
- package/src/components/i18n/locales/lv/messages.json +36 -5
- package/src/components/i18n/locales/mk/messages.json +44 -13
- package/src/components/i18n/locales/ml/messages.json +36 -5
- package/src/components/i18n/locales/mn/messages.json +60 -29
- package/src/components/i18n/locales/mr/messages.json +40 -9
- package/src/components/i18n/locales/ms/messages.json +41 -10
- package/src/components/i18n/locales/my/messages.json +44 -13
- package/src/components/i18n/locales/ne/messages.json +44 -13
- package/src/components/i18n/locales/nl/messages.json +39 -8
- package/src/components/i18n/locales/no/messages.json +37 -6
- package/src/components/i18n/locales/pa/messages.json +65 -34
- package/src/components/i18n/locales/pl/messages.json +37 -6
- package/src/components/i18n/locales/ps/messages.json +52 -21
- package/src/components/i18n/locales/pt/messages.json +44 -13
- package/src/components/i18n/locales/ro/messages.json +44 -13
- package/src/components/i18n/locales/ru/messages.json +41 -10
- package/src/components/i18n/locales/sd/messages.json +52 -21
- package/src/components/i18n/locales/si/messages.json +47 -16
- package/src/components/i18n/locales/sk/messages.json +42 -11
- package/src/components/i18n/locales/sl/messages.json +44 -13
- package/src/components/i18n/locales/sq/messages.json +52 -21
- package/src/components/i18n/locales/sr/messages.json +56 -25
- package/src/components/i18n/locales/sv/messages.json +39 -8
- package/src/components/i18n/locales/sw/messages.json +48 -17
- package/src/components/i18n/locales/ta/messages.json +42 -11
- package/src/components/i18n/locales/te/messages.json +45 -14
- package/src/components/i18n/locales/th/messages.json +40 -9
- package/src/components/i18n/locales/tr/messages.json +39 -8
- package/src/components/i18n/locales/ug/messages.json +53 -22
- package/src/components/i18n/locales/uk/messages.json +40 -9
- package/src/components/i18n/locales/ur/messages.json +36 -5
- package/src/components/i18n/locales/vi/messages.json +37 -6
- package/src/components/i18n/locales/yi/messages.json +57 -26
- package/src/components/i18n/locales/zh/messages.json +39 -8
- package/src/components/icons/index.ts +106 -0
- package/src/components/modules/paste/handlers/pattern-handler.ts +4 -7
- package/src/components/utils/format-bytes.ts +15 -0
- package/src/components/utils/max-size.ts +36 -0
- package/src/components/utils/media-empty-state.ts +1 -11
- package/src/components/utils/upload-error-message.ts +43 -0
- package/src/styles/colors.css +31 -0
- package/src/styles/embed.css +4 -48
- package/src/styles/keyframes.css +8 -0
- package/src/styles/main.css +2 -0
- package/src/styles/resize-cue.css +26 -0
- package/src/styles/video.css +1221 -0
- package/src/tools/file/constants.ts +3 -0
- package/src/tools/file/index.ts +75 -4
- package/src/tools/file/uploader.ts +5 -2
- package/src/tools/image/constants.ts +1 -1
- package/src/tools/image/converted-uploader.ts +30 -0
- package/src/tools/image/gif-to-webm.ts +170 -0
- package/src/tools/image/index.ts +125 -3
- package/src/tools/image/resizer.ts +39 -6
- package/src/tools/image/uploader.ts +2 -1
- package/src/tools/image/uploading-state.ts +2 -1
- package/src/tools/index.ts +2 -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/src/tools/video/constants.ts +22 -0
- package/src/tools/video/controls.ts +1448 -0
- package/src/tools/video/empty-state.ts +45 -0
- package/src/tools/video/i18n.ts +13 -0
- package/src/tools/video/index.ts +521 -0
- package/src/tools/video/ui.ts +83 -0
- package/src/tools/video/uploader.ts +75 -0
- package/types/configs/blok-config.d.ts +2 -9
- package/types/tools/file.d.ts +9 -3
- package/types/tools/image.d.ts +11 -2
- package/types/tools/max-size.d.ts +12 -0
- package/types/tools/video.d.ts +72 -0
- package/dist/chunks/constants-B1fDH6ZT.cjs +0 -539
- 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
- /package/dist/chunks/{am-B37aLxvu.cjs → am-BA02TqF9.cjs} +0 -0
- /package/dist/chunks/{am-D7yfVqJS.mjs → am-C9_6r8HY.mjs} +0 -0
- /package/dist/chunks/{ar-D00SixXA.mjs → ar-BM96nSXF.mjs} +0 -0
- /package/dist/chunks/{ar-ySo_KDqd.cjs → ar-CB4IsGCa.cjs} +0 -0
- /package/dist/chunks/{az-BmIwKcoq.mjs → az-DnZSY5ok.mjs} +0 -0
- /package/dist/chunks/{az-nCoWuGBd.cjs → az-FykE_aDi.cjs} +0 -0
- /package/dist/chunks/{bg-BTZaB21W.mjs → bg-BplUvPeX.mjs} +0 -0
- /package/dist/chunks/{bg-BKB8_J3v.cjs → bg-D6r90gqH.cjs} +0 -0
- /package/dist/chunks/{bn-BQiBKtpR.cjs → bn-B7w2dbK4.cjs} +0 -0
- /package/dist/chunks/{bn-BVpf0XL6.mjs → bn-CdP9lnfr.mjs} +0 -0
- /package/dist/chunks/{bs-BSz4cPth.mjs → bs-BtX-qLsk.mjs} +0 -0
- /package/dist/chunks/{bs-D_lekdEb.cjs → bs-DztHHorM.cjs} +0 -0
- /package/dist/chunks/{cs-Dv8Jg_Fa.cjs → cs-CLMsCdIt.cjs} +0 -0
- /package/dist/chunks/{cs-p5s4GudH.mjs → cs-NcDYS-aU.mjs} +0 -0
- /package/dist/chunks/{da-BqJa8BMd.mjs → da-ANg6gK3-.mjs} +0 -0
- /package/dist/chunks/{da-D33rjz-t.cjs → da-sJ7EsHcO.cjs} +0 -0
- /package/dist/chunks/{de-BDDktkfI.mjs → de-CTxvRxuE.mjs} +0 -0
- /package/dist/chunks/{de-I8YFq0Ej.cjs → de-CxMqLKhy.cjs} +0 -0
- /package/dist/chunks/{el-BInM0nQo.cjs → el-Bg6QXLt5.cjs} +0 -0
- /package/dist/chunks/{el-R63G08P0.mjs → el-CgOoJaXB.mjs} +0 -0
- /package/dist/chunks/{es-Cj_AHhb9.cjs → es-7zUbslPJ.cjs} +0 -0
- /package/dist/chunks/{es-BleH_dHg.mjs → es-D5YDFRu-.mjs} +0 -0
- /package/dist/chunks/{et-BuISCVFl.mjs → et-57a7ees8.mjs} +0 -0
- /package/dist/chunks/{et-BkMzN_qG.cjs → et-D_rhRdDD.cjs} +0 -0
- /package/dist/chunks/{fa-CI9f3My0.mjs → fa-Dp_BXnBP.mjs} +0 -0
- /package/dist/chunks/{fa-C3VQIfEJ.cjs → fa-JBr2zsfI.cjs} +0 -0
- /package/dist/chunks/{fi-p8xxtchQ.cjs → fi-DjbYN6MA.cjs} +0 -0
- /package/dist/chunks/{fi-C0_Jyps9.mjs → fi-at45xjOS.mjs} +0 -0
- /package/dist/chunks/{fil-BZsJ4YZG.mjs → fil-D_HT2vGt.mjs} +0 -0
- /package/dist/chunks/{fil-DC8VTmfd.cjs → fil-dcVBIQoi.cjs} +0 -0
- /package/dist/chunks/{fr-BjeioA2N.mjs → fr-ByR9PLTE.mjs} +0 -0
- /package/dist/chunks/{fr-Cbstr5ii.cjs → fr-Ch4zj1rM.cjs} +0 -0
- /package/dist/chunks/{gu-DpPoUPem.cjs → gu-CoLW5Saq.cjs} +0 -0
- /package/dist/chunks/{gu-CNi9WnhQ.mjs → gu-CvfPvH3Y.mjs} +0 -0
- /package/dist/chunks/{he-Rlv-PVKK.cjs → he-2wS2DK0D.cjs} +0 -0
- /package/dist/chunks/{he-bU_Id5XQ.mjs → he-Bmqypvkq.mjs} +0 -0
- /package/dist/chunks/{hi-CYYjJgoQ.mjs → hi-DbcN0x64.mjs} +0 -0
- /package/dist/chunks/{hi-CfLaLKZL.cjs → hi-f4gshON3.cjs} +0 -0
- /package/dist/chunks/{hr-CerKCstu.mjs → hr-D5mydeyn.mjs} +0 -0
- /package/dist/chunks/{hr-B6eFd_4M.cjs → hr-DMExeWwd.cjs} +0 -0
- /package/dist/chunks/{hu-DQcisouf.cjs → hu-COmlHkse.cjs} +0 -0
- /package/dist/chunks/{hu-DNYoHMic.mjs → hu-DVCPn8un.mjs} +0 -0
- /package/dist/chunks/{hy-x9QOWTT6.cjs → hy-BoBSSiJc.cjs} +0 -0
- /package/dist/chunks/{hy-N0XBqVv_.mjs → hy-CP6oqcK_.mjs} +0 -0
- /package/dist/chunks/{id-dmUIQB07.mjs → id-COwan-Bb.mjs} +0 -0
- /package/dist/chunks/{id-G7ASv812.cjs → id-Dk2AQ6-R.cjs} +0 -0
- /package/dist/chunks/{it-DXDwm7Aj.cjs → it-BCmU3zOg.cjs} +0 -0
- /package/dist/chunks/{it-G9Rg2LaN.mjs → it-DJqN-zLs.mjs} +0 -0
- /package/dist/chunks/{ja-C1Nou_k5.mjs → ja-CvoLNAXS.mjs} +0 -0
- /package/dist/chunks/{ja-DHMurrnk.cjs → ja-DcMqJvnV.cjs} +0 -0
- /package/dist/chunks/{ka-P0_q1_oW.cjs → ka-BdyjQFkv.cjs} +0 -0
- /package/dist/chunks/{ka-9rtmTdhq.mjs → ka-BsqbDXqr.mjs} +0 -0
- /package/dist/chunks/{km-DedsOdPY.cjs → km-BShH0mB9.cjs} +0 -0
- /package/dist/chunks/{km-T8J0lGcC.mjs → km-C9FxSKv0.mjs} +0 -0
- /package/dist/chunks/{kn-CMb5Cv2d.mjs → kn-BKTm-E-A.mjs} +0 -0
- /package/dist/chunks/{kn-CAGP6H3x.cjs → kn-bNx6e6NK.cjs} +0 -0
- /package/dist/chunks/{ko-DulVmkjC.mjs → ko-BLEDr4t_.mjs} +0 -0
- /package/dist/chunks/{ko-3D0kPtnu.cjs → ko-LmGjEODJ.cjs} +0 -0
- /package/dist/chunks/{ku-BYzD3GnU.cjs → ku-BekLwcHQ.cjs} +0 -0
- /package/dist/chunks/{ku-C5mlSVfC.mjs → ku-DGpIv9vX.mjs} +0 -0
- /package/dist/chunks/{lo-Cw2hfj84.mjs → lo-C3wsS73b.mjs} +0 -0
- /package/dist/chunks/{lo-D9ixPNJD.cjs → lo-YgZPFD63.cjs} +0 -0
- /package/dist/chunks/{lt-CzfEJdVd.cjs → lt-CIvBJk2h.cjs} +0 -0
- /package/dist/chunks/{lt-Ceg9NAdI.mjs → lt-DWWjfR4Z.mjs} +0 -0
- /package/dist/chunks/{lv-DWyBbTHI.cjs → lv-B6Djmvjl.cjs} +0 -0
- /package/dist/chunks/{lv-3CXzQoic.mjs → lv-D4nb-9oK.mjs} +0 -0
- /package/dist/chunks/{mk-CEbNT0Oe.mjs → mk-BPUvDORf.mjs} +0 -0
- /package/dist/chunks/{mk-Anl5AUSU.cjs → mk-Ck56Emvp.cjs} +0 -0
- /package/dist/chunks/{ml-B1QmnbTX.cjs → ml-DsibsgSA.cjs} +0 -0
- /package/dist/chunks/{ml-DaF_zn1h.mjs → ml-qo0n1JHs.mjs} +0 -0
- /package/dist/chunks/{mn-DLpgZmIl.mjs → mn-BAQnLAOv.mjs} +0 -0
- /package/dist/chunks/{mn-DM3AWPQI.cjs → mn-Db0fVNYE.cjs} +0 -0
- /package/dist/chunks/{mr-CPCMiBsx.cjs → mr-BTz5VL4u.cjs} +0 -0
- /package/dist/chunks/{mr-C-d3CWSD.mjs → mr-CFEPrQYy.mjs} +0 -0
- /package/dist/chunks/{ms-D3Zil5Dz.mjs → ms-C9p2_6EB.mjs} +0 -0
- /package/dist/chunks/{ms-BKg5zJ6g.cjs → ms-ItzWfmiu.cjs} +0 -0
- /package/dist/chunks/{my-HzQdQq6H.mjs → my-BQhcHK_d.mjs} +0 -0
- /package/dist/chunks/{my-BhrbZPAE.cjs → my-Bq1EPoFX.cjs} +0 -0
- /package/dist/chunks/{ne-Dw6kUPkS.mjs → ne-Cf4GpHyI.mjs} +0 -0
- /package/dist/chunks/{ne-BsEUv3Vp.cjs → ne-Mog3kAWt.cjs} +0 -0
- /package/dist/chunks/{nl-D8QQ6wmJ.mjs → nl-7DE7AKK5.mjs} +0 -0
- /package/dist/chunks/{nl-C1jFx32v.cjs → nl-Do9Y1u3F.cjs} +0 -0
- /package/dist/chunks/{no-BWEOGeAo.cjs → no-DNuo9wW6.cjs} +0 -0
- /package/dist/chunks/{no-Rg2uuKdV.mjs → no-J4jj2fW7.mjs} +0 -0
- /package/dist/chunks/{notifier-CEnelp-K.mjs → notifier-BDNwSr07.mjs} +0 -0
- /package/dist/chunks/{notifier-BOB8o7IG.cjs → notifier-BW5H3Ctc.cjs} +0 -0
- /package/dist/chunks/{pa-BitCteAA.cjs → pa-BVCDv2EV.cjs} +0 -0
- /package/dist/chunks/{pa-BSwIZvA0.mjs → pa-DMuUOUxa.mjs} +0 -0
- /package/dist/chunks/{pl-CbCrHaA6.cjs → pl-Ct8v4d8V.cjs} +0 -0
- /package/dist/chunks/{pl-FhXomIGp.mjs → pl-DIZm5XzV.mjs} +0 -0
- /package/dist/chunks/{ps-4sPZuv3g.cjs → ps-DT4DAHOy.cjs} +0 -0
- /package/dist/chunks/{ps-BoBtbrB6.mjs → ps-X3--6pS3.mjs} +0 -0
- /package/dist/chunks/{pt-BYA5NOw_.mjs → pt-BMT2BIpj.mjs} +0 -0
- /package/dist/chunks/{pt-CSzjho-V.cjs → pt-Dwe6Dinw.cjs} +0 -0
- /package/dist/chunks/{ro-C9tN3AFF.cjs → ro-CoHEUo3b.cjs} +0 -0
- /package/dist/chunks/{ro-mtobtMpD.mjs → ro-Ndh2J4Fv.mjs} +0 -0
- /package/dist/chunks/{ru-B791LPq3.mjs → ru-DEoON4H0.mjs} +0 -0
- /package/dist/chunks/{ru-BYPO5wNO.cjs → ru-Pmgo28Kt.cjs} +0 -0
- /package/dist/chunks/{sd-C8ngG92I.mjs → sd-B46KwBlt.mjs} +0 -0
- /package/dist/chunks/{sd-BWuglgs_.cjs → sd-DxSmw84d.cjs} +0 -0
- /package/dist/chunks/{si-C_q8DxVt.mjs → si-CEX6-_X4.mjs} +0 -0
- /package/dist/chunks/{si-IX2P_DGB.cjs → si-attpuQg-.cjs} +0 -0
- /package/dist/chunks/{sk-HJJlM9uq.mjs → sk-Crsvi9aQ.mjs} +0 -0
- /package/dist/chunks/{sk-CxtyIOlr.cjs → sk-CvkpO0ti.cjs} +0 -0
- /package/dist/chunks/{sl-CPjYG80u.cjs → sl-BT19lhkA.cjs} +0 -0
- /package/dist/chunks/{sl-kB1f5rPn.mjs → sl-Cqe1IKhE.mjs} +0 -0
- /package/dist/chunks/{sq-CD0W0D6z.mjs → sq-BOQb1hx9.mjs} +0 -0
- /package/dist/chunks/{sq-Do6UyHn9.cjs → sq-rY2-arjV.cjs} +0 -0
- /package/dist/chunks/{sr-lLJu9TsT.mjs → sr-WVqhi-MV.mjs} +0 -0
- /package/dist/chunks/{sr-BcyT-MWS.cjs → sr-jnkxoHkR.cjs} +0 -0
- /package/dist/chunks/{sv-Bsz7ersx.cjs → sv-BiWSYdw7.cjs} +0 -0
- /package/dist/chunks/{sv-C3GL-a0k.mjs → sv-cjssSK3x.mjs} +0 -0
- /package/dist/chunks/{sw-D6-DZ14-.mjs → sw-BNNAgQNn.mjs} +0 -0
- /package/dist/chunks/{sw-CUElHZxL.cjs → sw-DFyk62c4.cjs} +0 -0
- /package/dist/chunks/{ta-D0DQba-y.cjs → ta-DowDx1bh.cjs} +0 -0
- /package/dist/chunks/{ta-BZy78kBk.mjs → ta-jg4mBsL9.mjs} +0 -0
- /package/dist/chunks/{te-vigCVKdg.mjs → te-BiLupA2T.mjs} +0 -0
- /package/dist/chunks/{te-DPMvJyXg.cjs → te-G0buJU1V.cjs} +0 -0
- /package/dist/chunks/{th-DtcrIt9J.cjs → th-DsjA6OWh.cjs} +0 -0
- /package/dist/chunks/{th-CGc0RLWB.mjs → th-Dtb_u833.mjs} +0 -0
- /package/dist/chunks/{tr-Cgkf5aJo.mjs → tr-01MbT9-l.mjs} +0 -0
- /package/dist/chunks/{tr-BrEFaVNA.cjs → tr-DN1xdxQn.cjs} +0 -0
- /package/dist/chunks/{ug-BVK7qBs4.mjs → ug-BFlA2VRZ.mjs} +0 -0
- /package/dist/chunks/{ug-CqZXfhXi.cjs → ug-DEJ9cNGH.cjs} +0 -0
- /package/dist/chunks/{uk-DgReWEge.cjs → uk-Bv6aB1Nd.cjs} +0 -0
- /package/dist/chunks/{uk-CSPaCalw.mjs → uk-DY7rBPyo.mjs} +0 -0
- /package/dist/chunks/{ur-ByrwJnY1.cjs → ur-C3CFfx9s.cjs} +0 -0
- /package/dist/chunks/{ur-VpFFsATs.mjs → ur-DHfULZeF.mjs} +0 -0
- /package/dist/chunks/{vi-CWQtvATS.mjs → vi-BFuaq2Tk.mjs} +0 -0
- /package/dist/chunks/{vi-lUD3w7gP.cjs → vi-DQrrRkmq.cjs} +0 -0
- /package/dist/chunks/{zh-fSp1qOne.cjs → zh-5rdSdLkR.cjs} +0 -0
- /package/dist/chunks/{zh-akJj2cdF.mjs → zh-BGpl7x7W.mjs} +0 -0
|
@@ -5,6 +5,7 @@ import { tr } from './i18n';
|
|
|
5
5
|
export interface UploadingStateOptions {
|
|
6
6
|
fileName: string;
|
|
7
7
|
sizeLabel?: string;
|
|
8
|
+
statusLabel?: string;
|
|
8
9
|
onCancel?(): void;
|
|
9
10
|
i18n?: I18nInstance;
|
|
10
11
|
}
|
|
@@ -33,7 +34,7 @@ export function renderUploadingState(opts: UploadingStateOptions): UploadingStat
|
|
|
33
34
|
|
|
34
35
|
const label = document.createElement('span');
|
|
35
36
|
label.className = 'blok-image-uploading__label';
|
|
36
|
-
label.textContent = tr(opts.i18n, 'tools.image.uploadingLabel');
|
|
37
|
+
label.textContent = opts.statusLabel ?? tr(opts.i18n, 'tools.image.uploadingLabel');
|
|
37
38
|
|
|
38
39
|
const name = document.createElement('span');
|
|
39
40
|
name.className = 'blok-image-uploading__filename';
|
package/src/tools/index.ts
CHANGED
|
@@ -33,6 +33,7 @@ export { Quote } from './quote';
|
|
|
33
33
|
export { CodeTool as Code } from './code';
|
|
34
34
|
export { ImageTool as Image } from './image';
|
|
35
35
|
export { FileTool as File } from './file';
|
|
36
|
+
export { VideoTool as Video } from './video';
|
|
36
37
|
export { ColumnList } from './column-list';
|
|
37
38
|
export { Column } from './column';
|
|
38
39
|
export { Columns } from './columns';
|
|
@@ -65,6 +66,7 @@ export const defaultBlockTools = {
|
|
|
65
66
|
code: { inlineToolbar: false },
|
|
66
67
|
image: {},
|
|
67
68
|
file: {},
|
|
69
|
+
video: {},
|
|
68
70
|
column_list: {},
|
|
69
71
|
column: {},
|
|
70
72
|
embed: {},
|
|
@@ -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
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const DEFAULT_MIME_TYPES = [
|
|
2
|
+
'video/mp4',
|
|
3
|
+
'video/webm',
|
|
4
|
+
'video/ogg',
|
|
5
|
+
] as const;
|
|
6
|
+
|
|
7
|
+
export const DEFAULT_MAX_SIZE = 100 * 1024 * 1024; // 100 MiB
|
|
8
|
+
|
|
9
|
+
export const DEFAULT_CAPTION_PLACEHOLDER = 'Write a caption…';
|
|
10
|
+
|
|
11
|
+
export const MIN_WIDTH_PERCENT = 10;
|
|
12
|
+
export const MAX_WIDTH_PERCENT = 100;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Hard floor for the player's pixel width. Below this the inline controls
|
|
16
|
+
* (volume slider, timecode, scrubber, view-mode buttons) crush together, so the
|
|
17
|
+
* resize handle clamps here instead of the global 10% percent floor.
|
|
18
|
+
*/
|
|
19
|
+
export const MIN_WIDTH_PX = 440;
|
|
20
|
+
|
|
21
|
+
/** Direct links to a playable video file. */
|
|
22
|
+
export const URL_PATTERN = /^https?:\/\/\S+\.(mp4|webm|ogg|mov|m4v)(\?\S*)?$/i;
|