@jackuait/blok 0.19.1 → 0.20.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 +13 -13
- package/dist/blok.mjs +2 -2
- package/dist/blok.umd.js +30 -30
- package/dist/chunks/{APEv2Parser-WvRvu4zL.mjs → APEv2Parser-dFboX-HT.mjs} +5 -5
- package/dist/chunks/{AbstractID3Parser-DM9acVTg.mjs → AbstractID3Parser-qvoGRhB4.mjs} +5 -5
- package/dist/chunks/{AiffParser-C_VaWeb5.mjs → AiffParser-DVe3cNKY.mjs} +5 -5
- package/dist/chunks/{AsfParser-CH5F_9Wp.mjs → AsfParser-DrzvMHO9.mjs} +7 -7
- package/dist/chunks/{BasicParser-BFTgNkp-.mjs → BasicParser-BLAlEKys.mjs} +2 -2
- package/dist/chunks/{DsdiffParser-BAdYwB7y.mjs → DsdiffParser-uZBv6Bc_.mjs} +5 -5
- package/dist/chunks/{DsfParser-DWMLfBH1.mjs → DsfParser-DLra1i8X.mjs} +5 -5
- package/dist/chunks/{FlacParser-BdKXrY7L.mjs → FlacParser-DGd7sQuD.mjs} +6 -6
- package/dist/chunks/{ID3v1Parser-DoxlznrE.mjs → ID3v1Parser-CJMR_CT_.mjs} +3 -3
- package/dist/chunks/{ID3v2Parser-BIrxzjBm.mjs → ID3v2Parser-DIc0X1ee.mjs} +8 -8
- package/dist/chunks/{ID3v2Token-D5v9lCfb.mjs → ID3v2Token-BqnbpNYB.mjs} +3 -3
- package/dist/chunks/{MP4Parser-0KMJ-q2k.mjs → MP4Parser-BqrCfJyp.mjs} +6 -6
- package/dist/chunks/{MatroskaParser-fxFuCddu.mjs → MatroskaParser-CCbZmX7j.mjs} +5 -5
- package/dist/chunks/{MpegParser-R-6QiuhU.mjs → MpegParser-C-6l3Wrf.mjs} +6 -6
- package/dist/chunks/{MusepackParser-DFLoF47O.mjs → MusepackParser-C_PhW_BV.mjs} +5 -5
- package/dist/chunks/{OggParser-C1qP2qC7.mjs → OggParser-DJhcSH9h.mjs} +6 -6
- package/dist/chunks/{Util-DiBcLCh8.mjs → Util-B42SDwrM.mjs} +3 -3
- package/dist/chunks/{WavPackParser-Ck8xXsNf.mjs → WavPackParser-CuHju62S.mjs} +4 -4
- package/dist/chunks/{WaveParser-hxQlWijT.mjs → WaveParser-DvEqNnGt.mjs} +6 -6
- package/dist/chunks/{aiden0z-pptx-renderer.es-Y1OhS20L.mjs → aiden0z-pptx-renderer.es-Dfc1LJvS.mjs} +2 -2
- package/dist/chunks/{arc-Cu-PSKKo.mjs → arc-8pYAfiNC.mjs} +3 -3
- package/dist/chunks/architecture-7EHR7CIX-ByEay9F_.mjs +3 -0
- package/dist/chunks/{architectureDiagram-3BPJPVTR-BwW1QjqZ.mjs → architectureDiagram-3BPJPVTR-BiykAn02.mjs} +9 -9
- package/dist/chunks/{blockDiagram-GPEHLZMM-BAgQo64R.mjs → blockDiagram-GPEHLZMM-CozNEkEK.mjs} +13 -13
- package/dist/chunks/{blok-C52qeiPg.mjs → blok-C72PuzIT.mjs} +2514 -2109
- package/dist/chunks/{blok-gFn3FI95.cjs → blok-uBjibRae.cjs} +11 -11
- package/dist/chunks/{c4Diagram-AAUBKEIU-BQe-CDb8.mjs → c4Diagram-AAUBKEIU-DN5cpztO.mjs} +6 -6
- package/dist/chunks/channel-DCfRAw7p.mjs +5 -0
- package/dist/chunks/{chunk-2J33WTMH-CMyTQPbw.mjs → chunk-2J33WTMH-CHv7Whe1.mjs} +3 -3
- package/dist/chunks/{chunk-3OPIFGDE-_lgEHnzc.mjs → chunk-3OPIFGDE-BRLjwZDG.mjs} +8 -8
- package/dist/chunks/{chunk-4BX2VUAB-8PQvWn-w.mjs → chunk-4BX2VUAB-CrVP7ooQ.mjs} +2 -2
- package/dist/chunks/{chunk-4EGX6M5U-D4gnRnMD.mjs → chunk-4EGX6M5U-t1h05MXS.mjs} +2 -2
- package/dist/chunks/{chunk-55IACEB6-eQD6P1N8.mjs → chunk-55IACEB6-Cq7FTvxb.mjs} +2 -2
- package/dist/chunks/{chunk-5DO6E6H7-CN3lZIoE.mjs → chunk-5DO6E6H7-Z2pYCl69.mjs} +2 -2
- package/dist/chunks/{chunk-5ZQYHXKU-CPXVTQ_e.mjs → chunk-5ZQYHXKU-fs0GqOvF.mjs} +43 -43
- package/dist/chunks/{chunk-727SXJPM-DZUlPaIu.mjs → chunk-727SXJPM-BKsM41W3.mjs} +9 -9
- package/dist/chunks/{chunk-AQP2D5EJ-D7G094pS.mjs → chunk-AQP2D5EJ-YdXH_I-o.mjs} +7 -7
- package/dist/chunks/{chunk-BR22UD5L-B6NbSBJl.mjs → chunk-BR22UD5L-CqFDPfGM.mjs} +2 -2
- package/dist/chunks/{chunk-BSJP7CBP-C7FGlEZG.mjs → chunk-BSJP7CBP-DpGSyAQh.mjs} +2 -2
- package/dist/chunks/{chunk-CSCIHK7Q-C4qT3Yrk.mjs → chunk-CSCIHK7Q-BO7tl9ID.mjs} +4 -4
- package/dist/chunks/{chunk-FHYWG6QK-CgSYG-YQ.mjs → chunk-FHYWG6QK-5Het-98V.mjs} +2 -2
- package/dist/chunks/{chunk-FMBD7UC4-2p6fg26u.mjs → chunk-FMBD7UC4-P_kboMJT.mjs} +2 -2
- package/dist/chunks/{chunk-KSCS5N6A-BVWs3LbG.mjs → chunk-KSCS5N6A-CvZAQU-1.mjs} +11 -11
- package/dist/chunks/{chunk-L5ZTLDWV-BFEdycvM.mjs → chunk-L5ZTLDWV-DZEL0gsI.mjs} +4 -4
- package/dist/chunks/{chunk-LZXEDZCA-6drnUsNy.mjs → chunk-LZXEDZCA-CRJ7-DY6.mjs} +8 -8
- package/dist/chunks/{chunk-MPE355IW-DHYWughe.mjs → chunk-MPE355IW-DLg3CsBw.mjs} +2 -2
- package/dist/chunks/{chunk-MZUSXYTE-BmUr1KX3.mjs → chunk-MZUSXYTE-CvsgXeJO.mjs} +2 -2
- package/dist/chunks/{chunk-N66VUXT2-D_6jZ3Vo.mjs → chunk-N66VUXT2-DoC3ggTc.mjs} +2 -2
- package/dist/chunks/{chunk-ND2GUHAM-DooE8X6i.mjs → chunk-ND2GUHAM-BcJIrltI.mjs} +4 -4
- package/dist/chunks/{chunk-NNHCCRGN-rJnsUrWl.mjs → chunk-NNHCCRGN-CH81dTHf.mjs} +1 -1
- package/dist/chunks/{chunk-NZK2D7GU-JW_qgPqa.mjs → chunk-NZK2D7GU-BnVJr7kf.mjs} +3 -3
- package/dist/chunks/{chunk-O5CBEL6O-GY6nZ-N7.mjs → chunk-O5CBEL6O-BeYkA-8N.mjs} +16 -16
- package/dist/chunks/{chunk-PUPMXCY4-DCIdSRFi.mjs → chunk-PUPMXCY4-D3Ub4pDo.mjs} +2 -2
- package/dist/chunks/{chunk-QZHKN3VN-C3N0_vEC.mjs → chunk-QZHKN3VN-ChiFJWT0.mjs} +2 -2
- package/dist/chunks/{chunk-UIBZB4QT-pyTElNc2.mjs → chunk-UIBZB4QT-BwApNyrQ.mjs} +2 -2
- package/dist/chunks/{chunk-WCWK7LTN-ClqBpBku.mjs → chunk-WCWK7LTN-D4OBOUIK.mjs} +2 -2
- package/dist/chunks/{chunk-WU5MYG2G-DLQN-5vb.mjs → chunk-WU5MYG2G-wN4cJZ_G.mjs} +3 -3
- package/dist/chunks/{chunk-XPW4576I-IlnbQHaA.mjs → chunk-XPW4576I-yOZxg2iY.mjs} +2 -2
- package/dist/chunks/classDiagram-4FO5ZUOK-BgQLsKDL.mjs +29 -0
- package/dist/chunks/classDiagram-v2-Q7XG4LA2-DS7F_M1n.mjs +29 -0
- package/dist/chunks/constants-PI1xjAeG.cjs +606 -0
- package/dist/chunks/{constants-DzQOOvgv.mjs → constants-vvNFp6FG.mjs} +392 -267
- package/dist/chunks/{core-DdDpt2u7.mjs → core-CJGckLsY.mjs} +31 -31
- package/dist/chunks/{core-CqiEzfU3.mjs → core-DeCMWrgN.mjs} +4 -4
- package/dist/chunks/{cose-bilkent-S5V4N54A-BronfFB-.mjs → cose-bilkent-S5V4N54A-NIONAJnp.mjs} +3 -3
- package/dist/chunks/{cytoscape.esm-QxDq63HI.mjs → cytoscape.esm-fziZOrCG.mjs} +1 -1
- package/dist/chunks/{dagre-BM42HDAG-B4WVdKOZ.mjs → dagre-BM42HDAG-DcOrN3pc.mjs} +14 -14
- package/dist/chunks/{dagre-DzOGad9N.mjs → dagre-CILRucyd.mjs} +107 -107
- package/dist/chunks/default-DFm_GbQ-.mjs +4 -0
- package/dist/chunks/{defaultLocale-BJwYPC-h.mjs → defaultLocale-C2VD4mLA.mjs} +12 -12
- package/dist/chunks/{diagram-2AECGRRQ-C22ThgiO.mjs → diagram-2AECGRRQ-DDwBTlvz.mjs} +7 -7
- package/dist/chunks/{diagram-5GNKFQAL-COelHuJn.mjs → diagram-5GNKFQAL-1sbWUr5e.mjs} +8 -8
- package/dist/chunks/{diagram-KO2AKTUF-CjLVtM94.mjs → diagram-KO2AKTUF-DhTFFKgx.mjs} +7 -7
- package/dist/chunks/{diagram-LMA3HP47-DqkuYFi9.mjs → diagram-LMA3HP47-DRr_84ZZ.mjs} +7 -7
- package/dist/chunks/{diagram-OG6HWLK6-390_YOO-.mjs → diagram-OG6HWLK6-C_5eu9Kf.mjs} +32 -32
- package/dist/chunks/{dist-CCXeNeCQ.mjs → dist-DRqr67zQ.mjs} +2 -2
- package/dist/chunks/{docx-preview-ulpDsaxt.mjs → docx-preview-CQ4QUFrd.mjs} +2 -2
- package/dist/chunks/{erDiagram-TEJ5UH35-BH0f96Pn.mjs → erDiagram-TEJ5UH35-C3Ohfkqu.mjs} +14 -14
- package/dist/chunks/eventmodeling-FCH6USID-BqDo_Sav.mjs +3 -0
- package/dist/chunks/{flowDiagram-I6XJVG4X-kZaqJYK1.mjs → flowDiagram-I6XJVG4X-DyXB0QVM.mjs} +17 -17
- package/dist/chunks/{ganttDiagram-6RSMTGT7-C3uQIARG.mjs → ganttDiagram-6RSMTGT7-82Iyg78i.mjs} +27 -27
- package/dist/chunks/gitGraph-WXDBUCRP-D-utqQiN.mjs +3 -0
- package/dist/chunks/{gitGraphDiagram-PVQCEYII-DQSTvBjy.mjs → gitGraphDiagram-PVQCEYII-D9V6dxzm.mjs} +7 -7
- package/dist/chunks/{graphlib-B0ANG2M6.mjs → graphlib-RxhPMq8I.mjs} +135 -135
- package/dist/chunks/{i18next-gGTtSkQg.mjs → i18next-C2REZNw2.mjs} +1 -1
- package/dist/chunks/{i18next-loader-BBPMegxc.cjs → i18next-loader-DVakgVCy.cjs} +1 -1
- package/dist/chunks/{i18next-loader-K-ir8UKk.mjs → i18next-loader-Dh4fP9we.mjs} +2 -2
- package/dist/chunks/info-J43DQDTF-D72knbmq.mjs +3 -0
- package/dist/chunks/{infoDiagram-5YYISTIA-CGpT_mPZ.mjs → infoDiagram-5YYISTIA-BxEJ_ib3.mjs} +5 -5
- package/dist/chunks/{init-hkDiJKhJ.mjs → init-BR8veUec.mjs} +1 -1
- package/dist/chunks/{ishikawaDiagram-YF4QCWOH-Ch9fmsWb.mjs → ishikawaDiagram-YF4QCWOH-CXe2kJsO.mjs} +6 -6
- package/dist/chunks/{journeyDiagram-JHISSGLW-CWv40lgD.mjs → journeyDiagram-JHISSGLW-DBhSi7Qg.mjs} +6 -6
- package/dist/chunks/{jszip.min-DoBCcllU.mjs → jszip.min-BsbMNjJg.mjs} +1 -1
- package/dist/chunks/{kanban-definition-UN3LZRKU-DSbXvrBB.mjs → kanban-definition-UN3LZRKU-CE4yr6J6.mjs} +11 -11
- package/dist/chunks/{katex-BIACU78Y.mjs → katex-DxQaNCxg.mjs} +1 -1
- package/dist/chunks/{lightweight-i18n-LFW8S8u-.cjs → lightweight-i18n-BnIqQ5Cf.cjs} +1 -1
- package/dist/chunks/{lightweight-i18n-DJpMke7a.mjs → lightweight-i18n-Cj88c8gl.mjs} +15 -0
- package/dist/chunks/{line-DU9tI1Tb.mjs → line-CQUUULPd.mjs} +4 -4
- package/dist/chunks/{linear-CPgdjDZh.mjs → linear-CAfvVXJc.mjs} +23 -23
- package/dist/chunks/{mdast-util-math-BNabERqA.mjs → mdast-util-math-Cpp9XOMP.mjs} +3 -3
- package/dist/chunks/{mermaid-parser.core-CRFj5ZQJ.mjs → mermaid-parser.core-B92FGYsA.mjs} +22 -22
- package/dist/chunks/{mermaid.core-D_2I8mjo.mjs → mermaid.core-BA9GkGKf.mjs} +52 -52
- package/dist/{messages-BI5B9bxE.mjs → chunks/messages-0EAci1N0.mjs} +15 -0
- package/dist/chunks/{messages-BkgBVEiE.cjs → messages-1jzEPeW5.cjs} +1 -1
- package/dist/chunks/{messages-CATH_uz1.mjs → messages-4CqVAaCY.mjs} +16 -1
- package/dist/chunks/{messages-DFHNw6PQ.cjs → messages-4Qka94cm.cjs} +1 -1
- package/dist/chunks/{messages-CBbgEXuO.cjs → messages-7wDDggws.cjs} +1 -1
- package/dist/chunks/{messages-B7st3eF_.cjs → messages-9VzB9Djh.cjs} +1 -1
- package/dist/chunks/{messages-B_cHWyWC.cjs → messages-9bK437Rh.cjs} +1 -1
- package/dist/chunks/{messages-CZddldga.cjs → messages-AtTKtjsQ.cjs} +1 -1
- package/dist/{messages-BOWDzfkH.mjs → chunks/messages-B1inw201.mjs} +16 -1
- package/dist/chunks/{messages-B-u5B7tY.cjs → messages-B4ZVgIh5.cjs} +1 -1
- package/dist/chunks/{messages-CJFSq8Fl.cjs → messages-B5bSFRCa.cjs} +1 -1
- package/dist/chunks/{messages-BRTWvTAP.mjs → messages-B705gxqz.mjs} +16 -1
- package/dist/{messages-Dq_RdEny2.mjs → chunks/messages-B7F3tX4u.mjs} +16 -1
- package/dist/chunks/{messages-NJAjMFXd.cjs → messages-BDer7I67.cjs} +1 -1
- package/dist/chunks/{messages-BV22YIZ_.cjs → messages-BEEGgtPo.cjs} +1 -1
- package/dist/{messages-bN4Zmk2m.mjs → chunks/messages-BGlEWmsB.mjs} +16 -1
- package/dist/{messages-Ao2vCNAH2.mjs → chunks/messages-BJJsuZhy.mjs} +16 -1
- package/dist/chunks/{messages-DjrfovG0.cjs → messages-BJcc9h6p.cjs} +1 -1
- package/dist/chunks/{messages-Hfo6uCIC.cjs → messages-BL-E2Kw3.cjs} +1 -1
- package/dist/chunks/{messages-5339ApgH.mjs → messages-BLJGzntb.mjs} +16 -1
- package/dist/chunks/{messages-Au1UpgkX.cjs → messages-BLNieIb-.cjs} +1 -1
- package/dist/chunks/{messages-DQJcAz4s.cjs → messages-BRbGk1-Z.cjs} +1 -1
- package/dist/chunks/{messages-BwOUSDJR.mjs → messages-BUlZRNoO.mjs} +15 -0
- package/dist/{messages-BKGg4XYm2.mjs → chunks/messages-BWQF9y2r.mjs} +16 -1
- package/dist/chunks/{messages-UXS3zL9A2.cjs → messages-BWh9I5Jv2.cjs} +1 -1
- package/dist/chunks/{messages-B6dbtt1c.cjs → messages-BX86v7Ev.cjs} +1 -1
- package/dist/chunks/{messages-DIFwztFo.cjs → messages-BYpvkG9S.cjs} +1 -1
- package/dist/chunks/{messages-C8_r3iTR2.mjs → messages-Bdw_vAdq2.mjs} +16 -1
- package/dist/chunks/{messages-DIetNXTx.cjs → messages-BeQVEC9q.cjs} +1 -1
- package/dist/{messages-CusWGsl42.mjs → chunks/messages-BeTZTXZm.mjs} +16 -1
- package/dist/chunks/{messages-CmsAbu_A.cjs → messages-BhTlR4PP.cjs} +1 -1
- package/dist/{messages-B2YnZIU2.mjs → chunks/messages-BhnZTZbQ.mjs} +16 -1
- package/dist/{messages-BpwhHkFb2.mjs → chunks/messages-BqJdoBHm.mjs} +16 -1
- package/dist/chunks/{messages-zPUQsksJ.mjs → messages-BqPiH7QC.mjs} +16 -1
- package/dist/chunks/{messages-CjfEt9bg.cjs → messages-Br_qu_wR.cjs} +1 -1
- package/dist/chunks/{messages-DtaPHADA.cjs → messages-BscUmD6D.cjs} +1 -1
- package/dist/{messages-Cg6a88Bb2.mjs → chunks/messages-Btapuvxo.mjs} +16 -1
- package/dist/chunks/{messages-CEySIig9.cjs → messages-BwCw0TJ1.cjs} +1 -1
- package/dist/chunks/{messages-BO-L5oN9.mjs → messages-C3RDWmXV.mjs} +15 -0
- package/dist/chunks/{messages-CZJZ-au3.cjs → messages-C3SZsVB9.cjs} +1 -1
- package/dist/chunks/{messages-DQr7bXMD.mjs → messages-C65mLRVK.mjs} +16 -1
- package/dist/chunks/{messages-CT8djlV6.cjs → messages-C73dKqPT.cjs} +1 -1
- package/dist/chunks/{messages-DOqJ6ogK.cjs → messages-C8f4kUOB.cjs} +1 -1
- package/dist/chunks/{messages-CIBYzzFy.mjs → messages-C9vfrzKQ.mjs} +16 -1
- package/dist/{messages-Grhv5SE_.mjs → chunks/messages-CEbe34zh.mjs} +15 -0
- package/dist/chunks/{messages-CcsM8Q7g.cjs → messages-CHEpECGv.cjs} +1 -1
- package/dist/chunks/{messages-DEg5FAg1.cjs → messages-CHP0nYRn.cjs} +1 -1
- package/dist/chunks/{messages-CjCn5IsF.mjs → messages-CIbh-0oJ.mjs} +16 -1
- package/dist/chunks/{messages-BHCepNsI.cjs → messages-CJC94Hci.cjs} +1 -1
- package/dist/chunks/{messages-ByNR9m9W.cjs → messages-CMP5dbqQ.cjs} +1 -1
- package/dist/chunks/{messages-DpNmnBjK.cjs → messages-CMm8FeOL.cjs} +1 -1
- package/dist/chunks/{messages-Da8yFc7l.cjs → messages-CNMPtWiq.cjs} +1 -1
- package/dist/chunks/{messages-Xh-c7d4C.mjs → messages-CQUr4lBa.mjs} +16 -1
- package/dist/{messages-Cvq2EFPT2.mjs → chunks/messages-CUuOX1k3.mjs} +16 -1
- package/dist/chunks/{messages-BsTzdfZF.cjs → messages-CVerbLou.cjs} +1 -1
- package/dist/{messages-CGiVoFTi.mjs → chunks/messages-CWW9OwKO.mjs} +16 -1
- package/dist/{messages-Da1woCgt2.mjs → chunks/messages-CWqap54p.mjs} +16 -1
- package/dist/{messages-CEGqNXnP.mjs → chunks/messages-CXNQBFHp.mjs} +16 -1
- package/dist/chunks/{messages-DgF8OkNr.mjs → messages-CYDhuSF4.mjs} +16 -1
- package/dist/chunks/{messages-Bp0LdGKj.mjs → messages-CYy3Zd3F.mjs} +15 -0
- package/dist/chunks/{messages-DHv7knYB.mjs → messages-C_BM_XHo.mjs} +16 -1
- package/dist/chunks/{messages-IqNWRaNS.cjs → messages-CbKOqXT6.cjs} +1 -1
- package/dist/chunks/{messages-Bmq--WTx.mjs → messages-CbxXU_Um.mjs} +15 -0
- package/dist/chunks/{messages-CVrOxu3J.cjs → messages-CcO-3_4k.cjs} +1 -1
- package/dist/chunks/{messages-D41fO84y.cjs → messages-CcTkC677.cjs} +1 -1
- package/dist/chunks/{messages-Cy-2_lIA.cjs → messages-CdEZ98_p.cjs} +1 -1
- package/dist/{messages-KyJQtOkh2.mjs → chunks/messages-CeZ1lo-o.mjs} +16 -1
- package/dist/chunks/{messages-D7H9JUDr.cjs → messages-CgFAGUJX.cjs} +1 -1
- package/dist/chunks/{messages-Dwl878eS.mjs → messages-CprMp4Va.mjs} +16 -1
- package/dist/chunks/{messages-DuD4ut1b.mjs → messages-CtXDxPOq.mjs} +16 -1
- package/dist/chunks/{messages-B_d857cA.mjs → messages-Cutnm4AZ.mjs} +15 -0
- package/dist/chunks/{messages-cSBZ5qVe.mjs → messages-CwIC_sse.mjs} +16 -1
- package/dist/chunks/{messages-7LWW3BVh.mjs → messages-CwbTr9lL.mjs} +16 -1
- package/dist/chunks/{messages-ETJ7tQ9O.cjs → messages-CxIknrw4.cjs} +1 -1
- package/dist/chunks/{messages-DjZoCJ00.mjs → messages-D0Jj7Dtw.mjs} +15 -0
- package/dist/chunks/{messages-SozFksSf.cjs → messages-D0th-I9S.cjs} +1 -1
- package/dist/chunks/{messages-gh5G15J1.cjs → messages-D1XTyTJz.cjs} +1 -1
- package/dist/chunks/{messages-DNtAzacv.mjs → messages-D24EoKbO.mjs} +16 -1
- package/dist/{messages-BlvF3pot.mjs → chunks/messages-D2chjyLM.mjs} +16 -1
- package/dist/chunks/{messages-CqRtDVFO.cjs → messages-D6y13edn.cjs} +1 -1
- package/dist/chunks/{messages-EsX3eikv.cjs → messages-D86p1eQY.cjs} +1 -1
- package/dist/{messages-BwCgJUdq.mjs → chunks/messages-D8L_8amv.mjs} +16 -1
- package/dist/chunks/{messages-C2ptZOWh.cjs → messages-DC-yFRyF.cjs} +1 -1
- package/dist/chunks/{messages-D4u2PSQw.mjs → messages-DEPxxCNU.mjs} +16 -1
- package/dist/chunks/{messages-VeyvtTce.cjs → messages-DG9l5agQ.cjs} +1 -1
- package/dist/chunks/{messages-B6794_2J.cjs → messages-DIeUb2w-.cjs} +1 -1
- package/dist/chunks/{messages-COx3hDcP.cjs → messages-DJ-RX5EJ.cjs} +1 -1
- package/dist/chunks/{messages-Cvg_uTfy.mjs → messages-DJ7lbpBX.mjs} +16 -1
- package/dist/{messages-Cn3uvFq3.mjs → chunks/messages-DJH_kd46.mjs} +16 -1
- package/dist/chunks/{messages-CWFSMzug2.cjs → messages-DLYl6KdK2.cjs} +1 -1
- package/dist/chunks/{messages-3jkCmB_A.mjs → messages-DMcCkOtN.mjs} +16 -1
- package/dist/chunks/{messages-BdL8bmTL.mjs → messages-DQks74hq.mjs} +16 -1
- package/dist/{messages-UJx6PvCL.mjs → chunks/messages-DTiqggtG.mjs} +16 -1
- package/dist/chunks/{messages-typO_i_k.mjs → messages-DTsSYToI.mjs} +15 -0
- package/dist/{messages-CwvHO8gp2.mjs → chunks/messages-DU6TOz6v.mjs} +16 -1
- package/dist/chunks/{messages-DmjccFHq.cjs → messages-DUbZA-w_.cjs} +1 -1
- package/dist/chunks/{messages-DCwrXfck.cjs → messages-DVAU-8rH.cjs} +1 -1
- package/dist/chunks/{messages-Z4LYgfWc.cjs → messages-Df6vXDrY.cjs} +1 -1
- package/dist/chunks/{messages-9B1F-k48.cjs → messages-Dh79ToYM.cjs} +1 -1
- package/dist/chunks/{messages-CuMtymEs.cjs → messages-Dh9psewW.cjs} +1 -1
- package/dist/chunks/{messages-BjYhwRk7.cjs → messages-Dln2T0zJ.cjs} +1 -1
- package/dist/chunks/{messages-DT-JnTnw.cjs → messages-DoA0Ecoi.cjs} +1 -1
- package/dist/{messages-RXQKVFCJ.mjs → chunks/messages-Dre_MB7o.mjs} +16 -1
- package/dist/chunks/{messages-BveiGA2x.cjs → messages-Dv4oyF7T.cjs} +1 -1
- package/dist/chunks/{messages-CkosWGGH.mjs → messages-FMAQkmg4.mjs} +15 -0
- package/dist/{messages-CQzOV7VE2.mjs → chunks/messages-GownDU-J.mjs} +16 -1
- package/dist/chunks/{messages-CH9SBR-i.cjs → messages-JYea02IT.cjs} +1 -1
- package/dist/chunks/{messages-BXp_U3uS.cjs → messages-JyzorVPx.cjs} +1 -1
- package/dist/chunks/{messages-jEbEE90_.mjs → messages-L70TFQAY.mjs} +16 -1
- package/dist/chunks/{messages-C0swL9CY.mjs → messages-L8CslBBZ.mjs} +16 -1
- package/dist/chunks/{messages-CM8uUnPx.cjs → messages-LX9PuLsT.cjs} +1 -1
- package/dist/chunks/{messages-BUvlOqll.mjs → messages-NFUr7Sxk.mjs} +16 -1
- package/dist/chunks/{messages-CGdCpNZ62.cjs → messages-PpRvDwOa2.cjs} +1 -1
- package/dist/chunks/{messages-ZMG7qQ3D.mjs → messages-QQ5-ET8y.mjs} +16 -1
- package/dist/chunks/{messages-DiODNXET.mjs → messages-Stf6rn2I.mjs} +16 -1
- package/dist/chunks/{messages-D7sU-NqL.cjs → messages-T8hCmys7.cjs} +1 -1
- package/dist/{messages-lnxRz5rM.mjs → chunks/messages-TZtv60nI.mjs} +16 -1
- package/dist/chunks/{messages-CeLv1whu2.mjs → messages-V9bvFOFc2.mjs} +16 -1
- package/dist/chunks/{messages-tR0BdeVG.cjs → messages-Vp8CpYh3.cjs} +1 -1
- package/dist/chunks/{messages-DUWCkLYR.cjs → messages-XqCqLy0k.cjs} +1 -1
- package/dist/{messages-CcF4SO9W.mjs → chunks/messages-_1y6EX7X.mjs} +16 -1
- package/dist/chunks/{messages-CXk-iM-i.mjs → messages-aTZglEV9.mjs} +16 -1
- package/dist/chunks/{messages-BHdKd7pH.cjs → messages-cSHh8Zgv.cjs} +1 -1
- package/dist/{messages-P5B61L1J2.mjs → chunks/messages-e8gxPi7a.mjs} +16 -1
- package/dist/chunks/{messages-CI2W7P-j.mjs → messages-hiwlrrr-.mjs} +16 -1
- package/dist/{messages-CeqpzGl9.mjs → chunks/messages-icPZhZ81.mjs} +15 -0
- package/dist/{messages-4drvqPN8.mjs → chunks/messages-lbwOYFxS2.mjs} +16 -1
- package/dist/chunks/{messages-B6yMdb3B.cjs → messages-lvo-9Be0.cjs} +1 -1
- package/dist/chunks/{messages-B2iaIrIu.mjs → messages-rm6jXexA.mjs} +16 -1
- package/dist/chunks/{messages-Ciq5_PsP.cjs → messages-sTyGkmbu.cjs} +1 -1
- package/dist/{messages-CF5MeYEt2.mjs → chunks/messages-uBwK-Ze2.mjs} +16 -1
- package/dist/chunks/{messages-BaVZgTrw.cjs → messages-uOISsfmj.cjs} +1 -1
- package/dist/chunks/{messages-MPe9FjYe.mjs → messages-wq0vxJ3p.mjs} +16 -1
- package/dist/chunks/{messages-CQT8TtiF.cjs → messages-z2DzBRgO.cjs} +1 -1
- package/dist/chunks/{micromark-extension-math-CJDP6iIU.mjs → micromark-extension-math-COSLlhTC.mjs} +6 -6
- package/dist/chunks/{micromark-factory-space-C6wz33de.mjs → micromark-factory-space-CLWSfTEG.mjs} +2 -2
- package/dist/chunks/{mindmap-definition-RKZ34NQL-Bh7eb0sP.mjs → mindmap-definition-RKZ34NQL-Dklc3Py2.mjs} +16 -16
- package/dist/chunks/{native-RS5RJIVO.mjs → native-BE2uW7dn.mjs} +1 -1
- package/dist/chunks/{ordinal-FCgpEo3E.mjs → ordinal-Qrn6pSTz.mjs} +3 -3
- package/dist/chunks/packet-YPE3B663-BehYuyRA.mjs +3 -0
- package/dist/chunks/{path-CCKeP0zq.mjs → path-CMz47XM0.mjs} +3 -3
- package/dist/chunks/pie-LRSECV5Y-C85c3T2E.mjs +3 -0
- package/dist/chunks/{pieDiagram-4H26LBE5-Bn2IEjeH.mjs → pieDiagram-4H26LBE5-DgCAhu_N.mjs} +14 -14
- package/dist/chunks/{prism-bash-D4zr_u8t.mjs → prism-bash-C0O3w7uz.mjs} +1 -1
- package/dist/chunks/{prism-cpp-CrBJjuu5.mjs → prism-cpp-2GQhW27l.mjs} +1 -1
- package/dist/chunks/{prism-csharp-lrMxvYpL.mjs → prism-csharp-DL7dZG1j.mjs} +1 -1
- package/dist/chunks/{prism-css-VQTID_HR.mjs → prism-css-CNvzB07F.mjs} +1 -1
- package/dist/chunks/{prism-dart-Q-9Z_W9B.mjs → prism-dart-DfjFPoDv.mjs} +1 -1
- package/dist/chunks/{prism-docker-DWAQ3dDD.mjs → prism-docker-BYbfweTi.mjs} +1 -1
- package/dist/chunks/{prism-java-_m72Vn1f.mjs → prism-java-DVDstRX2.mjs} +1 -1
- package/dist/chunks/{prism-kotlin-BTT9anu1.mjs → prism-kotlin-B4yZP901.mjs} +1 -1
- package/dist/chunks/{prism-latex-CL8zDJwm.mjs → prism-latex-D6GsLRnS.mjs} +1 -1
- package/dist/chunks/{prism-lua-D6JJ7p-A.mjs → prism-lua-CJX1SQiz.mjs} +1 -1
- package/dist/chunks/{prism-markdown-D6D8BprH.mjs → prism-markdown-C4FwQHMu.mjs} +1 -1
- package/dist/chunks/{prism-markup-templating-DfRjv0mn.mjs → prism-markup-templating-CmFWyrMp.mjs} +1 -1
- package/dist/chunks/{prism-php-DffX-wRi.mjs → prism-php-D1En1wGd.mjs} +1 -1
- package/dist/chunks/{prism-r-CU9se1Na.mjs → prism-r-DmduEoWu.mjs} +1 -1
- package/dist/chunks/{prism-ruby-DuQ4syPd.mjs → prism-ruby-BX9M-ggZ.mjs} +1 -1
- package/dist/chunks/{prism-rust-DRurCx4W.mjs → prism-rust-CW_lhKyK.mjs} +1 -1
- package/dist/chunks/{prism-sql-Au3VVcw1.mjs → prism-sql-CsK4eHq9.mjs} +1 -1
- package/dist/chunks/{prism-typescript-BKj96rmj.mjs → prism-typescript-Ca1YH5jC.mjs} +1 -1
- package/dist/chunks/{prism-yaml-Bk31kvSd.mjs → prism-yaml-CA6Sp5jk.mjs} +1 -1
- package/dist/chunks/{purify.es-Cg3Sx1In.mjs → purify.es-W8MRy_-c.mjs} +1 -1
- package/dist/chunks/{quadrantDiagram-W4KKPZXB-CGpTgKv9.mjs → quadrantDiagram-W4KKPZXB-BwDXU7bs.mjs} +4 -4
- package/dist/chunks/radar-GUYGQ44K-DGjR4vAz.mjs +3 -0
- package/dist/chunks/{requirementDiagram-4Y6WPE33-CdEklBE5.mjs → requirementDiagram-4Y6WPE33-C8uQNZti.mjs} +13 -13
- package/dist/chunks/{rough.esm-D0yWqsMu.mjs → rough.esm-BMiXn97a.mjs} +1 -1
- package/dist/chunks/{sanitize-url-DzTIH3XF.mjs → sanitize-url-Pw_yecwg.mjs} +70 -70
- package/dist/chunks/{sankeyDiagram-5OEKKPKP-C7B8TYyO.mjs → sankeyDiagram-5OEKKPKP-BJwtjvLG.mjs} +18 -18
- package/dist/chunks/{sequenceDiagram-3UESZ5HK-Wb1gzfDh.mjs → sequenceDiagram-3UESZ5HK-BHEbMtdM.mjs} +8 -8
- package/dist/chunks/{src-BMRCbUmP.mjs → src-uHD1i8ix.mjs} +86 -86
- package/dist/chunks/{stateDiagram-AJRCARHV-B1UbFikz.mjs → stateDiagram-AJRCARHV-D2di7cb4.mjs} +17 -17
- package/dist/chunks/stateDiagram-v2-BHNVJYJU-uJvNkDGf.mjs +27 -0
- package/dist/chunks/{timeline-definition-PNZ67QCA-Dr0oEljt.mjs → timeline-definition-PNZ67QCA-CkldAvjX.mjs} +6 -6
- package/dist/chunks/tools-B6rEBe-4.cjs +208 -0
- package/dist/chunks/{tools-CelSzJoA.mjs → tools-BQo4iaMe.mjs} +2565 -2497
- package/dist/chunks/treeView-BLDUP644-DhLdRehp.mjs +3 -0
- package/dist/chunks/treemap-LRROVOQU-CgXHb4o7.mjs +3 -0
- package/dist/chunks/{types-gj36fzRQ.mjs → types-BdXoqAkw.mjs} +1 -1
- package/dist/chunks/{vennDiagram-CIIHVFJN-Bc4yalKA.mjs → vennDiagram-CIIHVFJN-BuYgzRtw.mjs} +7 -7
- package/dist/chunks/wardley-L42UT6IY-sN5mOUNm.mjs +3 -0
- package/dist/chunks/{wardleyDiagram-YWT4CUSO-Ce_btexJ.mjs → wardleyDiagram-YWT4CUSO-CN5Jfm2D.mjs} +7 -7
- package/dist/chunks/{webm-muxer-Doy8JtlV.mjs → webm-muxer-B4_guPR0.mjs} +1 -1
- package/dist/chunks/{xychartDiagram-2RQKCTM6-HhACbhVa.mjs → xychartDiagram-2RQKCTM6-DAcdK50J.mjs} +12 -12
- package/dist/full.cjs +1 -1
- package/dist/full.mjs +3 -3
- package/dist/locales.mjs +82 -67
- package/dist/markdown.mjs +2 -2
- package/dist/{chunks/messages-DDJkNbJy.mjs → messages--sHkn4PD.mjs} +16 -1
- package/dist/{chunks/messages-QCaF3d92.mjs → messages-4mxgsYKZ2.mjs} +16 -1
- package/dist/{messages-zOl6jpOa.mjs → messages-6fQMeTiI.mjs} +16 -1
- package/dist/{messages-BRLWpOnP.mjs → messages-B22G0fir.mjs} +16 -1
- package/dist/{chunks/messages-kqnzps-X.mjs → messages-B908tGhl.mjs} +16 -1
- package/dist/{messages-CDueJTe8.mjs → messages-BAUvKI0_.mjs} +16 -1
- package/dist/{chunks/messages-BpMWMH9_.mjs → messages-BAfMwQnT2.mjs} +16 -1
- package/dist/{messages-Bmu3rJwO.mjs → messages-BCk7o4Pz.mjs} +16 -1
- package/dist/{messages-D4dovFzY2.mjs → messages-BG2BE6Sg2.mjs} +16 -1
- package/dist/{messages-DR2JBU-H.mjs → messages-BGe6GS_j.mjs} +16 -1
- package/dist/{chunks/messages-CeIzWL_4.mjs → messages-BHLrVFmZ2.mjs} +16 -1
- package/dist/{chunks/messages-HJnG9r2l.mjs → messages-BJjffJIu.mjs} +16 -1
- package/dist/{messages-CUcUO5bC2.mjs → messages-BSGZSOH32.mjs} +16 -1
- package/dist/{messages-HVgCKIww2.mjs → messages-BT6TyDYQ2.mjs} +16 -1
- package/dist/{messages-jQsl7cga2.mjs → messages-BWZ0_zUi2.mjs} +16 -1
- package/dist/{chunks/messages-DDX6I6MX.mjs → messages-BWhJgyhl.mjs} +16 -1
- package/dist/{messages-CqZgsrVP2.mjs → messages-BXqLaS2g2.mjs} +16 -1
- package/dist/{messages-gTUy3xjb.mjs → messages-BZiuFv_O.mjs} +15 -0
- package/dist/{messages-DcQNeoPB.mjs → messages-Bb-XEtyl.mjs} +15 -0
- package/dist/{messages-C9Kq8259.mjs → messages-BkKAnFz_.mjs} +15 -0
- package/dist/{messages-BarhGl2S2.mjs → messages-BoLu5_Wp2.mjs} +16 -1
- package/dist/{chunks/messages-D-p-omWy.mjs → messages-BpqRzil6.mjs} +16 -1
- package/dist/{messages-C6R0bzW5.mjs → messages-C2E8rQjb.mjs} +15 -0
- package/dist/{messages-BIgvPd6I2.mjs → messages-C2JJxi5D2.mjs} +16 -1
- package/dist/{messages-jsrzDVZy2.mjs → messages-C4d1_z432.mjs} +16 -1
- package/dist/{messages-L4sYfXpM.mjs → messages-C5Igyij0.mjs} +16 -1
- package/dist/{messages-CAnOyxrm.mjs → messages-C8fscB2J.mjs} +16 -1
- package/dist/{chunks/messages-CX0tJpOb.mjs → messages-CD8CgT1F.mjs} +16 -1
- package/dist/{messages-BKG0QHVl.mjs → messages-CDxPk3xE.mjs} +15 -0
- package/dist/{messages-hGop1gbF.mjs → messages-CGXrIdHT.mjs} +15 -0
- package/dist/{chunks/messages-DuHFGMCJ.mjs → messages-CHfkCxGQ2.mjs} +16 -1
- package/dist/{messages-fAEKzdUq.mjs → messages-CMvNzksb.mjs} +16 -1
- package/dist/{chunks/messages-t26x8wxB.mjs → messages-CSIhcdDx2.mjs} +16 -1
- package/dist/{chunks/messages-D-QWtvWg.mjs → messages-CW5z5hSz.mjs} +16 -1
- package/dist/{chunks/messages-CUPup5e3.mjs → messages-CYvpDx4p2.mjs} +16 -1
- package/dist/{chunks/messages-Ca9zIrBo.mjs → messages-CcTlmrYs.mjs} +16 -1
- package/dist/{chunks/messages-B01D7aHY.mjs → messages-Ce8ShL0-.mjs} +16 -1
- package/dist/{chunks/messages-CbyVDo8y.mjs → messages-CgT32m3D.mjs} +15 -0
- package/dist/{chunks/messages-ypIHI9Fr.mjs → messages-CmCBnNtA2.mjs} +16 -1
- package/dist/{messages-DGAWjKQZ.mjs → messages-CneVTJSN.mjs} +16 -1
- package/dist/{messages-C5IE9mXm.mjs → messages-CpNerer8.mjs} +15 -0
- package/dist/{chunks/messages-D-s4_vnU.mjs → messages-Cs0L1gyv.mjs} +16 -1
- package/dist/{chunks/messages-BYCHzM7F.mjs → messages-CsGnp1wE2.mjs} +16 -1
- package/dist/{messages-BgPDPIkO.mjs → messages-CvbIxcr7.mjs} +16 -1
- package/dist/{messages-wmS6Z2m82.mjs → messages-Cx6oQfMR2.mjs} +16 -1
- package/dist/{messages-BvutXmgt.mjs → messages-DBESJOhQ.mjs} +16 -1
- package/dist/{chunks/messages-Cl_pM31G.mjs → messages-DGOBPnKC2.mjs} +16 -1
- package/dist/{messages-B13GEFFu.mjs → messages-DK2AwXAp.mjs} +16 -1
- package/dist/{messages-CUFac9Qe.mjs → messages-DMbnesQ9.mjs} +16 -1
- package/dist/{chunks/messages-Byn9-dhb2.mjs → messages-DOiSOenW.mjs} +16 -1
- package/dist/{messages-8__-vX3U.mjs → messages-DQqp_ANL.mjs} +16 -1
- package/dist/{chunks/messages-Ck1-ddbo.mjs → messages-DThG2jW-2.mjs} +16 -1
- package/dist/{chunks/messages-DQfi2DoY.mjs → messages-DXlB7Vpm.mjs} +16 -1
- package/dist/{messages-VIQ8vjvS.mjs → messages-De0NAxJt.mjs} +15 -0
- package/dist/{chunks/messages-Bb80Csl3.mjs → messages-Depz8d3Q.mjs} +15 -0
- package/dist/{messages-BQaiScU1.mjs → messages-Dfsw3a8v.mjs} +16 -1
- package/dist/{messages-D9qgYMU82.mjs → messages-Dhmmqob82.mjs} +16 -1
- package/dist/{messages-DbE-riR52.mjs → messages-DmNUAv0e2.mjs} +16 -1
- package/dist/{messages-Ch-SytN8.mjs → messages-DrQaJrDO.mjs} +16 -1
- package/dist/{chunks/messages-C3rGCBi_.mjs → messages-DsksuHtZ.mjs} +16 -1
- package/dist/{chunks/messages-m-A6ArIM.mjs → messages-DzOVTq3E2.mjs} +16 -1
- package/dist/{messages-CskLLTiG2.mjs → messages-Igpt5WIA2.mjs} +16 -1
- package/dist/{messages-yuNINyS1.mjs → messages-JhpGtjjS.mjs} +16 -1
- package/dist/{chunks/messages-BbZz_Anm.mjs → messages-WCy1wiGS2.mjs} +16 -1
- package/dist/{chunks/messages-CRUb9o5k.mjs → messages-XbA-jXKc.mjs} +15 -0
- package/dist/{chunks/messages-BeS9EOEO.mjs → messages-imHGm9SI2.mjs} +16 -1
- package/dist/{messages-BQhHthxq2.mjs → messages-yTNyxXRV2.mjs} +16 -1
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/tools.cjs +1 -1
- package/dist/tools.mjs +2 -2
- package/package.json +3 -3
- package/src/components/i18n/locales/am/messages.json +16 -1
- package/src/components/i18n/locales/ar/messages.json +16 -1
- package/src/components/i18n/locales/az/messages.json +16 -1
- package/src/components/i18n/locales/bg/messages.json +16 -1
- package/src/components/i18n/locales/bn/messages.json +16 -1
- package/src/components/i18n/locales/bs/messages.json +16 -1
- package/src/components/i18n/locales/cs/messages.json +16 -1
- package/src/components/i18n/locales/da/messages.json +16 -1
- package/src/components/i18n/locales/de/messages.json +16 -1
- package/src/components/i18n/locales/dv/messages.json +16 -1
- package/src/components/i18n/locales/el/messages.json +16 -1
- package/src/components/i18n/locales/en/messages.json +15 -0
- package/src/components/i18n/locales/es/messages.json +15 -0
- package/src/components/i18n/locales/et/messages.json +15 -0
- package/src/components/i18n/locales/fa/messages.json +15 -0
- package/src/components/i18n/locales/fi/messages.json +15 -0
- package/src/components/i18n/locales/fil/messages.json +15 -0
- package/src/components/i18n/locales/fr/messages.json +15 -0
- package/src/components/i18n/locales/gu/messages.json +15 -0
- package/src/components/i18n/locales/he/messages.json +15 -0
- package/src/components/i18n/locales/hi/messages.json +15 -0
- package/src/components/i18n/locales/hr/messages.json +15 -0
- package/src/components/i18n/locales/hu/messages.json +15 -0
- package/src/components/i18n/locales/hy/messages.json +16 -1
- package/src/components/i18n/locales/id/messages.json +16 -1
- package/src/components/i18n/locales/it/messages.json +16 -1
- package/src/components/i18n/locales/ja/messages.json +16 -1
- package/src/components/i18n/locales/ka/messages.json +16 -1
- package/src/components/i18n/locales/km/messages.json +16 -1
- package/src/components/i18n/locales/kn/messages.json +16 -1
- package/src/components/i18n/locales/ko/messages.json +16 -1
- package/src/components/i18n/locales/ku/messages.json +16 -1
- package/src/components/i18n/locales/lo/messages.json +16 -1
- package/src/components/i18n/locales/lt/messages.json +16 -1
- package/src/components/i18n/locales/lv/messages.json +16 -1
- package/src/components/i18n/locales/mk/messages.json +16 -1
- package/src/components/i18n/locales/ml/messages.json +16 -1
- package/src/components/i18n/locales/mn/messages.json +16 -1
- package/src/components/i18n/locales/mr/messages.json +16 -1
- package/src/components/i18n/locales/ms/messages.json +16 -1
- package/src/components/i18n/locales/my/messages.json +16 -1
- package/src/components/i18n/locales/ne/messages.json +16 -1
- package/src/components/i18n/locales/nl/messages.json +16 -1
- package/src/components/i18n/locales/no/messages.json +16 -1
- package/src/components/i18n/locales/pa/messages.json +16 -1
- package/src/components/i18n/locales/pl/messages.json +16 -1
- package/src/components/i18n/locales/ps/messages.json +16 -1
- package/src/components/i18n/locales/pt/messages.json +16 -1
- package/src/components/i18n/locales/ro/messages.json +16 -1
- package/src/components/i18n/locales/ru/messages.json +16 -1
- package/src/components/i18n/locales/sd/messages.json +16 -1
- package/src/components/i18n/locales/si/messages.json +16 -1
- package/src/components/i18n/locales/sk/messages.json +16 -1
- package/src/components/i18n/locales/sl/messages.json +16 -1
- package/src/components/i18n/locales/sq/messages.json +16 -1
- package/src/components/i18n/locales/sr/messages.json +16 -1
- package/src/components/i18n/locales/sv/messages.json +16 -1
- package/src/components/i18n/locales/sw/messages.json +16 -1
- package/src/components/i18n/locales/ta/messages.json +16 -1
- package/src/components/i18n/locales/te/messages.json +16 -1
- package/src/components/i18n/locales/th/messages.json +16 -1
- package/src/components/i18n/locales/tr/messages.json +16 -1
- package/src/components/i18n/locales/ug/messages.json +16 -1
- package/src/components/i18n/locales/uk/messages.json +16 -1
- package/src/components/i18n/locales/ur/messages.json +16 -1
- package/src/components/i18n/locales/vi/messages.json +16 -1
- package/src/components/i18n/locales/yi/messages.json +16 -1
- package/src/components/i18n/locales/zh/messages.json +16 -1
- package/src/components/modules/api/blocks.ts +1 -1
- package/src/components/modules/blockManager/blockManager.ts +2 -2
- package/src/components/modules/paste/index.ts +31 -2
- package/src/components/modules/paste/notion-blocks-v3.ts +654 -0
- package/src/components/modules/paste/notion-preprocessor.ts +67 -0
- package/src/components/modules/yjs/serializer.ts +1 -1
- package/src/components/utils/data-model-transform.ts +15 -15
- package/src/components/utils/media-empty-state.ts +48 -5
- package/src/components/utils/popover/popover-desktop.ts +6 -3
- package/src/components/utils/tooltip.ts +5 -38
- package/src/markdown/markdown-handler.ts +1 -2
- package/src/styles/audio.css +348 -36
- package/src/styles/tables.css +10 -0
- package/src/tools/audio/constants.ts +6 -0
- package/src/tools/audio/controls.ts +53 -7
- package/src/tools/audio/cover-picker.ts +126 -0
- package/src/tools/audio/disc.ts +137 -0
- package/src/tools/audio/index.ts +114 -6
- package/src/tools/audio/liveliness.ts +26 -8
- package/src/tools/audio/ui.ts +39 -4
- package/types/api/tooltip.d.ts +40 -1
- package/types/data-formats/output-data.d.ts +5 -2
- package/types/index.d.ts +1 -4
- package/types/tools/database.d.ts +1 -1
- package/types/tools/header.d.ts +2 -1
- package/types/tools/list.d.ts +2 -1
- package/types/utils/popover/popover.d.ts +42 -1
- package/dist/chunks/architecture-7EHR7CIX-CGYZJshv.mjs +0 -3
- package/dist/chunks/channel-dq5ps1Yn.mjs +0 -5
- package/dist/chunks/classDiagram-4FO5ZUOK-C3CxSQxy.mjs +0 -29
- package/dist/chunks/classDiagram-v2-Q7XG4LA2-Ci_JeHz0.mjs +0 -29
- package/dist/chunks/constants-DmKwEMyC.cjs +0 -606
- package/dist/chunks/default-qigT1Xpq.mjs +0 -4
- package/dist/chunks/eventmodeling-FCH6USID-nCBtSITo.mjs +0 -3
- package/dist/chunks/gitGraph-WXDBUCRP-CN_MBj94.mjs +0 -3
- package/dist/chunks/info-J43DQDTF-xmJNmT0e.mjs +0 -3
- package/dist/chunks/packet-YPE3B663-3bNcBJRE.mjs +0 -3
- package/dist/chunks/pie-LRSECV5Y-YTwc-ZG1.mjs +0 -3
- package/dist/chunks/radar-GUYGQ44K-vfGwdTFY.mjs +0 -3
- package/dist/chunks/stateDiagram-v2-BHNVJYJU-D6E4HlFi.mjs +0 -27
- package/dist/chunks/tools-BcF1rHBg.cjs +0 -208
- package/dist/chunks/treeView-BLDUP644-BptrPFA0.mjs +0 -3
- package/dist/chunks/treemap-LRROVOQU-BbiNBKy3.mjs +0 -3
- package/dist/chunks/wardley-L42UT6IY-Ck6iMjTG.mjs +0 -3
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Notion's proprietary lossless clipboard flavor
|
|
3
|
+
* `text/_notion-blocks-v3-production`.
|
|
4
|
+
*
|
|
5
|
+
* When you copy blocks in Notion's web app, the clipboard carries — alongside
|
|
6
|
+
* `text/plain` and `text/html` — a JSON "record-map" under this MIME type that
|
|
7
|
+
* preserves EVERY block's state (checked, language, collapsed, icon, colour,
|
|
8
|
+
* nesting…). The HTML flavour cannot carry that state, so this JSON is the
|
|
9
|
+
* high-fidelity migration source for Notion-web → Blok-web paste.
|
|
10
|
+
*
|
|
11
|
+
* IMPORTANT: this is Notion's INTERNAL record-map, NOT the public REST API.
|
|
12
|
+
* Type names are internal (`text`, `header`, `sub_header`, `sub_sub_header`,
|
|
13
|
+
* `to_do`, `bulleted_list`…), rich-text is nested flag-arrays (NOT
|
|
14
|
+
* `annotations:{bold:true}`), and `checked` is `[["Yes"|"No"]]` (NOT boolean).
|
|
15
|
+
* See docs/plans/2026-06-22-notion-paste-migration-design.md §0.1.
|
|
16
|
+
*
|
|
17
|
+
* The output is a flat array of {@link NotionParsedBlock} (the same
|
|
18
|
+
* `{ id, tool, data, parentId }` shape the Blok clipboard handler consumes),
|
|
19
|
+
* which the two-pass `BlokDataHandler.insertBlokBlocks` builder turns into a
|
|
20
|
+
* correctly-nested block tree.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { colorVarName } from '../../shared/color-presets';
|
|
24
|
+
import { DEFAULT_EMOJI } from '../../../tools/callout/constants';
|
|
25
|
+
import { DEFAULT_LANGUAGE, LANGUAGES } from '../../../tools/code/constants';
|
|
26
|
+
import { matchEmbedService } from '../../../tools/link/registry';
|
|
27
|
+
|
|
28
|
+
/** MIME flavour that carries Notion's lossless block record-map. */
|
|
29
|
+
export const NOTION_BLOCKS_V3_MIME = 'text/_notion-blocks-v3-production';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* A single Blok-ready block produced from the Notion record-map.
|
|
33
|
+
* Shape-compatible with the clipboard handler's `BlokClipboardBlock`.
|
|
34
|
+
*/
|
|
35
|
+
export interface NotionParsedBlock {
|
|
36
|
+
id: string;
|
|
37
|
+
tool: string;
|
|
38
|
+
data: Record<string, unknown>;
|
|
39
|
+
parentId?: string | null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** A Notion record-map block `value` (loosely typed — fields are optional). */
|
|
43
|
+
interface NotionValue {
|
|
44
|
+
id: string;
|
|
45
|
+
type: string;
|
|
46
|
+
content?: string[];
|
|
47
|
+
properties?: Record<string, unknown>;
|
|
48
|
+
format?: Record<string, unknown>;
|
|
49
|
+
[key: string]: unknown;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Result of mapping one Notion value: tool + data, or `null` to skip-promote. */
|
|
53
|
+
interface Mapped {
|
|
54
|
+
tool: string;
|
|
55
|
+
data: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Parse the `text/_notion-blocks-v3-production` clipboard payload into a flat
|
|
60
|
+
* array of Blok-ready blocks. Returns `null` when the payload is not valid
|
|
61
|
+
* JSON or does not look like the Notion record-map (so callers can fall back
|
|
62
|
+
* to the HTML path).
|
|
63
|
+
*/
|
|
64
|
+
export function parseNotionBlocksV3(json: string): NotionParsedBlock[] | null {
|
|
65
|
+
const parsed = safeJsonParse(json);
|
|
66
|
+
|
|
67
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const blocks = (parsed as { blocks?: unknown }).blocks;
|
|
72
|
+
|
|
73
|
+
if (!Array.isArray(blocks)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Merge every subtree's block map into one id → value lookup, and remember
|
|
78
|
+
// the top-level (selected) order from the `blocks` array.
|
|
79
|
+
const byId = new Map<string, NotionValue>();
|
|
80
|
+
|
|
81
|
+
blocks.forEach((entry) => {
|
|
82
|
+
const map = (entry as { blockSubtree?: { block?: Record<string, { value?: NotionValue }> } })
|
|
83
|
+
?.blockSubtree?.block;
|
|
84
|
+
|
|
85
|
+
if (map === undefined || map === null) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
Object.keys(map).forEach((id) => {
|
|
90
|
+
const value = map[id]?.value;
|
|
91
|
+
|
|
92
|
+
if (value !== undefined && value !== null && typeof value === 'object') {
|
|
93
|
+
byId.set(id, value);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Require record-map structure: at least one resolvable block value.
|
|
99
|
+
if (byId.size === 0) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const topLevelOrder = blocks
|
|
104
|
+
.map((entry) => (entry as { blockId?: string })?.blockId)
|
|
105
|
+
.filter((id): id is string => typeof id === 'string' && byId.has(id));
|
|
106
|
+
|
|
107
|
+
const result: NotionParsedBlock[] = [];
|
|
108
|
+
const visited = new Set<string>();
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Depth-first emit in document order. `parentId` is the id of the nearest
|
|
112
|
+
* EMITTED ancestor (null at the top), so skip-promoted wrappers (page/tab)
|
|
113
|
+
* lift their children to the grandparent without leaving a dangling parent.
|
|
114
|
+
*/
|
|
115
|
+
const walk = (id: string, parentId: string | null): void => {
|
|
116
|
+
if (visited.has(id)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const value = byId.get(id);
|
|
121
|
+
|
|
122
|
+
if (value === undefined) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
visited.add(id);
|
|
127
|
+
|
|
128
|
+
// Tables expand into a grid block plus one paragraph block per cell, and
|
|
129
|
+
// consume their `table_row` children — handle them before the leaf mapping.
|
|
130
|
+
if (value.type === 'table') {
|
|
131
|
+
expandTable(value, parentId, byId, visited, result);
|
|
132
|
+
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const mapped = mapValue(value, byId);
|
|
137
|
+
const children = Array.isArray(value.content) ? value.content : [];
|
|
138
|
+
|
|
139
|
+
if (mapped === null) {
|
|
140
|
+
// Structural wrapper (page / tab): drop it, promote its children.
|
|
141
|
+
children.forEach((childId) => walk(childId, parentId));
|
|
142
|
+
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const block: NotionParsedBlock = { id, tool: mapped.tool, data: mapped.data };
|
|
147
|
+
|
|
148
|
+
if (parentId !== null) {
|
|
149
|
+
block.parentId = parentId;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
result.push(block);
|
|
153
|
+
|
|
154
|
+
children.forEach((childId) => walk(childId, id));
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
topLevelOrder.forEach((id) => walk(id, null));
|
|
158
|
+
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Expand a Notion `table` into a Blok table block (a grid of cell references)
|
|
164
|
+
* plus one paragraph block per cell — Blok stores cell content as child blocks
|
|
165
|
+
* referenced by id, not inline. The owning `table_row` children are marked
|
|
166
|
+
* visited so the walker never emits them separately.
|
|
167
|
+
*/
|
|
168
|
+
function expandTable(
|
|
169
|
+
table: NotionValue,
|
|
170
|
+
parentId: string | null,
|
|
171
|
+
byId: Map<string, NotionValue>,
|
|
172
|
+
visited: Set<string>,
|
|
173
|
+
result: NotionParsedBlock[]
|
|
174
|
+
): void {
|
|
175
|
+
const tableId = table.id;
|
|
176
|
+
const format = table.format ?? {};
|
|
177
|
+
const rowIds = (Array.isArray(table.content) ? table.content : []).filter(
|
|
178
|
+
(rowId): rowId is string => typeof rowId === 'string'
|
|
179
|
+
);
|
|
180
|
+
const columnOrder = resolveColumnOrder(format.table_block_column_order, rowIds, byId);
|
|
181
|
+
const cells: NotionParsedBlock[] = [];
|
|
182
|
+
const content: { blocks: string[] }[][] = rowIds.map((rowId) => {
|
|
183
|
+
visited.add(rowId);
|
|
184
|
+
|
|
185
|
+
const rowProperties = byId.get(rowId)?.properties ?? {};
|
|
186
|
+
|
|
187
|
+
return columnOrder.map((columnId) => {
|
|
188
|
+
const cellId = `${rowId}:${columnId}`;
|
|
189
|
+
|
|
190
|
+
cells.push({ id: cellId, tool: 'paragraph', data: { text: richText(rowProperties[columnId], byId) }, parentId: tableId });
|
|
191
|
+
|
|
192
|
+
return { blocks: [cellId] };
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
const tableBlock: NotionParsedBlock = {
|
|
197
|
+
id: tableId,
|
|
198
|
+
tool: 'table',
|
|
199
|
+
data: {
|
|
200
|
+
withHeadings: format.table_block_row_header === true,
|
|
201
|
+
withHeadingColumn: format.table_block_column_header === true,
|
|
202
|
+
content,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
if (parentId !== null) {
|
|
207
|
+
tableBlock.parentId = parentId;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
result.push(tableBlock);
|
|
211
|
+
cells.forEach((cell) => result.push(cell));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The column id order for a table: the explicit `table_block_column_order`, or
|
|
216
|
+
* (when absent) the property keys of the first populated row.
|
|
217
|
+
*/
|
|
218
|
+
function resolveColumnOrder(
|
|
219
|
+
order: unknown,
|
|
220
|
+
rowIds: string[],
|
|
221
|
+
byId: Map<string, NotionValue>
|
|
222
|
+
): string[] {
|
|
223
|
+
if (Array.isArray(order) && order.length > 0) {
|
|
224
|
+
return order.filter((columnId): columnId is string => typeof columnId === 'string');
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
for (const rowId of rowIds) {
|
|
228
|
+
const properties = byId.get(rowId)?.properties;
|
|
229
|
+
const keys = properties === undefined || properties === null ? [] : Object.keys(properties);
|
|
230
|
+
|
|
231
|
+
if (keys.length > 0) {
|
|
232
|
+
return keys;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Map one Notion block value to a Blok tool + data, or `null` for structural
|
|
241
|
+
* wrappers that should be dropped while their children are promoted.
|
|
242
|
+
*/
|
|
243
|
+
function mapValue(value: NotionValue, byId: Map<string, NotionValue>): Mapped | null {
|
|
244
|
+
const props = value.properties ?? {};
|
|
245
|
+
const text = richText(props.title, byId);
|
|
246
|
+
|
|
247
|
+
switch (value.type) {
|
|
248
|
+
case 'text':
|
|
249
|
+
return { tool: 'paragraph', data: { text } };
|
|
250
|
+
case 'header':
|
|
251
|
+
return { tool: 'header', data: { text, level: 1 } };
|
|
252
|
+
case 'sub_header':
|
|
253
|
+
return { tool: 'header', data: { text, level: 2 } };
|
|
254
|
+
case 'sub_sub_header':
|
|
255
|
+
return { tool: 'header', data: { text, level: 3 } };
|
|
256
|
+
case 'quote':
|
|
257
|
+
return { tool: 'quote', data: { text } };
|
|
258
|
+
case 'divider':
|
|
259
|
+
return { tool: 'divider', data: {} };
|
|
260
|
+
case 'code':
|
|
261
|
+
return {
|
|
262
|
+
tool: 'code',
|
|
263
|
+
data: { code: plainText(props.title), language: mapLanguage(props.language), lineNumbers: false },
|
|
264
|
+
};
|
|
265
|
+
case 'to_do':
|
|
266
|
+
return { tool: 'list', data: { text, style: 'checklist', checked: isChecked(props.checked) } };
|
|
267
|
+
case 'bulleted_list':
|
|
268
|
+
return { tool: 'list', data: { text, style: 'unordered' } };
|
|
269
|
+
case 'numbered_list':
|
|
270
|
+
return { tool: 'list', data: { text, style: 'ordered' } };
|
|
271
|
+
case 'toggle':
|
|
272
|
+
return { tool: 'toggle', data: { text, isOpen: true } };
|
|
273
|
+
case 'column_list':
|
|
274
|
+
return { tool: 'column_list', data: {} };
|
|
275
|
+
case 'column': {
|
|
276
|
+
const ratio = value.format?.column_ratio;
|
|
277
|
+
|
|
278
|
+
return { tool: 'column', data: typeof ratio === 'number' && ratio !== 1 ? { widthRatio: ratio } : {} };
|
|
279
|
+
}
|
|
280
|
+
case 'table_row':
|
|
281
|
+
// Consumed by `expandTable`; a stray row should never surface as a block.
|
|
282
|
+
return null;
|
|
283
|
+
case 'equation':
|
|
284
|
+
return { tool: 'code', data: { code: plainText(props.title), language: 'latex', lineNumbers: false } };
|
|
285
|
+
case 'bookmark':
|
|
286
|
+
return mapBookmark(props, value.format ?? {}, text);
|
|
287
|
+
case 'image':
|
|
288
|
+
return mapMediaFile('image', props, value.format ?? {}, text);
|
|
289
|
+
case 'file':
|
|
290
|
+
return mapMediaFile('file', props, value.format ?? {}, text);
|
|
291
|
+
case 'video':
|
|
292
|
+
return mapVideo(props, value.format ?? {}, text);
|
|
293
|
+
case 'drive':
|
|
294
|
+
return mapDrive(props, value.format ?? {}, text);
|
|
295
|
+
case 'callout': {
|
|
296
|
+
const format = value.format ?? {};
|
|
297
|
+
const emoji = typeof format.page_icon === 'string' && format.page_icon.length > 0 ? format.page_icon : DEFAULT_EMOJI;
|
|
298
|
+
const { textColor, backgroundColor } = parseBlockColor(format.block_color);
|
|
299
|
+
|
|
300
|
+
return { tool: 'callout', data: { emoji, text, textColor, backgroundColor } };
|
|
301
|
+
}
|
|
302
|
+
case 'page':
|
|
303
|
+
case 'tab':
|
|
304
|
+
// Document/tab wrappers — skip, promote children. (Sub-page references
|
|
305
|
+
// are handled in a later phase.)
|
|
306
|
+
return null;
|
|
307
|
+
default:
|
|
308
|
+
// Unmapped types (media, columns, tables, equation…) fall back to a
|
|
309
|
+
// paragraph for now; later phases give each its own mapping.
|
|
310
|
+
return { tool: 'paragraph', data: { text } };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/** Parse JSON, returning `null` instead of throwing on malformed input. */
|
|
315
|
+
function safeJsonParse(json: string): unknown {
|
|
316
|
+
try {
|
|
317
|
+
return JSON.parse(json);
|
|
318
|
+
} catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** Map a Notion bookmark to the Blok bookmark tool (or a text fallback). */
|
|
324
|
+
function mapBookmark(
|
|
325
|
+
props: Record<string, unknown>,
|
|
326
|
+
format: Record<string, unknown>,
|
|
327
|
+
text: string
|
|
328
|
+
): Mapped {
|
|
329
|
+
const url = firstHttpUrl(props.link);
|
|
330
|
+
|
|
331
|
+
if (url === null) {
|
|
332
|
+
return { tool: 'paragraph', data: { text } };
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
const data: Record<string, unknown> = { url };
|
|
336
|
+
const bookmarkTitle = plainText(props.title);
|
|
337
|
+
const description = plainText(props.description);
|
|
338
|
+
|
|
339
|
+
if (bookmarkTitle.length > 0) {
|
|
340
|
+
data.title = bookmarkTitle;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (description.length > 0) {
|
|
344
|
+
data.description = description;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (typeof format.bookmark_cover === 'string') {
|
|
348
|
+
data.image = format.bookmark_cover;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (typeof format.bookmark_icon === 'string') {
|
|
352
|
+
data.favicon = format.bookmark_icon;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
return { tool: 'bookmark', data };
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Map a Notion image/file to the Blok image/file tool when it has a usable
|
|
360
|
+
* http(s) URL. Notion-uploaded media uses `attachment:` refs that require auth
|
|
361
|
+
* and carry no loadable URL, so those fall back to a filename paragraph.
|
|
362
|
+
*/
|
|
363
|
+
function mapMediaFile(
|
|
364
|
+
tool: 'image' | 'file',
|
|
365
|
+
props: Record<string, unknown>,
|
|
366
|
+
format: Record<string, unknown>,
|
|
367
|
+
text: string
|
|
368
|
+
): Mapped {
|
|
369
|
+
const url = firstHttpUrl(props.source, format.display_source);
|
|
370
|
+
|
|
371
|
+
if (url === null) {
|
|
372
|
+
return { tool: 'paragraph', data: { text } };
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (tool === 'image') {
|
|
376
|
+
return { tool: 'image', data: { url } };
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const data: Record<string, unknown> = { url };
|
|
380
|
+
const fileName = plainText(props.title);
|
|
381
|
+
|
|
382
|
+
if (fileName.length > 0) {
|
|
383
|
+
data.fileName = fileName;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return { tool: 'file', data };
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** Map a Notion video to an embed (provider match) or a direct video block. */
|
|
390
|
+
function mapVideo(props: Record<string, unknown>, format: Record<string, unknown>, text: string): Mapped {
|
|
391
|
+
const url = firstHttpUrl(props.source, format.display_source);
|
|
392
|
+
|
|
393
|
+
if (url === null) {
|
|
394
|
+
return { tool: 'paragraph', data: { text } };
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const embed = resolveEmbed(url);
|
|
398
|
+
|
|
399
|
+
return embed ?? { tool: 'video', data: { url } };
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/** Map a Notion drive embed to an embed (provider match) or a bookmark. */
|
|
403
|
+
function mapDrive(props: Record<string, unknown>, format: Record<string, unknown>, text: string): Mapped {
|
|
404
|
+
const url = firstHttpUrl(props.source, format.display_source);
|
|
405
|
+
|
|
406
|
+
if (url === null) {
|
|
407
|
+
return { tool: 'paragraph', data: { text } };
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return resolveEmbed(url) ?? { tool: 'bookmark', data: { url } };
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/** Resolve a URL against the embed registry into Blok embed data, or `null`. */
|
|
414
|
+
function resolveEmbed(url: string): Mapped | null {
|
|
415
|
+
const match = matchEmbedService(url);
|
|
416
|
+
|
|
417
|
+
if (match === null) {
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return { tool: 'embed', data: { service: match.service, source: url, embed: match.embedUrl, kind: match.kind } };
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/** First candidate that resolves to an http(s) URL (string or rich-text array). */
|
|
425
|
+
function firstHttpUrl(...candidates: unknown[]): string | null {
|
|
426
|
+
for (const candidate of candidates) {
|
|
427
|
+
const raw = typeof candidate === 'string' ? candidate : plainText(candidate);
|
|
428
|
+
const trimmed = raw.trim();
|
|
429
|
+
|
|
430
|
+
if (/^https?:\/\//i.test(trimmed)) {
|
|
431
|
+
return trimmed;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/** Whether a Notion `checked` property (`[["Yes"|"No"]]`) is checked. */
|
|
439
|
+
function isChecked(checked: unknown): boolean {
|
|
440
|
+
return Array.isArray(checked) && Array.isArray(checked[0]) && checked[0][0] === 'Yes';
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/** Pre-built lower-cased display-name → language-id lookup for code blocks. */
|
|
444
|
+
const LANGUAGE_BY_NAME = new Map(LANGUAGES.map((l) => [l.name.toLowerCase(), l.id]));
|
|
445
|
+
|
|
446
|
+
/** Map a Notion `language` property (`[["JavaScript"]]`) to a Blok language id. */
|
|
447
|
+
function mapLanguage(language: unknown): string {
|
|
448
|
+
if (!Array.isArray(language) || !Array.isArray(language[0]) || typeof language[0][0] !== 'string') {
|
|
449
|
+
return DEFAULT_LANGUAGE;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
return LANGUAGE_BY_NAME.get(language[0][0].toLowerCase()) ?? DEFAULT_LANGUAGE;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/** Concatenate a rich-text array into raw plain text (no escaping, no markup). */
|
|
456
|
+
function plainText(title: unknown): string {
|
|
457
|
+
if (!Array.isArray(title)) {
|
|
458
|
+
return '';
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return title.map((seg) => (Array.isArray(seg) && typeof seg[0] === 'string' ? seg[0] : '')).join('');
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Convert a Notion rich-text array into Blok inline HTML. `byId` resolves
|
|
466
|
+
* page-mention (`p`) flags to their referenced page title when that page is
|
|
467
|
+
* present in the pasted payload.
|
|
468
|
+
*/
|
|
469
|
+
function richText(title: unknown, byId?: Map<string, NotionValue>): string {
|
|
470
|
+
if (!Array.isArray(title)) {
|
|
471
|
+
return '';
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return title.map((seg) => segmentHtml(seg, byId)).join('');
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/** Convert one rich-text segment `[text, [[flag, …args], …]]` to HTML. */
|
|
478
|
+
function segmentHtml(segment: unknown, byId?: Map<string, NotionValue>): string {
|
|
479
|
+
if (!Array.isArray(segment)) {
|
|
480
|
+
return '';
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
const raw = typeof segment[0] === 'string' ? segment[0] : '';
|
|
484
|
+
const annotations = Array.isArray(segment[1]) ? segment[1] : [];
|
|
485
|
+
|
|
486
|
+
// Colour flags ('h') collapse into ONE <mark>; content flags ('e' equation,
|
|
487
|
+
// 'p' page mention) replace the placeholder glyph. Every other flag wraps the
|
|
488
|
+
// resulting content from the inside out.
|
|
489
|
+
const isColour = (a: unknown): boolean => Array.isArray(a) && a[0] === 'h';
|
|
490
|
+
const isContent = (a: unknown): boolean => Array.isArray(a) && (a[0] === 'e' || a[0] === 'p');
|
|
491
|
+
const inner = annotations
|
|
492
|
+
.filter((a) => !isColour(a) && !isContent(a))
|
|
493
|
+
.reduce<string>((html, annotation) => wrapMark(annotation, html), segmentContent(raw, annotations, byId));
|
|
494
|
+
const style = buildColourStyle(annotations.filter(isColour));
|
|
495
|
+
|
|
496
|
+
return style.length > 0 ? `<mark style="${style}">${inner}</mark>` : inner;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* The base inner content of a segment: an inline `<code>` LaTeX equation (`e`),
|
|
501
|
+
* a resolved page-mention title (`p`), or the plain escaped text. Equation and
|
|
502
|
+
* mention flags carry their content in the flag args / record-map, so they
|
|
503
|
+
* replace the segment's placeholder glyph (`⁍` / `‣`) entirely.
|
|
504
|
+
*/
|
|
505
|
+
function segmentContent(raw: string, annotations: unknown[], byId?: Map<string, NotionValue>): string {
|
|
506
|
+
const latex = flagArg(annotations, 'e');
|
|
507
|
+
|
|
508
|
+
if (latex !== null) {
|
|
509
|
+
return `<code>${escapeHtml(latex)}</code>`;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
const pageId = flagArg(annotations, 'p');
|
|
513
|
+
|
|
514
|
+
if (pageId !== null) {
|
|
515
|
+
return pageMentionContent(pageId, raw, byId);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return escapeHtml(raw);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** The string argument of the first `[flag, arg, …]` annotation, or `null`. */
|
|
522
|
+
function flagArg(annotations: unknown[], flag: string): string | null {
|
|
523
|
+
for (const annotation of annotations) {
|
|
524
|
+
if (Array.isArray(annotation) && annotation[0] === flag && typeof annotation[1] === 'string') {
|
|
525
|
+
return annotation[1];
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
return null;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Resolve a page-mention to the referenced page's title when it is present in
|
|
534
|
+
* the pasted payload; otherwise keep the original placeholder text. (Mentions
|
|
535
|
+
* usually point at pages outside the copied selection, which are unresolvable.)
|
|
536
|
+
*/
|
|
537
|
+
function pageMentionContent(pageId: string, raw: string, byId?: Map<string, NotionValue>): string {
|
|
538
|
+
const titleText = plainText(byId?.get(pageId)?.properties?.title);
|
|
539
|
+
|
|
540
|
+
return escapeHtml(titleText.length > 0 ? titleText : raw);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/** A parsed Notion colour token: a preset name applied as text or background. */
|
|
544
|
+
interface NotionColour {
|
|
545
|
+
mode: 'text' | 'bg';
|
|
546
|
+
name: string;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Parse a Notion colour token (`orange`, `gray_background`, `default`) into a
|
|
551
|
+
* preset name + mode, or `null` for the no-colour `default` token.
|
|
552
|
+
*/
|
|
553
|
+
function parseNotionColour(token: unknown): NotionColour | null {
|
|
554
|
+
if (typeof token !== 'string' || token.length === 0 || token === 'default') {
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
const suffix = '_background';
|
|
559
|
+
const colour: NotionColour = token.endsWith(suffix)
|
|
560
|
+
? { mode: 'bg', name: token.slice(0, -suffix.length) }
|
|
561
|
+
: { mode: 'text', name: token };
|
|
562
|
+
|
|
563
|
+
// `default` / `default_background` mean "no tint" — surface as no colour.
|
|
564
|
+
return colour.name === 'default' ? null : colour;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/** Build a `<mark>` style string from one or more Notion colour flags. */
|
|
568
|
+
function buildColourStyle(colourFlags: unknown[]): string {
|
|
569
|
+
const colours = colourFlags
|
|
570
|
+
.map((flag) => parseNotionColour(Array.isArray(flag) ? flag[1] : undefined))
|
|
571
|
+
.filter((colour): colour is NotionColour => colour !== null);
|
|
572
|
+
const text = colours.find((colour) => colour.mode === 'text');
|
|
573
|
+
const background = colours.find((colour) => colour.mode === 'bg');
|
|
574
|
+
const parts: string[] = [];
|
|
575
|
+
|
|
576
|
+
if (text) {
|
|
577
|
+
parts.push(`color: ${colorVarName(text.name, 'text')}`);
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
if (background) {
|
|
581
|
+
parts.push(`background-color: ${colorVarName(background.name, 'bg')}`);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return parts.join('; ');
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/** Map a Notion `block_color` to callout `{ textColor, backgroundColor }` names. */
|
|
588
|
+
function parseBlockColor(token: unknown): { textColor: string | null; backgroundColor: string | null } {
|
|
589
|
+
const colour = parseNotionColour(token);
|
|
590
|
+
|
|
591
|
+
if (colour === null) {
|
|
592
|
+
return { textColor: null, backgroundColor: null };
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
return colour.mode === 'text'
|
|
596
|
+
? { textColor: colour.name, backgroundColor: null }
|
|
597
|
+
: { textColor: null, backgroundColor: colour.name };
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/** Wrap inner HTML with the Blok inline tag for a single Notion mark flag. */
|
|
601
|
+
function wrapMark(annotation: unknown, inner: string): string {
|
|
602
|
+
if (!Array.isArray(annotation)) {
|
|
603
|
+
return inner;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
switch (annotation[0]) {
|
|
607
|
+
case 'b':
|
|
608
|
+
return `<b>${inner}</b>`;
|
|
609
|
+
case 'i':
|
|
610
|
+
return `<i>${inner}</i>`;
|
|
611
|
+
case 's':
|
|
612
|
+
return `<s>${inner}</s>`;
|
|
613
|
+
case 'c':
|
|
614
|
+
return `<code>${inner}</code>`;
|
|
615
|
+
case '_':
|
|
616
|
+
return `<u>${inner}</u>`;
|
|
617
|
+
case 'a': {
|
|
618
|
+
const href = safeHref(annotation[1]);
|
|
619
|
+
|
|
620
|
+
return href === null ? inner : `<a href="${escapeAttr(href)}">${inner}</a>`;
|
|
621
|
+
}
|
|
622
|
+
default:
|
|
623
|
+
// 'h' (colour), 'e' (equation) and 'p' (page mention) are handled before
|
|
624
|
+
// wrapping (in segmentHtml / segmentContent), not here.
|
|
625
|
+
return inner;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/**
|
|
630
|
+
* Validate a link href against a scheme allow-list, returning the trimmed URL
|
|
631
|
+
* or `null` for dangerous schemes (`javascript:`, `data:`, `vbscript:`…).
|
|
632
|
+
* A malicious Notion clipboard payload could otherwise smuggle a script URI
|
|
633
|
+
* into `data.text`, which the link tool's sanitizer preserves verbatim.
|
|
634
|
+
*/
|
|
635
|
+
function safeHref(raw: unknown): string | null {
|
|
636
|
+
if (typeof raw !== 'string') {
|
|
637
|
+
return null;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
const trimmed = raw.trim();
|
|
641
|
+
|
|
642
|
+
// http(s), mailto, tel, and relative/anchor links only.
|
|
643
|
+
return /^(?:https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(trimmed) ? trimmed : null;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/** Escape `&`, `<`, `>` for HTML text content. */
|
|
647
|
+
function escapeHtml(text: string): string {
|
|
648
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/** Escape a string for use inside a double-quoted HTML attribute. */
|
|
652
|
+
function escapeAttr(text: string): string {
|
|
653
|
+
return escapeHtml(text).replace(/"/g, '"');
|
|
654
|
+
}
|