@jackuait/blok 0.10.4 → 0.10.6
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.mjs +2 -2
- package/dist/chunks/_basePickBy--UeZi0iS.mjs +166 -0
- package/dist/chunks/_baseUniq-C977U_l-.mjs +682 -0
- package/dist/chunks/{arc-D-pL2Ftf.mjs → arc-Woh6y3jm.mjs} +2 -2
- package/dist/chunks/architecture-YZFGNWBL-aVO23UKm.mjs +3 -0
- package/dist/chunks/{architectureDiagram-Q4EWVU46-DS7mqjL2.mjs → architectureDiagram-Q4EWVU46-GTqLmLqg.mjs} +115 -115
- package/dist/chunks/{blockDiagram-DXYQGD6D-BTtcn4NG.mjs → blockDiagram-DXYQGD6D-CML01I1L.mjs} +681 -866
- package/dist/chunks/{blok-NcdNQ0I6.mjs → blok-B0k4z2h1.mjs} +673 -604
- package/dist/chunks/{c4Diagram-AHTNJAMY-Y4Dcwcoo.mjs → c4Diagram-AHTNJAMY-C29OuYjO.mjs} +239 -239
- package/dist/chunks/{channel-Cln-eWE0.mjs → channel-Zp_OyvEW.mjs} +1 -1
- package/dist/chunks/{chunk-2KRD3SAO-DkM7qh-k.mjs → chunk-2KRD3SAO-mVfUZfox.mjs} +1 -1
- package/dist/chunks/{chunk-336JU56O-B17AtzlK.mjs → chunk-336JU56O-mJNxs0cr.mjs} +18 -18
- package/dist/chunks/{chunk-426QAEUC-D6UAVUog.mjs → chunk-426QAEUC-TajZlyP-.mjs} +2 -2
- package/dist/chunks/{chunk-4BX2VUAB-CgIkjF7Z.mjs → chunk-4BX2VUAB-CsopMMb6.mjs} +1 -1
- package/dist/chunks/{chunk-4TB4RGXK-BUP4eON3.mjs → chunk-4TB4RGXK-DC963IrJ.mjs} +129 -129
- package/dist/chunks/{chunk-55IACEB6-zZ-IgaSt.mjs → chunk-55IACEB6-yyL3mncJ.mjs} +1 -1
- package/dist/chunks/{chunk-5FUZZQ4R-DsZnJYxM.mjs → chunk-5FUZZQ4R-Dr4NE8rh.mjs} +663 -663
- package/dist/chunks/chunk-5PVQY5BW-BP7ENjg7.mjs +1122 -0
- package/dist/chunks/{chunk-67CJDMHE-m0UKdcSH.mjs → chunk-67CJDMHE-Dbl-PjEf.mjs} +1 -1
- package/dist/chunks/{chunk-7N4EOEYR-DKNajFZd.mjs → chunk-7N4EOEYR-p-g3cKuX.mjs} +1 -1
- package/dist/chunks/{chunk-AA7GKIK3-BeLhNzKa.mjs → chunk-AA7GKIK3-Dt0Kr5Va.mjs} +1 -1
- package/dist/chunks/{chunk-BSJP7CBP-CJExmx8a.mjs → chunk-BSJP7CBP-DGU2WHwh.mjs} +1 -1
- package/dist/chunks/{chunk-CIAEETIT-CTikoJ19.mjs → chunk-CIAEETIT-BQ4crY5r.mjs} +1 -1
- package/dist/chunks/{chunk-EDXVE4YY-DjInnnwb.mjs → chunk-EDXVE4YY-B9_aGwkV.mjs} +2 -2
- package/dist/chunks/{chunk-ENJZ2VHE-CIl5FRDA.mjs → chunk-ENJZ2VHE-23pY8ft5.mjs} +243 -243
- package/dist/chunks/{chunk-FMBD7UC4-DjV0W7UE.mjs → chunk-FMBD7UC4-D_RQlBGX.mjs} +1 -1
- package/dist/chunks/{chunk-FOC6F5B3-LmHCCWYY.mjs → chunk-FOC6F5B3-CJfr-iwx.mjs} +1 -1
- package/dist/chunks/{chunk-ICPOFSXX-BHZIN46A.mjs → chunk-ICPOFSXX-BOvOTlG6.mjs} +2 -2
- package/dist/chunks/{chunk-K5T4RW27-BPZ6fFnW.mjs → chunk-K5T4RW27-CHSI0vpp.mjs} +572 -570
- package/dist/chunks/{chunk-KGLVRYIC-S1OQdW76.mjs → chunk-KGLVRYIC-ngXT4XVA.mjs} +1 -1
- package/dist/chunks/{chunk-LIHQZDEY-CjtyJlI6.mjs → chunk-LIHQZDEY-CnP7bym1.mjs} +1 -1
- package/dist/chunks/{chunk-ORNJ4GCN-CdO0hAge.mjs → chunk-ORNJ4GCN-BPaghT45.mjs} +1 -1
- package/dist/chunks/{chunk-OYMX7WX6-ApX8eV4o.mjs → chunk-OYMX7WX6-CKjTvqTg.mjs} +172 -172
- package/dist/chunks/{chunk-QZHKN3VN-BGFuA6-k.mjs → chunk-QZHKN3VN-uW1N2UWF.mjs} +1 -1
- package/dist/chunks/{chunk-U2HBQHQK-B88ZUOTL.mjs → chunk-U2HBQHQK-DiQOEtQH.mjs} +65 -65
- package/dist/chunks/{chunk-X2U36JSP-1VS5TyCr.mjs → chunk-X2U36JSP-Cznp5Jm-.mjs} +2 -2
- package/dist/chunks/{chunk-XPW4576I-BMupdrvo.mjs → chunk-XPW4576I-W5t_agZI.mjs} +1 -1
- package/dist/chunks/{chunk-YZCP3GAM-BQ7eEsm2.mjs → chunk-YZCP3GAM-BV02tG_z.mjs} +3 -3
- package/dist/chunks/{chunk-ZZ45TVLE-D1xks9zd.mjs → chunk-ZZ45TVLE-D28EyJ6R.mjs} +7 -7
- package/dist/chunks/classDiagram-6PBFFD2Q-DXsClapu.mjs +30 -0
- package/dist/chunks/classDiagram-v2-HSJHXN6E-B6TlQ_PM.mjs +30 -0
- package/dist/chunks/{clone-Ckjt1LtE.mjs → clone-CUNvBGto.mjs} +1 -1
- package/dist/chunks/{constants-DtfShkXT.mjs → constants-lOEJu8bC.mjs} +4 -2
- package/dist/chunks/{cose-bilkent-S5V4N54A-Bpcs2jA_.mjs → cose-bilkent-S5V4N54A-D-Xgf_Xn.mjs} +2 -2
- package/dist/chunks/{cpp-BdjvAny0.mjs → cpp-DaTV1RSp.mjs} +2 -2
- package/dist/chunks/{dagre-KV5264BT-DUD9ikgN.mjs → dagre-KV5264BT-BB3SAlfA.mjs} +15 -15
- package/dist/chunks/{dagre-CGNbYTKq.mjs → dagre-dysBn-m8.mjs} +499 -552
- package/dist/chunks/diagram-5BDNPKRD-B1410bPG.mjs +112 -0
- package/dist/chunks/{diagram-G4DWMVQ6-CuS0-h95.mjs → diagram-G4DWMVQ6-CdhBBETB.mjs} +82 -82
- package/dist/chunks/{diagram-MMDJMWI5-C-AEApYz.mjs → diagram-MMDJMWI5-B3HWfHe1.mjs} +48 -48
- package/dist/chunks/{diagram-TYMM5635-CiwAJVMq.mjs → diagram-TYMM5635-D0JzRYCN.mjs} +51 -51
- package/dist/chunks/{erDiagram-SMLLAGMA-DeH5yck2.mjs → erDiagram-SMLLAGMA-DfIG0QBk.mjs} +142 -142
- package/dist/chunks/{flowDiagram-DWJPFMVM-Cr6dwmQ5.mjs → flowDiagram-DWJPFMVM-BOL8JsQX.mjs} +176 -176
- package/dist/chunks/{ganttDiagram-T4ZO3ILL-K-divBg_.mjs → ganttDiagram-T4ZO3ILL-CiUr_YRw.mjs} +230 -230
- package/dist/chunks/gitGraph-7Q5UKJZL-B3aq166w.mjs +3 -0
- package/dist/chunks/{gitGraphDiagram-UUTBAWPF-UytPZv72.mjs → gitGraphDiagram-UUTBAWPF-CtNkTTWO.mjs} +218 -218
- package/dist/chunks/{graphlib-Cye9EPNq.mjs → graphlib-BXNPwKuI.mjs} +48 -46
- package/dist/chunks/{graphql-BSnqmqgO.mjs → graphql-DNumR9m-.mjs} +2 -2
- package/dist/chunks/{html-BLNeZvnp.mjs → html-CanPsi1Y.mjs} +2 -2
- package/dist/chunks/{i18next-loader-D32EUWLr.mjs → i18next-loader-CIXsptng.mjs} +2 -2
- package/dist/chunks/info-OMHHGYJF-SX91-Wub.mjs +3 -0
- package/dist/chunks/{infoDiagram-42DDH7IO-DuYnDbF3.mjs → infoDiagram-42DDH7IO-CD7nVBvi.mjs} +14 -14
- package/dist/chunks/isArrayLikeObject-DzUNFfIK.mjs +578 -0
- package/dist/chunks/isEmpty-D8B0aRsG.mjs +35 -0
- package/dist/chunks/{ishikawaDiagram-UXIWVN3A-CHc59dLn.mjs → ishikawaDiagram-UXIWVN3A-BOaC9qJs.mjs} +81 -81
- package/dist/chunks/{journeyDiagram-VCZTEJTY-CD25C4_n.mjs → journeyDiagram-VCZTEJTY-DKf55ZdJ.mjs} +6 -6
- package/dist/chunks/{kanban-definition-6JOO6SKY-CTCT6N_p.mjs → kanban-definition-6JOO6SKY-D2CrAXqB.mjs} +11 -11
- package/dist/chunks/{latex-24n3TcOR.mjs → latex-DY1HNB4U.mjs} +1 -1
- package/dist/chunks/{lightweight-i18n-DpkvRXEd.mjs → lightweight-i18n-DTYoSr_o.mjs} +2 -0
- package/dist/chunks/line-CuvDsrkE.mjs +34 -0
- package/dist/chunks/{linear-BRCpMvtr.mjs → linear-JRIqMpGQ.mjs} +3 -3
- package/dist/chunks/{lua-DV0fuZWx.mjs → lua-COOfzihE.mjs} +1 -1
- package/dist/chunks/{mermaid-parser.core-CA3DKkuk.mjs → mermaid-parser.core-BhpZC2lA.mjs} +10 -10
- package/dist/chunks/mermaid.core-C40gcVfv.mjs +977 -0
- package/dist/chunks/{messages-DtZ9U9g72.mjs → messages--G2XLc8E.mjs} +8 -5
- package/dist/{messages-CFUBJfnf.mjs → chunks/messages-3kHDtQLN.mjs} +8 -5
- package/dist/{messages-0lOPMv8u.mjs → chunks/messages-4Y8dL_1j2.mjs} +8 -5
- package/dist/{messages-DQ1icG7L.mjs → chunks/messages-9Nx7kteY2.mjs} +8 -5
- package/dist/{messages-aoO_TtoE2.mjs → chunks/messages-B29Wm2zT.mjs} +9 -6
- package/dist/chunks/{messages-oPV2oMxM.mjs → messages-B9mzGzZ_.mjs} +11 -8
- package/dist/{messages-Di3-WVzq.mjs → chunks/messages-BCfsOOlp.mjs} +8 -5
- package/dist/{messages-CA6J_QoC.mjs → chunks/messages-BJTwY1tq.mjs} +7 -4
- package/dist/chunks/{messages-Cxy_E2IS.mjs → messages-BK6AwU6C.mjs} +8 -5
- package/dist/chunks/{messages-DoPdy75l.mjs → messages-BPxMr5HC.mjs} +10 -7
- package/dist/chunks/{messages-Ci7UXRVI2.mjs → messages-BS9zk4mI2.mjs} +9 -6
- package/dist/chunks/{messages-BouFtpfO.mjs → messages-BSXBVdsp.mjs} +7 -4
- package/dist/{messages-DqDlcEPn.mjs → chunks/messages-BSyO1EWC.mjs} +9 -6
- package/dist/{messages-DzknMM7W.mjs → chunks/messages-BUQTXTew2.mjs} +8 -5
- package/dist/chunks/{messages-BJNFCDv42.mjs → messages-Bhn5V9FQ2.mjs} +8 -5
- package/dist/chunks/{messages-zWqsggJh.mjs → messages-Bi629xgG.mjs} +8 -5
- package/dist/{messages-CR4gHjd82.mjs → chunks/messages-BimpUMRx.mjs} +6 -3
- package/dist/{messages-BCMFYqKc2.mjs → chunks/messages-BkaUIuz-2.mjs} +8 -5
- package/dist/{messages-5wuR90qS.mjs → chunks/messages-BmC2yhsC2.mjs} +8 -5
- package/dist/chunks/{messages-HzH9_QH8.mjs → messages-Bo7Cbk_O.mjs} +8 -5
- package/dist/chunks/{messages-BcHZf9o-.mjs → messages-Bq7fo8X0.mjs} +16 -13
- package/dist/{messages-bh8BiOee2.mjs → chunks/messages-BsqBho4T.mjs} +9 -6
- package/dist/{messages-C-8qb9sf2.mjs → chunks/messages-C7E8C3-S.mjs} +8 -5
- package/dist/chunks/{messages-DRJxSTqs.mjs → messages-C9QhLDA2.mjs} +9 -6
- package/dist/chunks/{messages-DSbI0vJf.mjs → messages-C9UIaF6N.mjs} +8 -5
- package/dist/chunks/{messages-dpXwA3Sz.mjs → messages-CAX3qQi0.mjs} +8 -5
- package/dist/chunks/{messages-DpydMd36.mjs → messages-CEJtxBxU.mjs} +8 -5
- package/dist/chunks/{messages-DkP3Jf4F.mjs → messages-CF0SW1zy.mjs} +7 -4
- package/dist/{messages-B_UKuqrH.mjs → chunks/messages-CIre8L_r.mjs} +8 -5
- package/dist/{messages-DT7dwzEe.mjs → chunks/messages-CJ8IkF1P.mjs} +8 -5
- package/dist/{messages-BORkMoil2.mjs → chunks/messages-CKP6aUXN2.mjs} +7 -4
- package/dist/chunks/{messages-DY8zPIZW.mjs → messages-CMMq-u7e.mjs} +9 -6
- package/dist/chunks/{messages-CTdSIOAc.mjs → messages-CR5irc8q.mjs} +7 -4
- package/dist/chunks/{messages-ZhHLC6dk.mjs → messages-CRH0RWBs.mjs} +8 -5
- package/dist/chunks/{messages-C7sBaZOO2.mjs → messages-CWm_2RvD2.mjs} +8 -5
- package/dist/{messages-CLUBh7O_.mjs → chunks/messages-CY76MvbX2.mjs} +8 -5
- package/dist/{messages-PyOr_YgV.mjs → chunks/messages-CpLq4ZZg.mjs} +6 -3
- package/dist/chunks/{messages-CGLTjtRv2.mjs → messages-CrpOkt8c2.mjs} +8 -5
- package/dist/{messages-DwiykEgr2.mjs → chunks/messages-D3fu2FHB2.mjs} +8 -5
- package/dist/{messages-hya8YLMj.mjs → chunks/messages-D6_I0L06.mjs} +8 -5
- package/dist/chunks/{messages-oXBbHW9A.mjs → messages-DHzT8CZv.mjs} +8 -5
- package/dist/chunks/{messages-ChayV9WY2.mjs → messages-DIVQmVS92.mjs} +8 -5
- package/dist/{messages-BrYeJsSE2.mjs → chunks/messages-DJYT0upW.mjs} +9 -6
- package/dist/chunks/{messages-THR8q8bJ.mjs → messages-DPcc6xp-.mjs} +16 -13
- package/dist/chunks/{messages-CDSyoUft.mjs → messages-Dass0QsQ.mjs} +6 -3
- package/dist/chunks/{messages-DVvrZRyZ.mjs → messages-DcUYfD6m.mjs} +8 -5
- package/dist/chunks/{messages-BNy4e7Xl.mjs → messages-DfLcy0CY.mjs} +8 -5
- package/dist/chunks/{messages-H6vLy8wJ.mjs → messages-DhoZXmg_.mjs} +8 -5
- package/dist/{messages-ZHgPRUj02.mjs → chunks/messages-DiQkvwE32.mjs} +8 -5
- package/dist/{messages-BKXjO3NH.mjs → chunks/messages-DmvWmURo.mjs} +8 -5
- package/dist/chunks/{messages-DjSuq0-y2.mjs → messages-Dobxrshu2.mjs} +8 -5
- package/dist/{messages-DPFuzIdF2.mjs → chunks/messages-DsMIxm6I2.mjs} +8 -5
- package/dist/{messages-D6RYu9JW2.mjs → chunks/messages-DtssWM8x2.mjs} +8 -5
- package/dist/{messages-gZEhkRrR2.mjs → chunks/messages-E1tsNNG5.mjs} +8 -5
- package/dist/chunks/{messages-D9uWAWjW.mjs → messages-PFfYbqlm.mjs} +9 -6
- package/dist/{messages-DCdP2ujL.mjs → chunks/messages-bIzBNzdr2.mjs} +6 -3
- package/dist/{messages-WsUHzXMu2.mjs → chunks/messages-dGYum7sj2.mjs} +8 -5
- package/dist/chunks/{messages-C-EBhOHE.mjs → messages-kKXlI5xZ.mjs} +8 -5
- package/dist/chunks/{messages-Cfbmwdep2.mjs → messages-mo5OrbVj2.mjs} +8 -5
- package/dist/{messages-9L4qqCKh2.mjs → chunks/messages-nAdoEqRi.mjs} +8 -5
- package/dist/chunks/{messages-Bop7vrhU.mjs → messages-rNLuCrAb.mjs} +8 -5
- package/dist/chunks/{messages-yGedmr61.mjs → messages-v26RM5PC.mjs} +8 -5
- package/dist/{messages-Cd5CW5Tt.mjs → chunks/messages-x0kzc2oy.mjs} +9 -6
- package/dist/{messages-DB4UKN8D.mjs → chunks/messages-x6y6csd52.mjs} +6 -3
- package/dist/chunks/{messages-Br6bE1FD2.mjs → messages-x_eMclsl2.mjs} +9 -6
- package/dist/{messages-CVMngZNA.mjs → chunks/messages-z5pham9o.mjs} +10 -7
- package/dist/chunks/{messages-D9syZVGi2.mjs → messages-zcqQ8x232.mjs} +6 -3
- package/dist/chunks/{micromark-extension-math-BbkUb36G.mjs → micromark-extension-math-D-s54WWf.mjs} +1 -1
- package/dist/chunks/{mindmap-definition-QFDTVHPH-hNnyBkEP.mjs → mindmap-definition-QFDTVHPH-C-0fwUUS.mjs} +13 -13
- package/dist/chunks/{ordinal-B-kolV-i.mjs → ordinal-fyJMP-lj.mjs} +1 -1
- package/dist/chunks/packet-4T2RLAQJ-suhU85JN.mjs +3 -0
- package/dist/chunks/{php-DmXKyPwJ.mjs → php-DA-SOiqC.mjs} +6 -6
- package/dist/chunks/pie-ZZUOXDRM-DF5e16CP.mjs +3 -0
- package/dist/chunks/pieDiagram-DEJITSTG-BPyqheXv.mjs +179 -0
- package/dist/chunks/{quadrantDiagram-34T5L4WZ-CQ5fGYI5.mjs → quadrantDiagram-34T5L4WZ-kOZ1zIXB.mjs} +4 -4
- package/dist/chunks/radar-PYXPWWZC-DgzodpRv.mjs +3 -0
- package/dist/chunks/{requirementDiagram-MS252O5E-DjWKB42c.mjs → requirementDiagram-MS252O5E-C8Zkq6Lq.mjs} +64 -64
- package/dist/chunks/{ruby-DdOo03Kg.mjs → ruby-HDUjp8gK.mjs} +11 -11
- package/dist/chunks/{sankeyDiagram-XADWPNL6-BIN2evSB.mjs → sankeyDiagram-XADWPNL6-B0FhkAL9.mjs} +3 -3
- package/dist/chunks/{sequenceDiagram-FGHM5R23-CQz2lMoS.mjs → sequenceDiagram-FGHM5R23-Dv2H5Lbc.mjs} +447 -447
- package/dist/chunks/stateDiagram-FHFEXIEX-D1vcO7H_.mjs +218 -0
- package/dist/chunks/stateDiagram-v2-QKLJ7IA2-AoHzFiaI.mjs +28 -0
- package/dist/chunks/{timeline-definition-GMOUNBTQ-CzvQ7Lav.mjs → timeline-definition-GMOUNBTQ-DJmJ0TPa.mjs} +195 -195
- package/dist/chunks/{tools-DMSi-3RW.mjs → tools-FmtWXVgt.mjs} +109 -142
- package/dist/chunks/treeView-SZITEDCU-C1mc9PWf.mjs +3 -0
- package/dist/chunks/treemap-W4RFUUIX-ClV9Slyp.mjs +3 -0
- package/dist/chunks/{vennDiagram-DHZGUBPP-B0DmLQqe.mjs → vennDiagram-DHZGUBPP-Dx1rMP24.mjs} +76 -76
- package/dist/chunks/wardley-RL74JXVD-Dj7t7jHR.mjs +3 -0
- package/dist/chunks/{wardleyDiagram-NUSXRM2D-CzoKesUw.mjs → wardleyDiagram-NUSXRM2D-Dnm6lvMn.mjs} +15 -15
- package/dist/chunks/{xml-g8kXXALs.mjs → xml-Dq1lpp8G.mjs} +1 -1
- package/dist/chunks/{xychartDiagram-5P7HB3ND-CixwR8r2.mjs → xychartDiagram-5P7HB3ND-C9wFc2e9.mjs} +120 -120
- package/dist/full.mjs +3 -3
- package/dist/locales.mjs +69 -67
- package/dist/markdown.mjs +1 -1
- package/dist/{chunks/messages-CPFB2_m-2.mjs → messages--zgIPYtb.mjs} +6 -3
- package/dist/{messages-D8dO6OMN.mjs → messages-4jULpVvw.mjs} +16 -13
- package/dist/{chunks/messages-CNaaqQVz.mjs → messages-AbwSlRf_.mjs} +10 -7
- package/dist/{chunks/messages-AD17iDBx.mjs → messages-B-dl7Pwb2.mjs} +9 -6
- package/dist/{chunks/messages-CGFlOwst.mjs → messages-B3rCRhb1.mjs} +8 -5
- package/dist/{chunks/messages-CCEgR9GN2.mjs → messages-B73L8nKc2.mjs} +8 -5
- package/dist/{chunks/messages-wYQksm10.mjs → messages-BAjsD2Vm2.mjs} +8 -5
- package/dist/{messages-C34dTwF72.mjs → messages-BBodSb5B2.mjs} +8 -5
- package/dist/{chunks/messages-O6FOfUgF.mjs → messages-BTpn6H9x2.mjs} +6 -3
- package/dist/{chunks/messages-Cql2ozf_2.mjs → messages-BWb0GjTj2.mjs} +8 -5
- package/dist/{messages-ELvF3qMl2.mjs → messages-BbCgnri12.mjs} +8 -5
- package/dist/{chunks/messages-OSP4Hj5o.mjs → messages-Bfon_Y3q.mjs} +9 -6
- package/dist/{chunks/messages-fbL5y58u2.mjs → messages-BhOtow9J2.mjs} +8 -5
- package/dist/{messages-6eX0fWGR2.mjs → messages-BoB7m0uu2.mjs} +9 -6
- package/dist/{chunks/messages-C3X7dv3f.mjs → messages-BsOZPjeg.mjs} +8 -5
- package/dist/{chunks/messages-vDgsEqQW2.mjs → messages-BuzKUYPV.mjs} +8 -5
- package/dist/{chunks/messages-BjyYZeBm2.mjs → messages-BzOKMdMQ.mjs} +6 -3
- package/dist/{messages-CxZarWTm2.mjs → messages-C2H3PeQW2.mjs} +8 -5
- package/dist/{messages-D0eT_eWA.mjs → messages-C5KNzSTk.mjs} +8 -5
- package/dist/{messages-CNGwdIEz.mjs → messages-CIDYjE6l.mjs} +8 -5
- package/dist/{messages-BPw_x-6H.mjs → messages-CJmyF5ye.mjs} +7 -4
- package/dist/{messages-VrQw3tQ62.mjs → messages-CTwiYb2a2.mjs} +6 -3
- package/dist/{messages-BM2kx9Td.mjs → messages-CUHoJaDO.mjs} +8 -5
- package/dist/{chunks/messages-RiqdVwuN2.mjs → messages-CVeuqUjQ2.mjs} +8 -5
- package/dist/{messages-KVerxvZC.mjs → messages-CW75b4sz.mjs} +8 -5
- package/dist/{messages-DA4T9WBe.mjs → messages-CXd7YeWV.mjs} +8 -5
- package/dist/{chunks/messages-CXVWb9js.mjs → messages-CjlYkunD.mjs} +8 -5
- package/dist/{chunks/messages-B8hICx3L.mjs → messages-CrGx64yd.mjs} +9 -6
- package/dist/{chunks/messages-C7Pjof0d2.mjs → messages-Ct0jbgHd.mjs} +8 -5
- package/dist/{messages-C67YUZ9-.mjs → messages-CtKrCYD1.mjs} +8 -5
- package/dist/{chunks/messages-B03yUEra2.mjs → messages-Cu2eLjfJ.mjs} +8 -5
- package/dist/{messages-BwttyHDI2.mjs → messages-CvwQ-fK_2.mjs} +8 -5
- package/dist/{chunks/messages-zQOpKjl3.mjs → messages-Cy6UYN9b.mjs} +6 -3
- package/dist/{messages-CrjQ2Op0.mjs → messages-D01vnfA9.mjs} +8 -5
- package/dist/{messages-C6yKu_PJ.mjs → messages-D0BAV45W.mjs} +8 -5
- package/dist/{messages-DxEiqa-B.mjs → messages-D5LGpdga.mjs} +9 -6
- package/dist/{messages-Dl0bfeA-.mjs → messages-DATK4ftv.mjs} +9 -6
- package/dist/{chunks/messages-D_kZN9rB.mjs → messages-DEl77Urv2.mjs} +9 -6
- package/dist/{messages-BRY51SEw2.mjs → messages-DHNjM2nv2.mjs} +6 -3
- package/dist/{messages-OOiDDmVw.mjs → messages-DMW8b_sO.mjs} +8 -5
- package/dist/{messages-tb1FD_ge.mjs → messages-DNmgANKr.mjs} +7 -4
- package/dist/{messages-Do3mHd9U.mjs → messages-DQaa3cEM.mjs} +9 -6
- package/dist/{chunks/messages-VtfKWZ2S.mjs → messages-DSlD4bV9.mjs} +8 -5
- package/dist/{messages-Dxr1BBvo.mjs → messages-DTzbkXFt.mjs} +8 -5
- package/dist/{chunks/messages-SP659Sal2.mjs → messages-DbZihxtV.mjs} +8 -5
- package/dist/{messages-Cv1PSaNk.mjs → messages-DeE8fyKQ.mjs} +8 -5
- package/dist/{messages-B4zPxKl62.mjs → messages-Dg-TpO2S2.mjs} +8 -5
- package/dist/{messages-CLZoy5fQ.mjs → messages-DgP82LzF.mjs} +7 -4
- package/dist/{chunks/messages-C85zv_7x.mjs → messages-Dh3Vt7WC.mjs} +7 -4
- package/dist/{chunks/messages-bFEdH3lv.mjs → messages-DiVVyZD22.mjs} +9 -6
- package/dist/{messages-BSNsrZVN.mjs → messages-DpRnGjoe.mjs} +10 -7
- package/dist/{messages-Dx5n6MLQ2.mjs → messages-DqZmrFaa2.mjs} +8 -5
- package/dist/{messages-D8U5D391.mjs → messages-Dra9Fz5Q.mjs} +11 -8
- package/dist/{chunks/messages-CpXvyGWv2.mjs → messages-DuPBRgEF2.mjs} +7 -4
- package/dist/{messages-JVJdC0Er2.mjs → messages-DuxEyAY-2.mjs} +9 -6
- package/dist/{chunks/messages-BGmvvtg_.mjs → messages-FmJD6lHR2.mjs} +8 -5
- package/dist/{messages-BLW2GX7J2.mjs → messages-ONielGl92.mjs} +8 -5
- package/dist/{chunks/messages-B2dU00Z3.mjs → messages-RzgUqCGb2.mjs} +8 -5
- package/dist/{chunks/messages-YbckahVx2.mjs → messages-U22AKGKs.mjs} +8 -5
- package/dist/{chunks/messages-CGPxUESo.mjs → messages-XufeeRfO.mjs} +8 -5
- package/dist/{messages-DUYxMxrQ2.mjs → messages-fprUm7SO2.mjs} +8 -5
- package/dist/{chunks/messages-BCifzMVO2.mjs → messages-gFNdz3Tn2.mjs} +8 -5
- package/dist/{messages-DfqM_XvD.mjs → messages-h_n5GBm6.mjs} +16 -13
- package/dist/{chunks/messages-VlEyFUxF2.mjs → messages-oOogIpsL2.mjs} +8 -5
- package/dist/{messages-D_V0kHD7.mjs → messages-otwg3KcK.mjs} +8 -5
- package/dist/{messages-BLfK27kX.mjs → messages-rDDoBMWb.mjs} +8 -5
- package/dist/{chunks/messages-BBe45sPH.mjs → messages-trQPxZIu.mjs} +8 -5
- package/dist/react.mjs +2 -2
- package/dist/tools.mjs +2 -2
- package/dist/vendor.LICENSE.txt +64 -64
- package/package.json +3 -2
- package/src/blok.ts +55 -0
- package/src/components/block/index.ts +2 -2
- package/src/components/block-tunes/block-tune-delete.ts +1 -0
- package/src/components/i18n/locales/am/messages.json +8 -5
- package/src/components/i18n/locales/ar/messages.json +8 -5
- package/src/components/i18n/locales/az/messages.json +8 -5
- package/src/components/i18n/locales/bg/messages.json +7 -4
- package/src/components/i18n/locales/bn/messages.json +8 -5
- package/src/components/i18n/locales/bs/messages.json +10 -7
- package/src/components/i18n/locales/cs/messages.json +9 -6
- package/src/components/i18n/locales/da/messages.json +9 -6
- package/src/components/i18n/locales/de/messages.json +9 -6
- package/src/components/i18n/locales/dv/messages.json +8 -5
- package/src/components/i18n/locales/el/messages.json +8 -5
- package/src/components/i18n/locales/en/messages.json +2 -0
- package/src/components/i18n/locales/es/messages.json +9 -6
- package/src/components/i18n/locales/et/messages.json +7 -4
- package/src/components/i18n/locales/fa/messages.json +8 -5
- package/src/components/i18n/locales/fi/messages.json +8 -5
- package/src/components/i18n/locales/fil/messages.json +16 -13
- package/src/components/i18n/locales/fr/messages.json +8 -5
- package/src/components/i18n/locales/gu/messages.json +8 -5
- package/src/components/i18n/locales/he/messages.json +8 -5
- package/src/components/i18n/locales/hi/messages.json +8 -5
- package/src/components/i18n/locales/hr/messages.json +10 -7
- package/src/components/i18n/locales/hu/messages.json +9 -6
- package/src/components/i18n/locales/hy/messages.json +16 -13
- package/src/components/i18n/locales/id/messages.json +7 -4
- package/src/components/i18n/locales/it/messages.json +11 -8
- package/src/components/i18n/locales/ja/messages.json +8 -5
- package/src/components/i18n/locales/ka/messages.json +8 -5
- package/src/components/i18n/locales/km/messages.json +6 -3
- package/src/components/i18n/locales/kn/messages.json +8 -5
- package/src/components/i18n/locales/ko/messages.json +8 -5
- package/src/components/i18n/locales/ku/messages.json +8 -5
- package/src/components/i18n/locales/lo/messages.json +6 -3
- package/src/components/i18n/locales/lt/messages.json +8 -5
- package/src/components/i18n/locales/lv/messages.json +8 -5
- package/src/components/i18n/locales/mk/messages.json +8 -5
- package/src/components/i18n/locales/ml/messages.json +8 -5
- package/src/components/i18n/locales/mn/messages.json +8 -5
- package/src/components/i18n/locales/mr/messages.json +8 -5
- package/src/components/i18n/locales/ms/messages.json +6 -3
- package/src/components/i18n/locales/my/messages.json +8 -5
- package/src/components/i18n/locales/ne/messages.json +8 -5
- package/src/components/i18n/locales/nl/messages.json +8 -5
- package/src/components/i18n/locales/no/messages.json +9 -6
- package/src/components/i18n/locales/pa/messages.json +8 -5
- package/src/components/i18n/locales/pl/messages.json +9 -6
- package/src/components/i18n/locales/ps/messages.json +8 -5
- package/src/components/i18n/locales/pt/messages.json +8 -5
- package/src/components/i18n/locales/ro/messages.json +8 -5
- package/src/components/i18n/locales/ru/messages.json +7 -4
- package/src/components/i18n/locales/sd/messages.json +8 -5
- package/src/components/i18n/locales/si/messages.json +8 -5
- package/src/components/i18n/locales/sk/messages.json +9 -6
- package/src/components/i18n/locales/sl/messages.json +9 -6
- package/src/components/i18n/locales/sq/messages.json +9 -6
- package/src/components/i18n/locales/sr/messages.json +8 -5
- package/src/components/i18n/locales/sv/messages.json +8 -5
- package/src/components/i18n/locales/sw/messages.json +6 -3
- package/src/components/i18n/locales/ta/messages.json +8 -5
- package/src/components/i18n/locales/te/messages.json +8 -5
- package/src/components/i18n/locales/th/messages.json +6 -3
- package/src/components/i18n/locales/tr/messages.json +8 -5
- package/src/components/i18n/locales/ug/messages.json +8 -5
- package/src/components/i18n/locales/uk/messages.json +7 -4
- package/src/components/i18n/locales/ur/messages.json +8 -5
- package/src/components/i18n/locales/vi/messages.json +6 -3
- package/src/components/i18n/locales/yi/messages.json +8 -5
- package/src/components/i18n/locales/zh/messages.json +8 -5
- package/src/components/inline-tools/inline-tool-code.ts +0 -19
- package/src/components/inline-tools/inline-tool-italic.ts +3 -20
- package/src/components/inline-tools/inline-tool-strikethrough.ts +0 -19
- package/src/components/inline-tools/inline-tool-underline.ts +0 -19
- package/src/components/inline-tools/services/bold-normalization-pass.ts +1 -29
- package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +11 -5
- package/src/components/modules/blockEvents/composers/markdownShortcuts.ts +105 -2
- package/src/components/modules/blockEvents/constants.ts +24 -0
- package/src/components/modules/blockManager/blockManager.ts +1 -1
- package/src/components/modules/blockManager/types.ts +1 -1
- package/src/components/modules/toolbar/blockSettings.ts +89 -11
- package/src/components/modules/ui.ts +1 -0
- package/src/components/modules/uiControllers/controllers/keyboard.ts +55 -5
- package/src/components/modules/yjs/document-store.ts +1 -1
- package/src/components/modules/yjs/index.ts +1 -1
- package/src/components/utils/popover/popover-abstract.ts +9 -0
- package/src/styles/main.css +3 -0
- package/src/tools/code/index.ts +1 -0
- package/src/tools/database/database-view.ts +269 -0
- package/src/tools/database/types.ts +16 -0
- package/src/tools/quote/index.ts +1 -0
- package/types/configs/blok-config.d.ts +13 -3
- package/types/configs/index.d.ts +1 -0
- package/types/configs/user-info.d.ts +14 -0
- package/types/data-formats/output-data.d.ts +2 -2
- package/types/index.d.ts +1 -0
- package/dist/chunks/_basePickBy-DISiGhsr.mjs +0 -410
- package/dist/chunks/_baseUniq-gAuHRtRF.mjs +0 -1045
- package/dist/chunks/_getTag-Aj56Wgor.mjs +0 -26
- package/dist/chunks/architecture-YZFGNWBL-CuqTb_ae.mjs +0 -3
- package/dist/chunks/chunk-5PVQY5BW-CORl9dnu.mjs +0 -1692
- package/dist/chunks/classDiagram-6PBFFD2Q-C59BZJxp.mjs +0 -30
- package/dist/chunks/classDiagram-v2-HSJHXN6E-7a0qeMsE.mjs +0 -30
- package/dist/chunks/diagram-5BDNPKRD-CZGfTYEe.mjs +0 -112
- package/dist/chunks/gitGraph-7Q5UKJZL-Dl-vQzrq.mjs +0 -3
- package/dist/chunks/info-OMHHGYJF-BOejJvJR.mjs +0 -3
- package/dist/chunks/line-Dct5pMmw.mjs +0 -34
- package/dist/chunks/mermaid.core-CA8nc1sZ.mjs +0 -989
- package/dist/chunks/packet-4T2RLAQJ-B5ZMgwzZ.mjs +0 -3
- package/dist/chunks/pie-ZZUOXDRM-B9l6y0XJ.mjs +0 -3
- package/dist/chunks/pieDiagram-DEJITSTG-Gw-fsc6U.mjs +0 -179
- package/dist/chunks/radar-PYXPWWZC-D5kYmUaB.mjs +0 -3
- package/dist/chunks/stateDiagram-FHFEXIEX-BIBFsF65.mjs +0 -218
- package/dist/chunks/stateDiagram-v2-QKLJ7IA2-BZUmAVw7.mjs +0 -28
- package/dist/chunks/treeView-SZITEDCU-BNtnNxpI.mjs +0 -3
- package/dist/chunks/treemap-W4RFUUIX-DYENULz2.mjs +0 -3
- package/dist/chunks/wardley-RL74JXVD-ByNHVBTb.mjs +0 -3
- /package/dist/chunks/{am-BxlkYGsI.mjs → am-Bbd7cTHS.mjs} +0 -0
- /package/dist/chunks/{ar-9vlpr9V8.mjs → ar-Bo71sCQE.mjs} +0 -0
- /package/dist/chunks/{array-BsrkCVSZ.mjs → array-DbiMs_0t.mjs} +0 -0
- /package/dist/chunks/{az-ON63W_FP.mjs → az-BnNrO_xK.mjs} +0 -0
- /package/dist/chunks/{bg-CtXWTP5w.mjs → bg-CMd2n-OG.mjs} +0 -0
- /package/dist/chunks/{bn-BERvhXM4.mjs → bn-B3lorfXA.mjs} +0 -0
- /package/dist/chunks/{bs-CBg8NVPG.mjs → bs-_zM8QBsA.mjs} +0 -0
- /package/dist/chunks/{c-C6JXJf5K.mjs → c-DmKJe6GM.mjs} +0 -0
- /package/dist/chunks/{core-Bm6DWt7D.mjs → core-C942GvJO.mjs} +0 -0
- /package/dist/chunks/{cs-DeQddxS7.mjs → cs-nodpmLBf.mjs} +0 -0
- /package/dist/chunks/{csharp-YHxeHpeH.mjs → csharp-Drv96dbi.mjs} +0 -0
- /package/dist/chunks/{css-DdLevFaX.mjs → css-82tNAoU6.mjs} +0 -0
- /package/dist/chunks/{cytoscape.esm-BvD8wo00.mjs → cytoscape.esm-DSb9a7HE.mjs} +0 -0
- /package/dist/chunks/{da-DyTo-ec_.mjs → da-DwzgQcXQ.mjs} +0 -0
- /package/dist/chunks/{dart-DrPWqfcC.mjs → dart-DE9j8McI.mjs} +0 -0
- /package/dist/chunks/{de-Cu7545m1.mjs → de-BvWPiNt6.mjs} +0 -0
- /package/dist/chunks/{defaultLocale-ChuSeAxU.mjs → defaultLocale-yTyMJ3IT.mjs} +0 -0
- /package/dist/chunks/{dist-Ctq-pyfb.mjs → dist-X14EnMrO.mjs} +0 -0
- /package/dist/chunks/{dockerfile-C68ALcaN.mjs → dockerfile-D9DFksUy.mjs} +0 -0
- /package/dist/chunks/{el-oiubLRBq.mjs → el-B_D7wUrZ.mjs} +0 -0
- /package/dist/chunks/{engine-javascript-CJpnSvzf.mjs → engine-javascript-Dd6ViPCH.mjs} +0 -0
- /package/dist/chunks/{es-DZUC6Klv.mjs → es-Bn_ZFyW9.mjs} +0 -0
- /package/dist/chunks/{et-CDeklAog.mjs → et-CUcULjoh.mjs} +0 -0
- /package/dist/chunks/{fa-Cafp7_Li.mjs → fa-BRhCTsOy.mjs} +0 -0
- /package/dist/chunks/{fi-BD_V_aVW.mjs → fi-BEvyU9n6.mjs} +0 -0
- /package/dist/chunks/{fil-Crsfbtx4.mjs → fil-Dlp1_W2B.mjs} +0 -0
- /package/dist/chunks/{fr-BGGc04Zv.mjs → fr-DJBeOAx1.mjs} +0 -0
- /package/dist/chunks/{go-Fm5N96DN.mjs → go-jyWjtO8q.mjs} +0 -0
- /package/dist/chunks/{gu-Vg_BgCTp.mjs → gu-0hWvx16l.mjs} +0 -0
- /package/dist/chunks/{he-DTY9chlZ.mjs → he-CYe88qXp.mjs} +0 -0
- /package/dist/chunks/{hi-DChMXk0x.mjs → hi-DuLkkPWn.mjs} +0 -0
- /package/dist/chunks/{hr-BWVgNU8k.mjs → hr-BwCB1IMW.mjs} +0 -0
- /package/dist/chunks/{hu-B37awHXA.mjs → hu-C2dLyTeX.mjs} +0 -0
- /package/dist/chunks/{hy-DGC_GDHh.mjs → hy-DXKoDpv9.mjs} +0 -0
- /package/dist/chunks/{i18next-CXx5niYF.mjs → i18next-CLUkHqmV.mjs} +0 -0
- /package/dist/chunks/{id-V7cw6La2.mjs → id-D4chLuW_.mjs} +0 -0
- /package/dist/chunks/{init-C6T-mugb.mjs → init-BlLeEogJ.mjs} +0 -0
- /package/dist/chunks/{it-DrTGP8Rn.mjs → it-Hto3G26t.mjs} +0 -0
- /package/dist/chunks/{ja-DS4pbJEG.mjs → ja-UxHm_PPZ.mjs} +0 -0
- /package/dist/chunks/{java-83DWBpzu.mjs → java-Dhv78FEb.mjs} +0 -0
- /package/dist/chunks/{javascript-CBgeF1Xx.mjs → javascript-DilE9EuZ.mjs} +0 -0
- /package/dist/chunks/{json-BI17y-1H.mjs → json-LUtHrtDA.mjs} +0 -0
- /package/dist/chunks/{ka-BueyosRh.mjs → ka-BnjXwPUq.mjs} +0 -0
- /package/dist/chunks/{katex-CmTPfM0f.mjs → katex-B8jUB5Cv.mjs} +0 -0
- /package/dist/chunks/{km-B0K891yW.mjs → km-exgzZBIE.mjs} +0 -0
- /package/dist/chunks/{kn-BQ__skg8.mjs → kn-DjjUg8aO.mjs} +0 -0
- /package/dist/chunks/{ko-BuPxi_7e.mjs → ko-Cu0YUSV6.mjs} +0 -0
- /package/dist/chunks/{kotlin-DjnvsrfO.mjs → kotlin-DFLPXbOQ.mjs} +0 -0
- /package/dist/chunks/{ku-nQjwPRw2.mjs → ku-D-IxJ0fx.mjs} +0 -0
- /package/dist/chunks/{lo-K5NVFoq1.mjs → lo-BcwjJBcv.mjs} +0 -0
- /package/dist/chunks/{lt-D3xD6Eb2.mjs → lt-Bt05MFPC.mjs} +0 -0
- /package/dist/chunks/{lv-DH13mzZj.mjs → lv-B01TmEFW.mjs} +0 -0
- /package/dist/chunks/{markdown-BqQYT45f.mjs → markdown-C6pnqcPd.mjs} +0 -0
- /package/dist/chunks/{mdast-util-math-BlK2Zu-1.mjs → mdast-util-math-D56mMxhB.mjs} +0 -0
- /package/dist/chunks/{mermaid-vF0cEnZ0.mjs → mermaid-BKA834jS.mjs} +0 -0
- /package/dist/chunks/{mk-Bb48BcDA.mjs → mk-DlZNyDhn.mjs} +0 -0
- /package/dist/chunks/{ml-BHPEj1kD.mjs → ml-CizMIOxl.mjs} +0 -0
- /package/dist/chunks/{mn-BNGzpdI6.mjs → mn-B_pDvxok.mjs} +0 -0
- /package/dist/chunks/{mr-D5PgU-cH.mjs → mr-D8D_7YmW.mjs} +0 -0
- /package/dist/chunks/{ms-DPkxqKz5.mjs → ms-CM93I8ec.mjs} +0 -0
- /package/dist/chunks/{my-DZGcyfxy.mjs → my-BGnGdDAV.mjs} +0 -0
- /package/dist/chunks/{ne-BU_Wh4Wv.mjs → ne-C6ZmmqhH.mjs} +0 -0
- /package/dist/chunks/{nl-DtAPk1mK.mjs → nl-UGFOU80W.mjs} +0 -0
- /package/dist/chunks/{no-CdW3n3BY.mjs → no-as-DKhC4.mjs} +0 -0
- /package/dist/chunks/{notifier-CuvTt9pe.mjs → notifier-PpnFhM0m.mjs} +0 -0
- /package/dist/chunks/{one-light-DmNO_Y4X.mjs → one-light-Di_o5Kb7.mjs} +0 -0
- /package/dist/chunks/{pa-BacCHz87.mjs → pa-DiOAveAI.mjs} +0 -0
- /package/dist/chunks/{path-rIMjg_tH.mjs → path-7pA19U_d.mjs} +0 -0
- /package/dist/chunks/{pl-8zBJbmhZ.mjs → pl-DXk8ye3B.mjs} +0 -0
- /package/dist/chunks/{ps-c6nGXD-W.mjs → ps-CuxilZ3F.mjs} +0 -0
- /package/dist/chunks/{pt-B5yR8Qhr.mjs → pt-DsT6E77q.mjs} +0 -0
- /package/dist/chunks/{python-DfwfY9t5.mjs → python-DYiHKGPV.mjs} +0 -0
- /package/dist/chunks/{r-BD2D7qEW.mjs → r-BZ4pC-Uz.mjs} +0 -0
- /package/dist/chunks/{ro-Nscylsqb.mjs → ro-CcAQOL-B.mjs} +0 -0
- /package/dist/chunks/{rough.esm-cmMIcj7N.mjs → rough.esm-BPA_YwbP.mjs} +0 -0
- /package/dist/chunks/{ru-DxERQkVJ.mjs → ru-hD41D0Fd.mjs} +0 -0
- /package/dist/chunks/{rust-DEDueB5R.mjs → rust-Db_HEGL5.mjs} +0 -0
- /package/dist/chunks/{scala-CsjqvxE4.mjs → scala-B1kK21mu.mjs} +0 -0
- /package/dist/chunks/{sd-5z-QY3q9.mjs → sd-Biu7f00A.mjs} +0 -0
- /package/dist/chunks/{shellscript-Bh5zEpnQ.mjs → shellscript-BBh7AxMC.mjs} +0 -0
- /package/dist/chunks/{si-DTL0mzrx.mjs → si-Bhto6prC.mjs} +0 -0
- /package/dist/chunks/{sk-DrGczTvY.mjs → sk-Ce7J4sHX.mjs} +0 -0
- /package/dist/chunks/{sl-D8nJjig4.mjs → sl-Fz7idR9w.mjs} +0 -0
- /package/dist/chunks/{sq-C74Hm3YL.mjs → sq-CnLb3bAQ.mjs} +0 -0
- /package/dist/chunks/{sql-D9CrOi1i.mjs → sql-DHkazX4B.mjs} +0 -0
- /package/dist/chunks/{sr-DAwB05Gj.mjs → sr-Bc5JbF-b.mjs} +0 -0
- /package/dist/chunks/{src-DVJl6f6s.mjs → src-B3rrEIze.mjs} +0 -0
- /package/dist/chunks/{sv-BkHBsN4y.mjs → sv-B86P2LyK.mjs} +0 -0
- /package/dist/chunks/{sw-BBQLTq_z.mjs → sw-CnQXriTg.mjs} +0 -0
- /package/dist/chunks/{swift-Dpyt0s2c.mjs → swift-DZdprfb-.mjs} +0 -0
- /package/dist/chunks/{ta-DRRzdKky.mjs → ta-CG4BbxjE.mjs} +0 -0
- /package/dist/chunks/{te-CedXLsKM.mjs → te-CkE35V1X.mjs} +0 -0
- /package/dist/chunks/{th-DDOlGA0W.mjs → th-BCtkHu3E.mjs} +0 -0
- /package/dist/chunks/{tr-ClgvwOlL.mjs → tr-D5Cexvko.mjs} +0 -0
- /package/dist/chunks/{typescript-DO5cd4m8.mjs → typescript-DhtGMhWX.mjs} +0 -0
- /package/dist/chunks/{ug-bXxwiinM.mjs → ug-Bt9xMT4p.mjs} +0 -0
- /package/dist/chunks/{uk-Dp46o_VT.mjs → uk-D1g7UV0v.mjs} +0 -0
- /package/dist/chunks/{ur-MfEEhdFq.mjs → ur-B69faQh_.mjs} +0 -0
- /package/dist/chunks/{vi-bt-3LPGO.mjs → vi--gW42cZG.mjs} +0 -0
- /package/dist/chunks/{vitesse-dark-CcorSKT2.mjs → vitesse-dark-B5oAIYZ5.mjs} +0 -0
- /package/dist/chunks/{yaml-CrNNZyLb.mjs → yaml-T4MCc8o4.mjs} +0 -0
- /package/dist/chunks/{zh-Dgyb5Ly8.mjs → zh-DgQ6P8Lu.mjs} +0 -0
|
@@ -196,7 +196,9 @@ export class ItalicInlineTool implements InlineTool {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
/**
|
|
199
|
-
* Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element
|
|
199
|
+
* Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element.
|
|
200
|
+
* The browser's contenteditable engine will re-insert nbsp where needed for rendering
|
|
201
|
+
* (e.g. trailing spaces, consecutive spaces) on the next input event.
|
|
200
202
|
* @param element - The element to normalize
|
|
201
203
|
*/
|
|
202
204
|
private normalizeNbspInElement(element: HTMLElement): void {
|
|
@@ -212,27 +214,8 @@ export class ItalicInlineTool implements InlineTool {
|
|
|
212
214
|
continue;
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
216
|
-
|
|
217
217
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
218
|
-
|
|
219
|
-
if (keepTrailing) {
|
|
220
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Check whether all siblings after a node are empty
|
|
227
|
-
*/
|
|
228
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
229
|
-
const next = node.nextSibling;
|
|
230
|
-
|
|
231
|
-
if (!next) {
|
|
232
|
-
return true;
|
|
233
218
|
}
|
|
234
|
-
|
|
235
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
236
219
|
}
|
|
237
220
|
|
|
238
221
|
/**
|
|
@@ -209,27 +209,8 @@ export class StrikethroughInlineTool implements InlineTool {
|
|
|
209
209
|
continue;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
213
|
-
|
|
214
212
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
215
|
-
|
|
216
|
-
if (keepTrailing) {
|
|
217
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Check whether all siblings after a node are empty
|
|
224
|
-
*/
|
|
225
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
226
|
-
const next = node.nextSibling;
|
|
227
|
-
|
|
228
|
-
if (!next) {
|
|
229
|
-
return true;
|
|
230
213
|
}
|
|
231
|
-
|
|
232
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
233
214
|
}
|
|
234
215
|
|
|
235
216
|
/**
|
|
@@ -209,27 +209,8 @@ export class UnderlineInlineTool implements InlineTool {
|
|
|
209
209
|
continue;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
213
|
-
|
|
214
212
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
215
|
-
|
|
216
|
-
if (keepTrailing) {
|
|
217
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Check whether all siblings after a node are empty
|
|
224
|
-
*/
|
|
225
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
226
|
-
const next = node.nextSibling;
|
|
227
|
-
|
|
228
|
-
if (!next) {
|
|
229
|
-
return true;
|
|
230
213
|
}
|
|
231
|
-
|
|
232
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
233
214
|
}
|
|
234
215
|
|
|
235
216
|
/**
|
|
@@ -202,9 +202,6 @@ export class BoldNormalizationPass {
|
|
|
202
202
|
|
|
203
203
|
/**
|
|
204
204
|
* Replace non-breaking spaces with regular spaces in a text node.
|
|
205
|
-
* Preserves a trailing \u00A0 when the text node is the last child of its
|
|
206
|
-
* parent, because converting it to a regular space (char 32) would make it
|
|
207
|
-
* invisible under CSS white-space:normal.
|
|
208
205
|
* @param textNode - The text node to process
|
|
209
206
|
*/
|
|
210
207
|
private replaceNbspInTextNode(textNode: Text): void {
|
|
@@ -214,13 +211,8 @@ export class BoldNormalizationPass {
|
|
|
214
211
|
return;
|
|
215
212
|
}
|
|
216
213
|
|
|
217
|
-
const keepTrailing = text.endsWith('\u00A0') && BoldNormalizationPass.isEffectivelyLastChild(textNode);
|
|
218
|
-
const replaced = text.replace(/\u00A0/g, ' ');
|
|
219
|
-
|
|
220
214
|
// eslint-disable-next-line no-param-reassign
|
|
221
|
-
textNode.textContent =
|
|
222
|
-
? replaced.slice(0, -1) + '\u00A0'
|
|
223
|
-
: replaced;
|
|
215
|
+
textNode.textContent = text.replace(/\u00A0/g, ' ');
|
|
224
216
|
}
|
|
225
217
|
|
|
226
218
|
/**
|
|
@@ -285,26 +277,6 @@ export class BoldNormalizationPass {
|
|
|
285
277
|
rightStrong.remove();
|
|
286
278
|
}
|
|
287
279
|
|
|
288
|
-
/**
|
|
289
|
-
* Check whether all siblings after a node are empty (zero-length text nodes
|
|
290
|
-
* or empty elements). The unbold process can leave behind empty text nodes
|
|
291
|
-
* which would cause `!node.nextSibling` to return false even though the node
|
|
292
|
-
* is effectively the last meaningful child.
|
|
293
|
-
*/
|
|
294
|
-
private static isEffectivelyLastChild(node: Node): boolean {
|
|
295
|
-
const next = node.nextSibling;
|
|
296
|
-
|
|
297
|
-
if (!next) {
|
|
298
|
-
return true;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if ((next.textContent ?? '').length > 0) {
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return BoldNormalizationPass.isEffectivelyLastChild(next);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
280
|
/**
|
|
309
281
|
* Find the appropriate scope element from a selection
|
|
310
282
|
* @param selection - The current selection
|
|
@@ -91,14 +91,20 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
|
|
94
|
+
const isNavigated = event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
97
|
+
* Prevent default Tab behaviour only when navigation occurred within the
|
|
98
|
+
* editor. When navigateNext/navigatePrevious returns false (no next/prev
|
|
99
|
+
* block), allow the browser default so focus can leave the editor to
|
|
100
|
+
* external elements (e.g. inputs after the editor).
|
|
101
|
+
*
|
|
102
|
+
* Nested editors (e.g. database card drawer) are safe because the table
|
|
103
|
+
* cell guard above returns early, and those editors handle Tab themselves.
|
|
100
104
|
*/
|
|
101
|
-
|
|
105
|
+
if (isNavigated) {
|
|
106
|
+
event.preventDefault();
|
|
107
|
+
}
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Block } from '../../../block';
|
|
2
|
-
import { HEADER_PATTERN, CHECKLIST_PATTERN, UNORDERED_LIST_PATTERN, ORDERED_LIST_PATTERN, TOGGLE_HEADER_PATTERN, TOGGLE_PATTERN, HEADER_TOOL_NAME, LIST_TOOL_NAME, TOGGLE_TOOL_NAME, DIVIDER_TOOL_NAME, DIVIDER_PATTERN } from '../constants';
|
|
2
|
+
import { HEADER_PATTERN, CHECKLIST_PATTERN, UNORDERED_LIST_PATTERN, ORDERED_LIST_PATTERN, TOGGLE_HEADER_PATTERN, TOGGLE_PATTERN, HEADER_TOOL_NAME, LIST_TOOL_NAME, TOGGLE_TOOL_NAME, DIVIDER_TOOL_NAME, DIVIDER_PATTERN, QUOTE_TOOL_NAME, QUOTE_PATTERN, CODE_TOOL_NAME, CODE_PATTERN } from '../constants';
|
|
3
3
|
|
|
4
4
|
import { BlockEventComposer } from './__base';
|
|
5
5
|
|
|
@@ -39,8 +39,10 @@ export class MarkdownShortcuts extends BlockEventComposer {
|
|
|
39
39
|
const handledHeader = this.handleHeaderShortcut();
|
|
40
40
|
const handledToggleHeader = this.handleToggleHeaderShortcut();
|
|
41
41
|
const handledToggle = this.handleToggleShortcut();
|
|
42
|
+
const handledQuote = this.handleQuoteShortcut();
|
|
43
|
+
const handledCode = this.handleCodeShortcut();
|
|
42
44
|
|
|
43
|
-
return handledList || handledHeader || handledToggleHeader || handledToggle;
|
|
45
|
+
return handledList || handledHeader || handledToggleHeader || handledToggle || handledQuote || handledCode;
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
/**
|
|
@@ -402,6 +404,107 @@ export class MarkdownShortcuts extends BlockEventComposer {
|
|
|
402
404
|
return true;
|
|
403
405
|
}
|
|
404
406
|
|
|
407
|
+
/**
|
|
408
|
+
* Check if current block matches a quote shortcut pattern (" ") and convert it.
|
|
409
|
+
*/
|
|
410
|
+
private handleQuoteShortcut(): boolean {
|
|
411
|
+
const { BlockManager, Tools } = this.Blok;
|
|
412
|
+
const currentBlock = BlockManager.currentBlock;
|
|
413
|
+
|
|
414
|
+
if (!currentBlock) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
if (!currentBlock.tool.isDefault) {
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const quoteTool = Tools.blockTools.get(QUOTE_TOOL_NAME);
|
|
423
|
+
|
|
424
|
+
if (!quoteTool) {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const currentInput = currentBlock.currentInput;
|
|
429
|
+
|
|
430
|
+
if (!currentInput) {
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
const textContent = currentInput.textContent || '';
|
|
435
|
+
const match = QUOTE_PATTERN.exec(textContent);
|
|
436
|
+
|
|
437
|
+
if (!match) {
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
this.Blok.YjsManager.stopCapturing();
|
|
442
|
+
|
|
443
|
+
const shortcutLength = 2; // " " + space
|
|
444
|
+
const remainingHtml = this.extractRemainingHtml(currentInput, shortcutLength);
|
|
445
|
+
const caretOffset = this.getCaretOffset(currentInput) - shortcutLength;
|
|
446
|
+
|
|
447
|
+
const newBlock = BlockManager.replace(currentBlock, QUOTE_TOOL_NAME, {
|
|
448
|
+
text: remainingHtml,
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
this.setCaretAfterConversion(newBlock, caretOffset);
|
|
452
|
+
|
|
453
|
+
this.Blok.YjsManager.stopCapturing();
|
|
454
|
+
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Check if current block matches a code shortcut pattern ("``` ") and convert it.
|
|
460
|
+
*/
|
|
461
|
+
private handleCodeShortcut(): boolean {
|
|
462
|
+
const { BlockManager, Tools } = this.Blok;
|
|
463
|
+
const currentBlock = BlockManager.currentBlock;
|
|
464
|
+
|
|
465
|
+
if (!currentBlock) {
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (!currentBlock.tool.isDefault) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
const codeTool = Tools.blockTools.get(CODE_TOOL_NAME);
|
|
474
|
+
|
|
475
|
+
if (!codeTool) {
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const currentInput = currentBlock.currentInput;
|
|
480
|
+
|
|
481
|
+
if (!currentInput) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
const textContent = currentInput.textContent || '';
|
|
486
|
+
const match = CODE_PATTERN.exec(textContent);
|
|
487
|
+
|
|
488
|
+
if (!match) {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
this.Blok.YjsManager.stopCapturing();
|
|
493
|
+
|
|
494
|
+
const shortcutLength = 4; // "```" + space
|
|
495
|
+
const remainingHtml = this.extractRemainingHtml(currentInput, shortcutLength);
|
|
496
|
+
|
|
497
|
+
const newBlock = BlockManager.replace(currentBlock, CODE_TOOL_NAME, {
|
|
498
|
+
code: remainingHtml,
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
this.setCaretAfterConversion(newBlock, 0);
|
|
502
|
+
|
|
503
|
+
this.Blok.YjsManager.stopCapturing();
|
|
504
|
+
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
|
|
405
508
|
/**
|
|
406
509
|
* Match default header shortcuts like "# ", "## ", etc.
|
|
407
510
|
*/
|
|
@@ -93,3 +93,27 @@ export const DIVIDER_TOOL_NAME = 'divider';
|
|
|
93
93
|
* Matches exactly three hyphens with no other content.
|
|
94
94
|
*/
|
|
95
95
|
export const DIVIDER_PATTERN = /^-{3}$/;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Tool name for quote blocks.
|
|
99
|
+
*/
|
|
100
|
+
export const QUOTE_TOOL_NAME = 'quote';
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Regex pattern for detecting quote shortcuts.
|
|
104
|
+
* Matches " followed by a space at the start of text.
|
|
105
|
+
* Captures remaining content after the shortcut in group 1.
|
|
106
|
+
*/
|
|
107
|
+
export const QUOTE_PATTERN = /^"\s([\s\S]*)$/;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Tool name for code blocks.
|
|
111
|
+
*/
|
|
112
|
+
export const CODE_TOOL_NAME = 'code';
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Regex pattern for detecting code block shortcuts.
|
|
116
|
+
* Matches ``` followed by a space at the start of text.
|
|
117
|
+
* Captures remaining content after the shortcut in group 1.
|
|
118
|
+
*/
|
|
119
|
+
export const CODE_PATTERN = /^```\s([\s\S]*)$/;
|
|
@@ -1102,7 +1102,7 @@ export class BlockManager extends Module {
|
|
|
1102
1102
|
// eslint-disable-next-line no-param-reassign
|
|
1103
1103
|
block.lastEditedAt = Date.now();
|
|
1104
1104
|
// eslint-disable-next-line no-param-reassign
|
|
1105
|
-
block.lastEditedBy = this.config.user?.
|
|
1105
|
+
block.lastEditedBy = this.config.user?.id ?? null;
|
|
1106
1106
|
|
|
1107
1107
|
void this.syncBlockDataToYjs(block);
|
|
1108
1108
|
}
|
|
@@ -28,7 +28,7 @@ export interface ComposeBlockOptions {
|
|
|
28
28
|
bindEventsImmediately?: boolean;
|
|
29
29
|
/** Timestamp of the last edit (milliseconds since epoch) */
|
|
30
30
|
lastEditedAt?: number;
|
|
31
|
-
/**
|
|
31
|
+
/** ID of the user who last edited this block */
|
|
32
32
|
lastEditedBy?: string | null;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -113,6 +113,11 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
113
113
|
*/
|
|
114
114
|
private flipperKeydownSource: HTMLElement | null = null;
|
|
115
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Handler for Delete key shortcut, stored for cleanup
|
|
118
|
+
*/
|
|
119
|
+
private deleteKeyHandler: ((event: KeyboardEvent) => void) | null = null;
|
|
120
|
+
|
|
116
121
|
/**
|
|
117
122
|
* Panel with block settings with 2 sections:
|
|
118
123
|
* - Tool's Settings
|
|
@@ -186,11 +191,13 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
186
191
|
/** Get tool-specific tunes and common tunes (delete, move, etc.) */
|
|
187
192
|
const { toolTunes, commonTunes } = block.getTunes();
|
|
188
193
|
|
|
194
|
+
const items = await this.getTunesItems(block, commonTunes, toolTunes);
|
|
195
|
+
|
|
189
196
|
const PopoverClass = isMobileScreen() ? PopoverMobile : PopoverDesktop;
|
|
190
197
|
const popoverParams: PopoverParams & { flipper?: Flipper } = {
|
|
191
198
|
searchable: true,
|
|
192
199
|
trigger: trigger || this.nodes.wrapper,
|
|
193
|
-
items
|
|
200
|
+
items,
|
|
194
201
|
messages: {
|
|
195
202
|
nothingFound: this.Blok.I18n.t('popover.nothingFound'),
|
|
196
203
|
search: this.Blok.I18n.t('popover.search'),
|
|
@@ -208,6 +215,8 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
208
215
|
|
|
209
216
|
this.popover.on(PopoverEvent.Closed, this.onPopoverClose);
|
|
210
217
|
|
|
218
|
+
this.attachDeleteKeyListener(items);
|
|
219
|
+
|
|
211
220
|
/**
|
|
212
221
|
* Set opened flag AFTER popover is created to prevent race conditions
|
|
213
222
|
* where close() is called during the async getTunesItems() call
|
|
@@ -272,6 +281,7 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
272
281
|
}
|
|
273
282
|
|
|
274
283
|
this.selection.clearSaved();
|
|
284
|
+
this.detachDeleteKeyListener();
|
|
275
285
|
this.detachFlipperKeydownListener();
|
|
276
286
|
|
|
277
287
|
/**
|
|
@@ -415,6 +425,7 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
415
425
|
title: this.Blok.I18n.t('blockSettings.delete'),
|
|
416
426
|
name: 'delete',
|
|
417
427
|
isDestructive: true,
|
|
428
|
+
secondaryLabel: 'Del',
|
|
418
429
|
closeOnActivate: true,
|
|
419
430
|
onActivate: () => {
|
|
420
431
|
const { BlockManager, Caret, Toolbar } = this.Blok;
|
|
@@ -445,7 +456,8 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
445
456
|
}
|
|
446
457
|
|
|
447
458
|
/**
|
|
448
|
-
* Creates the "Last edited
|
|
459
|
+
* Creates the "Last edited" footer element for block settings.
|
|
460
|
+
* If a resolveUser callback is configured, resolves the user ID to a display name.
|
|
449
461
|
* @param block - the block whose metadata to display
|
|
450
462
|
* @returns the footer DOM element
|
|
451
463
|
*/
|
|
@@ -462,22 +474,46 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
462
474
|
|
|
463
475
|
label.setAttribute('data-edit-meta-label', '');
|
|
464
476
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
477
|
+
label.textContent = this.Blok.I18n.t('blockSettings.lastEdited');
|
|
478
|
+
|
|
479
|
+
if (block.lastEditedBy != null && this.config.resolveUser != null) {
|
|
480
|
+
void Promise.resolve(this.config.resolveUser(block.lastEditedBy)).then((userInfo) => {
|
|
481
|
+
if (userInfo?.name != null) {
|
|
482
|
+
label.textContent = this.Blok.I18n.t('blockSettings.lastEditedBy', { name: userInfo.name });
|
|
483
|
+
}
|
|
484
|
+
});
|
|
469
485
|
}
|
|
470
486
|
|
|
471
487
|
container.appendChild(label);
|
|
472
488
|
|
|
473
489
|
if (block.lastEditedAt !== undefined) {
|
|
474
490
|
const dateEl = document.createElement('div');
|
|
475
|
-
const formatted = new Intl.DateTimeFormat(undefined, {
|
|
476
|
-
dateStyle: 'medium',
|
|
477
|
-
timeStyle: 'short',
|
|
478
|
-
}).format(new Date(block.lastEditedAt));
|
|
479
491
|
|
|
480
|
-
dateEl.
|
|
492
|
+
dateEl.classList.add('mt-1');
|
|
493
|
+
const locale = this.Blok.I18n.getLocale();
|
|
494
|
+
const date = new Date(block.lastEditedAt);
|
|
495
|
+
|
|
496
|
+
const dateParts = new Intl.DateTimeFormat(locale, {
|
|
497
|
+
day: 'numeric',
|
|
498
|
+
month: 'long',
|
|
499
|
+
year: 'numeric',
|
|
500
|
+
}).formatToParts(date);
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Strip trailing literal parts that are abbreviations (contain a period),
|
|
504
|
+
* e.g. " г." in Russian or " р." in Ukrainian, while preserving essential
|
|
505
|
+
* trailing literals like "日" in Japanese/Chinese.
|
|
506
|
+
*/
|
|
507
|
+
while (dateParts.length > 0
|
|
508
|
+
&& dateParts[dateParts.length - 1].type === 'literal'
|
|
509
|
+
&& dateParts[dateParts.length - 1].value.includes('.')) {
|
|
510
|
+
dateParts.pop();
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
const dateStr = dateParts.map(p => p.value).join('');
|
|
514
|
+
const timeStr = new Intl.DateTimeFormat(locale, { timeStyle: 'short' }).format(date);
|
|
515
|
+
|
|
516
|
+
dateEl.textContent = `${dateStr}, ${timeStr}`;
|
|
481
517
|
container.appendChild(dateEl);
|
|
482
518
|
}
|
|
483
519
|
|
|
@@ -893,4 +929,46 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
893
929
|
this.flipperKeydownSource = null;
|
|
894
930
|
this.flipperKeydownHandler = null;
|
|
895
931
|
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Attaches a keydown listener on the popover element to handle the Delete key shortcut
|
|
935
|
+
* @param items - popover items to search for the delete action
|
|
936
|
+
*/
|
|
937
|
+
private attachDeleteKeyListener(items: PopoverItemParams[]): void {
|
|
938
|
+
this.detachDeleteKeyListener();
|
|
939
|
+
|
|
940
|
+
if (this.popover === null) {
|
|
941
|
+
return;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
const deleteItem = items.find(
|
|
945
|
+
(item): item is PopoverItemParams & { name: string; onActivate: () => void } =>
|
|
946
|
+
'name' in item && item.name === 'delete' && 'onActivate' in item
|
|
947
|
+
);
|
|
948
|
+
|
|
949
|
+
if (deleteItem === undefined) {
|
|
950
|
+
return;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
this.deleteKeyHandler = (event: KeyboardEvent) => {
|
|
954
|
+
if (event.key === 'Delete') {
|
|
955
|
+
event.preventDefault();
|
|
956
|
+
deleteItem.onActivate(deleteItem);
|
|
957
|
+
this.close();
|
|
958
|
+
}
|
|
959
|
+
};
|
|
960
|
+
|
|
961
|
+
this.popover.getElement().addEventListener('keydown', this.deleteKeyHandler);
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/**
|
|
965
|
+
* Removes the Delete key shortcut listener from the popover element
|
|
966
|
+
*/
|
|
967
|
+
private detachDeleteKeyListener(): void {
|
|
968
|
+
if (this.popover !== null && this.deleteKeyHandler !== null) {
|
|
969
|
+
this.popover.getElement().removeEventListener('keydown', this.deleteKeyHandler);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
this.deleteKeyHandler = null;
|
|
973
|
+
}
|
|
896
974
|
}
|
|
@@ -205,6 +205,7 @@ export class UI extends Module<UINodes> {
|
|
|
205
205
|
});
|
|
206
206
|
this.keyboardController.state = this.Blok;
|
|
207
207
|
this.keyboardController.setRedactorElement(this.nodes.redactor);
|
|
208
|
+
this.keyboardController.setWrapperElement(this.nodes.wrapper);
|
|
208
209
|
|
|
209
210
|
/**
|
|
210
211
|
* Selection controller needs wrapper element for click detection
|
|
@@ -29,6 +29,20 @@ export class KeyboardController extends Controller {
|
|
|
29
29
|
*/
|
|
30
30
|
private redactorElement: HTMLElement | null = null;
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The editor wrapper element for editor boundary checks.
|
|
34
|
+
* Stored directly because the keyboard controller's Blok reference
|
|
35
|
+
* (created by getModulesDiff) does not include the UI module itself.
|
|
36
|
+
*/
|
|
37
|
+
private wrapperElement: HTMLElement | null = null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Flag set when the controller is disabled (editor destroyed or read-only).
|
|
41
|
+
* Used instead of checking this.Blok.UI which is unavailable to controllers
|
|
42
|
+
* owned by the UI module (getModulesDiff excludes the owning module).
|
|
43
|
+
*/
|
|
44
|
+
private isDisabled = false;
|
|
45
|
+
|
|
32
46
|
/**
|
|
33
47
|
* Stable handler references for deduplication via Listeners.findOne.
|
|
34
48
|
* Storing as class properties ensures the same function reference is passed
|
|
@@ -61,7 +75,7 @@ export class KeyboardController extends Controller {
|
|
|
61
75
|
if (target instanceof Element) {
|
|
62
76
|
const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
|
|
63
77
|
|
|
64
|
-
if (closestEditor !== null && closestEditor !== this.
|
|
78
|
+
if (closestEditor !== null && closestEditor !== this.wrapperElement) {
|
|
65
79
|
return;
|
|
66
80
|
}
|
|
67
81
|
}
|
|
@@ -87,6 +101,13 @@ export class KeyboardController extends Controller {
|
|
|
87
101
|
this.redactorElement = element;
|
|
88
102
|
}
|
|
89
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Set the editor wrapper element for editor boundary checks
|
|
106
|
+
*/
|
|
107
|
+
public setWrapperElement(element: HTMLElement): void {
|
|
108
|
+
this.wrapperElement = element;
|
|
109
|
+
}
|
|
110
|
+
|
|
90
111
|
/**
|
|
91
112
|
* Enable keyboard event listeners
|
|
92
113
|
*/
|
|
@@ -95,6 +116,8 @@ export class KeyboardController extends Controller {
|
|
|
95
116
|
return;
|
|
96
117
|
}
|
|
97
118
|
|
|
119
|
+
this.isDisabled = false;
|
|
120
|
+
|
|
98
121
|
// Document-level keydown handler
|
|
99
122
|
this.readOnlyMutableListeners.on(document, 'keydown', this.documentKeydownHandler, true);
|
|
100
123
|
|
|
@@ -112,27 +135,54 @@ export class KeyboardController extends Controller {
|
|
|
112
135
|
this.readOnlyMutableListeners.on(this.redactorElement, 'keydown', this.redactorKeydownHandler, true);
|
|
113
136
|
}
|
|
114
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Disable the controller — marks it as inactive so stale handlers bail out.
|
|
140
|
+
*/
|
|
141
|
+
public override disable(): void {
|
|
142
|
+
this.isDisabled = true;
|
|
143
|
+
super.disable();
|
|
144
|
+
}
|
|
145
|
+
|
|
115
146
|
/**
|
|
116
147
|
* Main keyboard event router
|
|
117
148
|
* @param event - keyboard event
|
|
118
149
|
*/
|
|
119
150
|
private handleKeydown(event: KeyboardEvent): void {
|
|
151
|
+
/**
|
|
152
|
+
* Guard against destroyed or disabled editor instances whose listeners
|
|
153
|
+
* were not properly removed. When the controller is disabled the handler
|
|
154
|
+
* bails out early so it does not throw or interfere with other editors.
|
|
155
|
+
*/
|
|
156
|
+
if (this.isDisabled) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
120
160
|
const target = event.target;
|
|
161
|
+
const key = event.key ?? '';
|
|
121
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Skip input/textarea targets for most keys to avoid intercepting normal
|
|
165
|
+
* typing. Escape is exempted only for inputs inside popovers (e.g. the
|
|
166
|
+
* search input) so the keyboard controller can close the popover.
|
|
167
|
+
* Inputs elsewhere (e.g. database title edit inputs) keep their own
|
|
168
|
+
* Escape handling.
|
|
169
|
+
*/
|
|
122
170
|
if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {
|
|
123
|
-
|
|
171
|
+
const isInsidePopover = target.closest('[data-blok-popover]') !== null;
|
|
172
|
+
|
|
173
|
+
if (key !== 'Escape' || !isInsidePopover) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
124
176
|
}
|
|
125
177
|
|
|
126
178
|
if (target instanceof Element) {
|
|
127
179
|
const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
|
|
128
180
|
|
|
129
|
-
if (closestEditor !== null && closestEditor !== this.
|
|
181
|
+
if (closestEditor !== null && closestEditor !== this.wrapperElement) {
|
|
130
182
|
return;
|
|
131
183
|
}
|
|
132
184
|
}
|
|
133
185
|
|
|
134
|
-
const key = event.key ?? '';
|
|
135
|
-
|
|
136
186
|
switch (key) {
|
|
137
187
|
case 'Enter':
|
|
138
188
|
this.handleEnter(event);
|
|
@@ -197,7 +197,7 @@ export class DocumentStore {
|
|
|
197
197
|
* Update a block's edit metadata fields directly on the Y.Map.
|
|
198
198
|
* @param id - Block id
|
|
199
199
|
* @param lastEditedAt - Timestamp in milliseconds
|
|
200
|
-
* @param lastEditedBy - User
|
|
200
|
+
* @param lastEditedBy - User ID, or null
|
|
201
201
|
*/
|
|
202
202
|
public updateBlockMetadata(id: string, lastEditedAt: number, lastEditedBy: string | null): void {
|
|
203
203
|
const yblock = this.getBlockById(id);
|
|
@@ -168,7 +168,7 @@ export class YjsManager extends Module {
|
|
|
168
168
|
* Update a block's edit metadata.
|
|
169
169
|
* @param id - Block id
|
|
170
170
|
* @param lastEditedAt - Timestamp in milliseconds
|
|
171
|
-
* @param lastEditedBy - User
|
|
171
|
+
* @param lastEditedBy - User ID, or null
|
|
172
172
|
*/
|
|
173
173
|
public updateBlockMetadata(id: string, lastEditedAt: number, lastEditedBy: string | null): void {
|
|
174
174
|
this.documentStore.updateBlockMetadata(id, lastEditedAt, lastEditedBy);
|
|
@@ -141,7 +141,16 @@ export abstract class PopoverAbstract<Nodes extends PopoverNodes = PopoverNodes>
|
|
|
141
141
|
this.search.focus();
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Show hazes instantly on open (no transition), then restore transition for scroll-triggered changes
|
|
146
|
+
*/
|
|
147
|
+
this.nodes.scrollHazeTop.style.transition = 'none';
|
|
148
|
+
this.nodes.scrollHazeBottom.style.transition = 'none';
|
|
144
149
|
this.updateScrollHazes();
|
|
150
|
+
requestAnimationFrame(() => {
|
|
151
|
+
this.nodes.scrollHazeTop.style.transition = '';
|
|
152
|
+
this.nodes.scrollHazeBottom.style.transition = '';
|
|
153
|
+
});
|
|
145
154
|
|
|
146
155
|
const { trigger } = this.params;
|
|
147
156
|
const isRootWithTrigger = (this.params.nestingLevel ?? 0) === 0 && trigger !== undefined;
|