@jackuait/blok 0.9.0 → 0.10.0-beta.10
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/codemod/migrate-editorjs-to-blok.js +50 -2
- package/codemod/test.js +39 -6
- package/dist/blok.mjs +3 -3
- package/dist/chunks/_basePickBy-DISiGhsr.mjs +410 -0
- package/dist/chunks/_baseUniq-gAuHRtRF.mjs +1045 -0
- package/dist/chunks/_getTag-Aj56Wgor.mjs +26 -0
- package/dist/chunks/arc-D-pL2Ftf.mjs +80 -0
- package/dist/chunks/architecture-YZFGNWBL-CuqTb_ae.mjs +3 -0
- package/dist/chunks/architectureDiagram-Q4EWVU46-DS7mqjL2.mjs +4066 -0
- package/dist/chunks/array-BsrkCVSZ.mjs +6 -0
- package/dist/chunks/blockDiagram-DXYQGD6D-BTtcn4NG.mjs +3259 -0
- package/dist/chunks/{blok-RJ3hyzDH.mjs → blok-Bg3-zpSu.mjs} +2192 -2156
- package/dist/chunks/c-C6JXJf5K.mjs +5 -0
- package/dist/chunks/c4Diagram-AHTNJAMY-Y4Dcwcoo.mjs +2956 -0
- package/dist/chunks/ccount-C9Y7nqDe.mjs +10 -0
- package/dist/chunks/channel-Cln-eWE0.mjs +5 -0
- package/dist/chunks/chunk-2KRD3SAO-DkM7qh-k.mjs +20 -0
- package/dist/chunks/chunk-336JU56O-B17AtzlK.mjs +49 -0
- package/dist/chunks/chunk-426QAEUC-D6UAVUog.mjs +13 -0
- package/dist/chunks/chunk-4BX2VUAB-CgIkjF7Z.mjs +19 -0
- package/dist/chunks/chunk-4TB4RGXK-BUP4eON3.mjs +3250 -0
- package/dist/chunks/chunk-55IACEB6-zZ-IgaSt.mjs +8 -0
- package/dist/chunks/chunk-5FUZZQ4R-DsZnJYxM.mjs +3786 -0
- package/dist/chunks/chunk-5PVQY5BW-CORl9dnu.mjs +1692 -0
- package/dist/chunks/chunk-67CJDMHE-m0UKdcSH.mjs +20 -0
- package/dist/chunks/chunk-7N4EOEYR-DKNajFZd.mjs +29 -0
- package/dist/chunks/chunk-AA7GKIK3-BeLhNzKa.mjs +24 -0
- package/dist/chunks/chunk-BSJP7CBP-CJExmx8a.mjs +83 -0
- package/dist/chunks/chunk-CIAEETIT-CTikoJ19.mjs +20 -0
- package/dist/chunks/chunk-D6kmoKXy.mjs +20 -0
- package/dist/chunks/chunk-EDXVE4YY-DjInnnwb.mjs +26 -0
- package/dist/chunks/chunk-ENJZ2VHE-CIl5FRDA.mjs +566 -0
- package/dist/chunks/chunk-FMBD7UC4-DjV0W7UE.mjs +5 -0
- package/dist/chunks/chunk-FOC6F5B3-LmHCCWYY.mjs +20 -0
- package/dist/chunks/chunk-ICPOFSXX-BHZIN46A.mjs +3290 -0
- package/dist/chunks/chunk-K5T4RW27-BPZ6fFnW.mjs +16370 -0
- package/dist/chunks/chunk-KGLVRYIC-S1OQdW76.mjs +20 -0
- package/dist/chunks/chunk-LIHQZDEY-CjtyJlI6.mjs +55 -0
- package/dist/chunks/chunk-ORNJ4GCN-CdO0hAge.mjs +25 -0
- package/dist/chunks/chunk-OYMX7WX6-ApX8eV4o.mjs +2038 -0
- package/dist/chunks/chunk-QZHKN3VN-BGFuA6-k.mjs +12 -0
- package/dist/chunks/chunk-U2HBQHQK-B88ZUOTL.mjs +1875 -0
- package/dist/chunks/chunk-X2U36JSP-1VS5TyCr.mjs +68 -0
- package/dist/chunks/chunk-XPW4576I-BMupdrvo.mjs +1146 -0
- package/dist/chunks/chunk-YZCP3GAM-BQ7eEsm2.mjs +60 -0
- package/dist/chunks/chunk-ZZ45TVLE-D1xks9zd.mjs +33 -0
- package/dist/chunks/classDiagram-6PBFFD2Q-C59BZJxp.mjs +30 -0
- package/dist/chunks/classDiagram-v2-HSJHXN6E-7a0qeMsE.mjs +30 -0
- package/dist/chunks/clone-Ckjt1LtE.mjs +8 -0
- package/dist/chunks/{constants-A3iVmQL8.mjs → constants-D7zjGD5W.mjs} +529 -530
- package/dist/chunks/core-Bm6DWt7D.mjs +4501 -0
- package/dist/chunks/cose-bilkent-S5V4N54A-Bpcs2jA_.mjs +2246 -0
- package/dist/chunks/cpp-BdjvAny0.mjs +16 -0
- package/dist/chunks/csharp-YHxeHpeH.mjs +3 -0
- package/dist/chunks/css-DdLevFaX.mjs +3 -0
- package/dist/chunks/cytoscape.esm-BvD8wo00.mjs +18108 -0
- package/dist/chunks/dagre-CGNbYTKq.mjs +1536 -0
- package/dist/chunks/dagre-KV5264BT-DUD9ikgN.mjs +298 -0
- package/dist/chunks/dart-DrPWqfcC.mjs +3 -0
- package/dist/chunks/default-qigT1Xpq.mjs +4 -0
- package/dist/chunks/defaultLocale-ChuSeAxU.mjs +201 -0
- package/dist/chunks/diagram-5BDNPKRD-CZGfTYEe.mjs +112 -0
- package/dist/chunks/diagram-G4DWMVQ6-CuS0-h95.mjs +546 -0
- package/dist/chunks/diagram-MMDJMWI5-C-AEApYz.mjs +234 -0
- package/dist/chunks/diagram-TYMM5635-CiwAJVMq.mjs +144 -0
- package/dist/chunks/dist-Ctq-pyfb.mjs +59 -0
- package/dist/chunks/dockerfile-C68ALcaN.mjs +3 -0
- package/dist/chunks/engine-javascript-CJpnSvzf.mjs +2373 -0
- package/dist/chunks/erDiagram-SMLLAGMA-DeH5yck2.mjs +1712 -0
- package/dist/chunks/flowDiagram-DWJPFMVM-Cr6dwmQ5.mjs +4175 -0
- package/dist/chunks/ganttDiagram-T4ZO3ILL-K-divBg_.mjs +3083 -0
- package/dist/chunks/gitGraph-7Q5UKJZL-Dl-vQzrq.mjs +3 -0
- package/dist/chunks/gitGraphDiagram-UUTBAWPF-UytPZv72.mjs +792 -0
- package/dist/chunks/go-Fm5N96DN.mjs +3 -0
- package/dist/chunks/graphlib-Cye9EPNq.mjs +223 -0
- package/dist/chunks/graphql-BSnqmqgO.mjs +11 -0
- package/dist/chunks/html-BLNeZvnp.mjs +10 -0
- package/dist/chunks/{i18next-Ch0gVA3V.mjs → i18next-CXx5niYF.mjs} +1 -1
- package/dist/chunks/{i18next-loader-dH3UPF7S.mjs → i18next-loader-CwsYu0n6.mjs} +2 -2
- package/dist/chunks/info-OMHHGYJF-BOejJvJR.mjs +3 -0
- package/dist/chunks/infoDiagram-42DDH7IO-DuYnDbF3.mjs +29 -0
- package/dist/chunks/init-C6T-mugb.mjs +15 -0
- package/dist/chunks/ishikawaDiagram-UXIWVN3A-CHc59dLn.mjs +719 -0
- package/dist/chunks/java-83DWBpzu.mjs +5 -0
- package/dist/chunks/javascript-CBgeF1Xx.mjs +3 -0
- package/dist/chunks/journeyDiagram-VCZTEJTY-CD25C4_n.mjs +885 -0
- package/dist/chunks/json-BI17y-1H.mjs +3 -0
- package/dist/chunks/kanban-definition-6JOO6SKY-CTCT6N_p.mjs +980 -0
- package/dist/chunks/katex-CmTPfM0f.mjs +22026 -0
- package/dist/chunks/kotlin-DjnvsrfO.mjs +3 -0
- package/dist/chunks/latex-24n3TcOR.mjs +5 -0
- package/dist/chunks/{lightweight-i18n-1rbaxIZW.mjs → lightweight-i18n-Cvv8CWh4.mjs} +69 -2
- package/dist/chunks/line-Dct5pMmw.mjs +34 -0
- package/dist/chunks/linear-BRCpMvtr.mjs +289 -0
- package/dist/chunks/lua-DV0fuZWx.mjs +5 -0
- package/dist/chunks/markdown-BqQYT45f.mjs +3 -0
- package/dist/chunks/mdast-util-math-BlK2Zu-1.mjs +151 -0
- package/dist/chunks/mermaid-parser.core-CA3DKkuk.mjs +57 -0
- package/dist/chunks/mermaid-vF0cEnZ0.mjs +3 -0
- package/dist/chunks/mermaid.core-CA8nc1sZ.mjs +989 -0
- package/dist/{messages-DaOnbI6d.mjs → chunks/messages-8IHf7ZP3.mjs} +68 -1
- package/dist/chunks/{messages-C9aKfCro.mjs → messages-A_MkXDlG.mjs} +68 -1
- package/dist/{messages-BLEVLZve.mjs → chunks/messages-B0vPBsWq.mjs} +68 -1
- package/dist/chunks/{messages-C0hQPZmh2.mjs → messages-B2N4fUi72.mjs} +68 -1
- package/dist/{messages-HNAtlVax.mjs → chunks/messages-B4UMuyjT.mjs} +73 -6
- package/dist/chunks/{messages-DRUkmDVZ.mjs → messages-B9kmbUWV.mjs} +68 -1
- package/dist/{messages-Dbsx9m5q2.mjs → chunks/messages-BA8Iv99Y2.mjs} +68 -1
- package/dist/chunks/{messages-Da-SOTFW.mjs → messages-BAsb5CgZ.mjs} +68 -1
- package/dist/{messages-D1P0QGLz2.mjs → chunks/messages-BDZA10kl2.mjs} +68 -1
- package/dist/chunks/{messages-ComLU2T32.mjs → messages-BE6lHKwf.mjs} +68 -1
- package/dist/chunks/{messages-gaxTO-87.mjs → messages-BQYvBqm2.mjs} +68 -1
- package/dist/chunks/{messages-BwKs-9DF.mjs → messages-BSghd0ez.mjs} +68 -1
- package/dist/{messages-BPRR6TMf.mjs → chunks/messages-BUVhHx0q2.mjs} +68 -1
- package/dist/{messages-B7jZvo-m.mjs → chunks/messages-BVjoM7P0.mjs} +68 -1
- package/dist/{messages-C-4z1-Dh.mjs → chunks/messages-BXM80fdr2.mjs} +68 -1
- package/dist/{messages-Bm0nvUuj2.mjs → chunks/messages-BYlSMRkd.mjs} +68 -1
- package/dist/chunks/{messages-DLPrj3Dh.mjs → messages-BYxLFj7y.mjs} +68 -1
- package/dist/{messages-BRcLIBCd2.mjs → chunks/messages-BeFqtIrc2.mjs} +68 -1
- package/dist/{messages-zHkURG6V2.mjs → chunks/messages-Bfnq1xv4.mjs} +68 -1
- package/dist/chunks/{messages-Z762-GLL.mjs → messages-BhzzNkN-.mjs} +68 -1
- package/dist/chunks/{messages-COJ0CbVV2.mjs → messages-BjadX8jR2.mjs} +68 -1
- package/dist/{messages-B2ZwD4n9.mjs → chunks/messages-Bp8qin1R.mjs} +68 -1
- package/dist/chunks/{messages-DdEWnfAR.mjs → messages-Bphq_Bt3.mjs} +71 -4
- package/dist/{messages-CUDbNJG5.mjs → chunks/messages-Bxvi1ebN.mjs} +68 -1
- package/dist/chunks/{messages-B0t2L3bi.mjs → messages-C0HvoMPb.mjs} +68 -1
- package/dist/{messages-D6qfWi6H2.mjs → chunks/messages-C3aX3q0H.mjs} +68 -1
- package/dist/chunks/{messages-v9NkxRcL.mjs → messages-C6Mpiacw.mjs} +68 -1
- package/dist/chunks/{messages-CqZ9vFyx.mjs → messages-C7VGpihw.mjs} +69 -2
- package/dist/chunks/{messages-Yj4Q1_uX2.mjs → messages-CKBhDGI3.mjs} +69 -2
- package/dist/chunks/{messages-DxtnwNPo.mjs → messages-COO5xmcA.mjs} +68 -1
- package/dist/{messages-CZTcgUzd.mjs → chunks/messages-CSJ_zb3a2.mjs} +68 -1
- package/dist/{messages-A8aZS7d_2.mjs → chunks/messages-CSL-6xfb2.mjs} +68 -1
- package/dist/{messages-CxruHsuD2.mjs → chunks/messages-CVdpweyf2.mjs} +69 -2
- package/dist/{messages-D2Mf9z2D.mjs → chunks/messages-Cdf0W9H02.mjs} +68 -1
- package/dist/chunks/{messages-DAbCNake2.mjs → messages-Ck81cQkn2.mjs} +68 -1
- package/dist/chunks/{messages-Dyku8Cut.mjs → messages-Cmf6NhSC.mjs} +68 -1
- package/dist/chunks/{messages-DQ6bFum9.mjs → messages-Cs81Z_Bh.mjs} +68 -1
- package/dist/chunks/{messages-cegxHurd2.mjs → messages-Cu-Wevxs2.mjs} +68 -1
- package/dist/{messages-D2HwpoUE.mjs → chunks/messages-D3zojZ94.mjs} +69 -2
- package/dist/{messages-BfTBVFd9.mjs → chunks/messages-D55HRx5O2.mjs} +68 -1
- package/dist/chunks/{messages-Dl03jd4b2.mjs → messages-D9N2MvQx2.mjs} +68 -1
- package/dist/{messages-DfXh-i9o.mjs → chunks/messages-DG-4DPmP.mjs} +68 -1
- package/dist/chunks/{messages-DmJf9laH2.mjs → messages-DGL1ySqb2.mjs} +68 -1
- package/dist/chunks/{messages-DfU4yvkL.mjs → messages-DJoNVjqP.mjs} +68 -1
- package/dist/{messages-Bsd4ruEY.mjs → chunks/messages-DMVXnAYj.mjs} +70 -3
- package/dist/{messages-3WhPEFd7.mjs → chunks/messages-DOuS1Qge.mjs} +68 -1
- package/dist/chunks/{messages-B1kDfIN82.mjs → messages-DWu1r4gc2.mjs} +68 -1
- package/dist/{messages-Dtih3ffa2.mjs → chunks/messages-DlLXpgWM2.mjs} +68 -1
- package/dist/chunks/{messages-DKNULJpc.mjs → messages-DlonA3wa.mjs} +69 -2
- package/dist/{messages-C5pBfa_W.mjs → chunks/messages-Dr0Ekmbz.mjs} +81 -14
- package/dist/{messages-Du62vI49.mjs → chunks/messages-DzTk8bJ5.mjs} +68 -1
- package/dist/{messages-DNAp0U4l2.mjs → chunks/messages-FWfsxpBz.mjs} +68 -1
- package/dist/{messages-B2YeJw8s2.mjs → chunks/messages-G416eyjY.mjs} +68 -1
- package/dist/chunks/{messages-C5-aaU2b.mjs → messages-Je5YvxiY.mjs} +68 -1
- package/dist/chunks/{messages-DHHZUf_H2.mjs → messages-JyvWu4rf2.mjs} +68 -1
- package/dist/chunks/{messages-D_6vPBzT.mjs → messages-KdawW5Na.mjs} +68 -1
- package/dist/chunks/{messages-DnuhgHG0.mjs → messages-MxpWO1db.mjs} +68 -1
- package/dist/{messages-DT4rHATO2.mjs → chunks/messages-NEqrrYvE2.mjs} +68 -1
- package/dist/chunks/{messages-DeSSxLsh.mjs → messages-RInp1ytX.mjs} +68 -1
- package/dist/{messages-DfEPVRdJ.mjs → chunks/messages-TRUuyiFB.mjs} +68 -1
- package/dist/chunks/{messages--eH7tTJV2.mjs → messages-aZcy0JQq2.mjs} +68 -1
- package/dist/{messages-O6z1uabG.mjs → chunks/messages-iS34FHFB.mjs} +68 -1
- package/dist/{messages-BE0DjTEC.mjs → chunks/messages-ihCjSFJI2.mjs} +68 -1
- package/dist/chunks/{messages-_5Pg5fKy2.mjs → messages-jfVpL9c-2.mjs} +68 -1
- package/dist/chunks/{messages-CaRSYuhO.mjs → messages-p1mbe__S.mjs} +68 -1
- package/dist/chunks/{messages-BGssMBWM2.mjs → messages-rCd0Rrw6.mjs} +69 -2
- package/dist/{messages-COgvIEeW.mjs → chunks/messages-xuqyb6Ff2.mjs} +68 -1
- package/dist/chunks/micromark-extension-math-BbkUb36G.mjs +169 -0
- package/dist/chunks/micromark-factory-space-y4SDWQKm.mjs +36 -0
- package/dist/chunks/mindmap-definition-QFDTVHPH-hNnyBkEP.mjs +1013 -0
- package/dist/chunks/{notifier-Butv4Dvo.mjs → notifier-CuvTt9pe.mjs} +1 -1
- package/dist/chunks/objectWithoutProperties-D0XxKB4n.mjs +23 -0
- package/dist/chunks/one-light-DmNO_Y4X.mjs +4 -0
- package/dist/chunks/ordinal-B-kolV-i.mjs +65 -0
- package/dist/chunks/packet-4T2RLAQJ-B5ZMgwzZ.mjs +3 -0
- package/dist/chunks/path-rIMjg_tH.mjs +85 -0
- package/dist/chunks/php-DmXKyPwJ.mjs +18 -0
- package/dist/chunks/pie-ZZUOXDRM-B9l6y0XJ.mjs +3 -0
- package/dist/chunks/pieDiagram-DEJITSTG-Gw-fsc6U.mjs +179 -0
- package/dist/chunks/python-DfwfY9t5.mjs +3 -0
- package/dist/chunks/quadrantDiagram-34T5L4WZ-CQ5fGYI5.mjs +1960 -0
- package/dist/chunks/r-BD2D7qEW.mjs +5 -0
- package/dist/chunks/radar-PYXPWWZC-D5kYmUaB.mjs +3 -0
- package/dist/chunks/requirementDiagram-MS252O5E-DjWKB42c.mjs +2224 -0
- package/dist/chunks/rough.esm-cmMIcj7N.mjs +1353 -0
- package/dist/chunks/ruby-DdOo03Kg.mjs +33 -0
- package/dist/chunks/rust-DEDueB5R.mjs +3 -0
- package/dist/chunks/sankeyDiagram-XADWPNL6-BIN2evSB.mjs +909 -0
- package/dist/chunks/scala-CsjqvxE4.mjs +3 -0
- package/dist/chunks/sequenceDiagram-FGHM5R23-CQz2lMoS.mjs +4181 -0
- package/dist/chunks/shellscript-Bh5zEpnQ.mjs +3 -0
- package/dist/chunks/sql-D9CrOi1i.mjs +3 -0
- package/dist/chunks/src-DVJl6f6s.mjs +2149 -0
- package/dist/chunks/stateDiagram-FHFEXIEX-BIBFsF65.mjs +218 -0
- package/dist/chunks/stateDiagram-v2-QKLJ7IA2-BZUmAVw7.mjs +28 -0
- package/dist/chunks/swift-Dpyt0s2c.mjs +3 -0
- package/dist/chunks/timeline-definition-GMOUNBTQ-CzvQ7Lav.mjs +1084 -0
- package/dist/chunks/{tools-nT6zA9QL.mjs → tools-CrRhWn8L.mjs} +3043 -1303
- package/dist/chunks/treeView-SZITEDCU-BNtnNxpI.mjs +3 -0
- package/dist/chunks/treemap-W4RFUUIX-DYENULz2.mjs +3 -0
- package/dist/chunks/typescript-DO5cd4m8.mjs +5 -0
- package/dist/chunks/vennDiagram-DHZGUBPP-B0DmLQqe.mjs +1876 -0
- package/dist/chunks/vitesse-dark-CcorSKT2.mjs +4 -0
- package/dist/chunks/wardley-RL74JXVD-ByNHVBTb.mjs +3 -0
- package/dist/chunks/wardleyDiagram-NUSXRM2D-CzoKesUw.mjs +594 -0
- package/dist/chunks/xml-g8kXXALs.mjs +5 -0
- package/dist/chunks/xychartDiagram-5P7HB3ND-CixwR8r2.mjs +2017 -0
- package/dist/chunks/yaml-CrNNZyLb.mjs +3 -0
- package/dist/cli.mjs +1 -1
- package/dist/full.mjs +14 -14
- package/dist/locales.mjs +135 -68
- package/dist/markdown.mjs +3954 -0
- package/dist/{messages-D_CUdqU12.mjs → messages-5jvKxQNu2.mjs} +68 -1
- package/dist/{chunks/messages-CFfpHyTU.mjs → messages-7QD-X6XT2.mjs} +68 -1
- package/dist/{messages-CdX1odk_2.mjs → messages-96iaAUds2.mjs} +68 -1
- package/dist/{messages-C8ca-jEa.mjs → messages-B19o-Teb.mjs} +69 -2
- package/dist/{messages-I03yFhup.mjs → messages-B1ZUQagA.mjs} +68 -1
- package/dist/{chunks/messages-BSw88lIo2.mjs → messages-B7ieAJBd2.mjs} +68 -1
- package/dist/{messages-sNSXCkeB.mjs → messages-BECMxmfX.mjs} +68 -1
- package/dist/{messages-DgGZsxBB.mjs → messages-BIHc0KHY.mjs} +68 -1
- package/dist/{messages-yZj20Fvf.mjs → messages-BIoeoik5.mjs} +68 -1
- package/dist/{chunks/messages-D8JFu42v.mjs → messages-BJeGJksD.mjs} +68 -1
- package/dist/{messages-BSLErTnW2.mjs → messages-BRZX964b2.mjs} +68 -1
- package/dist/{chunks/messages-BW8arxf72.mjs → messages-BTQPpoM42.mjs} +68 -1
- package/dist/{messages-C52AiyVV.mjs → messages-BYNcD6uR.mjs} +68 -1
- package/dist/{messages-BxJv0qBn2.mjs → messages-BYmmMDrN2.mjs} +68 -1
- package/dist/{messages-CoCy2JIP.mjs → messages-BbYq1pk-.mjs} +68 -1
- package/dist/{messages-Cnz_SHE32.mjs → messages-BiUGXvYr2.mjs} +68 -1
- package/dist/{chunks/messages-Dl6SVT1Z.mjs → messages-BiiongNz2.mjs} +68 -1
- package/dist/{chunks/messages-C912bk5I.mjs → messages-Bm0Feca1.mjs} +69 -2
- package/dist/{chunks/messages-CTuCPqpJ.mjs → messages-BmAn22OX.mjs} +68 -1
- package/dist/{messages-DdiPWkV8.mjs → messages-Bq3F2Tp_.mjs} +68 -1
- package/dist/{chunks/messages-DJxXZi1D2.mjs → messages-BsycN_JI2.mjs} +68 -1
- package/dist/{chunks/messages-OdEuBvgf.mjs → messages-BwHs4cm1.mjs} +70 -3
- package/dist/{chunks/messages-C4ZAJzBh.mjs → messages-CJTy6JZt.mjs} +68 -1
- package/dist/{chunks/messages-D2OZ9dbO.mjs → messages-CR_L_UtK.mjs} +68 -1
- package/dist/{messages-ypuLZyw12.mjs → messages-CSUHBs4c2.mjs} +68 -1
- package/dist/{chunks/messages-BkES2MDr2.mjs → messages-CWIXvnDf2.mjs} +68 -1
- package/dist/{messages-Cpeko5kB.mjs → messages-CcF4y-E4.mjs} +68 -1
- package/dist/{messages-BmnC-s4X.mjs → messages-Ce6KVEbT.mjs} +68 -1
- package/dist/{messages-DTNfG4ZH.mjs → messages-Ci0KqX-J.mjs} +71 -4
- package/dist/{chunks/messages-CGh56r-H2.mjs → messages-CjbnogEC.mjs} +68 -1
- package/dist/{messages-B3jq5Hpa.mjs → messages-CmB406HW.mjs} +69 -2
- package/dist/{chunks/messages-BsZz1Hnn2.mjs → messages-CqXtJTpU.mjs} +68 -1
- package/dist/{messages-DL000FUf2.mjs → messages-D0aw5_0k2.mjs} +68 -1
- package/dist/{chunks/messages-Df2RYuup2.mjs → messages-D8FQWulF2.mjs} +68 -1
- package/dist/{messages-CxHn7cs2.mjs → messages-DBiVgUs2.mjs} +68 -1
- package/dist/{chunks/messages-Dsapm4K9.mjs → messages-DIJlIqlQ2.mjs} +68 -1
- package/dist/{chunks/messages-517llQmh.mjs → messages-DLX_iBDJ.mjs} +68 -1
- package/dist/{chunks/messages-BG8Nq35G.mjs → messages-DLlc9QPw.mjs} +68 -1
- package/dist/{messages-cokJPuUp2.mjs → messages-DMr62KiO2.mjs} +68 -1
- package/dist/{chunks/messages-Dkp-Eyu02.mjs → messages-DPA-mMWC2.mjs} +68 -1
- package/dist/{chunks/messages-7uCUVFea.mjs → messages-DTh9a8mR.mjs} +68 -1
- package/dist/{messages-VBFioL2M.mjs → messages-DY4IqlhY.mjs} +68 -1
- package/dist/{chunks/messages-C4X0xP3h.mjs → messages-DYTTu0O12.mjs} +68 -1
- package/dist/{messages-diSPQ2Da2.mjs → messages-DbySKTKt2.mjs} +69 -2
- package/dist/{chunks/messages-BGE43_6M.mjs → messages-Ddnj2iTG2.mjs} +68 -1
- package/dist/{chunks/messages-BtUqUzMG2.mjs → messages-DkLU_rWm.mjs} +68 -1
- package/dist/{messages-DSX2HaeN2.mjs → messages-Dl3Sv6Rq2.mjs} +68 -1
- package/dist/{chunks/messages-BDvpl6Ox.mjs → messages-Dl5Y2-Ia.mjs} +81 -14
- package/dist/{chunks/messages-C7plNvNE2.mjs → messages-DnG0ef8t2.mjs} +69 -2
- package/dist/{chunks/messages-qS8tM3Dk.mjs → messages-DnGJD4TL.mjs} +68 -1
- package/dist/{messages-Ct468oX22.mjs → messages-Dnp9N6RU2.mjs} +68 -1
- package/dist/{chunks/messages-CjIA--kO.mjs → messages-Dvn35ksS.mjs} +68 -1
- package/dist/{messages-BRxNqmJ8.mjs → messages-Dw__BcTj.mjs} +68 -1
- package/dist/{chunks/messages-0zhE8A9X.mjs → messages-Dy-Y_nEI.mjs} +68 -1
- package/dist/{chunks/messages-CCH4OETw2.mjs → messages-E_ZuzGDt.mjs} +68 -1
- package/dist/{chunks/messages-DZzoT0T_.mjs → messages-F2xRoY1w.mjs} +68 -1
- package/dist/{chunks/messages-zGdqNZbH.mjs → messages-Smt4GBbj.mjs} +73 -6
- package/dist/{messages-CvIxHHp92.mjs → messages-aMXpHt5X2.mjs} +68 -1
- package/dist/{messages-C8JVJUp12.mjs → messages-aWZH50vu2.mjs} +68 -1
- package/dist/{messages-Phrqr7a6.mjs → messages-dv19AkyJ.mjs} +68 -1
- package/dist/{chunks/messages-DngM4hda2.mjs → messages-hWwSRF-2.mjs} +68 -1
- package/dist/{messages-DpGo_Da5.mjs → messages-j7o5rT9s.mjs} +68 -1
- package/dist/{messages-C6WJx6Z0.mjs → messages-nUVjeh7K.mjs} +68 -1
- package/dist/{messages-CbVilNPE.mjs → messages-nlhESX9t.mjs} +68 -1
- package/dist/{messages-C6o0FVy02.mjs → messages-rk-A1Wa42.mjs} +69 -2
- package/dist/{messages-D4mCIODv.mjs → messages-xh2eOLvs.mjs} +68 -1
- package/dist/{chunks/messages-Ct9UUOrl2.mjs → messages-ynAe7ewZ.mjs} +68 -1
- package/dist/react.mjs +26 -25
- package/dist/tools.mjs +3 -3
- package/dist/vendor.LICENSE.txt +5404 -80
- package/package.json +16 -1
- package/src/components/blocks.ts +26 -1
- package/src/components/constants/data-attributes.ts +2 -2
- package/src/components/i18n/locales/am/messages.json +68 -1
- package/src/components/i18n/locales/ar/messages.json +68 -1
- package/src/components/i18n/locales/az/messages.json +68 -1
- package/src/components/i18n/locales/bg/messages.json +68 -1
- package/src/components/i18n/locales/bn/messages.json +68 -1
- package/src/components/i18n/locales/bs/messages.json +69 -2
- package/src/components/i18n/locales/cs/messages.json +70 -3
- package/src/components/i18n/locales/da/messages.json +71 -4
- package/src/components/i18n/locales/de/messages.json +73 -6
- package/src/components/i18n/locales/dv/messages.json +68 -1
- package/src/components/i18n/locales/el/messages.json +68 -1
- package/src/components/i18n/locales/en/messages.json +68 -1
- package/src/components/i18n/locales/es/messages.json +68 -1
- package/src/components/i18n/locales/et/messages.json +69 -2
- package/src/components/i18n/locales/fa/messages.json +68 -1
- package/src/components/i18n/locales/fi/messages.json +68 -1
- package/src/components/i18n/locales/fil/messages.json +81 -14
- package/src/components/i18n/locales/fr/messages.json +68 -1
- package/src/components/i18n/locales/gu/messages.json +68 -1
- package/src/components/i18n/locales/he/messages.json +68 -1
- package/src/components/i18n/locales/hi/messages.json +68 -1
- package/src/components/i18n/locales/hr/messages.json +69 -2
- package/src/components/i18n/locales/hu/messages.json +68 -1
- package/src/components/i18n/locales/hy/messages.json +68 -1
- package/src/components/i18n/locales/id/messages.json +68 -1
- package/src/components/i18n/locales/it/messages.json +68 -1
- package/src/components/i18n/locales/ja/messages.json +68 -1
- package/src/components/i18n/locales/ka/messages.json +68 -1
- package/src/components/i18n/locales/km/messages.json +68 -1
- package/src/components/i18n/locales/kn/messages.json +68 -1
- package/src/components/i18n/locales/ko/messages.json +68 -1
- package/src/components/i18n/locales/ku/messages.json +68 -1
- package/src/components/i18n/locales/lo/messages.json +68 -1
- package/src/components/i18n/locales/lt/messages.json +68 -1
- package/src/components/i18n/locales/lv/messages.json +68 -1
- package/src/components/i18n/locales/mk/messages.json +68 -1
- package/src/components/i18n/locales/ml/messages.json +68 -1
- package/src/components/i18n/locales/mn/messages.json +68 -1
- package/src/components/i18n/locales/mr/messages.json +68 -1
- package/src/components/i18n/locales/ms/messages.json +69 -2
- package/src/components/i18n/locales/my/messages.json +68 -1
- package/src/components/i18n/locales/ne/messages.json +68 -1
- package/src/components/i18n/locales/nl/messages.json +68 -1
- package/src/components/i18n/locales/no/messages.json +68 -1
- package/src/components/i18n/locales/pa/messages.json +68 -1
- package/src/components/i18n/locales/pl/messages.json +68 -1
- package/src/components/i18n/locales/ps/messages.json +68 -1
- package/src/components/i18n/locales/pt/messages.json +68 -1
- package/src/components/i18n/locales/ro/messages.json +68 -1
- package/src/components/i18n/locales/ru/messages.json +68 -1
- package/src/components/i18n/locales/sd/messages.json +68 -1
- package/src/components/i18n/locales/si/messages.json +68 -1
- package/src/components/i18n/locales/sk/messages.json +69 -2
- package/src/components/i18n/locales/sl/messages.json +69 -2
- package/src/components/i18n/locales/sq/messages.json +68 -1
- package/src/components/i18n/locales/sr/messages.json +68 -1
- package/src/components/i18n/locales/sv/messages.json +68 -1
- package/src/components/i18n/locales/sw/messages.json +68 -1
- package/src/components/i18n/locales/ta/messages.json +68 -1
- package/src/components/i18n/locales/te/messages.json +68 -1
- package/src/components/i18n/locales/th/messages.json +68 -1
- package/src/components/i18n/locales/tr/messages.json +68 -1
- package/src/components/i18n/locales/ug/messages.json +68 -1
- package/src/components/i18n/locales/uk/messages.json +68 -1
- package/src/components/i18n/locales/ur/messages.json +68 -1
- package/src/components/i18n/locales/vi/messages.json +68 -1
- package/src/components/i18n/locales/yi/messages.json +68 -1
- package/src/components/i18n/locales/zh/messages.json +68 -1
- package/src/components/icons/index.ts +78 -0
- package/src/components/inline-tools/inline-tool-code.ts +399 -0
- package/src/components/modules/api/blocks.ts +17 -0
- package/src/components/modules/api/ui.ts +0 -3
- package/src/components/modules/blockEvents/composers/blockSelectionKeys.ts +20 -3
- package/src/components/modules/paste/handlers/html-handler.ts +13 -10
- package/src/components/modules/paste/handlers/index.ts +1 -0
- package/src/components/modules/paste/index.ts +6 -0
- package/src/components/modules/renderer.ts +17 -0
- package/src/components/modules/ui.ts +1 -13
- package/src/components/ui/toolbox.ts +9 -0
- package/src/components/utils/caret/boundaries.ts +15 -4
- package/src/components/utils/popover/popover-desktop.ts +11 -0
- package/src/markdown/index.ts +63 -0
- package/src/markdown/markdown-handler.ts +110 -0
- package/src/markdown/mdast-to-blocks.ts +418 -0
- package/src/markdown/phrasing-to-html.ts +60 -0
- package/src/markdown/types.ts +42 -0
- package/src/stories/EditorModes.stories.ts +0 -60
- package/src/styles/main.css +57 -2
- package/src/tools/callout/constants.ts +2 -1
- package/src/tools/callout/emoji-picker/index.ts +41 -2
- package/src/tools/callout/index.ts +25 -0
- package/src/tools/code/code-keyboard.ts +142 -0
- package/src/tools/code/constants.ts +96 -0
- package/src/tools/code/dom-builder.ts +181 -0
- package/src/tools/code/highlight-applier.ts +229 -0
- package/src/tools/code/index.ts +462 -0
- package/src/tools/code/katex-loader.ts +50 -0
- package/src/tools/code/language-picker.ts +241 -0
- package/src/tools/code/mermaid-loader.ts +45 -0
- package/src/tools/code/shiki-loader.ts +135 -0
- package/src/tools/divider/index.ts +11 -2
- package/src/tools/header/index.ts +2 -0
- package/src/tools/index.ts +6 -0
- package/src/tools/list/block-operations.ts +3 -1
- package/src/tools/list/depth-validator.ts +4 -7
- package/src/tools/list/dom-builder.ts +5 -3
- package/src/tools/list/index.ts +21 -3
- package/src/tools/list/list-helpers.ts +9 -2
- package/src/tools/list/list-keyboard.ts +56 -14
- package/src/tools/list/list-lifecycle.ts +3 -1
- package/src/tools/list/marker-calculator.ts +37 -0
- package/src/tools/list/ordered-marker-manager.ts +4 -2
- package/src/tools/list/style-config.ts +3 -0
- package/src/tools/paragraph/index.ts +1 -0
- package/src/tools/quote/index.ts +229 -0
- package/src/tools/table/core/table-commands.ts +16 -0
- package/src/tools/table/core/table-controller.ts +29 -0
- package/src/tools/table/core/table-events.ts +17 -0
- package/src/tools/table/index.ts +220 -14
- package/src/tools/table/table-cell-blocks.ts +51 -6
- package/src/tools/table/table-cell-clipboard.ts +7 -2
- package/src/tools/table/table-cell-placement-picker.ts +133 -0
- package/src/tools/table/table-cell-selection.ts +174 -19
- package/src/tools/table/table-core.ts +321 -113
- package/src/tools/table/table-map.ts +279 -0
- package/src/tools/table/table-model.ts +901 -1
- package/src/tools/table/table-operations.ts +87 -44
- package/src/tools/table/table-resize.ts +19 -17
- package/src/tools/table/table-row-col-drag.ts +24 -10
- package/src/tools/table/types.ts +24 -2
- package/src/tools/toggle/index.ts +1 -0
- package/types/configs/blok-config.d.ts +7 -0
- package/types/data-attributes.d.ts +0 -1
- package/types/markdown.d.ts +2 -0
- package/types/tools/callout.d.ts +16 -0
- package/types/tools/code.d.ts +13 -0
- package/types/tools/quote.d.ts +13 -0
- package/types/tools/tool-settings.d.ts +7 -0
- package/types/tools-entry.d.ts +7 -0
- /package/dist/chunks/{am-CHDDMHkd.mjs → am-BxlkYGsI.mjs} +0 -0
- /package/dist/chunks/{ar-DoqfNqut.mjs → ar-9vlpr9V8.mjs} +0 -0
- /package/dist/chunks/{az-C34P9iEa.mjs → az-ON63W_FP.mjs} +0 -0
- /package/dist/chunks/{bg-jroXLY8Y.mjs → bg-CtXWTP5w.mjs} +0 -0
- /package/dist/chunks/{bn-BRI-WqxY.mjs → bn-BERvhXM4.mjs} +0 -0
- /package/dist/chunks/{bs-CCGUpNHu.mjs → bs-CBg8NVPG.mjs} +0 -0
- /package/dist/chunks/{cs-D5qZOGuc.mjs → cs-DeQddxS7.mjs} +0 -0
- /package/dist/chunks/{da-DrJ7W37K.mjs → da-DyTo-ec_.mjs} +0 -0
- /package/dist/chunks/{de-BW6-kp2c.mjs → de-Cu7545m1.mjs} +0 -0
- /package/dist/chunks/{el-C-Vc_Otu.mjs → el-oiubLRBq.mjs} +0 -0
- /package/dist/chunks/{es-B6fI5K9i.mjs → es-DZUC6Klv.mjs} +0 -0
- /package/dist/chunks/{et-BhVlZ-Yz.mjs → et-CDeklAog.mjs} +0 -0
- /package/dist/chunks/{fa-D55Ijdqa.mjs → fa-Cafp7_Li.mjs} +0 -0
- /package/dist/chunks/{fi-jNLjhKUQ.mjs → fi-BD_V_aVW.mjs} +0 -0
- /package/dist/chunks/{fil-DYd0T5aX.mjs → fil-Crsfbtx4.mjs} +0 -0
- /package/dist/chunks/{fr-yxy5xWw_.mjs → fr-BGGc04Zv.mjs} +0 -0
- /package/dist/chunks/{gu-CcY_LJe7.mjs → gu-Vg_BgCTp.mjs} +0 -0
- /package/dist/chunks/{he-DL9s7wNw.mjs → he-DTY9chlZ.mjs} +0 -0
- /package/dist/chunks/{hi-C8eGXgw5.mjs → hi-DChMXk0x.mjs} +0 -0
- /package/dist/chunks/{hr-DLpybOhU.mjs → hr-BWVgNU8k.mjs} +0 -0
- /package/dist/chunks/{hu-BkT0gT00.mjs → hu-B37awHXA.mjs} +0 -0
- /package/dist/chunks/{hy-CVFDCp2S.mjs → hy-DGC_GDHh.mjs} +0 -0
- /package/dist/chunks/{id-0P4W9Az0.mjs → id-V7cw6La2.mjs} +0 -0
- /package/dist/chunks/{it-mLY6_uoW.mjs → it-DrTGP8Rn.mjs} +0 -0
- /package/dist/chunks/{ja-7RkeRNWG.mjs → ja-DS4pbJEG.mjs} +0 -0
- /package/dist/chunks/{ka-C7Lx-Qsh.mjs → ka-BueyosRh.mjs} +0 -0
- /package/dist/chunks/{km-Q8udaraH.mjs → km-B0K891yW.mjs} +0 -0
- /package/dist/chunks/{kn-BiETM-iq.mjs → kn-BQ__skg8.mjs} +0 -0
- /package/dist/chunks/{ko-tiB80pF1.mjs → ko-BuPxi_7e.mjs} +0 -0
- /package/dist/chunks/{ku-CY-OABkR.mjs → ku-nQjwPRw2.mjs} +0 -0
- /package/dist/chunks/{lo-CTBhEnyk.mjs → lo-K5NVFoq1.mjs} +0 -0
- /package/dist/chunks/{lt-BHKHEtqK.mjs → lt-D3xD6Eb2.mjs} +0 -0
- /package/dist/chunks/{lv-DWxgtfUg.mjs → lv-DH13mzZj.mjs} +0 -0
- /package/dist/chunks/{mk-BjookGdx.mjs → mk-Bb48BcDA.mjs} +0 -0
- /package/dist/chunks/{ml-L-NnZcp9.mjs → ml-BHPEj1kD.mjs} +0 -0
- /package/dist/chunks/{mn-OMWi7Hl_.mjs → mn-BNGzpdI6.mjs} +0 -0
- /package/dist/chunks/{mr-B6JPzITo.mjs → mr-D5PgU-cH.mjs} +0 -0
- /package/dist/chunks/{ms-CG3S-sPB.mjs → ms-DPkxqKz5.mjs} +0 -0
- /package/dist/chunks/{my-BLAmGfhT.mjs → my-DZGcyfxy.mjs} +0 -0
- /package/dist/chunks/{native-BPcABu9z.mjs → native-D0cfLXsM.mjs} +0 -0
- /package/dist/chunks/{ne-D1JHLfYw.mjs → ne-BU_Wh4Wv.mjs} +0 -0
- /package/dist/chunks/{nl-Ca7Q8FnY.mjs → nl-DtAPk1mK.mjs} +0 -0
- /package/dist/chunks/{no-Coxcohcz.mjs → no-CdW3n3BY.mjs} +0 -0
- /package/dist/chunks/{objectSpread2-CyPxu8-u.mjs → objectSpread2-CWwMYL_U.mjs} +0 -0
- /package/dist/chunks/{pa-CCaXqpaI.mjs → pa-BacCHz87.mjs} +0 -0
- /package/dist/chunks/{pl-Cl_fAZ84.mjs → pl-8zBJbmhZ.mjs} +0 -0
- /package/dist/chunks/{ps-WD5qGAWy.mjs → ps-c6nGXD-W.mjs} +0 -0
- /package/dist/chunks/{pt-C4zvLfvq.mjs → pt-B5yR8Qhr.mjs} +0 -0
- /package/dist/chunks/{ro-DbefHcmM.mjs → ro-Nscylsqb.mjs} +0 -0
- /package/dist/chunks/{ru-uU1J14jd.mjs → ru-DxERQkVJ.mjs} +0 -0
- /package/dist/chunks/{sd-DKu368Ip.mjs → sd-5z-QY3q9.mjs} +0 -0
- /package/dist/chunks/{si-BsJCiPkZ.mjs → si-DTL0mzrx.mjs} +0 -0
- /package/dist/chunks/{sk-CD-a3SN6.mjs → sk-DrGczTvY.mjs} +0 -0
- /package/dist/chunks/{sl-CXhrPJe_.mjs → sl-D8nJjig4.mjs} +0 -0
- /package/dist/chunks/{sq-CTctCoFQ.mjs → sq-C74Hm3YL.mjs} +0 -0
- /package/dist/chunks/{sr-BZkhBwXj.mjs → sr-DAwB05Gj.mjs} +0 -0
- /package/dist/chunks/{sv-NmRZb_xi.mjs → sv-BkHBsN4y.mjs} +0 -0
- /package/dist/chunks/{sw-Be5ik3H6.mjs → sw-BBQLTq_z.mjs} +0 -0
- /package/dist/chunks/{ta-DsXh6neL.mjs → ta-DRRzdKky.mjs} +0 -0
- /package/dist/chunks/{te-CwpCbM8M.mjs → te-CedXLsKM.mjs} +0 -0
- /package/dist/chunks/{th-CcZ15OLk.mjs → th-DDOlGA0W.mjs} +0 -0
- /package/dist/chunks/{tr-q3bTgvhW.mjs → tr-ClgvwOlL.mjs} +0 -0
- /package/dist/chunks/{tw-DmW6-pCY.mjs → tw-CqxBf-1Y.mjs} +0 -0
- /package/dist/chunks/{ug-919EhLsL.mjs → ug-bXxwiinM.mjs} +0 -0
- /package/dist/chunks/{uk-aNMEzd0Y.mjs → uk-Dp46o_VT.mjs} +0 -0
- /package/dist/chunks/{ur-BwQI77sh.mjs → ur-MfEEhdFq.mjs} +0 -0
- /package/dist/chunks/{vi-Dxq806-F.mjs → vi-bt-3LPGO.mjs} +0 -0
- /package/dist/chunks/{zh-BcHuy1Ti.mjs → zh-Dgyb5Ly8.mjs} +0 -0
|
@@ -71,6 +71,8 @@
|
|
|
71
71
|
"tools.table.clearSelection": "清除",
|
|
72
72
|
"tools.table.copySelection": "复制",
|
|
73
73
|
"tools.table.cellColor": "颜色",
|
|
74
|
+
"tools.table.mergeCells": "合并单元格",
|
|
75
|
+
"tools.table.splitCell": "拆分单元格",
|
|
74
76
|
"tools.table.headerColumn": "标题列",
|
|
75
77
|
"tools.table.insertColumnLeft": "在左侧插入列",
|
|
76
78
|
"tools.table.insertColumnRight": "在右侧插入列",
|
|
@@ -88,6 +90,42 @@
|
|
|
88
90
|
"toolNames.strikethrough": "删除线",
|
|
89
91
|
"toolNames.callout": "标注",
|
|
90
92
|
"toolNames.divider": "分隔线",
|
|
93
|
+
"toolNames.quote": "引用",
|
|
94
|
+
"searchTerms.divider": "分割线",
|
|
95
|
+
"searchTerms.separator": "分隔符",
|
|
96
|
+
"searchTerms.delimiter": "定界符",
|
|
97
|
+
"searchTerms.splitter": "拆分线",
|
|
98
|
+
"searchTerms.paragraph": "段落",
|
|
99
|
+
"searchTerms.plain": "纯文本",
|
|
100
|
+
"searchTerms.title": "名称",
|
|
101
|
+
"searchTerms.header": "标头",
|
|
102
|
+
"searchTerms.heading": "标题",
|
|
103
|
+
"searchTerms.toggle": "折叠",
|
|
104
|
+
"searchTerms.collapsible": "可折叠",
|
|
105
|
+
"searchTerms.bullet": "项目符号",
|
|
106
|
+
"searchTerms.unordered": "无序",
|
|
107
|
+
"searchTerms.list": "列表",
|
|
108
|
+
"searchTerms.ordered": "有序",
|
|
109
|
+
"searchTerms.number": "编号",
|
|
110
|
+
"searchTerms.checkbox": "复选框",
|
|
111
|
+
"searchTerms.task": "任务",
|
|
112
|
+
"searchTerms.todo": "待办",
|
|
113
|
+
"searchTerms.check": "勾选",
|
|
114
|
+
"searchTerms.collapse": "收起",
|
|
115
|
+
"searchTerms.expand": "展开",
|
|
116
|
+
"searchTerms.accordion": "折叠面板",
|
|
117
|
+
"searchTerms.table": "表格",
|
|
118
|
+
"searchTerms.grid": "网格",
|
|
119
|
+
"searchTerms.spreadsheet": "电子表格",
|
|
120
|
+
"searchTerms.callout": "标注",
|
|
121
|
+
"searchTerms.note": "备注",
|
|
122
|
+
"searchTerms.info": "信息",
|
|
123
|
+
"searchTerms.warning": "警告",
|
|
124
|
+
"searchTerms.tip": "提示",
|
|
125
|
+
"searchTerms.alert": "提醒",
|
|
126
|
+
"searchTerms.quote": "引用",
|
|
127
|
+
"searchTerms.blockquote": "块引用",
|
|
128
|
+
"searchTerms.citation": "出处",
|
|
91
129
|
"tools.callout.placeholder": "标注",
|
|
92
130
|
"tools.callout.addEmoji": "添加表情",
|
|
93
131
|
"tools.callout.editIcon": "编辑图标",
|
|
@@ -116,5 +154,34 @@
|
|
|
116
154
|
"tools.callout.colorBlue": "蓝色",
|
|
117
155
|
"tools.callout.colorPurple": "紫色",
|
|
118
156
|
"tools.callout.colorPink": "粉色",
|
|
119
|
-
"tools.callout.colorRed": "红色"
|
|
157
|
+
"tools.callout.colorRed": "红色",
|
|
158
|
+
"tools.quote.size": "引用大小",
|
|
159
|
+
"tools.quote.placeholder": "引用",
|
|
160
|
+
"tools.quote.defaultSize": "默认",
|
|
161
|
+
"tools.quote.largeSize": "大",
|
|
162
|
+
"tools.code.codeTab": "代码",
|
|
163
|
+
"tools.code.previewTab": "预览",
|
|
164
|
+
"tools.table.placement": "位置",
|
|
165
|
+
"tools.table.placementTopLeft": "左上",
|
|
166
|
+
"tools.table.placementTopCenter": "居中上",
|
|
167
|
+
"tools.table.placementTopRight": "右上",
|
|
168
|
+
"tools.table.placementMiddleLeft": "左中",
|
|
169
|
+
"tools.table.placementMiddleCenter": "居中",
|
|
170
|
+
"tools.table.placementMiddleRight": "右中",
|
|
171
|
+
"tools.table.placementBottomLeft": "左下",
|
|
172
|
+
"tools.table.placementBottomCenter": "居中下",
|
|
173
|
+
"tools.table.placementBottomRight": "右下",
|
|
174
|
+
"toolNames.code": "代码",
|
|
175
|
+
"toolNames.inlineCode": "代码",
|
|
176
|
+
"tools.code.placeholder": "编写代码…",
|
|
177
|
+
"tools.code.language": "语言",
|
|
178
|
+
"tools.code.copied": "已复制!",
|
|
179
|
+
"tools.code.copyCode": "复制代码",
|
|
180
|
+
"tools.code.wrapLines": "自动换行",
|
|
181
|
+
"tools.code.searchLanguage": "搜索语言...",
|
|
182
|
+
"tools.code.lineNumbers": "行号",
|
|
183
|
+
"searchTerms.code": "代码",
|
|
184
|
+
"searchTerms.snippet": "片段",
|
|
185
|
+
"searchTerms.program": "程序",
|
|
186
|
+
"searchTerms.pre": "pre"
|
|
120
187
|
}
|
|
@@ -297,6 +297,14 @@ export const IconHeaderRow = `
|
|
|
297
297
|
</svg>
|
|
298
298
|
`;
|
|
299
299
|
|
|
300
|
+
// Preview/Eye icon
|
|
301
|
+
export const IconPreview = `
|
|
302
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
303
|
+
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/>
|
|
304
|
+
<circle cx="12" cy="12" r="3"/>
|
|
305
|
+
</svg>
|
|
306
|
+
`;
|
|
307
|
+
|
|
300
308
|
// Table with highlighted left column (header column)
|
|
301
309
|
export const IconHeaderColumn = `
|
|
302
310
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
@@ -433,6 +441,16 @@ export const IconHash = `
|
|
|
433
441
|
</svg>
|
|
434
442
|
`;
|
|
435
443
|
|
|
444
|
+
// Quote icon
|
|
445
|
+
export const IconQuote = `
|
|
446
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
447
|
+
<path d="M4 4v12" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
|
|
448
|
+
<path d="M9 6h7" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>
|
|
449
|
+
<path d="M9 10h7" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>
|
|
450
|
+
<path d="M9 14h5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>
|
|
451
|
+
</svg>
|
|
452
|
+
`;
|
|
453
|
+
|
|
436
454
|
export const IconCallout = `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><line x1="9" y1="10" x2="15" y2="10"/><line x1="12" y1="7" x2="12" y2="13"/></svg>`;
|
|
437
455
|
|
|
438
456
|
export const IconPaintRoller = `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
@@ -448,6 +466,39 @@ export const IconDivider = `
|
|
|
448
466
|
</svg>
|
|
449
467
|
`;
|
|
450
468
|
|
|
469
|
+
// Code inline icon (angle brackets: </>)
|
|
470
|
+
export const IconCode = `
|
|
471
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
472
|
+
<path d="m7 6-4 4 4 4m6-8 4 4-4 4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
473
|
+
</svg>
|
|
474
|
+
`;
|
|
475
|
+
|
|
476
|
+
// Code block icon (brackets with slash)
|
|
477
|
+
export const IconCodeBlock = `
|
|
478
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
479
|
+
<path d="m6 7-3 3 3 3m8-6 3 3-3 3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
480
|
+
<path d="m12 5-4 10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>
|
|
481
|
+
</svg>
|
|
482
|
+
`;
|
|
483
|
+
|
|
484
|
+
// Line wrap icon
|
|
485
|
+
export const IconWrap = `
|
|
486
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
487
|
+
<path d="M4 6h12M4 10h8a2 2 0 0 1 2 2v0a2 2 0 0 1-2 2H9m0 0 2-2m-2 2 2 2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
488
|
+
</svg>
|
|
489
|
+
`;
|
|
490
|
+
|
|
491
|
+
// Line numbers icon (gutter marks + code lines)
|
|
492
|
+
export const IconLineNumbers = `
|
|
493
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
494
|
+
<path d="M7 4v12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" opacity="0.35"/>
|
|
495
|
+
<circle cx="4.5" cy="7" r="0.75" fill="currentColor"/>
|
|
496
|
+
<circle cx="4.5" cy="10" r="0.75" fill="currentColor"/>
|
|
497
|
+
<circle cx="4.5" cy="13" r="0.75" fill="currentColor"/>
|
|
498
|
+
<path d="M10 7h6M10 10h6M10 13h4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"/>
|
|
499
|
+
</svg>
|
|
500
|
+
`;
|
|
501
|
+
|
|
451
502
|
// Emoji Picker Category Icons
|
|
452
503
|
|
|
453
504
|
// Star icon (Callout category)
|
|
@@ -537,3 +588,30 @@ export const IconEmojiFlag = `
|
|
|
537
588
|
<path d="M5 3c2 0 3 1.5 5 1.5S14 3 16 3v8c-2 0-3 1.5-5 1.5S7 11 5 11" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
538
589
|
</svg>
|
|
539
590
|
`;
|
|
591
|
+
|
|
592
|
+
// Merge cells icon (two cells merging into one)
|
|
593
|
+
export const IconMergeCells = `
|
|
594
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
595
|
+
<path d="M10 4v12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-dasharray="1.5 2"/>
|
|
596
|
+
<path d="M5.5 7 8.5 10 5.5 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
597
|
+
<path d="M14.5 7 11.5 10 14.5 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
|
598
|
+
</svg>
|
|
599
|
+
`;
|
|
600
|
+
|
|
601
|
+
// Split cell icon (one cell splitting into two)
|
|
602
|
+
export const IconSplitCell = `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M12 3v18"/><path d="M8 8l4 4-4 4"/><path d="M16 8l-4 4 4 4"/></svg>`;
|
|
603
|
+
|
|
604
|
+
// Placement icon (3x3 alignment dot grid)
|
|
605
|
+
export const IconPlacement = `
|
|
606
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
607
|
+
<circle cx="6" cy="6" r="1.25" fill="currentColor"/>
|
|
608
|
+
<circle cx="10" cy="6" r="1.25" fill="currentColor"/>
|
|
609
|
+
<circle cx="14" cy="6" r="1.25" fill="currentColor"/>
|
|
610
|
+
<circle cx="6" cy="10" r="1.25" fill="currentColor"/>
|
|
611
|
+
<circle cx="10" cy="10" r="1.25" fill="currentColor"/>
|
|
612
|
+
<circle cx="14" cy="10" r="1.25" fill="currentColor"/>
|
|
613
|
+
<circle cx="6" cy="14" r="1.25" fill="currentColor"/>
|
|
614
|
+
<circle cx="10" cy="14" r="1.25" fill="currentColor"/>
|
|
615
|
+
<circle cx="14" cy="14" r="1.25" fill="currentColor"/>
|
|
616
|
+
</svg>
|
|
617
|
+
`;
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import type { InlineTool, SanitizerConfig } from '../../../types';
|
|
2
|
+
import type { MenuConfig } from '../../../types/tools';
|
|
3
|
+
import { IconCode } from '../icons';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
isRangeFormatted,
|
|
7
|
+
findFormattingAncestor,
|
|
8
|
+
collectFormattingAncestors,
|
|
9
|
+
} from './utils/formatting-range-utils';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if an element is a code tag (<code>)
|
|
13
|
+
* @param element - The element to check
|
|
14
|
+
*/
|
|
15
|
+
const isCodeTag = (element: Element): boolean => {
|
|
16
|
+
return element.tagName === 'CODE';
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Code Inline Tool
|
|
21
|
+
*
|
|
22
|
+
* Inline Toolbar Tool
|
|
23
|
+
*
|
|
24
|
+
* Style selected text with inline code
|
|
25
|
+
*/
|
|
26
|
+
export class CodeInlineTool implements InlineTool {
|
|
27
|
+
/**
|
|
28
|
+
* Specifies Tool as Inline Toolbar Tool
|
|
29
|
+
* @returns {boolean}
|
|
30
|
+
*/
|
|
31
|
+
public static isInline = true;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Title for the Inline Tool
|
|
35
|
+
*/
|
|
36
|
+
public static title = 'Code';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Translation key for i18n
|
|
40
|
+
*/
|
|
41
|
+
public static titleKey = 'inlineCode';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Sanitizer Rule
|
|
45
|
+
* Leave <code> tags
|
|
46
|
+
* @returns {object}
|
|
47
|
+
*/
|
|
48
|
+
public static get sanitize(): SanitizerConfig {
|
|
49
|
+
return {
|
|
50
|
+
code: {},
|
|
51
|
+
} as SanitizerConfig;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create button for Inline Toolbar
|
|
56
|
+
*/
|
|
57
|
+
public render(): MenuConfig {
|
|
58
|
+
return {
|
|
59
|
+
icon: IconCode,
|
|
60
|
+
name: 'code',
|
|
61
|
+
onActivate: () => {
|
|
62
|
+
this.toggleCode();
|
|
63
|
+
},
|
|
64
|
+
isActive: () => {
|
|
65
|
+
const selection = window.getSelection();
|
|
66
|
+
|
|
67
|
+
return selection ? this.isSelectionVisuallyCode(selection) : false;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Shortcut for code tool
|
|
74
|
+
*/
|
|
75
|
+
public static shortcut = 'CMD+E';
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Apply or remove code formatting using modern Selection API
|
|
79
|
+
*/
|
|
80
|
+
private toggleCode(): void {
|
|
81
|
+
const selection = window.getSelection();
|
|
82
|
+
|
|
83
|
+
if (!selection || selection.rangeCount === 0) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const range = selection.getRangeAt(0);
|
|
88
|
+
|
|
89
|
+
if (range.collapsed) {
|
|
90
|
+
this.toggleCollapsedCode(range, selection);
|
|
91
|
+
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const shouldUnwrap = this.isRangeCode(range, { ignoreWhitespace: true });
|
|
96
|
+
|
|
97
|
+
if (shouldUnwrap) {
|
|
98
|
+
this.unwrapCodeTags(range);
|
|
99
|
+
} else {
|
|
100
|
+
this.wrapWithCode(range);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Handle toggle for collapsed selection (caret)
|
|
106
|
+
* @param range - Current range
|
|
107
|
+
* @param selection - Current selection
|
|
108
|
+
*/
|
|
109
|
+
private toggleCollapsedCode(range: Range, selection: Selection): void {
|
|
110
|
+
const isCode = this.isRangeCode(range, { ignoreWhitespace: true });
|
|
111
|
+
|
|
112
|
+
if (isCode) {
|
|
113
|
+
const textNode = document.createTextNode('\u200B');
|
|
114
|
+
|
|
115
|
+
range.insertNode(textNode);
|
|
116
|
+
range.selectNode(textNode);
|
|
117
|
+
this.unwrapCodeTags(range);
|
|
118
|
+
|
|
119
|
+
const newRange = document.createRange();
|
|
120
|
+
|
|
121
|
+
newRange.setStart(textNode, 1);
|
|
122
|
+
newRange.setEnd(textNode, 1);
|
|
123
|
+
|
|
124
|
+
selection.removeAllRanges();
|
|
125
|
+
selection.addRange(newRange);
|
|
126
|
+
} else {
|
|
127
|
+
const code = document.createElement('code');
|
|
128
|
+
const textNode = document.createTextNode('\u200B');
|
|
129
|
+
|
|
130
|
+
code.appendChild(textNode);
|
|
131
|
+
range.insertNode(code);
|
|
132
|
+
|
|
133
|
+
const newRange = document.createRange();
|
|
134
|
+
|
|
135
|
+
newRange.setStart(textNode, 1);
|
|
136
|
+
newRange.setEnd(textNode, 1);
|
|
137
|
+
|
|
138
|
+
selection.removeAllRanges();
|
|
139
|
+
selection.addRange(newRange);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Check if current selection is within a code tag
|
|
145
|
+
* @param selection - The Selection object to check
|
|
146
|
+
*/
|
|
147
|
+
private isSelectionVisuallyCode(selection: Selection): boolean {
|
|
148
|
+
if (selection.rangeCount === 0) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const range = selection.getRangeAt(0);
|
|
153
|
+
|
|
154
|
+
return this.isRangeCode(range, { ignoreWhitespace: true });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Check if a range contains code text
|
|
159
|
+
* @param range - The range to check
|
|
160
|
+
* @param options - Options for checking code status
|
|
161
|
+
*/
|
|
162
|
+
private isRangeCode(range: Range, options: { ignoreWhitespace: boolean }): boolean {
|
|
163
|
+
return isRangeFormatted(range, isCodeTag, options);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Wrap selection with <code> tag
|
|
168
|
+
* @param range - The Range object containing the selection to wrap
|
|
169
|
+
*/
|
|
170
|
+
private wrapWithCode(range: Range): void {
|
|
171
|
+
const html = this.getRangeHtmlWithoutCode(range);
|
|
172
|
+
const insertedRange = this.replaceRangeWithHtml(range, `<code>${html}</code>`);
|
|
173
|
+
const selection = window.getSelection();
|
|
174
|
+
|
|
175
|
+
if (selection && insertedRange) {
|
|
176
|
+
selection.removeAllRanges();
|
|
177
|
+
selection.addRange(insertedRange);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Remove code tags (<code>) while preserving content
|
|
183
|
+
* @param range - The Range object containing the selection to unwrap
|
|
184
|
+
*/
|
|
185
|
+
private unwrapCodeTags(range: Range): void {
|
|
186
|
+
const codeAncestors = this.collectCodeAncestors(range);
|
|
187
|
+
const selection = window.getSelection();
|
|
188
|
+
|
|
189
|
+
if (!selection) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const marker = document.createElement('span');
|
|
194
|
+
const fragment = range.extractContents();
|
|
195
|
+
|
|
196
|
+
marker.appendChild(fragment);
|
|
197
|
+
this.removeNestedCode(marker);
|
|
198
|
+
|
|
199
|
+
range.insertNode(marker);
|
|
200
|
+
|
|
201
|
+
const markerRange = document.createRange();
|
|
202
|
+
|
|
203
|
+
markerRange.selectNodeContents(marker);
|
|
204
|
+
selection.removeAllRanges();
|
|
205
|
+
selection.addRange(markerRange);
|
|
206
|
+
|
|
207
|
+
for (; ;) {
|
|
208
|
+
const currentCode = this.findCodeElement(marker);
|
|
209
|
+
|
|
210
|
+
if (!currentCode) {
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
this.moveMarkerOutOfCode(marker, currentCode);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const firstChild = marker.firstChild;
|
|
218
|
+
const lastChild = marker.lastChild;
|
|
219
|
+
|
|
220
|
+
this.unwrapElement(marker);
|
|
221
|
+
|
|
222
|
+
const finalRange = firstChild && lastChild ? (() => {
|
|
223
|
+
const newRange = document.createRange();
|
|
224
|
+
|
|
225
|
+
newRange.setStartBefore(firstChild);
|
|
226
|
+
newRange.setEndAfter(lastChild);
|
|
227
|
+
|
|
228
|
+
selection.removeAllRanges();
|
|
229
|
+
selection.addRange(newRange);
|
|
230
|
+
|
|
231
|
+
return newRange;
|
|
232
|
+
})() : undefined;
|
|
233
|
+
|
|
234
|
+
if (!finalRange) {
|
|
235
|
+
selection.removeAllRanges();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
codeAncestors.forEach((element) => {
|
|
239
|
+
if (element.textContent.length === 0) {
|
|
240
|
+
element.remove();
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Find a code element in the parent chain
|
|
247
|
+
* @param node - The node to start searching from
|
|
248
|
+
*/
|
|
249
|
+
private findCodeElement(node: Node | null): HTMLElement | null {
|
|
250
|
+
return findFormattingAncestor(node, isCodeTag);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Collect all code ancestor elements within a range
|
|
255
|
+
* @param range - The range to search for code ancestors
|
|
256
|
+
*/
|
|
257
|
+
private collectCodeAncestors(range: Range): HTMLElement[] {
|
|
258
|
+
return collectFormattingAncestors(range, isCodeTag);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Get HTML content of a range with code tags removed
|
|
263
|
+
* @param range - The range to extract HTML from
|
|
264
|
+
*/
|
|
265
|
+
private getRangeHtmlWithoutCode(range: Range): string {
|
|
266
|
+
const contents = range.cloneContents();
|
|
267
|
+
|
|
268
|
+
this.removeNestedCode(contents);
|
|
269
|
+
|
|
270
|
+
const container = document.createElement('div');
|
|
271
|
+
|
|
272
|
+
container.appendChild(contents);
|
|
273
|
+
|
|
274
|
+
return container.innerHTML;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Remove nested code tags from a root node
|
|
279
|
+
* @param root - The root node to process
|
|
280
|
+
*/
|
|
281
|
+
private removeNestedCode(root: ParentNode): void {
|
|
282
|
+
const codeNodes = root.querySelectorAll('code');
|
|
283
|
+
|
|
284
|
+
codeNodes.forEach((node) => {
|
|
285
|
+
this.unwrapElement(node);
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Unwrap an element by moving its children to the parent
|
|
291
|
+
* @param element - The element to unwrap
|
|
292
|
+
*/
|
|
293
|
+
private unwrapElement(element: Element): void {
|
|
294
|
+
const parent = element.parentNode;
|
|
295
|
+
|
|
296
|
+
if (!parent) {
|
|
297
|
+
element.remove();
|
|
298
|
+
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
while (element.firstChild) {
|
|
303
|
+
parent.insertBefore(element.firstChild, element);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
parent.removeChild(element);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Replace the current range contents with provided HTML snippet
|
|
311
|
+
* @param range - Range to replace
|
|
312
|
+
* @param html - HTML string to insert
|
|
313
|
+
*/
|
|
314
|
+
private replaceRangeWithHtml(range: Range, html: string): Range | undefined {
|
|
315
|
+
const fragment = this.createFragmentFromHtml(html);
|
|
316
|
+
const firstInserted = fragment.firstChild ?? null;
|
|
317
|
+
const lastInserted = fragment.lastChild ?? null;
|
|
318
|
+
|
|
319
|
+
range.deleteContents();
|
|
320
|
+
|
|
321
|
+
if (!firstInserted || !lastInserted) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
range.insertNode(fragment);
|
|
326
|
+
|
|
327
|
+
const newRange = document.createRange();
|
|
328
|
+
|
|
329
|
+
newRange.setStartBefore(firstInserted);
|
|
330
|
+
newRange.setEndAfter(lastInserted);
|
|
331
|
+
|
|
332
|
+
return newRange;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Convert an HTML snippet to a document fragment
|
|
337
|
+
* @param html - HTML string to convert
|
|
338
|
+
*/
|
|
339
|
+
private createFragmentFromHtml(html: string): DocumentFragment {
|
|
340
|
+
const template = document.createElement('template');
|
|
341
|
+
|
|
342
|
+
template.innerHTML = html;
|
|
343
|
+
|
|
344
|
+
return template.content;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Move a temporary marker element outside of a code ancestor while preserving content order
|
|
349
|
+
* @param marker - Marker element wrapping the selection contents
|
|
350
|
+
* @param codeElement - Code ancestor containing the marker
|
|
351
|
+
*/
|
|
352
|
+
private moveMarkerOutOfCode(marker: HTMLElement, codeElement: HTMLElement): void {
|
|
353
|
+
const parent = codeElement.parentNode;
|
|
354
|
+
|
|
355
|
+
if (!parent) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Remove empty text nodes to ensure accurate child count
|
|
360
|
+
Array.from(codeElement.childNodes).forEach((node) => {
|
|
361
|
+
if (node.nodeType === Node.TEXT_NODE && (node.textContent ?? '').length === 0) {
|
|
362
|
+
node.remove();
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
const isOnlyChild = codeElement.childNodes.length === 1 && codeElement.firstChild === marker;
|
|
367
|
+
|
|
368
|
+
if (isOnlyChild) {
|
|
369
|
+
codeElement.replaceWith(marker);
|
|
370
|
+
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
const isFirstChild = codeElement.firstChild === marker;
|
|
375
|
+
|
|
376
|
+
if (isFirstChild) {
|
|
377
|
+
parent.insertBefore(marker, codeElement);
|
|
378
|
+
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
const isLastChild = codeElement.lastChild === marker;
|
|
383
|
+
|
|
384
|
+
if (isLastChild) {
|
|
385
|
+
parent.insertBefore(marker, codeElement.nextSibling);
|
|
386
|
+
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const trailingClone = codeElement.cloneNode(false) as HTMLElement;
|
|
391
|
+
|
|
392
|
+
while (marker.nextSibling) {
|
|
393
|
+
trailingClone.appendChild(marker.nextSibling);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
parent.insertBefore(trailingClone, codeElement.nextSibling);
|
|
397
|
+
parent.insertBefore(marker, trailingClone);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { BlockToolData, OutputBlockData, OutputData, ToolConfig } from '../../../../types';
|
|
2
2
|
import type { BlockAPI as BlockAPIInterface, Blocks } from '../../../../types/api';
|
|
3
3
|
import type { BlockTuneData } from '../../../../types/block-tunes/block-tune-data';
|
|
4
|
+
import type { MarkdownImportConfig } from '../../../markdown/types';
|
|
4
5
|
import { isInsideTableCell, isRestrictedInTableCell } from '../../../tools/table/table-restrictions';
|
|
5
6
|
import { Module } from '../../__module';
|
|
6
7
|
import { Block } from '../../block';
|
|
@@ -245,6 +246,22 @@ export class BlocksAPI extends Module {
|
|
|
245
246
|
}
|
|
246
247
|
}
|
|
247
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Import Markdown string as blocks.
|
|
251
|
+
* Lazy-loads the markdown converter on first call.
|
|
252
|
+
* @param md - Markdown source string
|
|
253
|
+
* @param options - Optional configuration for tool mapping and extensions
|
|
254
|
+
*/
|
|
255
|
+
public async importMarkdown(md: string, options?: MarkdownImportConfig): Promise<OutputData> {
|
|
256
|
+
const { markdownToBlocks } = await import('../../../markdown/index');
|
|
257
|
+
const blocks = await markdownToBlocks(md, options);
|
|
258
|
+
const data: OutputData = { blocks };
|
|
259
|
+
|
|
260
|
+
await this.render(data);
|
|
261
|
+
|
|
262
|
+
return data;
|
|
263
|
+
}
|
|
264
|
+
|
|
248
265
|
/**
|
|
249
266
|
* Insert new Block and returns it's API
|
|
250
267
|
* @param {string} type — Tool name
|
|
@@ -32,19 +32,36 @@ export class BlockSelectionKeys extends BlockEventComposer {
|
|
|
32
32
|
*/
|
|
33
33
|
private canIndentSelectedListItems(): boolean {
|
|
34
34
|
const { BlockSelection, BlockManager } = this.Blok;
|
|
35
|
+
const selectedSet = new Set(BlockSelection.selectedBlocks);
|
|
35
36
|
|
|
36
37
|
for (const block of BlockSelection.selectedBlocks) {
|
|
37
38
|
const blockIndex = BlockManager.getBlockIndex(block);
|
|
38
39
|
|
|
39
|
-
if (blockIndex === undefined
|
|
40
|
+
if (blockIndex === undefined) {
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
const previousBlock =
|
|
44
|
+
const previousBlock = blockIndex > 0
|
|
45
|
+
? BlockManager.getBlockByIndex(blockIndex - 1)
|
|
46
|
+
: undefined;
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
const isFirstInGroup = !previousBlock || previousBlock.name !== LIST_TOOL_NAME;
|
|
49
|
+
|
|
50
|
+
// First-in-group items can nest one level; mid-list items can't exceed previous depth
|
|
51
|
+
if (isFirstInGroup && this.getListBlockDepth(block) >= 1) {
|
|
46
52
|
return false;
|
|
47
53
|
}
|
|
54
|
+
if (isFirstInGroup) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* If the predecessor is also selected, both will be indented together,
|
|
60
|
+
* so the relative depth difference is preserved — skip the check.
|
|
61
|
+
*/
|
|
62
|
+
if (selectedSet.has(previousBlock)) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
48
65
|
|
|
49
66
|
if (this.getListBlockDepth(block) > this.getListBlockDepth(previousBlock)) {
|
|
50
67
|
return false;
|