@particle-academy/react-fancy 6.7.2 → 6.9.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/CHANGELOG.md +44 -1
- package/dist/{Card-CuRZivBz.d.cts → Card-D0sp2T1V.d.cts} +6 -1
- package/dist/{Card-CuRZivBz.d.ts → Card-D0sp2T1V.d.ts} +6 -1
- package/dist/accordion-panel.cjs +7 -7
- package/dist/accordion-panel.js +1 -1
- package/dist/accordion.cjs +3 -3
- package/dist/accordion.js +1 -1
- package/dist/autocomplete.cjs +4 -3
- package/dist/autocomplete.js +3 -2
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.js +1 -1
- package/dist/breadcrumbs.cjs +2 -2
- package/dist/breadcrumbs.js +1 -1
- package/dist/button.cjs +3 -3
- package/dist/button.d.cts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.js +1 -1
- package/dist/calendar.cjs +2 -2
- package/dist/calendar.js +1 -1
- package/dist/callout.cjs +2 -2
- package/dist/callout.js +1 -1
- package/dist/card.cjs +7 -7
- package/dist/card.d.cts +2 -2
- package/dist/card.d.ts +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.cjs +7 -7
- package/dist/carousel.js +1 -1
- package/dist/chart.cjs +2 -2
- package/dist/chart.js +1 -1
- package/dist/chat-drawer.cjs +2 -2
- package/dist/chat-drawer.js +1 -1
- package/dist/chat-thread.cjs +7 -7
- package/dist/chat-thread.js +5 -5
- package/dist/checkbox-group.cjs +5 -5
- package/dist/checkbox-group.js +4 -4
- package/dist/checkbox.cjs +3 -3
- package/dist/checkbox.js +2 -2
- package/dist/{chunk-B4YV2V7G.cjs → chunk-2DX3PNXU.cjs} +3 -3
- package/dist/{chunk-B4YV2V7G.cjs.map → chunk-2DX3PNXU.cjs.map} +1 -1
- package/dist/{chunk-KPRSRWNM.js → chunk-2I7VNCBZ.js} +3 -3
- package/dist/{chunk-KPRSRWNM.js.map → chunk-2I7VNCBZ.js.map} +1 -1
- package/dist/{chunk-WMANILKC.cjs → chunk-2UYQ34RJ.cjs} +7 -7
- package/dist/chunk-2UYQ34RJ.cjs.map +1 -0
- package/dist/chunk-36IC3NDN.cjs +21 -0
- package/dist/chunk-36IC3NDN.cjs.map +1 -0
- package/dist/{chunk-LFC2DL6H.cjs → chunk-3BBEVHSP.cjs} +14 -9
- package/dist/chunk-3BBEVHSP.cjs.map +1 -0
- package/dist/{chunk-2O5UXH5R.cjs → chunk-3EZ6UPXS.cjs} +10 -10
- package/dist/chunk-3EZ6UPXS.cjs.map +1 -0
- package/dist/{chunk-XBFTO64U.cjs → chunk-3KJN3GTB.cjs} +4 -4
- package/dist/{chunk-XBFTO64U.cjs.map → chunk-3KJN3GTB.cjs.map} +1 -1
- package/dist/{chunk-37D5PYEF.js → chunk-3O3ZWWLG.js} +17 -4
- package/dist/chunk-3O3ZWWLG.js.map +1 -0
- package/dist/{chunk-5PHPJL7Z.js → chunk-4EQ336PQ.js} +4 -4
- package/dist/{chunk-5PHPJL7Z.js.map → chunk-4EQ336PQ.js.map} +1 -1
- package/dist/{chunk-EENHSMV2.js → chunk-4L3MGQAR.js} +6 -6
- package/dist/{chunk-EENHSMV2.js.map → chunk-4L3MGQAR.js.map} +1 -1
- package/dist/{chunk-QGY5FPVM.js → chunk-54NB3T3Q.js} +6 -4
- package/dist/chunk-54NB3T3Q.js.map +1 -0
- package/dist/{chunk-FRWOWDGX.js → chunk-5FA6V7JF.js} +3 -3
- package/dist/{chunk-FRWOWDGX.js.map → chunk-5FA6V7JF.js.map} +1 -1
- package/dist/{chunk-UUEAFG6V.js → chunk-5NJF7SQX.js} +6 -6
- package/dist/{chunk-UUEAFG6V.js.map → chunk-5NJF7SQX.js.map} +1 -1
- package/dist/{chunk-ZGDOWJKL.cjs → chunk-5NTFXQ4K.cjs} +6 -6
- package/dist/{chunk-ZGDOWJKL.cjs.map → chunk-5NTFXQ4K.cjs.map} +1 -1
- package/dist/{chunk-CQ7QXZLR.cjs → chunk-5SVZX6WF.cjs} +4 -4
- package/dist/chunk-5SVZX6WF.cjs.map +1 -0
- package/dist/{chunk-JY7HPFOE.cjs → chunk-6B2GMKE4.cjs} +5 -5
- package/dist/{chunk-JY7HPFOE.cjs.map → chunk-6B2GMKE4.cjs.map} +1 -1
- package/dist/{chunk-GSMD5NK5.js → chunk-6BCXGP2T.js} +7 -7
- package/dist/{chunk-GSMD5NK5.js.map → chunk-6BCXGP2T.js.map} +1 -1
- package/dist/{chunk-CVDL6C2O.cjs → chunk-6EPM5JG7.cjs} +3 -3
- package/dist/{chunk-CVDL6C2O.cjs.map → chunk-6EPM5JG7.cjs.map} +1 -1
- package/dist/{chunk-FVQO75KY.cjs → chunk-6GOPFKGC.cjs} +10 -4
- package/dist/chunk-6GOPFKGC.cjs.map +1 -0
- package/dist/{chunk-QTS4Q2NK.js → chunk-6RXEWM3V.js} +4 -3
- package/dist/chunk-6RXEWM3V.js.map +1 -0
- package/dist/{chunk-TLRFXSPA.cjs → chunk-73REG7KM.cjs} +13 -13
- package/dist/{chunk-TLRFXSPA.cjs.map → chunk-73REG7KM.cjs.map} +1 -1
- package/dist/{chunk-MI57NAKF.js → chunk-7B3Z4NVM.js} +6 -5
- package/dist/chunk-7B3Z4NVM.js.map +1 -0
- package/dist/{chunk-J2BWXCES.js → chunk-7GRIO5AZ.js} +3 -3
- package/dist/{chunk-J2BWXCES.js.map → chunk-7GRIO5AZ.js.map} +1 -1
- package/dist/{chunk-V5JTTLJP.cjs → chunk-7K2C744H.cjs} +3 -3
- package/dist/{chunk-V5JTTLJP.cjs.map → chunk-7K2C744H.cjs.map} +1 -1
- package/dist/{chunk-AJPYGRLA.cjs → chunk-7NRG77U5.cjs} +12 -4
- package/dist/chunk-7NRG77U5.cjs.map +1 -0
- package/dist/{chunk-GDF6XTHC.js → chunk-7OUBFO4D.js} +7 -5
- package/dist/chunk-7OUBFO4D.js.map +1 -0
- package/dist/{chunk-6H7ZN23X.cjs → chunk-7PK3OUKR.cjs} +6 -6
- package/dist/{chunk-6H7ZN23X.cjs.map → chunk-7PK3OUKR.cjs.map} +1 -1
- package/dist/{chunk-EUVWYDFN.js → chunk-AE6ICNJR.js} +14 -9
- package/dist/chunk-AE6ICNJR.js.map +1 -0
- package/dist/{chunk-YJXP6AOL.cjs → chunk-AF33UCTN.cjs} +4 -4
- package/dist/{chunk-YJXP6AOL.cjs.map → chunk-AF33UCTN.cjs.map} +1 -1
- package/dist/{chunk-PM5I5ZHK.cjs → chunk-AFFR7HHZ.cjs} +8 -7
- package/dist/chunk-AFFR7HHZ.cjs.map +1 -0
- package/dist/{chunk-F4OYQ2XZ.js → chunk-AR5DLM4K.js} +9 -6
- package/dist/chunk-AR5DLM4K.js.map +1 -0
- package/dist/{chunk-DJB3N4G3.cjs → chunk-AVGZ4PPC.cjs} +9 -9
- package/dist/{chunk-DJB3N4G3.cjs.map → chunk-AVGZ4PPC.cjs.map} +1 -1
- package/dist/{chunk-RANTYGKW.js → chunk-AXW55PQG.js} +3 -3
- package/dist/chunk-AXW55PQG.js.map +1 -0
- package/dist/{chunk-OASSZI6M.cjs → chunk-AZ5DWOQY.cjs} +5 -4
- package/dist/chunk-AZ5DWOQY.cjs.map +1 -0
- package/dist/{chunk-NSJBVV7R.js → chunk-BPTCMI3E.js} +21 -10
- package/dist/chunk-BPTCMI3E.js.map +1 -0
- package/dist/{chunk-PDVU2PXR.js → chunk-BQENLOEV.js} +10 -10
- package/dist/chunk-BQENLOEV.js.map +1 -0
- package/dist/{chunk-25HRO7HQ.cjs → chunk-BYMOPR7P.cjs} +7 -7
- package/dist/chunk-BYMOPR7P.cjs.map +1 -0
- package/dist/{chunk-FKZB27OM.cjs → chunk-C6EVRWXZ.cjs} +11 -8
- package/dist/chunk-C6EVRWXZ.cjs.map +1 -0
- package/dist/{chunk-GTS3QA7M.js → chunk-CO2NEUFK.js} +5 -5
- package/dist/chunk-CO2NEUFK.js.map +1 -0
- package/dist/{chunk-ESCIXKFT.js → chunk-D6NISIKV.js} +17 -7
- package/dist/chunk-D6NISIKV.js.map +1 -0
- package/dist/{chunk-MRZXTL46.cjs → chunk-DFROB5TW.cjs} +20 -20
- package/dist/{chunk-MRZXTL46.cjs.map → chunk-DFROB5TW.cjs.map} +1 -1
- package/dist/{chunk-KFA7B6WP.cjs → chunk-DPPDZOMY.cjs} +17 -7
- package/dist/chunk-DPPDZOMY.cjs.map +1 -0
- package/dist/{chunk-BXPLERIJ.js → chunk-DW2PHLOA.js} +5 -4
- package/dist/chunk-DW2PHLOA.js.map +1 -0
- package/dist/{chunk-BYO5RUDE.cjs → chunk-DXLPBLNC.cjs} +6 -5
- package/dist/chunk-DXLPBLNC.cjs.map +1 -0
- package/dist/{chunk-5WQ6FPSP.js → chunk-E2AEU5SP.js} +4 -4
- package/dist/{chunk-5WQ6FPSP.js.map → chunk-E2AEU5SP.js.map} +1 -1
- package/dist/{chunk-3QCAOD2W.cjs → chunk-EC4ZYZNK.cjs} +3 -3
- package/dist/{chunk-3QCAOD2W.cjs.map → chunk-EC4ZYZNK.cjs.map} +1 -1
- package/dist/{chunk-KXYMMNNV.js → chunk-EDIX6EXQ.js} +20 -20
- package/dist/{chunk-KXYMMNNV.js.map → chunk-EDIX6EXQ.js.map} +1 -1
- package/dist/{chunk-KOAMRCSC.cjs → chunk-ETUDUDSL.cjs} +14 -11
- package/dist/chunk-ETUDUDSL.cjs.map +1 -0
- package/dist/{chunk-LY3RQB3H.js → chunk-F3U4AVGF.js} +3 -3
- package/dist/{chunk-LY3RQB3H.js.map → chunk-F3U4AVGF.js.map} +1 -1
- package/dist/{chunk-AE53RKWR.cjs → chunk-FF5G3E76.cjs} +407 -22
- package/dist/chunk-FF5G3E76.cjs.map +1 -0
- package/dist/{chunk-WNWEC5OU.cjs → chunk-FKHYJ5IC.cjs} +3 -3
- package/dist/{chunk-WNWEC5OU.cjs.map → chunk-FKHYJ5IC.cjs.map} +1 -1
- package/dist/{chunk-QP6VNKLW.cjs → chunk-FNPII6TF.cjs} +9 -5
- package/dist/chunk-FNPII6TF.cjs.map +1 -0
- package/dist/{chunk-JY2RC6I4.js → chunk-FQCLJZZS.js} +13 -10
- package/dist/chunk-FQCLJZZS.js.map +1 -0
- package/dist/{chunk-EQ7G5F6K.js → chunk-FRUHEDZN.js} +3 -3
- package/dist/{chunk-EQ7G5F6K.js.map → chunk-FRUHEDZN.js.map} +1 -1
- package/dist/{chunk-BJL3VDRK.cjs → chunk-FY2WDVKF.cjs} +3 -3
- package/dist/{chunk-BJL3VDRK.cjs.map → chunk-FY2WDVKF.cjs.map} +1 -1
- package/dist/{chunk-SKMORSBO.cjs → chunk-FZQWFDUV.cjs} +5 -5
- package/dist/chunk-FZQWFDUV.cjs.map +1 -0
- package/dist/{chunk-HNJXBMHI.cjs → chunk-G5MDMQVQ.cjs} +40 -39
- package/dist/chunk-G5MDMQVQ.cjs.map +1 -0
- package/dist/{chunk-4DL2U23D.cjs → chunk-GE2ZGE3A.cjs} +21 -13
- package/dist/chunk-GE2ZGE3A.cjs.map +1 -0
- package/dist/{chunk-THMFLRDW.cjs → chunk-GE6TSA3M.cjs} +17 -17
- package/dist/{chunk-THMFLRDW.cjs.map → chunk-GE6TSA3M.cjs.map} +1 -1
- package/dist/{chunk-MQ6VGG62.js → chunk-GJWNZMJT.js} +14 -11
- package/dist/chunk-GJWNZMJT.js.map +1 -0
- package/dist/{chunk-5TP642UT.js → chunk-GODJVIIO.js} +12 -11
- package/dist/chunk-GODJVIIO.js.map +1 -0
- package/dist/{chunk-RLE5WYY6.js → chunk-GZSRKBYI.js} +406 -24
- package/dist/chunk-GZSRKBYI.js.map +1 -0
- package/dist/{chunk-FR4RHVPR.js → chunk-H7IQVCTX.js} +6 -4
- package/dist/chunk-H7IQVCTX.js.map +1 -0
- package/dist/{chunk-KOTUFZJ6.cjs → chunk-H7OTLGRD.cjs} +14 -11
- package/dist/chunk-H7OTLGRD.cjs.map +1 -0
- package/dist/{chunk-K5MQZTDW.cjs → chunk-HKLBCA5X.cjs} +4 -4
- package/dist/{chunk-K5MQZTDW.cjs.map → chunk-HKLBCA5X.cjs.map} +1 -1
- package/dist/{chunk-5QKQXM5V.cjs → chunk-HYU46SOE.cjs} +5 -5
- package/dist/{chunk-5QKQXM5V.cjs.map → chunk-HYU46SOE.cjs.map} +1 -1
- package/dist/{chunk-X2A3NAJW.js → chunk-I65KXHYL.js} +4 -4
- package/dist/chunk-I65KXHYL.js.map +1 -0
- package/dist/{chunk-USWQAMI3.js → chunk-IF6EITB5.js} +3 -3
- package/dist/{chunk-USWQAMI3.js.map → chunk-IF6EITB5.js.map} +1 -1
- package/dist/{chunk-DXZCKDYS.js → chunk-IG2UDCBA.js} +9 -9
- package/dist/chunk-IG2UDCBA.js.map +1 -0
- package/dist/{chunk-YQZB5Z7C.cjs → chunk-INC35VEE.cjs} +3 -2
- package/dist/chunk-INC35VEE.cjs.map +1 -0
- package/dist/{chunk-AQ4DZT4Y.cjs → chunk-ISAHWGMD.cjs} +6 -6
- package/dist/{chunk-AQ4DZT4Y.cjs.map → chunk-ISAHWGMD.cjs.map} +1 -1
- package/dist/{chunk-PJNUGSKI.js → chunk-IYG436ZY.js} +26 -25
- package/dist/chunk-IYG436ZY.js.map +1 -0
- package/dist/{chunk-Z4UXLQSK.cjs → chunk-JDFJK5GO.cjs} +16 -16
- package/dist/chunk-JDFJK5GO.cjs.map +1 -0
- package/dist/{chunk-MAZEX4EZ.cjs → chunk-JQIFCWNZ.cjs} +13 -13
- package/dist/{chunk-MAZEX4EZ.cjs.map → chunk-JQIFCWNZ.cjs.map} +1 -1
- package/dist/{chunk-MKGWHSNV.cjs → chunk-JV2HEOCB.cjs} +5 -4
- package/dist/chunk-JV2HEOCB.cjs.map +1 -0
- package/dist/{chunk-GDH43QH6.js → chunk-KAKKZDCE.js} +6 -6
- package/dist/{chunk-GDH43QH6.js.map → chunk-KAKKZDCE.js.map} +1 -1
- package/dist/{chunk-DJYG7DXS.js → chunk-KDRBUF5S.js} +4 -4
- package/dist/chunk-KDRBUF5S.js.map +1 -0
- package/dist/{chunk-ZVDW2VX5.cjs → chunk-KGSL6SVX.cjs} +3 -3
- package/dist/chunk-KGSL6SVX.cjs.map +1 -0
- package/dist/{chunk-YAPGHVBZ.js → chunk-KRECSPD3.js} +4 -4
- package/dist/{chunk-YAPGHVBZ.js.map → chunk-KRECSPD3.js.map} +1 -1
- package/dist/{chunk-NPSKZ7ZB.cjs → chunk-L5NDZEL6.cjs} +12 -12
- package/dist/{chunk-NPSKZ7ZB.cjs.map → chunk-L5NDZEL6.cjs.map} +1 -1
- package/dist/{chunk-UE3QO7R3.js → chunk-LAQT5FFV.js} +3 -3
- package/dist/{chunk-UE3QO7R3.js.map → chunk-LAQT5FFV.js.map} +1 -1
- package/dist/{chunk-YH75G6SP.cjs → chunk-LHHELLMT.cjs} +3 -3
- package/dist/{chunk-YH75G6SP.cjs.map → chunk-LHHELLMT.cjs.map} +1 -1
- package/dist/{chunk-UK6BGM74.cjs → chunk-LREJ7AV2.cjs} +17 -4
- package/dist/chunk-LREJ7AV2.cjs.map +1 -0
- package/dist/{chunk-Y3QAEF2P.cjs → chunk-LVNCNMKD.cjs} +9 -7
- package/dist/chunk-LVNCNMKD.cjs.map +1 -0
- package/dist/{chunk-UZCR7DK5.js → chunk-LXEOBSEZ.js} +3 -3
- package/dist/{chunk-UZCR7DK5.js.map → chunk-LXEOBSEZ.js.map} +1 -1
- package/dist/{chunk-HLI6RB5V.cjs → chunk-M5ER3Y5I.cjs} +32 -31
- package/dist/chunk-M5ER3Y5I.cjs.map +1 -0
- package/dist/{chunk-CEFK54WP.cjs → chunk-MDAI54AG.cjs} +7 -5
- package/dist/chunk-MDAI54AG.cjs.map +1 -0
- package/dist/{chunk-WE5WGVVX.js → chunk-MKDTXMCE.js} +3 -3
- package/dist/{chunk-WE5WGVVX.js.map → chunk-MKDTXMCE.js.map} +1 -1
- package/dist/{chunk-SXXDTW7S.js → chunk-NETUI353.js} +10 -4
- package/dist/chunk-NETUI353.js.map +1 -0
- package/dist/{chunk-XHUV3VSM.cjs → chunk-NIFHAFKK.cjs} +3 -3
- package/dist/{chunk-XHUV3VSM.cjs.map → chunk-NIFHAFKK.cjs.map} +1 -1
- package/dist/{chunk-LKN7FYW6.js → chunk-NW2LQRUP.js} +4 -4
- package/dist/chunk-NW2LQRUP.js.map +1 -0
- package/dist/{chunk-ONHT2PDW.cjs → chunk-NWP5EGSR.cjs} +3 -3
- package/dist/{chunk-ONHT2PDW.cjs.map → chunk-NWP5EGSR.cjs.map} +1 -1
- package/dist/{chunk-RSLZL6VP.js → chunk-OBA2LR4I.js} +3 -3
- package/dist/chunk-OBA2LR4I.js.map +1 -0
- package/dist/{chunk-VSTUGU7W.js → chunk-PIYQPXLT.js} +8 -8
- package/dist/{chunk-VSTUGU7W.js.map → chunk-PIYQPXLT.js.map} +1 -1
- package/dist/{chunk-WX5XYDVN.js → chunk-PZTFGPQJ.js} +3 -3
- package/dist/{chunk-WX5XYDVN.js.map → chunk-PZTFGPQJ.js.map} +1 -1
- package/dist/{chunk-4GPH7HOR.js → chunk-Q4CNEHVN.js} +3 -3
- package/dist/{chunk-4GPH7HOR.js.map → chunk-Q4CNEHVN.js.map} +1 -1
- package/dist/{chunk-I2VAGZXY.cjs → chunk-Q62RDKRA.cjs} +11 -11
- package/dist/{chunk-I2VAGZXY.cjs.map → chunk-Q62RDKRA.cjs.map} +1 -1
- package/dist/{chunk-QF7CD4JH.cjs → chunk-Q7XL37T3.cjs} +5 -5
- package/dist/{chunk-QF7CD4JH.cjs.map → chunk-Q7XL37T3.cjs.map} +1 -1
- package/dist/{chunk-XZOBGKZL.cjs → chunk-QAM6N3VG.cjs} +6 -5
- package/dist/chunk-QAM6N3VG.cjs.map +1 -0
- package/dist/{chunk-BLOX7MRO.js → chunk-QE7KXMUZ.js} +3 -3
- package/dist/{chunk-BLOX7MRO.js.map → chunk-QE7KXMUZ.js.map} +1 -1
- package/dist/{chunk-ZPBKRJMH.js → chunk-QEJBMXRQ.js} +7 -7
- package/dist/chunk-QEJBMXRQ.js.map +1 -0
- package/dist/{chunk-PCNJJVTF.cjs → chunk-QMZK7SRS.cjs} +3 -3
- package/dist/chunk-QMZK7SRS.cjs.map +1 -0
- package/dist/{chunk-TFX4LL7V.js → chunk-QSRYTWQN.js} +3 -2
- package/dist/chunk-QSRYTWQN.js.map +1 -0
- package/dist/{chunk-Z7SQMQTF.cjs → chunk-QU6HZH6V.cjs} +21 -10
- package/dist/chunk-QU6HZH6V.cjs.map +1 -0
- package/dist/{chunk-GR2WKBER.js → chunk-QUZOGRZS.js} +4 -3
- package/dist/chunk-QUZOGRZS.js.map +1 -0
- package/dist/{chunk-WGRLNXNB.js → chunk-R3PCZSBQ.js} +3 -3
- package/dist/{chunk-WGRLNXNB.js.map → chunk-R3PCZSBQ.js.map} +1 -1
- package/dist/{chunk-EZZKHMR4.js → chunk-R6O6SLXK.js} +3 -3
- package/dist/{chunk-EZZKHMR4.js.map → chunk-R6O6SLXK.js.map} +1 -1
- package/dist/{chunk-5EW47IH7.js → chunk-RCTPN5QK.js} +9 -7
- package/dist/chunk-RCTPN5QK.js.map +1 -0
- package/dist/{chunk-JSD6IEBW.js → chunk-RFTDMQ56.js} +3 -3
- package/dist/{chunk-JSD6IEBW.js.map → chunk-RFTDMQ56.js.map} +1 -1
- package/dist/{chunk-6PRXG7L6.js → chunk-RSB2P3JK.js} +4 -4
- package/dist/{chunk-6PRXG7L6.js.map → chunk-RSB2P3JK.js.map} +1 -1
- package/dist/{chunk-2G6TIX5Q.cjs → chunk-RVBA4LEB.cjs} +13 -13
- package/dist/{chunk-2G6TIX5Q.cjs.map → chunk-RVBA4LEB.cjs.map} +1 -1
- package/dist/{chunk-UVUBV4VZ.js → chunk-S2ID4NNQ.js} +6 -6
- package/dist/{chunk-UVUBV4VZ.js.map → chunk-S2ID4NNQ.js.map} +1 -1
- package/dist/{chunk-TMQF2CRN.js → chunk-S4JQPOBR.js} +7 -7
- package/dist/chunk-S4JQPOBR.js.map +1 -0
- package/dist/{chunk-ETNQ4AEQ.cjs → chunk-S6TVSQDT.cjs} +5 -5
- package/dist/{chunk-ETNQ4AEQ.cjs.map → chunk-S6TVSQDT.cjs.map} +1 -1
- package/dist/{chunk-SSCW67KA.cjs → chunk-SD6YAMDH.cjs} +4 -4
- package/dist/chunk-SD6YAMDH.cjs.map +1 -0
- package/dist/{chunk-MLZGGAXQ.js → chunk-SOIGBPK6.js} +21 -13
- package/dist/chunk-SOIGBPK6.js.map +1 -0
- package/dist/{chunk-7QENPLOP.cjs → chunk-TQDZZIOW.cjs} +5 -5
- package/dist/{chunk-7QENPLOP.cjs.map → chunk-TQDZZIOW.cjs.map} +1 -1
- package/dist/{chunk-MPCZUZ4O.cjs → chunk-U4KUW3RK.cjs} +19 -15
- package/dist/chunk-U4KUW3RK.cjs.map +1 -0
- package/dist/{chunk-AZQXPI5S.js → chunk-UBLMYH6C.js} +3 -3
- package/dist/{chunk-AZQXPI5S.js.map → chunk-UBLMYH6C.js.map} +1 -1
- package/dist/{chunk-P53432AK.cjs → chunk-UIBAIWUR.cjs} +4 -4
- package/dist/{chunk-P53432AK.cjs.map → chunk-UIBAIWUR.cjs.map} +1 -1
- package/dist/{chunk-KKYILQTG.cjs → chunk-UORN3Z7R.cjs} +7 -7
- package/dist/{chunk-KKYILQTG.cjs.map → chunk-UORN3Z7R.cjs.map} +1 -1
- package/dist/{chunk-UXYFM2XT.cjs → chunk-UQABXIQV.cjs} +6 -4
- package/dist/chunk-UQABXIQV.cjs.map +1 -0
- package/dist/chunk-US5R36TQ.js +17 -0
- package/dist/chunk-US5R36TQ.js.map +1 -0
- package/dist/{chunk-CS2ZYMYP.js → chunk-UZZJJ3HJ.js} +3 -3
- package/dist/{chunk-CS2ZYMYP.js.map → chunk-UZZJJ3HJ.js.map} +1 -1
- package/dist/{chunk-Y7RGUUTS.cjs → chunk-V3EKI3VV.cjs} +3 -3
- package/dist/{chunk-Y7RGUUTS.cjs.map → chunk-V3EKI3VV.cjs.map} +1 -1
- package/dist/{chunk-U4Y7ZXME.js → chunk-V64XIPYG.js} +6 -6
- package/dist/{chunk-U4Y7ZXME.js.map → chunk-V64XIPYG.js.map} +1 -1
- package/dist/{chunk-RWU2MFUL.js → chunk-VGUAIFGE.js} +5 -4
- package/dist/chunk-VGUAIFGE.js.map +1 -0
- package/dist/{chunk-LIVC3WUU.cjs → chunk-VH34IZ7R.cjs} +3 -3
- package/dist/{chunk-LIVC3WUU.cjs.map → chunk-VH34IZ7R.cjs.map} +1 -1
- package/dist/{chunk-WNUAGRQN.cjs → chunk-VOAC5OKY.cjs} +4 -4
- package/dist/chunk-VOAC5OKY.cjs.map +1 -0
- package/dist/{chunk-H7ELUIF6.cjs → chunk-W53SZTPX.cjs} +10 -10
- package/dist/{chunk-H7ELUIF6.cjs.map → chunk-W53SZTPX.cjs.map} +1 -1
- package/dist/{chunk-4FH2JHUY.js → chunk-WAEOIEDI.js} +5 -5
- package/dist/{chunk-4FH2JHUY.js.map → chunk-WAEOIEDI.js.map} +1 -1
- package/dist/{chunk-ICMLLZKZ.js → chunk-WJE7UX2G.js} +4 -4
- package/dist/{chunk-ICMLLZKZ.js.map → chunk-WJE7UX2G.js.map} +1 -1
- package/dist/{chunk-DTOIO42M.js → chunk-WLRKE4HC.js} +9 -5
- package/dist/chunk-WLRKE4HC.js.map +1 -0
- package/dist/{chunk-7ZCNZUZK.cjs → chunk-WOURDD4U.cjs} +4 -4
- package/dist/{chunk-7ZCNZUZK.cjs.map → chunk-WOURDD4U.cjs.map} +1 -1
- package/dist/{chunk-OTM7RL2L.js → chunk-WSU36HJM.js} +4 -4
- package/dist/{chunk-OTM7RL2L.js.map → chunk-WSU36HJM.js.map} +1 -1
- package/dist/{chunk-TAYJSIOP.js → chunk-X4NXS42J.js} +5 -5
- package/dist/{chunk-TAYJSIOP.js.map → chunk-X4NXS42J.js.map} +1 -1
- package/dist/{chunk-2UTN3EFK.js → chunk-XALAQZCD.js} +5 -5
- package/dist/{chunk-2UTN3EFK.js.map → chunk-XALAQZCD.js.map} +1 -1
- package/dist/{chunk-RZUYCZ5D.cjs → chunk-XCFBMHQD.cjs} +6 -4
- package/dist/chunk-XCFBMHQD.cjs.map +1 -0
- package/dist/{chunk-NZHVDWOM.cjs → chunk-XEI5JG7C.cjs} +3 -3
- package/dist/{chunk-NZHVDWOM.cjs.map → chunk-XEI5JG7C.cjs.map} +1 -1
- package/dist/{chunk-O3F6DYWR.cjs → chunk-XG6J5MOK.cjs} +3 -3
- package/dist/{chunk-O3F6DYWR.cjs.map → chunk-XG6J5MOK.cjs.map} +1 -1
- package/dist/{chunk-J2DI6RMR.cjs → chunk-XGGAAG74.cjs} +14 -11
- package/dist/chunk-XGGAAG74.cjs.map +1 -0
- package/dist/{chunk-GVMWJ4NI.js → chunk-XH24BGEK.js} +6 -6
- package/dist/{chunk-GVMWJ4NI.js.map → chunk-XH24BGEK.js.map} +1 -1
- package/dist/{chunk-3S5ED522.js → chunk-XO4GHRA2.js} +11 -8
- package/dist/chunk-XO4GHRA2.js.map +1 -0
- package/dist/{chunk-O5ORO2RX.cjs → chunk-XQF4HCOV.cjs} +13 -11
- package/dist/chunk-XQF4HCOV.cjs.map +1 -0
- package/dist/{chunk-VZTXUYPM.cjs → chunk-XT4WBBCD.cjs} +20 -20
- package/dist/chunk-XT4WBBCD.cjs.map +1 -0
- package/dist/{chunk-Z44A7NPD.cjs → chunk-YBBBX5H2.cjs} +40 -39
- package/dist/chunk-YBBBX5H2.cjs.map +1 -0
- package/dist/{chunk-IUCYRQ4J.js → chunk-YPYZZLZ5.js} +5 -5
- package/dist/{chunk-IUCYRQ4J.js.map → chunk-YPYZZLZ5.js.map} +1 -1
- package/dist/{chunk-NVXTHTJI.js → chunk-YTWMIVRI.js} +10 -10
- package/dist/chunk-YTWMIVRI.js.map +1 -0
- package/dist/{chunk-WZAKEJDL.js → chunk-YZW7HQXH.js} +13 -11
- package/dist/chunk-YZW7HQXH.js.map +1 -0
- package/dist/{chunk-AYBKPAI2.cjs → chunk-Z5MNYYUJ.cjs} +3 -3
- package/dist/{chunk-AYBKPAI2.cjs.map → chunk-Z5MNYYUJ.cjs.map} +1 -1
- package/dist/{chunk-GOE36IXL.js → chunk-Z6M3UELD.js} +3 -3
- package/dist/{chunk-GOE36IXL.js.map → chunk-Z6M3UELD.js.map} +1 -1
- package/dist/{chunk-PXZRYL5I.js → chunk-ZBXJDQXN.js} +12 -4
- package/dist/chunk-ZBXJDQXN.js.map +1 -0
- package/dist/{chunk-M5SEYDSS.cjs → chunk-ZDHLEHYR.cjs} +6 -6
- package/dist/{chunk-M5SEYDSS.cjs.map → chunk-ZDHLEHYR.cjs.map} +1 -1
- package/dist/{chunk-SCGTO3PX.js → chunk-ZHTK4IPQ.js} +3 -3
- package/dist/{chunk-SCGTO3PX.js.map → chunk-ZHTK4IPQ.js.map} +1 -1
- package/dist/{chunk-QF2FODTG.js → chunk-ZL5QVNKG.js} +10 -6
- package/dist/chunk-ZL5QVNKG.js.map +1 -0
- package/dist/{chunk-6GVOW3UL.js → chunk-ZUJVGHFW.js} +12 -11
- package/dist/chunk-ZUJVGHFW.js.map +1 -0
- package/dist/code-block.cjs +4 -4
- package/dist/code-block.js +3 -3
- package/dist/code-view.cjs +2 -2
- package/dist/code-view.js +1 -1
- package/dist/command.cjs +3 -3
- package/dist/command.js +1 -1
- package/dist/composer.cjs +7 -6
- package/dist/composer.js +5 -4
- package/dist/content-renderer.cjs +6 -6
- package/dist/content-renderer.js +3 -3
- package/dist/context-menu.cjs +4 -3
- package/dist/context-menu.d.cts +2 -0
- package/dist/context-menu.d.ts +2 -0
- package/dist/context-menu.js +2 -1
- package/dist/date-picker.cjs +5 -5
- package/dist/date-picker.js +4 -4
- package/dist/drawer.cjs +3 -3
- package/dist/drawer.d.cts +10 -4
- package/dist/drawer.d.ts +10 -4
- package/dist/drawer.js +1 -1
- package/dist/dropdown.cjs +5 -4
- package/dist/dropdown.js +3 -2
- package/dist/editor.cjs +9 -8
- package/dist/editor.js +7 -6
- package/dist/emoji-select.cjs +2 -2
- package/dist/emoji-select.js +1 -1
- package/dist/eyebrow.cjs +2 -2
- package/dist/eyebrow.js +1 -1
- package/dist/faux-client.cjs +2 -2
- package/dist/faux-client.js +1 -1
- package/dist/field.cjs +3 -3
- package/dist/field.js +2 -2
- package/dist/file-browser.cjs +6 -5
- package/dist/file-browser.js +2 -1
- package/dist/file-upload.cjs +3 -3
- package/dist/file-upload.js +1 -1
- package/dist/image-viewer.cjs +3 -3
- package/dist/image-viewer.js +2 -2
- package/dist/index-list.cjs +2 -2
- package/dist/index-list.js +1 -1
- package/dist/index.cjs +222 -209
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -2
- package/dist/index.d.ts +20 -2
- package/dist/index.js +78 -77
- package/dist/index.js.map +1 -1
- package/dist/input-tag.cjs +7 -6
- package/dist/input-tag.d.cts +6 -2
- package/dist/input-tag.d.ts +6 -2
- package/dist/input-tag.js +2 -1
- package/dist/input.cjs +10 -9
- package/dist/input.js +9 -8
- package/dist/inputs.cjs +32 -31
- package/dist/inputs.js +19 -18
- package/dist/json-editor.cjs +27 -26
- package/dist/json-editor.js +16 -15
- package/dist/magic-wand.cjs +8 -8
- package/dist/magic-wand.js +7 -7
- package/dist/marquee.cjs +2 -2
- package/dist/marquee.js +1 -1
- package/dist/media-viewer.cjs +5 -5
- package/dist/media-viewer.js +4 -4
- package/dist/menu.cjs +3 -3
- package/dist/menu.js +1 -1
- package/dist/mobile-menu.cjs +5 -4
- package/dist/mobile-menu.d.cts +2 -1
- package/dist/mobile-menu.d.ts +2 -1
- package/dist/mobile-menu.js +3 -2
- package/dist/mode.cjs +3 -3
- package/dist/mode.js +2 -2
- package/dist/multi-switch.cjs +6 -5
- package/dist/multi-switch.js +5 -4
- package/dist/number-field.cjs +11 -10
- package/dist/number-field.js +10 -9
- package/dist/otp-input.cjs +3 -2
- package/dist/otp-input.js +2 -1
- package/dist/pagination.cjs +2 -2
- package/dist/pagination.js +1 -1
- package/dist/paste-pills.cjs +17 -16
- package/dist/paste-pills.js +4 -3
- package/dist/pdf-viewer.cjs +3 -3
- package/dist/pdf-viewer.js +2 -2
- package/dist/popover.cjs +5 -4
- package/dist/popover.js +3 -2
- package/dist/profile.cjs +3 -3
- package/dist/profile.js +2 -2
- package/dist/progress.cjs +2 -2
- package/dist/progress.js +1 -1
- package/dist/prompt-input.cjs +10 -9
- package/dist/prompt-input.js +7 -6
- package/dist/qr-code.cjs +19 -4
- package/dist/qr-code.d.cts +221 -2
- package/dist/qr-code.d.ts +221 -2
- package/dist/qr-code.js +4 -1
- package/dist/radio-group.cjs +5 -5
- package/dist/radio-group.js +4 -4
- package/dist/reason-tag.cjs +6 -5
- package/dist/reason-tag.js +5 -4
- package/dist/reorderable-grid.cjs +4 -3
- package/dist/reorderable-grid.js +2 -1
- package/dist/resizable-panels.cjs +3 -2
- package/dist/resizable-panels.js +2 -1
- package/dist/select.cjs +8 -7
- package/dist/select.js +7 -6
- package/dist/separator.cjs +2 -2
- package/dist/separator.js +1 -1
- package/dist/sidebar.cjs +6 -5
- package/dist/sidebar.js +4 -3
- package/dist/slider.cjs +5 -5
- package/dist/slider.js +4 -4
- package/dist/stat-list.cjs +2 -2
- package/dist/stat-list.d.cts +5 -2
- package/dist/stat-list.d.ts +5 -2
- package/dist/stat-list.js +1 -1
- package/dist/stepper.cjs +3 -2
- package/dist/stepper.js +2 -1
- package/dist/styles.css +24 -0
- package/dist/styles.css.map +1 -1
- package/dist/switch.cjs +3 -3
- package/dist/switch.js +2 -2
- package/dist/table.cjs +11 -11
- package/dist/table.js +1 -1
- package/dist/tabs.cjs +4 -3
- package/dist/tabs.js +2 -1
- package/dist/textarea.cjs +6 -6
- package/dist/textarea.js +5 -5
- package/dist/time-grid.cjs +3 -2
- package/dist/time-grid.js +2 -1
- package/dist/time-picker.cjs +2 -2
- package/dist/time-picker.js +1 -1
- package/dist/timeline.cjs +4 -4
- package/dist/timeline.js +1 -1
- package/dist/toast.cjs +4 -3
- package/dist/toast.d.cts +6 -2
- package/dist/toast.d.ts +6 -2
- package/dist/toast.js +2 -1
- package/dist/tooltip.cjs +4 -3
- package/dist/tooltip.js +3 -2
- package/dist/tree-nav.cjs +3 -3
- package/dist/tree-nav.js +1 -1
- package/docs/Dropdown.md +1 -1
- package/docs/InputTag.md +1 -1
- package/docs/MobileMenu.md +2 -2
- package/docs/Popover.md +1 -1
- package/docs/QrCode.md +108 -0
- package/docs/ReorderableGrid.md +2 -0
- package/docs/ResizablePanels.md +2 -0
- package/docs/Toast.md +2 -2
- package/package.json +1 -1
- package/dist/chunk-25HRO7HQ.cjs.map +0 -1
- package/dist/chunk-2O5UXH5R.cjs.map +0 -1
- package/dist/chunk-37D5PYEF.js.map +0 -1
- package/dist/chunk-3S5ED522.js.map +0 -1
- package/dist/chunk-4DL2U23D.cjs.map +0 -1
- package/dist/chunk-5EW47IH7.js.map +0 -1
- package/dist/chunk-5TP642UT.js.map +0 -1
- package/dist/chunk-6GVOW3UL.js.map +0 -1
- package/dist/chunk-AE53RKWR.cjs.map +0 -1
- package/dist/chunk-AJPYGRLA.cjs.map +0 -1
- package/dist/chunk-BXPLERIJ.js.map +0 -1
- package/dist/chunk-BYO5RUDE.cjs.map +0 -1
- package/dist/chunk-CEFK54WP.cjs.map +0 -1
- package/dist/chunk-CQ7QXZLR.cjs.map +0 -1
- package/dist/chunk-DJYG7DXS.js.map +0 -1
- package/dist/chunk-DTOIO42M.js.map +0 -1
- package/dist/chunk-DXZCKDYS.js.map +0 -1
- package/dist/chunk-ESCIXKFT.js.map +0 -1
- package/dist/chunk-EUVWYDFN.js.map +0 -1
- package/dist/chunk-F4OYQ2XZ.js.map +0 -1
- package/dist/chunk-FKZB27OM.cjs.map +0 -1
- package/dist/chunk-FR4RHVPR.js.map +0 -1
- package/dist/chunk-FVQO75KY.cjs.map +0 -1
- package/dist/chunk-GDF6XTHC.js.map +0 -1
- package/dist/chunk-GR2WKBER.js.map +0 -1
- package/dist/chunk-GTS3QA7M.js.map +0 -1
- package/dist/chunk-HLI6RB5V.cjs.map +0 -1
- package/dist/chunk-HNJXBMHI.cjs.map +0 -1
- package/dist/chunk-J2DI6RMR.cjs.map +0 -1
- package/dist/chunk-JY2RC6I4.js.map +0 -1
- package/dist/chunk-KFA7B6WP.cjs.map +0 -1
- package/dist/chunk-KOAMRCSC.cjs.map +0 -1
- package/dist/chunk-KOTUFZJ6.cjs.map +0 -1
- package/dist/chunk-LFC2DL6H.cjs.map +0 -1
- package/dist/chunk-LKN7FYW6.js.map +0 -1
- package/dist/chunk-MI57NAKF.js.map +0 -1
- package/dist/chunk-MKGWHSNV.cjs.map +0 -1
- package/dist/chunk-MLZGGAXQ.js.map +0 -1
- package/dist/chunk-MPCZUZ4O.cjs.map +0 -1
- package/dist/chunk-MQ6VGG62.js.map +0 -1
- package/dist/chunk-NSJBVV7R.js.map +0 -1
- package/dist/chunk-NVXTHTJI.js.map +0 -1
- package/dist/chunk-O5ORO2RX.cjs.map +0 -1
- package/dist/chunk-OASSZI6M.cjs.map +0 -1
- package/dist/chunk-PCNJJVTF.cjs.map +0 -1
- package/dist/chunk-PDVU2PXR.js.map +0 -1
- package/dist/chunk-PJNUGSKI.js.map +0 -1
- package/dist/chunk-PM5I5ZHK.cjs.map +0 -1
- package/dist/chunk-PXZRYL5I.js.map +0 -1
- package/dist/chunk-QF2FODTG.js.map +0 -1
- package/dist/chunk-QGY5FPVM.js.map +0 -1
- package/dist/chunk-QP6VNKLW.cjs.map +0 -1
- package/dist/chunk-QTS4Q2NK.js.map +0 -1
- package/dist/chunk-RANTYGKW.js.map +0 -1
- package/dist/chunk-RLE5WYY6.js.map +0 -1
- package/dist/chunk-RSLZL6VP.js.map +0 -1
- package/dist/chunk-RWU2MFUL.js.map +0 -1
- package/dist/chunk-RZUYCZ5D.cjs.map +0 -1
- package/dist/chunk-SKMORSBO.cjs.map +0 -1
- package/dist/chunk-SSCW67KA.cjs.map +0 -1
- package/dist/chunk-SXXDTW7S.js.map +0 -1
- package/dist/chunk-TFX4LL7V.js.map +0 -1
- package/dist/chunk-TMQF2CRN.js.map +0 -1
- package/dist/chunk-UK6BGM74.cjs.map +0 -1
- package/dist/chunk-UXYFM2XT.cjs.map +0 -1
- package/dist/chunk-VZTXUYPM.cjs.map +0 -1
- package/dist/chunk-WMANILKC.cjs.map +0 -1
- package/dist/chunk-WNUAGRQN.cjs.map +0 -1
- package/dist/chunk-WZAKEJDL.js.map +0 -1
- package/dist/chunk-X2A3NAJW.js.map +0 -1
- package/dist/chunk-XZOBGKZL.cjs.map +0 -1
- package/dist/chunk-Y3QAEF2P.cjs.map +0 -1
- package/dist/chunk-YQZB5Z7C.cjs.map +0 -1
- package/dist/chunk-Z44A7NPD.cjs.map +0 -1
- package/dist/chunk-Z4UXLQSK.cjs.map +0 -1
- package/dist/chunk-Z7SQMQTF.cjs.map +0 -1
- package/dist/chunk-ZPBKRJMH.js.map +0 -1
- package/dist/chunk-ZVDW2VX5.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ContentRenderer/extensions.ts","../src/utils/markdown.ts","../src/components/Editor/editor.utils.ts","../src/components/ContentRenderer/markdown-blocks.ts","../src/components/ContentRenderer/RenderedContent.tsx","../src/components/ContentRenderer/ContentRenderer.tsx"],"names":["sanitizeHref","marked","sanitizeHtml","indent","useMemo","jsx","Fragment","HtmlChunk","useRef","useState","useCallback","useCopyPipeline","cn","jsxs","CopyContext","visuallyHidden"],"mappings":"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","file":"chunk-MPCZUZ4O.cjs","sourcesContent":["import type { ComponentType, ReactNode } from \"react\";\nimport { sanitizeHref } from \"../../utils/sanitize\";\n\n/** Props passed to every render-extension component. */\nexport interface RenderExtensionProps {\n /**\n * The inner content of the custom tag (raw string). For an extension with\n * `markdown: true` in markdown content this is the raw MARKDOWN body, before\n * conversion. Either way it is untrusted: render `children` rather than\n * injecting it.\n */\n content: string;\n /**\n * Parsed attributes from the opening tag. Event handlers (`on*`), `srcdoc`,\n * and URL attributes with an unsafe scheme are removed (unless the renderer\n * is `unsafe`).\n */\n attributes: Record<string, string>;\n /**\n * Only for extensions with `markdown: true`: the body, rendered by the same\n * pipeline as the rest of the content (sanitised, nested extensions, copy\n * buttons).\n */\n children?: ReactNode;\n}\n\n/** Registers a custom tag with a React component for rendering. */\nexport interface RenderExtension {\n /** Tag name to match, e.g. \"questions\", \"thinking\". Case-insensitive. */\n tag: string;\n /** React component that renders the matched tag. */\n component: ComponentType<RenderExtensionProps>;\n /**\n * Whether this is a block-level element.\n * Block extensions are wrapped in a `<div>`, inline in a `<span>`.\n * @default true\n */\n block?: boolean;\n /**\n * The tag's body is MARKDOWN. In markdown content, a tag that starts a line\n * is lifted out of the source before conversion, so the component gets the\n * raw markdown as `content` and the rendered, sanitised body as `children`.\n * In HTML content the body is HTML and `children` renders it.\n * @default false\n */\n markdown?: boolean;\n}\n\nconst URL_ATTRS = new Set([\"href\", \"src\", \"action\", \"formaction\", \"xlink:href\"]);\n\n/**\n * Drop attributes that could run code if a component spread them onto the\n * DOM — the same rules the HTML sanitiser applies to an element.\n */\nexport function safeAttributes(attrs: Record<string, string>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [name, value] of Object.entries(attrs)) {\n const lower = name.toLowerCase();\n if (lower.startsWith(\"on\") || lower === \"srcdoc\") continue;\n if (URL_ATTRS.has(lower)) {\n const safe = sanitizeHref(value);\n if (safe === undefined) continue;\n out[name] = safe;\n continue;\n }\n out[name] = value;\n }\n return out;\n}\n\n/** Parse, and unless `unsafe`, clean the attribute text of an opening tag. */\nexport function tagAttributes(raw: string, unsafe: boolean): Record<string, string> {\n const attrs = raw ? parseAttributes(raw) : {};\n return unsafe ? attrs : safeAttributes(attrs);\n}\n\n/** A parsed segment — either raw HTML or a matched extension tag. */\nexport type ContentSegment =\n | { type: \"html\"; content: string }\n | { type: \"extension\"; tag: string; content: string; attributes: Record<string, string> };\n\n// ---------------------------------------------------------------------------\n// Global extension registry\n// ---------------------------------------------------------------------------\n\nconst globalRegistry: RenderExtension[] = [];\n\n/** Register a single render extension globally (available to all ContentRenderer and Editor instances). */\nexport function registerExtension(extension: RenderExtension): void {\n const idx = globalRegistry.findIndex(\n (e) => e.tag.toLowerCase() === extension.tag.toLowerCase(),\n );\n if (idx >= 0) {\n globalRegistry[idx] = extension;\n } else {\n globalRegistry.push(extension);\n }\n}\n\n/** Register multiple render extensions globally. */\nexport function registerExtensions(extensions: RenderExtension[]): void {\n for (const ext of extensions) {\n registerExtension(ext);\n }\n}\n\n/** Get a snapshot of the current global registry. */\nexport function getGlobalExtensions(): RenderExtension[] {\n return [...globalRegistry];\n}\n\n// ---------------------------------------------------------------------------\n// Parsing\n// ---------------------------------------------------------------------------\n\n/** Parse attributes from an opening tag string like `tag foo=\"bar\" baz=\"qux\"`. */\nfunction parseAttributes(attrString: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const re = /(\\w[\\w-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\S+)))?/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(attrString)) !== null) {\n attrs[m[1]] = m[2] ?? m[3] ?? m[4] ?? \"\";\n }\n return attrs;\n}\n\n/**\n * Split an HTML string into segments of plain HTML and matched extension tags.\n *\n * Handles:\n * - `<tag>content</tag>`\n * - `<tag attr=\"val\">content</tag>`\n * - Nested different-tags inside the content (preserved as raw HTML)\n * - Self-nesting of the same tag (greedy — matches outermost)\n */\nexport function parseSegments(\n html: string,\n extensions: RenderExtension[],\n): ContentSegment[] {\n if (extensions.length === 0) {\n return html ? [{ type: \"html\", content: html }] : [];\n }\n\n const tagNames = extensions.map((e) => e.tag).join(\"|\");\n // Match opening tag with optional attributes, then content, then closing tag.\n // Uses a non-greedy match for content — if same-tag nesting is needed the\n // consumer should use distinct tag names.\n const pattern = new RegExp(\n `<(${tagNames})((?:\\\\s+[^>]*)?)>([\\\\s\\\\S]*?)<\\\\/\\\\1>`,\n \"gi\",\n );\n\n const segments: ContentSegment[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(html)) !== null) {\n // Push any HTML before this match\n if (match.index > lastIndex) {\n segments.push({ type: \"html\", content: html.slice(lastIndex, match.index) });\n }\n\n const tag = match[1].toLowerCase();\n const rawAttrs = match[2] ? match[2].trim() : \"\";\n const innerContent = match[3];\n\n segments.push({\n type: \"extension\",\n tag,\n content: innerContent,\n attributes: rawAttrs ? parseAttributes(rawAttrs) : {},\n });\n\n lastIndex = match.index + match[0].length;\n }\n\n // Push any trailing HTML\n if (lastIndex < html.length) {\n segments.push({ type: \"html\", content: html.slice(lastIndex) });\n }\n\n return segments;\n}\n\n/**\n * Merge per-instance extensions with the global registry.\n * Instance extensions override globals with the same tag name.\n */\nexport function mergeExtensions(\n instanceExtensions?: RenderExtension[],\n): RenderExtension[] {\n const globals = getGlobalExtensions();\n if (!instanceExtensions || instanceExtensions.length === 0) return globals;\n if (globals.length === 0) return instanceExtensions;\n\n const merged = [...globals];\n for (const ext of instanceExtensions) {\n const idx = merged.findIndex(\n (e) => e.tag.toLowerCase() === ext.tag.toLowerCase(),\n );\n if (idx >= 0) {\n merged[idx] = ext;\n } else {\n merged.push(ext);\n }\n }\n return merged;\n}\n","import { marked } from \"marked\";\nimport { sanitizeHtml, type SanitizeHtmlOptions } from \"./sanitize\";\n\n/**\n * Parse markdown to HTML WITHOUT sanitising. Internal: ContentRenderer's\n * `unsafe` path needs the raw output; everything public goes through\n * {@link renderMarkdown}.\n */\nexport function markdownToRawHtml(markdown: string | null | undefined): string {\n // marked.parse throws on nullish input; treat missing content as empty.\n return marked.parse(markdown ?? \"\", { async: false }) as string;\n}\n\n/**\n * Render markdown (GitHub-flavoured) to sanitised HTML — the same parser and\n * output `ContentRenderer` uses, so a host never has to import the parser\n * itself.\n *\n * With no `sanitize` options the default blocklist of {@link sanitizeHtml} is\n * applied; pass allowlist options to keep only what you list:\n *\n * ```ts\n * renderMarkdown(md, { allowedTags: [\"p\", \"strong\", \"a\"], allowedAttributes: [\"href\"] })\n * ```\n */\nexport function renderMarkdown(\n markdown: string,\n sanitize?: SanitizeHtmlOptions,\n): string {\n return sanitizeHtml(markdownToRawHtml(markdown), sanitize);\n}\n","import { marked, type Token, type Tokens } from \"marked\";\nimport type { RenderExtension } from \"../ContentRenderer/extensions\";\n\n/**\n * Shared prose typography classes for Editor.Content and ContentRenderer.\n * Hand-rolled since we don't depend on @tailwindcss/typography.\n */\nexport const proseClasses = [\n \"[&_h1]:text-2xl [&_h1]:font-bold [&_h1]:mt-4 [&_h1]:mb-2\",\n \"[&_h2]:text-xl [&_h2]:font-semibold [&_h2]:mt-3 [&_h2]:mb-2\",\n \"[&_h3]:text-lg [&_h3]:font-semibold [&_h3]:mt-2 [&_h3]:mb-1\",\n \"[&_p]:mb-2\",\n \"[&_a]:text-blue-500 [&_a]:underline\",\n \"[&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5\",\n \"[&_li]:mb-1\",\n \"[&_blockquote]:border-l-4 [&_blockquote]:border-zinc-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:[&_blockquote]:border-zinc-600 dark:[&_blockquote]:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\",\n \"[&_code]:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] [&_code]:px-1 [&_code]:rounded [&_code]:text-sm dark:[&_code]:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n \"[&_pre]:bg-zinc-950 [&_pre]:text-zinc-100 [&_pre]:p-4 [&_pre]:rounded-lg [&_pre]:overflow-x-auto\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:px-0\",\n \"[&_strong]:font-bold [&_em]:italic\",\n].join(\" \");\n\nconst HTML_TAG_PATTERN = /<(p|div|br|h[1-6]|ul|ol|strong|em|a |img |table|pre|code|blockquote)[>\\s/]/i;\n\n/** Detect whether a string is likely HTML or Markdown. */\nexport function detectFormat(value: string): \"html\" | \"markdown\" {\n return HTML_TAG_PATTERN.test(value) ? \"html\" : \"markdown\";\n}\n\n/**\n * Build a set of known HTML tag names. Extension tags are excluded\n * so that the \"strip remaining tags\" step preserves them.\n */\nconst STANDARD_HTML_TAGS = new Set([\n \"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\",\n \"b\", \"base\", \"bdi\", \"bdo\", \"blockquote\", \"body\", \"br\", \"button\",\n \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\",\n \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\",\n \"em\", \"embed\",\n \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\",\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\",\n \"i\", \"iframe\", \"img\", \"input\", \"ins\",\n \"kbd\",\n \"label\", \"legend\", \"li\", \"link\",\n \"main\", \"map\", \"mark\", \"menu\", \"meta\", \"meter\",\n \"nav\", \"noscript\",\n \"object\", \"ol\", \"optgroup\", \"option\", \"output\",\n \"p\", \"param\", \"picture\", \"pre\", \"progress\",\n \"q\",\n \"rp\", \"rt\", \"ruby\",\n \"s\", \"samp\", \"script\", \"section\", \"select\", \"slot\", \"small\", \"source\", \"span\",\n \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\",\n \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\",\n \"u\", \"ul\",\n \"var\", \"video\",\n \"wbr\",\n]);\n\n/**\n * HTML-to-Markdown converter for editor output.\n *\n * Walks the parsed DOM rather than rewriting the HTML string, because markup\n * structure is what decides markdown spacing and a string rewrite cannot see\n * it. The regex version this replaces turned every whitespace text node\n * between tags into a literal newline: marked emits `</li>\\n<li>`, so every\n * tight list came back with a blank line between items — and a fresh item\n * from Enter (which Chromium inserts with NO whitespace node) came back\n * without one, so an edit to the last item made the list loose after the\n * FIRST item only.\n *\n * Rules: whitespace-only text between blocks is formatting, not content.\n * Blocks are separated by a blank line; a list is tight unless one of its\n * items holds a `<p>` (marked's marker for a loose list), so loose lists stay\n * loose and tight lists stay tight. Custom extension tags are preserved as-is.\n *\n * Given the `source` map {@link markdownToEditorHtml} produced when the\n * document was loaded, output is source-preserving instead: every block the\n * person did not change is emitted from its original markdown, byte for byte.\n *\n * Without a DOM (SSR) it falls back to the older string rewrite.\n */\nexport function htmlToMarkdown(html: string, source?: MarkdownSource | null): string {\n if (typeof document === \"undefined\") return legacyHtmlToMarkdown(html);\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n if (source) return serializeWithSource(template.content, source);\n return serializeBlocks(template.content).replace(/^\\n+/, \"\").replace(/\\s+$/, \"\");\n}\n\n/* ------------------------------------------------------------------------ *\n * Source-preserving markdown\n *\n * When markdown is loaded, each top-level block (paragraph, heading, list,\n * table, code block, quote, rule, HTML block) is rendered on its own and its\n * elements are tagged `data-md-block=\"<n>\"`, with the block's ORIGINAL source\n * text and a snapshot of its rendered HTML kept beside it. List items get\n * `data-md-item`, table rows `data-md-row`, mapped the same way.\n *\n * On output, a block whose elements still serialise to the snapshot is\n * emitted from its source slice, exactly. Only changed or new blocks are\n * serialised from the DOM, and the source between two blocks that are still\n * neighbours (blank lines, link reference definitions, HTML comments) is\n * emitted verbatim, as is the text after the last block.\n *\n * Chromium clones the element it splits on Enter, attributes included, so a\n * tag can appear twice; the FIRST copy that still matches its snapshot owns\n * the source, and any other copy is treated as new content.\n * ------------------------------------------------------------------------ */\n\nconst BLOCK_ATTR = \"data-md-block\";\nconst ITEM_ATTR = \"data-md-item\";\nconst ROW_ATTR = \"data-md-row\";\n\ninterface SourceList {\n bullet: string;\n delimiter: string;\n loose: boolean;\n /** Each item's source, trailing newlines excluded. */\n items: string[];\n /** itemGaps[k]: the source between item k and item k + 1. */\n itemGaps: string[];\n itemSnapshots: string[];\n}\n\ninterface SourceTable {\n /** The table's source lines: header, alignment row, then one per body row. */\n lines: string[];\n columns: number;\n /** Snapshot per source line index (0 = header, 2.. = body rows). */\n rowSnapshots: Map<number, string>;\n}\n\ninterface SourceBlock {\n /** The block's source, trailing newlines excluded. */\n raw: string;\n /** Concatenated outerHTML of the block's rendered elements, as seeded. */\n snapshot: string;\n elementCount: number;\n list?: SourceList;\n table?: SourceTable;\n}\n\n/** The original source of a markdown document, mapped to the blocks rendered from it. */\nexport interface MarkdownSource {\n /** Source before the first block. */\n leading: string;\n blocks: SourceBlock[];\n /** gaps[i]: the source between block i and block i + 1, or the end of the document. */\n gaps: string[];\n}\n\nfunction stripTrailingNewlines(text: string): string {\n return text.replace(/\\n+$/, \"\");\n}\n\nfunction indexAttr(el: Element, attr: string, size: number): number | undefined {\n const value = el.getAttribute(attr);\n if (value == null || !/^\\d+$/.test(value)) return undefined;\n const n = Number(value);\n return n < size ? n : undefined;\n}\n\n/**\n * Render markdown for the Editor, tagging each block with its source.\n * Returns `source: null` (plain rendering) when the source cannot be mapped\n * exactly: no DOM, or `\\r` line endings, which the lexer normalises away.\n */\nexport function markdownToEditorHtml(\n md: string,\n sanitize: (html: string) => string = (html) => html,\n): { html: string; source: MarkdownSource | null } {\n const plain = () => ({\n html: sanitize((marked.parse(md, { async: false }) as string).trim()),\n source: null,\n });\n if (typeof document === \"undefined\" || md.includes(\"\\r\")) return plain();\n\n const tokens = marked.lexer(md);\n const parts: string[] = [];\n const spans: { start: number; end: number; token: Token }[] = [];\n let cursor = 0;\n for (const token of tokens) {\n if (token.type === \"space\") continue;\n const at = md.indexOf(token.raw, cursor);\n if (at < 0) return plain();\n cursor = at + token.raw.length;\n\n const template = document.createElement(\"template\");\n template.innerHTML = marked.parser([token]);\n let nodes = Array.from(template.content.childNodes);\n const strayText = nodes.some((n) => n.nodeType === 3 && (n.textContent ?? \"\").trim() !== \"\");\n if (!nodes.some(isElement) && !strayText) {\n // Renders nothing visible (an HTML comment): its source stays in the gap.\n parts.push(template.innerHTML.trim());\n continue;\n }\n if (strayText) {\n const wrapper = document.createElement(\"div\");\n wrapper.append(...nodes);\n template.content.append(wrapper);\n nodes = [wrapper];\n }\n const id = spans.length;\n const elements = nodes.filter(isElement);\n for (const el of elements) el.setAttribute(BLOCK_ATTR, String(id));\n if (token.type === \"list\" && elements.length === 1) {\n const items = Array.from(elements[0]!.children).filter((c) => tagOf(c) === \"li\");\n if (items.length === (token as Tokens.List).items.length) {\n items.forEach((li, k) => li.setAttribute(ITEM_ATTR, String(k)));\n }\n }\n if (token.type === \"table\" && elements.length === 1) {\n const rows = tableRows(elements[0]!);\n if (rows.length === (token as Tokens.Table).rows.length + 1) {\n rows.forEach((tr, i) => tr.setAttribute(ROW_ATTR, String(i === 0 ? 0 : i + 1)));\n }\n }\n parts.push(template.innerHTML.trim());\n spans.push({ start: at, end: at + stripTrailingNewlines(token.raw).length, token });\n }\n\n const html = sanitize(parts.join(\"\\n\"));\n if (spans.length === 0) return { html, source: null };\n\n // Snapshot what the DOM will actually hold — after sanitising.\n const seeded = document.createElement(\"template\");\n seeded.innerHTML = html;\n const byId = new Map<number, Element[]>();\n for (const node of Array.from(seeded.content.childNodes)) {\n if (!isElement(node)) continue;\n const id = indexAttr(node, BLOCK_ATTR, spans.length);\n if (id === undefined) continue;\n byId.set(id, [...(byId.get(id) ?? []), node]);\n }\n\n const blocks: SourceBlock[] = spans.map((span, id) => {\n const elements = byId.get(id) ?? [];\n const block: SourceBlock = {\n raw: md.slice(span.start, span.end),\n snapshot: elements.map((el) => el.outerHTML).join(\"\"),\n elementCount: elements.length,\n };\n if (span.token.type === \"list\" && elements.length === 1) {\n block.list = sourceList(md, span.start, span.token as Tokens.List, elements[0]!);\n }\n if (span.token.type === \"table\" && elements.length === 1) {\n block.table = sourceTable(block.raw, span.token as Tokens.Table, elements[0]!);\n }\n return block;\n });\n const gaps = spans.map((span, i) => md.slice(span.end, spans[i + 1]?.start ?? md.length));\n return { html, source: { leading: md.slice(0, spans[0]!.start), blocks, gaps } };\n}\n\nfunction sourceList(md: string, start: number, token: Tokens.List, list: Element): SourceList | undefined {\n const lis = Array.from(list.children).filter((c) => tagOf(c) === \"li\");\n if (lis.length !== token.items.length || lis.length === 0) return undefined;\n const items: string[] = [];\n const bounds: [number, number][] = [];\n let cursor = start;\n for (const item of token.items) {\n const at = md.indexOf(item.raw, cursor);\n if (at < 0) return undefined;\n const body = stripTrailingNewlines(item.raw);\n items.push(body);\n bounds.push([at, at + body.length]);\n cursor = at + item.raw.length;\n }\n const itemGaps = bounds.slice(0, -1).map(([, end], k) => md.slice(end, bounds[k + 1]![0]));\n const first = items[0]!;\n return {\n bullet: /^\\s*([*+-])/.exec(first)?.[1] ?? \"-\",\n delimiter: /^\\s*\\d+([.)])/.exec(first)?.[1] ?? \".\",\n loose: token.loose,\n items,\n itemGaps,\n itemSnapshots: lis.map((li) => li.outerHTML),\n };\n}\n\nfunction sourceTable(raw: string, token: Tokens.Table, table: Element): SourceTable | undefined {\n const lines = raw.split(\"\\n\");\n const rows = tableRows(table);\n if (lines.length !== rows.length + 1) return undefined;\n const rowSnapshots = new Map<number, string>();\n for (const tr of rows) {\n const r = indexAttr(tr, ROW_ATTR, lines.length);\n if (r !== undefined) rowSnapshots.set(r, tr.outerHTML);\n }\n return { lines, columns: token.header.length, rowSnapshots };\n}\n\ntype Piece = { text: string; id?: number; kind: Block[\"kind\"] };\n\nfunction outerHtmlOf(nodes: readonly Node[]): string {\n return nodes.filter(isElement).map((el) => el.outerHTML).join(\"\");\n}\n\nfunction serializeWithSource(root: Node, src: MarkdownSource): string {\n // 1. Group the top-level nodes: runs sharing one block tag, and runs of untagged content.\n type Segment = { id?: number; nodes: Node[] };\n const segments: Segment[] = [];\n for (const node of Array.from(root.childNodes)) {\n const last = segments[segments.length - 1];\n if (node.nodeType === 3 && (node.textContent ?? \"\").trim() === \"\") {\n if (last && last.id === undefined) last.nodes.push(node);\n continue;\n }\n const id = isElement(node) ? indexAttr(node, BLOCK_ATTR, src.blocks.length) : undefined;\n if (last && last.id === id) last.nodes.push(node);\n else segments.push({ id, nodes: [node] });\n }\n\n // 2. The first segment per block that still matches its snapshot owns the source.\n const verbatim = new Map<number, number>();\n segments.forEach((seg, i) => {\n if (seg.id === undefined || verbatim.has(seg.id)) return;\n if (outerHtmlOf(seg.nodes) === src.blocks[seg.id]!.snapshot) verbatim.set(seg.id, i);\n });\n\n // 3. One piece per output block.\n const pieces: Piece[] = [];\n const owned = new Set<number>(verbatim.keys());\n const fresh = (nodes: readonly Node[]) => {\n for (const b of collectBlocks(nodes)) pieces.push({ text: b.text, kind: b.kind });\n };\n segments.forEach((seg, i) => {\n if (seg.id === undefined) return fresh(seg.nodes);\n const id = seg.id;\n const block = src.blocks[id]!;\n if (verbatim.get(id) === i) return void pieces.push({ text: block.raw, id, kind: \"block\" });\n if (owned.has(id)) return fresh(seg.nodes);\n owned.add(id);\n if (block.elementCount === 1) {\n // Enter at the edge of a block: the original survives whole beside its clone.\n const j = seg.nodes.findIndex((n) => isElement(n) && n.outerHTML === block.snapshot);\n if (j >= 0) {\n fresh(seg.nodes.slice(0, j));\n pieces.push({ text: block.raw, id, kind: \"block\" });\n fresh(seg.nodes.slice(j + 1));\n return;\n }\n }\n pieces.push({ text: serializeChangedBlock(seg.nodes, block), id, kind: \"block\" });\n });\n if (pieces.length === 0) return \"\";\n\n // 4. Join, reusing the original source between blocks that are still neighbours.\n const used = new Set<number>();\n const hasContent = (gap: string) => gap.trim() !== \"\";\n const separator = (a: Piece, b: Piece): string => {\n if (a.id !== undefined && b.id === a.id + 1) {\n used.add(a.id);\n return src.gaps[a.id]!;\n }\n const fallback = a.kind === \"div\" || b.kind === \"div\" ? \"\\n\" : \"\\n\\n\";\n if (a.id === undefined || used.has(a.id)) return fallback;\n // Blocks between a and b were deleted: keep any definitions or comments they sat beside.\n const upto = b.id !== undefined && b.id > a.id ? b.id : a.id + 1;\n const range: number[] = [];\n for (let g = a.id; g < upto; g++) if (!used.has(g)) range.push(g);\n for (const g of range) used.add(g);\n const kept = range.map((g) => src.gaps[g]!).filter(hasContent).map((g) => g.trim());\n if (kept.length > 0) return `\\n\\n${kept.join(\"\\n\\n\")}\\n\\n`;\n const own = src.gaps[a.id]!;\n return (own.match(/\\n/g)?.length ?? 0) >= 2 ? own : fallback;\n };\n\n let out = src.leading;\n pieces.forEach((piece, i) => {\n if (i > 0) out += separator(pieces[i - 1]!, piece);\n out += piece.text;\n });\n\n const lastId = src.blocks.length - 1;\n const trailing = src.gaps[lastId]!;\n if (pieces[pieces.length - 1]!.id === lastId && !used.has(lastId)) {\n used.add(lastId);\n out += trailing;\n } else {\n const orphans = src.gaps\n .filter((gap, g) => !used.has(g) && hasContent(gap))\n .map((gap) => gap.trim());\n if (orphans.length > 0) out += `\\n\\n${orphans.join(\"\\n\\n\")}`;\n out += /\\s*$/.exec(trailing)![0];\n }\n return out;\n}\n\nfunction serializeChangedBlock(nodes: readonly Node[], block: SourceBlock): string {\n const elements = nodes.filter(isElement);\n if (elements.length === 1) {\n const el = elements[0]!;\n const tag = tagOf(el);\n if (block.list && (tag === \"ul\" || tag === \"ol\")) return serializeListWithSource(el, block.list);\n if (block.table && tag === \"table\") return serializeTableWithSource(el, block.table);\n }\n return joinBlocks(collectBlocks(nodes));\n}\n\n/**\n * A changed list: untouched items keep their source; changed and new items\n * are serialised with the list's original marker. Between two items that are\n * still neighbours the original separator is kept; elsewhere the separator\n * last used in the list is repeated.\n */\nfunction serializeListWithSource(list: Element, info: SourceList): string {\n const ordered = tagOf(list) === \"ol\";\n const children = Array.from(list.children);\n const verbatim = new Map<number, Element>();\n for (const li of children) {\n if (tagOf(li) !== \"li\") continue;\n const k = indexAttr(li, ITEM_ATTR, info.items.length);\n if (k !== undefined && !verbatim.has(k) && li.outerHTML === info.itemSnapshots[k]) verbatim.set(k, li);\n }\n const owned = new Set<number>(verbatim.keys());\n const out: { text: string; k?: number }[] = [];\n let num = ordered ? (Number.parseInt(list.getAttribute(\"start\") ?? \"1\", 10) || 1) - 1 : 0;\n const numberOf = (k: number) => Number(/^\\s*(\\d+)/.exec(info.items[k]!)?.[1] ?? Number.NaN);\n for (const child of children) {\n const tag = tagOf(child);\n if (tag === \"ul\" || tag === \"ol\") {\n const nested = indent(serializeList(child), ordered ? 3 : 2);\n if (out.length > 0) out[out.length - 1]!.text += `\\n${nested}`;\n else out.push({ text: nested });\n continue;\n }\n if (tag !== \"li\") continue;\n const k = indexAttr(child, ITEM_ATTR, info.items.length);\n if (k !== undefined && verbatim.get(k) === child) {\n if (ordered && !Number.isNaN(numberOf(k))) num = numberOf(k);\n out.push({ text: info.items[k]!, k });\n continue;\n }\n const mine = k !== undefined && !owned.has(k) ? k : undefined;\n if (mine !== undefined) owned.add(mine);\n num = ordered && mine !== undefined && !Number.isNaN(numberOf(mine)) ? numberOf(mine) : num + 1;\n const marker = ordered ? `${num}${info.delimiter} ` : `${info.bullet} `;\n out.push({\n text: `${marker}${indent(serializeListItem(child), marker.length, true)}`.replace(/[ \\t]+$/, \"\"),\n k: mine,\n });\n }\n let last: string | undefined;\n let text = \"\";\n out.forEach((item, i) => {\n if (i > 0) {\n const prev = out[i - 1]!;\n const sep =\n prev.k !== undefined && item.k === prev.k + 1\n ? info.itemGaps[prev.k]!\n : (last ?? info.itemGaps[0] ?? (info.loose ? \"\\n\\n\" : \"\\n\"));\n last = sep;\n text += sep;\n }\n text += item.text;\n });\n return text;\n}\n\n/**\n * A changed table: untouched rows keep their source line, the alignment row\n * is kept while the column count is unchanged, edited and new rows are\n * serialised as GFM rows.\n */\nfunction serializeTableWithSource(table: Element, info: SourceTable): string {\n const rows = tableRows(table);\n if (rows.length === 0) return \"\";\n const claimed = new Set<number>();\n const lines: string[] = [];\n rows.forEach((tr, i) => {\n const r = indexAttr(tr, ROW_ATTR, info.lines.length);\n if (r !== undefined && r !== 1 && !claimed.has(r) && tr.outerHTML === info.rowSnapshots.get(r)) {\n claimed.add(r);\n lines.push(info.lines[r]!);\n } else {\n lines.push(serializeTableRow(tr));\n }\n if (i === 0) {\n lines.push(tableCells(tr).length === info.columns ? info.lines[1]! : tableDelimiterRow(tr));\n }\n });\n return lines.join(\"\\n\");\n}\n\ntype Block = { kind: \"block\" | \"div\" | \"inline\"; text: string; tag?: string };\n\nconst BLOCK_TAGS = new Set([\n \"address\", \"article\", \"aside\", \"blockquote\", \"details\", \"dialog\", \"div\", \"dl\",\n \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\",\n \"h5\", \"h6\", \"header\", \"hgroup\", \"hr\", \"li\", \"main\", \"nav\", \"ol\", \"p\", \"pre\",\n \"section\", \"table\", \"ul\",\n]);\n\nfunction isElement(node: Node): node is Element {\n return node.nodeType === 1;\n}\n\nfunction tagOf(node: Node): string {\n return isElement(node) ? node.tagName.toLowerCase() : \"\";\n}\n\nfunction isCustomTag(tag: string): boolean {\n return tag !== \"\" && !STANDARD_HTML_TAGS.has(tag);\n}\n\nfunction isBlockNode(node: Node): boolean {\n return isElement(node) && BLOCK_TAGS.has(tagOf(node));\n}\n\n/** Split a node's children (or a list of sibling nodes) into blocks, serialising each. */\nfunction collectBlocks(parent: Node | readonly Node[]): Block[] {\n const blocks: Block[] = [];\n let run: Node[] = [];\n const flush = () => {\n if (run.length === 0) return;\n const text = serializeInlineRun(run);\n run = [];\n if (text.trim() !== \"\") blocks.push({ kind: \"inline\", text });\n };\n const nodes = Array.isArray(parent) ? parent : Array.from((parent as Node).childNodes);\n for (const child of nodes) {\n if (isBlockNode(child)) {\n flush();\n const el = child as Element;\n const tag = tagOf(el);\n blocks.push({ kind: tag === \"div\" ? \"div\" : \"block\", text: serializeBlock(el), tag });\n } else {\n run.push(child);\n }\n }\n flush();\n return blocks;\n}\n\n/**\n * Join blocks: a blank line between real blocks; a single newline next to a\n * `<div>`, which is the line contentEditable makes when Enter is pressed\n * outside any paragraph.\n */\nfunction joinBlocks(blocks: Block[]): string {\n let out = \"\";\n blocks.forEach((b, i) => {\n if (i > 0) {\n const prev = blocks[i - 1]!;\n out += prev.kind === \"div\" || b.kind === \"div\" ? \"\\n\" : \"\\n\\n\";\n }\n out += b.text;\n });\n return out;\n}\n\nfunction serializeBlocks(parent: Node): string {\n return joinBlocks(collectBlocks(parent));\n}\n\nfunction serializeBlock(el: Element): string {\n const tag = tagOf(el);\n switch (tag) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return `${\"#\".repeat(Number(tag[1]))} ${serializeInline(el).trim()}`;\n case \"p\":\n case \"div\":\n return trimEdgeNewlines(serializeInline(el, true));\n case \"ul\":\n case \"ol\":\n return serializeList(el);\n case \"pre\":\n return serializePre(el);\n case \"blockquote\":\n return serializeBlocks(el)\n .split(\"\\n\")\n .map((line) => (line === \"\" ? \">\" : `> ${line}`))\n .join(\"\\n\");\n case \"hr\":\n return \"---\";\n case \"table\":\n return serializeTable(el);\n default:\n return serializeBlocks(el);\n }\n}\n\n/** The rows of a table, in document order, excluding rows of nested tables. */\nfunction tableRows(table: Element): Element[] {\n return Array.from(table.querySelectorAll(\"tr\")).filter((tr) => tr.closest(\"table\") === table);\n}\n\nfunction tableCells(tr: Element): Element[] {\n return Array.from(tr.children).filter((c) => tagOf(c) === \"td\" || tagOf(c) === \"th\");\n}\n\n/**\n * A cell's inline content on one line. GFM cells cannot hold a line break, so\n * a typed one becomes a literal `<br>`; every `|` is escaped, including inside\n * code spans, which is how GFM spells a pipe in a cell.\n */\nfunction serializeTableCell(cell: Element): string {\n const children = Array.from(cell.childNodes);\n while (children.length > 0 && tagOf(children[children.length - 1]!) === \"br\") children.pop();\n return children\n .map((n) => (tagOf(n) === \"br\" ? \"<br>\" : serializeInlineNode(n)))\n .join(\"\")\n .replace(/\\n/g, \" \")\n .replace(/\\|/g, \"\\\\|\")\n .trim();\n}\n\nfunction serializeTableRow(tr: Element): string {\n return `| ${tableCells(tr).map(serializeTableCell).join(\" | \")} |`;\n}\n\nfunction tableDelimiterRow(header: Element): string {\n const marks = tableCells(header).map((cell) => {\n const align = cell.getAttribute(\"align\") || (cell as HTMLElement).style?.textAlign || \"\";\n if (align === \"left\") return \":---\";\n if (align === \"center\") return \":---:\";\n if (align === \"right\") return \"---:\";\n return \"---\";\n });\n return `| ${marks.join(\" | \")} |`;\n}\n\n/** A GFM table: header row, alignment row, body rows. */\nfunction serializeTable(table: Element): string {\n const rows = tableRows(table);\n if (rows.length === 0) return \"\";\n const lines = rows.map(serializeTableRow);\n lines.splice(1, 0, tableDelimiterRow(rows[0]!));\n return lines.join(\"\\n\");\n}\n\nfunction serializePre(el: Element): string {\n const code = el.querySelector(\"code\");\n const lang = /(?:^|\\s)language-(\\S+)/.exec(code?.getAttribute(\"class\") ?? \"\")?.[1] ?? \"\";\n const text = (code ?? el).textContent ?? \"\";\n return `\\`\\`\\`${lang}\\n${text.replace(/\\n$/, \"\")}\\n\\`\\`\\``;\n}\n\nfunction serializeList(list: Element): string {\n const ordered = tagOf(list) === \"ol\";\n let n = ordered ? Number.parseInt(list.getAttribute(\"start\") ?? \"1\", 10) || 1 : 0;\n const items = Array.from(list.children);\n // marked wraps item text in <p> only when the list is loose.\n const loose = items.some(\n (li) => tagOf(li) === \"li\" && Array.from(li.children).some((c) => tagOf(c) === \"p\"),\n );\n const out: string[] = [];\n for (const item of items) {\n const tag = tagOf(item);\n if (tag === \"ul\" || tag === \"ol\") {\n // A list nested directly in a list (contentEditable's indent) belongs\n // to the item before it.\n const nested = indent(serializeList(item), ordered ? 3 : 2);\n if (out.length > 0) out[out.length - 1] += `\\n${nested}`;\n else out.push(nested);\n continue;\n }\n if (tag !== \"li\") continue;\n const marker = ordered ? `${n++}. ` : \"- \";\n out.push(`${marker}${indent(serializeListItem(item), marker.length, true)}`.replace(/[ \\t]+$/, \"\"));\n }\n return out.join(loose ? \"\\n\\n\" : \"\\n\");\n}\n\n/** An item's content: a nested list sits on the next line, other blocks after a blank line. */\nfunction serializeListItem(li: Element): string {\n const blocks = collectBlocks(li);\n let out = \"\";\n blocks.forEach((b, i) => {\n if (i > 0) out += b.tag === \"ul\" || b.tag === \"ol\" ? \"\\n\" : \"\\n\\n\";\n out += b.text;\n });\n return out;\n}\n\n/** Indent every non-empty line (optionally skipping the first) by `width` spaces. */\nfunction indent(text: string, width: number, skipFirst = false): string {\n const pad = \" \".repeat(width);\n return text\n .split(\"\\n\")\n .map((line, i) => (line === \"\" || (skipFirst && i === 0) ? line : pad + line))\n .join(\"\\n\");\n}\n\nfunction trimEdgeNewlines(text: string): string {\n return text.replace(/^\\n+/, \"\").replace(/\\n+$/, \"\");\n}\n\nfunction serializeInlineRun(nodes: Node[]): string {\n return trimEdgeNewlines(nodes.map((n) => serializeInlineNode(n)).join(\"\"));\n}\n\n/**\n * Serialise an element's children as inline content. In a block, a trailing\n * `<br>` is the placeholder contentEditable keeps in an empty line, not a\n * line break the person typed.\n */\nfunction serializeInline(el: Element, dropTrailingBr = false): string {\n const children = Array.from(el.childNodes);\n if (dropTrailingBr) {\n while (children.length > 0) {\n const last = children[children.length - 1]!;\n if (tagOf(last) === \"br\") children.pop();\n else break;\n }\n }\n return children.map((n) => serializeInlineNode(n)).join(\"\");\n}\n\nfunction serializeInlineNode(node: Node): string {\n if (node.nodeType === 3) return (node.textContent ?? \"\").replace(/ /g, \" \");\n if (!isElement(node)) return \"\";\n const tag = tagOf(node);\n if (isCustomTag(tag)) return node.outerHTML;\n if (BLOCK_TAGS.has(tag)) return serializeBlock(node);\n const inner = () => serializeInline(node);\n switch (tag) {\n case \"br\":\n return \"\\n\";\n case \"strong\":\n case \"b\":\n return `**${inner()}**`;\n case \"em\":\n case \"i\":\n return `*${inner()}*`;\n case \"s\":\n case \"strike\":\n case \"del\":\n return `~~${inner()}~~`;\n case \"code\":\n return `\\`${node.textContent ?? \"\"}\\``;\n case \"a\": {\n const href = node.getAttribute(\"href\");\n if (href == null) return inner();\n const title = node.getAttribute(\"title\");\n return `[${inner()}](${href}${title ? ` \"${title}\"` : \"\"})`;\n }\n case \"img\": {\n const title = node.getAttribute(\"title\");\n return ` ?? \"\"}${title ? ` \"${title}\"` : \"\"})`;\n }\n default:\n return inner();\n }\n}\n\n/** String-rewrite converter, kept only for environments with no DOM. */\nfunction legacyHtmlToMarkdown(html: string): string {\n let md = html;\n\n // Block elements first\n md = md.replace(/<h1[^>]*>(.*?)<\\/h1>/gi, \"# $1\\n\");\n md = md.replace(/<h2[^>]*>(.*?)<\\/h2>/gi, \"## $1\\n\");\n md = md.replace(/<h3[^>]*>(.*?)<\\/h3>/gi, \"### $1\\n\");\n md = md.replace(/<h4[^>]*>(.*?)<\\/h4>/gi, \"#### $1\\n\");\n md = md.replace(/<h5[^>]*>(.*?)<\\/h5>/gi, \"##### $1\\n\");\n md = md.replace(/<h6[^>]*>(.*?)<\\/h6>/gi, \"###### $1\\n\");\n\n // Lists\n md = md.replace(/<li[^>]*>(.*?)<\\/li>/gi, \"- $1\\n\");\n md = md.replace(/<\\/?[uo]l[^>]*>/gi, \"\\n\");\n\n // Inline formatting\n md = md.replace(/<strong[^>]*>(.*?)<\\/strong>/gi, \"**$1**\");\n md = md.replace(/<b[^>]*>(.*?)<\\/b>/gi, \"**$1**\");\n md = md.replace(/<em[^>]*>(.*?)<\\/em>/gi, \"*$1*\");\n md = md.replace(/<i[^>]*>(.*?)<\\/i>/gi, \"*$1*\");\n md = md.replace(/<u[^>]*>(.*?)<\\/u>/gi, \"$1\");\n md = md.replace(/<s[^>]*>(.*?)<\\/s>/gi, \"~~$1~~\");\n md = md.replace(/<strike[^>]*>(.*?)<\\/strike>/gi, \"~~$1~~\");\n md = md.replace(/<del[^>]*>(.*?)<\\/del>/gi, \"~~$1~~\");\n md = md.replace(/<code[^>]*>(.*?)<\\/code>/gi, \"`$1`\");\n\n // Links\n md = md.replace(/<a[^>]*href=\"([^\"]*)\"[^>]*>(.*?)<\\/a>/gi, \"[$2]($1)\");\n\n // Blockquotes\n md = md.replace(/<blockquote[^>]*>(.*?)<\\/blockquote>/gi, \"> $1\\n\");\n\n // Line breaks and paragraphs\n md = md.replace(/<br\\s*\\/?>/gi, \"\\n\");\n md = md.replace(/<p[^>]*>(.*?)<\\/p>/gi, \"$1\\n\\n\");\n md = md.replace(/<div[^>]*>(.*?)<\\/div>/gi, \"$1\\n\");\n\n // Strip only standard HTML tags — preserve unknown/custom tags\n md = md.replace(/<\\/?([a-z][a-z0-9]*)\\b[^>]*>/gi, (match, tagName: string) => {\n return STANDARD_HTML_TAGS.has(tagName.toLowerCase()) ? \"\" : match;\n });\n\n // Decode common HTML entities. Decode & LAST so we never double-unescape:\n // e.g. \"&lt;\" must decode to the literal \"<\", not to \"<\".\n md = md.replace(/</g, \"<\");\n md = md.replace(/>/g, \">\");\n md = md.replace(/"/g, '\"');\n md = md.replace(/'/g, \"'\");\n md = md.replace(/ /g, \" \");\n md = md.replace(/&/g, \"&\");\n\n // Clean up extra whitespace\n md = md.replace(/\\n{3,}/g, \"\\n\\n\");\n md = md.trim();\n\n return md;\n}\n\n/**\n * Generate CSS classes to visually distinguish custom extension tags\n * inside the contentEditable area. Returns Tailwind-style descendant selectors.\n */\nexport function extensionEditorClasses(extensions: RenderExtension[]): string {\n if (extensions.length === 0) return \"\";\n\n return extensions\n .map((ext) => {\n const tag = ext.tag.toLowerCase();\n return [\n `[&_${tag}]:block`,\n `[&_${tag}]:my-2`,\n `[&_${tag}]:rounded-lg`,\n `[&_${tag}]:border`,\n `[&_${tag}]:border-dashed`,\n `[&_${tag}]:border-zinc-300`,\n `[&_${tag}]:bg-zinc-50`,\n `[&_${tag}]:p-3`,\n `[&_${tag}]:text-xs`,\n `dark:[&_${tag}]:border-zinc-600`,\n `dark:[&_${tag}]:bg-zinc-800/50`,\n ].join(\" \");\n })\n .join(\" \");\n}\n","/**\n * Source-level scanning for ContentRenderer: lifting custom tags with a\n * MARKDOWN body out of the source before it is converted, and finding where an\n * in-progress stream should be cut so a half-arrived tag or fence never shows.\n *\n * Both work on the markdown SOURCE and both must ignore code: a `<result>`\n * inside a fenced block or an inline code span is an example, not a tag.\n */\n\n/** A complete custom tag found outside code. */\ninterface TagToken {\n kind: \"open\" | \"close\";\n /** Lower-cased tag name. */\n name: string;\n start: number;\n end: number;\n /** Raw attribute text of an opening tag (may be empty). */\n attrs: string;\n /** The tag starts its line, after at most three spaces of indent. */\n lineStart: boolean;\n}\n\ninterface ScanResult {\n tokens: TagToken[];\n /** Start of the line that opened a fence which never closed, or -1. */\n openFenceStart: number;\n /** The fence that never closed (its marker character and length), or null. */\n openFence: { char: string; len: number } | null;\n}\n\n/** A piece of markdown source: plain markdown, or a lifted tag + its body. */\nexport type MarkdownBlock =\n | { type: \"markdown\"; source: string }\n | { type: \"tag\"; tag: string; attrs: string; body: string };\n\nconst FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})(.*)$/;\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/** Blank out inline code spans so tag search skips them; keeps offsets. */\nfunction maskInlineCode(line: string): string {\n let out = \"\";\n let i = 0;\n while (i < line.length) {\n if (line[i] !== \"`\") {\n out += line[i];\n i++;\n continue;\n }\n let n = 0;\n while (line[i + n] === \"`\") n++;\n const fence = \"`\".repeat(n);\n // The closing run must be exactly n backticks long.\n let search = i + n;\n let close = -1;\n while (search < line.length) {\n const at = line.indexOf(fence, search);\n if (at < 0) break;\n let len = 0;\n while (line[at + len] === \"`\") len++;\n if (len === n) {\n close = at;\n break;\n }\n search = at + len;\n }\n if (close < 0) {\n out += fence;\n i += n;\n continue;\n }\n out += \" \".repeat(close + n - i);\n i = close + n;\n }\n return out;\n}\n\nfunction scan(src: string, names: string[], trackFences: boolean): ScanResult {\n const tokens: TagToken[] = [];\n let openFenceStart = -1;\n if (names.length === 0 && !trackFences) return { tokens, openFenceStart, openFence: null };\n\n const tagRe = names.length\n ? new RegExp(`<(\\\\/?)(${names.map(escapeRegExp).join(\"|\")})(?=[\\\\s>/])([^>]*)>`, \"gi\")\n : null;\n\n let fence: { char: string; len: number } | null = null;\n let pos = 0;\n while (pos <= src.length) {\n const nl = src.indexOf(\"\\n\", pos);\n const lineEnd = nl < 0 ? src.length : nl;\n const line = src.slice(pos, lineEnd);\n\n if (trackFences) {\n if (fence) {\n const close = new RegExp(`^ {0,3}${fence.char === \"`\" ? \"`\" : \"~\"}{${fence.len},}\\\\s*$`);\n if (close.test(line)) {\n fence = null;\n openFenceStart = -1;\n }\n pos = lineEnd + 1;\n if (nl < 0) break;\n continue;\n }\n const m = FENCE_OPEN.exec(line);\n if (m && !(m[1][0] === \"`\" && m[2].includes(\"`\"))) {\n fence = { char: m[1][0], len: m[1].length };\n openFenceStart = pos;\n pos = lineEnd + 1;\n if (nl < 0) break;\n continue;\n }\n }\n\n if (tagRe) {\n const masked = trackFences ? maskInlineCode(line) : line;\n const indent = /^ {0,3}/.exec(masked)![0].length;\n tagRe.lastIndex = 0;\n let t: RegExpExecArray | null;\n while ((t = tagRe.exec(masked)) !== null) {\n const isClose = t[1] === \"/\";\n const attrs = t[3];\n if (isClose && attrs.trim() !== \"\") continue;\n if (!isClose && attrs.trimEnd().endsWith(\"/\")) continue; // self-closing\n tokens.push({\n kind: isClose ? \"close\" : \"open\",\n name: t[2].toLowerCase(),\n start: pos + t.index,\n end: pos + t.index + t[0].length,\n attrs: isClose ? \"\" : attrs.trim(),\n lineStart: t.index === indent,\n });\n }\n }\n\n if (nl < 0) break;\n pos = lineEnd + 1;\n }\n\n return { tokens, openFenceStart, openFence: fence };\n}\n\n/**\n * Where a partial tag that could still become a registered one starts on the\n * last line (`<`, `</res`, `<result title=\"x`), or -1. A `<` that cannot\n * become a known tag (`a < b`, `a<b`) is prose and is never held back.\n */\nfunction partialTagAt(lastLine: string, names: string[], markdown: boolean): number {\n if (!names.length) return -1;\n const masked = markdown ? maskInlineCode(lastLine) : lastLine;\n const lt = masked.lastIndexOf(\"<\");\n if (lt < 0) return -1;\n const m = /^<(\\/?)([A-Za-z][\\w-]*)?([^>]*)$/.exec(masked.slice(lt));\n if (!m) return -1;\n const name = (m[2] ?? \"\").toLowerCase();\n const rest = m[3];\n let partial = false;\n if (!name) partial = rest === \"\";\n else if (names.includes(name)) partial = rest === \"\" || /^\\s/.test(rest);\n else partial = rest === \"\" && names.some((n) => n.startsWith(name));\n return partial ? lt : -1;\n}\n\n/** Registered tags opened before `cut` and not yet closed, outermost first. */\nfunction openTagsBefore(tokens: TagToken[], cut: number): TagToken[] {\n const stack: TagToken[] = [];\n for (const t of tokens) {\n if (t.start >= cut) break;\n if (t.kind === \"open\") {\n stack.push(t);\n continue;\n }\n for (let k = stack.length - 1; k >= 0; k--) {\n if (stack[k].name === t.name) {\n stack.length = k;\n break;\n }\n }\n }\n return stack;\n}\n\n/**\n * Split markdown source into plain markdown and lifted tags whose names are in\n * `tags`. A tag is lifted only when its opening tag starts a line (block\n * level) and a matching closing tag exists; same-name nesting is balanced. An\n * unclosed tag stays in the markdown, where it is sanitised like any HTML.\n */\nexport function splitMarkdownBlocks(src: string, tags: string[]): MarkdownBlock[] {\n const names = tags.map((t) => t.toLowerCase());\n if (names.length === 0) return src ? [{ type: \"markdown\", source: src }] : [];\n\n const { tokens } = scan(src, names, true);\n const blocks: MarkdownBlock[] = [];\n let cursor = 0;\n let i = 0;\n\n while (i < tokens.length) {\n const open = tokens[i];\n if (open.kind !== \"open\" || !open.lineStart || open.start < cursor) {\n i++;\n continue;\n }\n let depth = 0;\n let closeIdx = -1;\n for (let j = i; j < tokens.length; j++) {\n const t = tokens[j];\n if (t.name !== open.name) continue;\n depth += t.kind === \"open\" ? 1 : -1;\n if (depth === 0) {\n closeIdx = j;\n break;\n }\n }\n if (closeIdx < 0) {\n i++;\n continue;\n }\n const close = tokens[closeIdx];\n if (open.start > cursor) blocks.push({ type: \"markdown\", source: src.slice(cursor, open.start) });\n blocks.push({ type: \"tag\", tag: open.name, attrs: open.attrs, body: src.slice(open.end, close.start) });\n cursor = close.end;\n i = closeIdx + 1;\n }\n\n if (cursor < src.length) blocks.push({ type: \"markdown\", source: src.slice(cursor) });\n return blocks;\n}\n\n/**\n * Where to cut a still-streaming source so nothing unfinished shows: an open\n * custom tag (from its opening tag), an open code fence (from its fence line),\n * or a partial tag at the very end (`<`, `</res`, `<result title=\"x`). Returns\n * `src.length` when everything present is complete.\n *\n * A `<` that cannot become a known tag (`a < b`, `a<b`) is prose and is never\n * held back. Unknown tags are never held back.\n */\nexport function streamingCut(src: string, tags: string[], markdown: boolean): number {\n const names = tags.map((t) => t.toLowerCase());\n const { tokens, openFenceStart } = scan(src, names, markdown);\n let cut = src.length;\n\n if (openFenceStart >= 0) cut = Math.min(cut, openFenceStart);\n\n const stack = openTagsBefore(tokens, cut);\n if (stack.length) cut = Math.min(cut, stack[0].start);\n\n // Only the last line can hold something still arriving.\n const lastLineStart = src.lastIndexOf(\"\\n\", cut - 1) + 1;\n const lastLine = src.slice(lastLineStart, cut);\n\n if (markdown && /^ {0,3}(`{1,2}|~{1,2})$/.test(lastLine)) {\n return Math.min(cut, lastLineStart);\n }\n\n const lt = partialTagAt(lastLine, names, markdown);\n if (lt >= 0) cut = Math.min(cut, lastLineStart + lt);\n\n return cut;\n}\n\n/** A still-streaming source made renderable as it fills (`streaming=\"progressive\"`). */\nexport interface ProgressiveSource {\n /** The source with partial trailing markers held back and open blocks closed. */\n source: string;\n /**\n * A code fence was still open and has been closed here, so the LAST code\n * block in the rendered output is the one still arriving.\n */\n openFence: boolean;\n}\n\n/**\n * Progressive streaming: show an open block as it fills instead of holding it\n * back. What is still held back is only what cannot be rendered honestly yet:\n *\n * - a partial tag at the very end that could still become a registered one\n * (`<`, `<result title=\"Do`, `</res`), exactly as `streamingCut` holds it;\n * - a fence opener line with no newline yet (its info string may be partial);\n * - a fence marker still arriving (a run of backticks or tildes shorter than a\n * fence), whether it would open or close one.\n *\n * Then an open code fence is closed with its own marker, and every registered\n * tag still open is closed innermost first, so the normal pipeline renders the\n * body-so-far: lifted, converted, sanitised, with nested extensions, exactly\n * as the final render will once the real closing tags arrive.\n */\nexport function streamingProgressive(src: string, tags: string[], markdown: boolean): ProgressiveSource {\n const names = tags.map((t) => t.toLowerCase());\n const { tokens, openFenceStart, openFence } = scan(src, names, markdown);\n let cut = src.length;\n let fence = openFenceStart >= 0 ? openFence : null;\n\n const lastLineStart = src.lastIndexOf(\"\\n\", cut - 1) + 1;\n const lastLine = src.slice(lastLineStart);\n\n if (fence) {\n if (openFenceStart === lastLineStart) {\n // The opener itself is still arriving: hold it, there is no code yet.\n cut = openFenceStart;\n fence = null;\n } else {\n // Inside code `<` is just code, so no partial-tag check; only a closing\n // marker still arriving is held.\n const m = /^ {0,3}(`+|~+)$/.exec(lastLine);\n if (m && m[1][0] === fence.char && m[1].length < fence.len) cut = lastLineStart;\n }\n } else if (markdown && /^ {0,3}(`{1,2}|~{1,2})$/.test(lastLine)) {\n cut = lastLineStart;\n } else {\n const lt = partialTagAt(lastLine, names, markdown);\n if (lt >= 0) cut = lastLineStart + lt;\n }\n\n let out = src.slice(0, cut);\n if (fence) {\n out += (out.endsWith(\"\\n\") ? \"\" : \"\\n\") + fence.char.repeat(fence.len) + \"\\n\";\n }\n const stack = openTagsBefore(tokens, fence ? openFenceStart : cut);\n for (let k = stack.length - 1; k >= 0; k--) out += `</${stack[k].name}>`;\n\n return { source: out, openFence: fence !== null };\n}\n","import { useMemo } from \"react\";\nimport { markdownToRawHtml } from \"../../utils/markdown\";\nimport { sanitizeHtml } from \"../../utils/sanitize\";\nimport type { RenderExtension } from \"./extensions\";\nimport { parseSegments, tagAttributes } from \"./extensions\";\nimport { splitMarkdownBlocks } from \"./markdown-blocks\";\nimport { HtmlChunk } from \"./copy\";\n\n/**\n * Markdown-body tags nest; past this depth a body is rendered as plain\n * sanitised content with no further extensions, so hostile input cannot\n * recurse without bound.\n */\nconst MAX_DEPTH = 8;\n\ninterface ContentBodyProps {\n source: string;\n format: \"html\" | \"markdown\";\n extensions: RenderExtension[];\n unsafe: boolean;\n depth?: number;\n /**\n * This body is the last thing the renderer shows, so under progressive\n * streaming it holds any block still arriving. Passed only to the last piece.\n */\n tail?: boolean;\n}\n\n/** Index of the last piece that renders anything, or -1. */\nfunction lastIndexWith<T>(items: T[], renders: (item: T) => boolean): number {\n for (let i = items.length - 1; i >= 0; i--) if (renders(items[i])) return i;\n return -1;\n}\n\n/**\n * Renders a source string. In markdown, extensions marked `markdown: true` are\n * lifted out of the SOURCE first (so their body is still markdown); every\n * other piece is converted, sanitised, and then searched for the remaining\n * extension tags as before.\n */\nexport function ContentBody({ source, format, extensions, unsafe, depth = 0, tail = false }: ContentBodyProps) {\n const active = depth >= MAX_DEPTH ? [] : extensions;\n const blocks = useMemo(() => {\n if (format !== \"markdown\") return null;\n const mdTags = active.filter((e) => e.markdown).map((e) => e.tag);\n return splitMarkdownBlocks(source, mdTags);\n }, [source, format, active]);\n\n if (!blocks) {\n const html = unsafe ? source : sanitizeHtml(source);\n return (\n <RenderedContent\n html={html}\n extensions={active}\n unsafe={unsafe}\n fromMarkdown={false}\n depth={depth}\n tail={tail}\n />\n );\n }\n\n const last = tail\n ? lastIndexWith(blocks, (b) => b.type === \"tag\" || b.source.trim() !== \"\")\n : -1;\n\n return (\n <>\n {blocks.map((block, i) => {\n if (block.type === \"markdown\") {\n const raw = markdownToRawHtml(block.source);\n const html = unsafe ? raw : sanitizeHtml(raw);\n return (\n <RenderedContent\n key={i}\n html={html}\n extensions={active}\n unsafe={unsafe}\n fromMarkdown\n depth={depth}\n tail={i === last}\n />\n );\n }\n const ext = active.find((e) => e.tag.toLowerCase() === block.tag);\n if (!ext) return null;\n const Component = ext.component;\n const Wrapper = ext.block !== false ? \"div\" : \"span\";\n return (\n <Wrapper key={i} data-render-extension={block.tag}>\n <Component content={block.body} attributes={tagAttributes(block.attrs, unsafe)}>\n <ContentBody\n source={block.body}\n format=\"markdown\"\n extensions={active}\n unsafe={unsafe}\n depth={depth + 1}\n tail={i === last}\n />\n </Component>\n </Wrapper>\n );\n })}\n </>\n );\n}\n\ninterface RenderedContentProps {\n html: string;\n extensions: RenderExtension[];\n /**\n * If true, html is rendered as-is without per-segment sanitization. Caller\n * (ContentBody) is expected to have already sanitized — or explicitly opted\n * out — at the top level.\n */\n unsafe: boolean;\n /** The HTML came from marked, so a code block's text ends in an added newline. */\n fromMarkdown: boolean;\n depth: number;\n /** See `ContentBodyProps.tail`. */\n tail?: boolean;\n}\n\n/**\n * Renders an HTML string with extension support. Plain HTML segments are\n * injected (with copy buttons); custom-tag segments are rendered via their\n * registered React component.\n */\nexport function RenderedContent({\n html,\n extensions,\n unsafe,\n fromMarkdown,\n depth,\n tail = false,\n}: RenderedContentProps) {\n const segments = useMemo(() => parseSegments(html, extensions), [html, extensions]);\n\n const renderHtml = (content: string): string => (unsafe ? content : sanitizeHtml(content));\n\n if (segments.length === 0) return null;\n\n // Fast path: no extensions matched.\n if (segments.length === 1 && segments[0].type === \"html\") {\n return <HtmlChunk html={renderHtml(segments[0].content)} fromMarkdown={fromMarkdown} tail={tail} />;\n }\n\n const last = tail\n ? lastIndexWith(segments, (s) => s.type === \"extension\" || s.content.trim() !== \"\")\n : -1;\n\n return (\n <>\n {segments.map((segment, i) => {\n if (segment.type === \"html\") {\n return segment.content ? (\n <HtmlChunk\n key={i}\n html={renderHtml(segment.content)}\n fromMarkdown={fromMarkdown}\n tail={i === last}\n />\n ) : null;\n }\n\n const ext = extensions.find((e) => e.tag.toLowerCase() === segment.tag);\n if (!ext) return null;\n\n const Component = ext.component;\n const Wrapper = ext.block !== false ? \"div\" : \"span\";\n // A markdown-body tag reached here only as HTML (inline, unclosed, or\n // in HTML content); its body is HTML, rendered the same way.\n const children = ext.markdown ? (\n <ContentBody\n source={segment.content}\n format=\"html\"\n extensions={extensions}\n unsafe={unsafe}\n depth={depth + 1}\n tail={i === last}\n />\n ) : undefined;\n\n return (\n <Wrapper key={i} data-render-extension={segment.tag}>\n <Component content={segment.content} attributes={segment.attributes}>\n {children}\n </Component>\n </Wrapper>\n );\n })}\n </>\n );\n}\n\nRenderedContent.displayName = \"RenderedContent\";\nContentBody.displayName = \"ContentBody\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { visuallyHidden } from \"../../utils/visually-hidden\";\nimport { proseClasses, detectFormat } from \"../Editor/editor.utils\";\nimport { mergeExtensions } from \"./extensions\";\nimport { ContentBody } from \"./RenderedContent\";\nimport { CopyContext, useCopyPipeline, type CopyContextValue } from \"./copy\";\nimport { streamingCut, streamingProgressive } from \"./markdown-blocks\";\nimport type { ContentRendererProps } from \"./ContentRenderer.types\";\n\nexport function ContentRenderer({\n value,\n format = \"auto\",\n lineSpacing = 1.6,\n className,\n extensions: instanceExtensions,\n unsafe = false,\n copyButtons = true,\n onCopy,\n clipboardWriter,\n streaming = false,\n}: ContentRendererProps) {\n const extensions = useMemo(\n () => mergeExtensions(instanceExtensions),\n [instanceExtensions],\n );\n\n // Guard nullish input: marked.parse throws \"input parameter is undefined\n // or null\", which during render would crash the whole React tree. Treat\n // missing content as empty.\n const safe = value ?? \"\";\n const resolvedFormat = format === \"auto\" ? detectFormat(safe) : format;\n\n const progressive = streaming === \"progressive\";\n const { source, openFence } = useMemo(() => {\n if (!streaming) return { source: safe, openFence: false };\n const tags = extensions.map((e) => e.tag);\n const markdown = resolvedFormat === \"markdown\";\n if (progressive) return streamingProgressive(safe, tags, markdown);\n return { source: safe.slice(0, streamingCut(safe, tags, markdown)), openFence: false };\n }, [safe, streaming, progressive, extensions, resolvedFormat]);\n\n const codeOn = copyButtons === true || (typeof copyButtons === \"object\" && copyButtons.code !== false);\n const tableOn = copyButtons === true || (typeof copyButtons === \"object\" && copyButtons.table !== false);\n const copyOn = codeOn || tableOn;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const [announcement, setAnnouncement] = useState(\"\");\n const announce = useCallback((message: string) => {\n // Clear first so the same message twice in a row is announced twice.\n setAnnouncement(\"\");\n queueMicrotask(() => setAnnouncement(message));\n }, []);\n const copy = useCopyPipeline({ writer: clipboardWriter, onCopy, rootRef, announce });\n const copyContext = useMemo<CopyContextValue>(\n () => ({ code: codeOn, table: tableOn, copy, holdTailCode: openFence }),\n [codeOn, tableOn, copy, openFence],\n );\n\n // The live region is `position: absolute`. With nothing positioned around it,\n // it escapes to an ancestor outside an unpositioned scroll container and\n // stretches the document (genie#1290). So the root contains it, unless the\n // host's className already positions the root (twMerge drops our `relative`\n // when it does): sticky / absolute / fixed contain it too, and an explicit\n // `static` is the host's call.\n const contain = copyOn && cn(\"relative\", className).split(\" \").includes(\"relative\");\n\n return (\n <div\n ref={rootRef}\n data-react-fancy-content-renderer=\"\"\n data-streaming={streaming ? \"true\" : undefined}\n data-streaming-mode={progressive ? \"progressive\" : undefined}\n style={contain ? { lineHeight: lineSpacing, position: \"relative\" } : { lineHeight: lineSpacing }}\n className={cn(\"text-sm\", proseClasses, className)}\n >\n <CopyContext.Provider value={copyContext}>\n <ContentBody\n source={source}\n format={resolvedFormat}\n extensions={extensions}\n unsafe={unsafe}\n tail\n />\n </CopyContext.Provider>\n {copyOn && (\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-react-fancy-content-renderer-live=\"\"\n className=\"sr-only\"\n style={visuallyHidden}\n >\n {announcement}\n </span>\n )}\n </div>\n );\n}\n\nContentRenderer.displayName = \"ContentRenderer\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-floating-position.ts"],"names":[],"mappings":"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","file":"chunk-MQ6VGG62.js","sourcesContent":["import { useCallback, useEffect, useState, type RefObject } from \"react\";\nimport type { Placement } from \"../utils/types\";\n\ninterface FloatingPosition {\n x: number;\n y: number;\n placement: Placement;\n}\n\ninterface UseFloatingPositionOptions {\n placement?: Placement;\n offset?: number;\n enabled?: boolean;\n}\n\nfunction getPosition(\n anchor: DOMRect,\n floating: DOMRect,\n placement: Placement,\n offset: number,\n): FloatingPosition {\n let x = 0;\n let y = 0;\n const base = placement.split(\"-\")[0] as \"top\" | \"bottom\" | \"left\" | \"right\";\n const align = placement.split(\"-\")[1] as \"start\" | \"end\" | undefined;\n\n switch (base) {\n case \"top\":\n x = anchor.left + anchor.width / 2 - floating.width / 2;\n y = anchor.top - floating.height - offset;\n break;\n case \"bottom\":\n x = anchor.left + anchor.width / 2 - floating.width / 2;\n y = anchor.bottom + offset;\n break;\n case \"left\":\n x = anchor.left - floating.width - offset;\n y = anchor.top + anchor.height / 2 - floating.height / 2;\n break;\n case \"right\":\n x = anchor.right + offset;\n y = anchor.top + anchor.height / 2 - floating.height / 2;\n break;\n }\n\n if (base === \"top\" || base === \"bottom\") {\n if (align === \"start\") x = anchor.left;\n else if (align === \"end\") x = anchor.right - floating.width;\n }\n\n if (base === \"left\" || base === \"right\") {\n if (align === \"start\") y = anchor.top;\n else if (align === \"end\") y = anchor.bottom - floating.height;\n }\n\n // Viewport clamping\n let finalPlacement = placement;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (base === \"bottom\" && y + floating.height > vh) {\n y = anchor.top - floating.height - offset;\n finalPlacement = placement.replace(\"bottom\", \"top\") as Placement;\n } else if (base === \"top\" && y < 0) {\n y = anchor.bottom + offset;\n finalPlacement = placement.replace(\"top\", \"bottom\") as Placement;\n }\n\n x = Math.max(4, Math.min(x, vw - floating.width - 4));\n y = Math.max(4, Math.min(y, vh - floating.height - 4));\n\n return { x, y, placement: finalPlacement };\n}\n\nexport function useFloatingPosition(\n anchorRef: RefObject<HTMLElement | null>,\n floatingRef: RefObject<HTMLElement | null>,\n options: UseFloatingPositionOptions = {},\n): FloatingPosition {\n const { placement = \"bottom\", offset = 8, enabled = true } = options;\n const [position, setPosition] = useState<FloatingPosition>({\n x: -9999,\n y: -9999,\n placement,\n });\n\n const update = useCallback(() => {\n const anchor = anchorRef.current;\n const floating = floatingRef.current;\n if (!anchor || !floating) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n const floatingRect = floating.getBoundingClientRect();\n const next = getPosition(anchorRect, floatingRect, placement, offset);\n // Bail out when nothing changed so this can run after every commit\n // (below) without causing an infinite render loop.\n setPosition((prev) =>\n prev.x === next.x && prev.y === next.y && prev.placement === next.placement\n ? prev\n : next,\n );\n }, [anchorRef, floatingRef, placement, offset]);\n\n // Re-measure after every commit while open.\n //\n // The floating element mounts a frame or two AFTER `enabled` flips — its\n // render is gated behind a state flip (e.g. useAnimation's `mounted`), so at\n // the moment `enabled` turns true the floating ref is still null and a single\n // measurement no-ops, leaving the popover parked at its off-screen sentinel.\n //\n // A passive effect with no deps runs after *every* commit — including the one\n // that finally mounts the floating element — and, crucially, keeps running in\n // hidden/background tabs where `requestAnimationFrame` is paused. The bail-out\n // in `update` makes the steady-state calls free, so this both fixes the\n // late-mount race and survives tab-visibility throttling.\n useEffect(() => {\n if (enabled) update();\n });\n\n // …but the per-commit effect ISN'T enough when the floating element mounts\n // through a <Portal> whose own mount gate (SSR-safe; renders nothing until its\n // useEffect runs) attaches the node WITHOUT re-rendering this hook's component.\n // Then no commit happens here, the measurement never runs, and the popover\n // stays parked at its off-screen sentinel until an unrelated scroll/resize\n // fires `update()` — the \"menu only appears after I scroll\" bug. Poll with rAF\n // until the node is actually in the DOM, measure it, then keep it observed for\n // size changes (async content / lazily-loaded icons).\n useEffect(() => {\n if (!enabled) return;\n let raf = 0;\n let ro: ResizeObserver | null = null;\n const tick = () => {\n const el = floatingRef.current;\n if (el) {\n update();\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(() => update());\n ro.observe(el);\n }\n } else {\n raf = requestAnimationFrame(tick);\n }\n };\n raf = requestAnimationFrame(tick);\n return () => {\n cancelAnimationFrame(raf);\n ro?.disconnect();\n };\n }, [enabled, update, floatingRef]);\n\n // Park off-screen when closed so the next open re-measures from scratch.\n useEffect(() => {\n if (!enabled) {\n setPosition((prev) =>\n prev.x === -9999 ? prev : { x: -9999, y: -9999, placement },\n );\n }\n }, [enabled, placement]);\n\n // Reposition on scroll/resize while open.\n useEffect(() => {\n if (!enabled) return;\n\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [update, enabled]);\n\n return position;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ContextMenu/ContextMenu.context.ts","../src/components/ContextMenu/ContextMenuTrigger.tsx","../src/components/ContextMenu/ContextMenuSub.tsx","../src/components/ContextMenu/ContextMenuContent.tsx","../src/components/ContextMenu/ContextMenuItem.tsx","../src/components/ContextMenu/ContextMenuSeparator.tsx","../src/components/ContextMenu/ContextMenu.tsx"],"names":["createContext","jsx","useContext","useCallback","useRef","useState","useEffect"],"mappings":"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","file":"chunk-NSJBVV7R.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ContextMenuContextValue } from \"./ContextMenu.types\";\n\nexport const ContextMenuContext =\n createContext<ContextMenuContextValue | null>(null);\n\nexport function useContextMenu(): ContextMenuContextValue {\n const ctx = useContext(ContextMenuContext);\n if (!ctx) {\n throw new Error(\n \"ContextMenu compound components must be used within <ContextMenu>\",\n );\n }\n return ctx;\n}\n","import { useCallback, type MouseEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuTriggerProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuTrigger({\n children,\n className,\n}: ContextMenuTriggerProps) {\n const ctx = useContextMenu();\n\n const handleContextMenu = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n (ctx as { position: { x: number; y: number } }).position.x = e.clientX;\n (ctx as { position: { x: number; y: number } }).position.y = e.clientY;\n ctx.setOpen(true);\n },\n [ctx],\n );\n\n return (\n <div data-react-fancy-context-menu-trigger=\"\" onContextMenu={handleContextMenu} className={cn(className)}>\n {children}\n </div>\n );\n}\n\nContextMenuTrigger.displayName = \"ContextMenuTrigger\";\n","import { createContext, useCallback, useContext, useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ContextMenuSubProps, ContextMenuSubTriggerProps, ContextMenuSubContentProps } from \"./ContextMenu.types\";\n\n// ---------------------------------------------------------------------------\n// Sibling coordination: parent tracks which sub is active so opening one\n// immediately closes any previously-open sibling.\n// ---------------------------------------------------------------------------\n\ninterface MenuGroupContextValue {\n activeSubId: string | null;\n setActiveSub: (id: string | null) => void;\n}\n\nconst MenuGroupContext = createContext<MenuGroupContextValue>({\n activeSubId: null,\n setActiveSub: () => {},\n});\n\n/** Wrap sibling Subs so only one is open at a time. Placed inside Content/SubContent. */\nexport function MenuGroupProvider({ children }: { children: React.ReactNode }) {\n const [activeSubId, setActiveSub] = useState<string | null>(null);\n return (\n <MenuGroupContext.Provider value={{ activeSubId, setActiveSub }}>\n {children}\n </MenuGroupContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Sub components\n// ---------------------------------------------------------------------------\n\ninterface SubContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n cancelClose: () => void;\n}\n\nconst ContextMenuSubContext = createContext<SubContextValue>({\n open: false,\n setOpen: () => {},\n cancelClose: () => {},\n});\n\nexport function ContextMenuSub({ children }: ContextMenuSubProps) {\n const id = useId();\n const { activeSubId, setActiveSub } = useContext(MenuGroupContext);\n const open = activeSubId === id;\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const activeRef = useRef(activeSubId);\n activeRef.current = activeSubId;\n\n const setOpen = useCallback((v: boolean) => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n setActiveSub(v ? id : null);\n }, [id, setActiveSub]);\n\n const scheduleClose = useCallback(() => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closeTimer.current = setTimeout(() => {\n if (activeRef.current === id) setActiveSub(null);\n }, 150);\n }, [id, setActiveSub]);\n\n const cancelClose = useCallback(() => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n }, []);\n\n useEffect(() => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n return (\n <div\n className=\"relative\"\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n data-react-fancy-context-menu-sub=\"\"\n >\n <ContextMenuSubContext.Provider value={{ open, setOpen, cancelClose }}>\n {children}\n </ContextMenuSubContext.Provider>\n </div>\n );\n}\n\nContextMenuSub.displayName = \"ContextMenuSub\";\n\nexport function ContextMenuSubTrigger({ children, className }: ContextMenuSubTriggerProps) {\n const { open, setOpen, cancelClose } = useContext(ContextMenuSubContext);\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-sub-trigger=\"\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\n \"flex w-full items-center justify-between rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n open && \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n className,\n )}\n onMouseEnter={() => {\n cancelClose();\n setOpen(true);\n }}\n onClick={() => setOpen(!open)}\n >\n <span>{children}</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"ml-2 opacity-50\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n );\n}\n\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nexport function ContextMenuSubContent({ children, className }: ContextMenuSubContentProps) {\n const { open } = useContext(ContextMenuSubContext);\n const ref = useRef<HTMLDivElement>(null);\n const [flipLeft, setFlipLeft] = useState(false);\n const [topOffset, setTopOffset] = useState(0);\n const [maxH, setMaxH] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (!open || !ref.current) return;\n const pad = 8;\n const rect = ref.current.getBoundingClientRect();\n\n // Horizontal: flip left if overflowing right\n setFlipLeft(rect.right > window.innerWidth - pad);\n\n // Vertical: shift up if overflowing bottom, cap height if still too tall\n const overflow = rect.bottom - (window.innerHeight - pad);\n if (overflow > 0) {\n const shifted = Math.min(overflow, rect.top - pad);\n setTopOffset(-shifted);\n if (overflow > shifted) {\n setMaxH(window.innerHeight - pad * 2);\n } else {\n setMaxH(undefined);\n }\n } else {\n setTopOffset(0);\n setMaxH(undefined);\n }\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n data-react-fancy-context-menu-sub-content=\"\"\n role=\"menu\"\n className={cn(\n \"absolute z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n flipLeft ? \"right-full mr-1\" : \"left-full ml-1\",\n maxH && \"overflow-y-auto\",\n className,\n )}\n style={{ top: topOffset, maxHeight: maxH }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n );\n}\n\nContextMenuSubContent.displayName = \"ContextMenuSubContent\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { useAnimation } from \"../../hooks/use-animation\";\nimport { MenuGroupProvider } from \"./ContextMenuSub\";\nimport type { ContextMenuContentProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuContent({\n children,\n className,\n}: ContextMenuContentProps) {\n const { open, setOpen, position } = useContextMenu();\n const menuRef = useRef<HTMLDivElement>(null);\n const [adjusted, setAdjusted] = useState<{ x: number; y: number }>(position);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useOutsideClick(menuRef, close, open);\n useEscapeKey(close, open);\n\n // Clamp position to viewport after mount\n useEffect(() => {\n const node = menuRef.current;\n if (!open || !node) {\n setAdjusted(position);\n return;\n }\n requestAnimationFrame(() => {\n const rect = node.getBoundingClientRect();\n const pad = 8;\n let x = position.x;\n let y = position.y;\n if (x + rect.width > window.innerWidth - pad) x = window.innerWidth - rect.width - pad;\n if (y + rect.height > window.innerHeight - pad) y = window.innerHeight - rect.height - pad;\n if (x < pad) x = pad;\n if (y < pad) y = pad;\n setAdjusted({ x, y });\n });\n }, [open, position]);\n\n const { mounted, className: animClass, ref: animRef } = useAnimation({\n open,\n enterClass: \"fancy-scale-in\",\n exitClass: \"fancy-fade-out\",\n });\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <div\n ref={(node) => {\n menuRef.current = node;\n (animRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }}\n data-react-fancy-context-menu=\"\"\n role=\"menu\"\n className={cn(\n \"fixed z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n animClass,\n className,\n )}\n style={{ left: adjusted.x, top: adjusted.y }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n </Portal>\n );\n}\n\nContextMenuContent.displayName = \"ContextMenuContent\";\n","import { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuItemProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuItem({\n children,\n onClick,\n disabled = false,\n danger = false,\n className,\n}: ContextMenuItemProps) {\n const { setOpen } = useContextMenu();\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-item=\"\"\n role=\"menuitem\"\n disabled={disabled}\n aria-disabled={disabled}\n className={cn(\n \"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n danger\n ? \"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={() => {\n if (disabled) return;\n onClick?.();\n setOpen(false);\n }}\n >\n {children}\n </button>\n );\n}\n\nContextMenuItem.displayName = \"ContextMenuItem\";\n","import { cn } from \"../../utils/cn\";\nimport type { ContextMenuSeparatorProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuSeparator({ className }: ContextMenuSeparatorProps) {\n return (\n <div\n data-react-fancy-context-menu-separator=\"\"\n role=\"separator\"\n className={cn(\"my-1 h-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\", className)}\n />\n );\n}\n\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n","import { useMemo, useRef, useState } from \"react\";\nimport { ContextMenuContext } from \"./ContextMenu.context\";\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { ContextMenuContent } from \"./ContextMenuContent\";\nimport { ContextMenuItem } from \"./ContextMenuItem\";\nimport { ContextMenuSeparator } from \"./ContextMenuSeparator\";\nimport { ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from \"./ContextMenuSub\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\n\nfunction ContextMenuRoot({ children }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const positionRef = useRef({ x: 0, y: 0 });\n\n const ctx = useMemo(\n () => ({ open, setOpen, position: positionRef.current }),\n [open],\n );\n\n return (\n <ContextMenuContext.Provider value={ctx}>\n {children}\n </ContextMenuContext.Provider>\n );\n}\n\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n Trigger: ContextMenuTrigger,\n Content: ContextMenuContent,\n Item: ContextMenuItem,\n Separator: ContextMenuSeparator,\n Sub: ContextMenuSub,\n SubTrigger: ContextMenuSubTrigger,\n SubContent: ContextMenuSubContent,\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/inputs/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-NVXTHTJI.js","sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport { dirtyRingClasses } from \"../inputs.utils\";\nimport type { SliderProps } from \"./Slider.types\";\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (props, ref) => {\n const {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min = 0,\n max = 100,\n step = 1,\n showValue,\n marks,\n } = props;\n\n const autoId = useId();\n const sliderId = id ?? autoId;\n\n if (props.range) {\n return (\n <RangeSlider\n {...props}\n id={sliderId}\n ref={ref}\n />\n );\n }\n\n return (\n <SingleSlider\n {...props}\n range={false}\n id={sliderId}\n ref={ref}\n />\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n\nconst SingleSlider = forwardRef<HTMLInputElement, SliderProps & { range?: false }>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min = 0,\n max = 100,\n step = 1,\n showValue,\n marks,\n prefix,\n suffix,\n mode,\n ...rest\n },\n ref,\n ) => {\n const singleProps = rest as { value?: number; defaultValue?: number; onValueChange?: (v: number) => void };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n singleProps.value,\n singleProps.defaultValue ?? min,\n singleProps.onValueChange,\n );\n\n const slider = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {`${prefix ?? \"\"}${value}${suffix ?? \"\"}`}\n </DisplayValue>\n ) : (\n <div data-react-fancy-slider=\"\" className={cn(\"flex flex-col gap-1\", className)}>\n <div className=\"flex items-center gap-3\">\n <input\n ref={ref}\n id={id}\n type=\"range\"\n name={name}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n autoFocus={interactive}\n onBlur={() => {\n if (interactive) exitEdit();\n }}\n onChange={(e) => setValue(Number(e.target.value))}\n className={cn(\n \"w-full cursor-pointer accent-blue-600 disabled:cursor-not-allowed disabled:opacity-50\",\n dirtyRingClasses(dirty),\n {\n xs: \"h-1\",\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-2.5\",\n xl: \"h-3\",\n }[size],\n )}\n />\n {showValue && (\n <span className=\"min-w-[3ch] shrink-0 whitespace-nowrap text-right text-sm font-medium text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\">\n {prefix}{value}{suffix}\n </span>\n )}\n </div>\n {marks && marks.length > 0 && <SliderMarks marks={marks} min={min} max={max} />}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field label={label} labelHidden={labelHidden} description={description} error={error} required={required} htmlFor={id} size={size}>\n {slider}\n </Field>\n );\n }\n\n return slider;\n },\n);\n\nSingleSlider.displayName = \"SingleSlider\";\n\nconst RangeSlider = forwardRef<HTMLInputElement, SliderProps & { range: true }>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min = 0,\n max = 100,\n step = 1,\n showValue,\n marks,\n prefix,\n suffix,\n mode,\n ...rest\n },\n ref,\n ) => {\n const rangeProps = rest as { value?: [number, number]; defaultValue?: [number, number]; onValueChange?: (v: [number, number]) => void };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n rangeProps.value,\n rangeProps.defaultValue ?? [min, max] as [number, number],\n rangeProps.onValueChange,\n );\n\n const handleMin = (n: number) => {\n setValue([Math.min(n, value[1]), value[1]]);\n };\n\n const handleMax = (n: number) => {\n setValue([value[0], Math.max(n, value[0])]);\n };\n\n const leftPercent = ((value[0] - min) / (max - min)) * 100;\n const rightPercent = ((value[1] - min) / (max - min)) * 100;\n\n const slider = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {`${prefix ?? \"\"}${value[0]}${suffix ?? \"\"}–${prefix ?? \"\"}${value[1]}${suffix ?? \"\"}`}\n </DisplayValue>\n ) : (\n <div\n data-react-fancy-slider=\"\"\n className={cn(\"flex flex-col gap-1\", className)}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"relative w-full\">\n <div className=\"pointer-events-none absolute top-1/2 h-1.5 w-full -translate-y-1/2 rounded-full bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n <div\n className=\"pointer-events-none absolute top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-blue-500\"\n style={{ left: `${leftPercent}%`, width: `${rightPercent - leftPercent}%` }}\n />\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value[0]}\n disabled={disabled}\n autoFocus={interactive}\n onChange={(e) => handleMin(Number(e.target.value))}\n className={cn(\n \"pointer-events-none absolute w-full cursor-pointer appearance-none bg-transparent [&::-webkit-slider-thumb]:pointer-events-auto [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:shadow\",\n dirtyRingClasses(dirty),\n )}\n />\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value[1]}\n disabled={disabled}\n onChange={(e) => handleMax(Number(e.target.value))}\n className=\"pointer-events-none absolute w-full cursor-pointer appearance-none bg-transparent [&::-webkit-slider-thumb]:pointer-events-auto [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:shadow\"\n />\n <div className=\"h-6\" />\n </div>\n {showValue && (\n <span className=\"min-w-[6ch] shrink-0 whitespace-nowrap text-right text-sm font-medium text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\">\n {prefix}{value[0]}{suffix}–{prefix}{value[1]}{suffix}\n </span>\n )}\n </div>\n {marks && marks.length > 0 && <SliderMarks marks={marks} min={min} max={max} />}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field label={label} labelHidden={labelHidden} description={description} error={error} required={required} htmlFor={id} size={size}>\n {slider}\n </Field>\n );\n }\n\n return slider;\n },\n);\n\nRangeSlider.displayName = \"RangeSlider\";\n\nfunction SliderMarks({\n marks,\n min,\n max,\n}: {\n marks: { value: number; label?: string }[];\n min: number;\n max: number;\n}) {\n return (\n <div className=\"relative h-5 w-full\">\n {marks.map((mark) => {\n const percent = ((mark.value - min) / (max - min)) * 100;\n return (\n <span\n key={mark.value}\n className=\"absolute -translate-x-1/2 text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\"\n style={{ left: `${percent}%` }}\n >\n {mark.label ?? mark.value}\n </span>\n );\n })}\n </div>\n );\n}\n"]}
|