@particle-academy/react-fancy 6.8.0 → 6.10.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 +42 -0
- package/README.md +1 -0
- 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-6GVOW3UL.js → chunk-24RWB7Q3.js} +12 -11
- package/dist/chunk-24RWB7Q3.js.map +1 -0
- 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-37D5PYEF.js → chunk-3O3ZWWLG.js} +17 -4
- package/dist/chunk-3O3ZWWLG.js.map +1 -0
- package/dist/{chunk-5TP642UT.js → chunk-3W6BKQVZ.js} +12 -11
- package/dist/chunk-3W6BKQVZ.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-OASSZI6M.cjs → chunk-6B43ARGW.cjs} +5 -4
- package/dist/chunk-6B43ARGW.cjs.map +1 -0
- 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-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-I2VAGZXY.cjs → chunk-7N7XVBH7.cjs} +11 -11
- package/dist/{chunk-I2VAGZXY.cjs.map → chunk-7N7XVBH7.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-NSJBVV7R.js → chunk-BPTCMI3E.js} +21 -10
- package/dist/chunk-BPTCMI3E.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-RWU2MFUL.js → chunk-C2VGO375.js} +5 -4
- package/dist/chunk-C2VGO375.js.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-KOTUFZJ6.cjs → chunk-DQWAG7YY.cjs} +14 -11
- package/dist/chunk-DQWAG7YY.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-XBFTO64U.cjs → chunk-EDIB6V6Y.cjs} +4 -4
- package/dist/{chunk-XBFTO64U.cjs.map → chunk-EDIB6V6Y.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-HNJXBMHI.cjs → chunk-EEFU5BVM.cjs} +40 -39
- package/dist/chunk-EEFU5BVM.cjs.map +1 -0
- package/dist/{chunk-KOAMRCSC.cjs → chunk-ETUDUDSL.cjs} +14 -11
- package/dist/chunk-ETUDUDSL.cjs.map +1 -0
- package/dist/{chunk-PJNUGSKI.js → chunk-EW2N52FD.js} +26 -25
- package/dist/chunk-EW2N52FD.js.map +1 -0
- package/dist/{chunk-6PRXG7L6.js → chunk-FECD3WKN.js} +4 -4
- package/dist/{chunk-6PRXG7L6.js.map → chunk-FECD3WKN.js.map} +1 -1
- package/dist/{chunk-CNWTYRZC.cjs → chunk-FF5G3E76.cjs} +4 -4
- package/dist/{chunk-CNWTYRZC.cjs.map → chunk-FF5G3E76.cjs.map} +1 -1
- 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-QTS4Q2NK.js → chunk-FNHKZMMI.js} +4 -3
- package/dist/chunk-FNHKZMMI.js.map +1 -0
- package/dist/{chunk-QP6VNKLW.cjs → chunk-FNPII6TF.cjs} +9 -5
- package/dist/chunk-FNPII6TF.cjs.map +1 -0
- package/dist/{chunk-HLI6RB5V.cjs → chunk-FR3V5IAJ.cjs} +32 -31
- package/dist/chunk-FR3V5IAJ.cjs.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-BYO5RUDE.cjs → chunk-FSLEFL4U.cjs} +6 -5
- package/dist/chunk-FSLEFL4U.cjs.map +1 -0
- package/dist/{chunk-JY2RC6I4.js → chunk-FX37P4KR.js} +13 -10
- package/dist/chunk-FX37P4KR.js.map +1 -0
- 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-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-PIG3UTHU.js → chunk-GZSRKBYI.js} +3 -3
- package/dist/{chunk-PIG3UTHU.js.map → chunk-GZSRKBYI.js.map} +1 -1
- package/dist/{chunk-BXPLERIJ.js → chunk-H5LJFN7D.js} +5 -4
- package/dist/chunk-H5LJFN7D.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-LY3RQB3H.js → chunk-HCIEXBEB.js} +3 -3
- package/dist/{chunk-LY3RQB3H.js.map → chunk-HCIEXBEB.js.map} +1 -1
- package/dist/{chunk-XZOBGKZL.cjs → chunk-HEGM5LMZ.cjs} +6 -5
- package/dist/chunk-HEGM5LMZ.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-GDH43QH6.js → chunk-J57JSHDC.js} +6 -6
- package/dist/{chunk-GDH43QH6.js.map → chunk-J57JSHDC.js.map} +1 -1
- package/dist/{chunk-Z4UXLQSK.cjs → chunk-JDFJK5GO.cjs} +16 -16
- package/dist/chunk-JDFJK5GO.cjs.map +1 -0
- package/dist/{chunk-GSMD5NK5.js → chunk-JN5DHZ6I.js} +7 -7
- package/dist/{chunk-GSMD5NK5.js.map → chunk-JN5DHZ6I.js.map} +1 -1
- 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-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-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-LJCQI6ZS.js +1212 -0
- package/dist/chunk-LJCQI6ZS.js.map +1 -0
- 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-MKGWHSNV.cjs → chunk-MAY4NMRI.cjs} +5 -4
- package/dist/chunk-MAY4NMRI.cjs.map +1 -0
- package/dist/{chunk-PDVU2PXR.js → chunk-MD7HUHJB.js} +10 -10
- package/dist/chunk-MD7HUHJB.js.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-GR2WKBER.js → chunk-OE4AIUAN.js} +4 -3
- package/dist/chunk-OE4AIUAN.js.map +1 -0
- package/dist/chunk-OP7A4SZZ.cjs +1216 -0
- package/dist/chunk-OP7A4SZZ.cjs.map +1 -0
- package/dist/{chunk-Z44A7NPD.cjs → chunk-OUPHLIXV.cjs} +40 -39
- package/dist/chunk-OUPHLIXV.cjs.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-QF7CD4JH.cjs → chunk-Q7XL37T3.cjs} +5 -5
- package/dist/{chunk-QF7CD4JH.cjs.map → chunk-Q7XL37T3.cjs.map} +1 -1
- 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-J2DI6RMR.cjs → chunk-QQKWI7QP.cjs} +19 -12
- package/dist/chunk-QQKWI7QP.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-WGRLNXNB.js → chunk-R3PCZSBQ.js} +3 -3
- package/dist/{chunk-WGRLNXNB.js.map → chunk-R3PCZSBQ.js.map} +1 -1
- package/dist/{chunk-VZTXUYPM.cjs → chunk-R4SANV3G.cjs} +20 -20
- package/dist/chunk-R4SANV3G.cjs.map +1 -0
- 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-MQ6VGG62.js → chunk-RUEDMYBF.js} +19 -12
- package/dist/chunk-RUEDMYBF.js.map +1 -0
- 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-KKYILQTG.cjs → chunk-TBLKVTJC.cjs} +7 -7
- package/dist/{chunk-KKYILQTG.cjs.map → chunk-TBLKVTJC.cjs.map} +1 -1
- 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-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-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-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-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-NPSKZ7ZB.cjs → chunk-ZFXCZ2QO.cjs} +12 -12
- package/dist/{chunk-NPSKZ7ZB.cjs.map → chunk-ZFXCZ2QO.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/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 +252 -238
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +83 -81
- 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 +42 -41
- package/dist/inputs.js +21 -20
- 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/phone-input.cjs +39 -0
- package/dist/phone-input.cjs.map +1 -0
- package/dist/phone-input.d.cts +139 -0
- package/dist/phone-input.d.ts +139 -0
- package/dist/phone-input.js +22 -0
- package/dist/phone-input.js.map +1 -0
- 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 +8 -8
- package/dist/qr-code.js +2 -2
- 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/PhoneInput.md +104 -0
- package/docs/Popover.md +1 -1
- package/docs/ReorderableGrid.md +2 -0
- package/docs/ResizablePanels.md +2 -0
- package/docs/Toast.md +2 -2
- package/package.json +11 -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-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-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":["marked","indent","useMemo","jsx"],"mappings":"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","file":"chunk-QF2FODTG.js","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/components/Timeline/Timeline.context.ts","../src/components/Timeline/TimelineItem.tsx","../src/components/Timeline/TimelineBlock.tsx","../src/components/Timeline/Timeline.tsx"],"names":["forwardRef","jsx","jsxs","useRef"],"mappings":"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","file":"chunk-QGY5FPVM.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TimelineVariant } from \"./Timeline.types\";\n\ninterface TimelineContextValue {\n variant: TimelineVariant;\n index: number;\n total: number;\n animated: boolean;\n}\n\nexport const TimelineContext = createContext<TimelineContextValue>({\n variant: \"stacked\",\n index: 0,\n total: 0,\n animated: true,\n});\n\nexport function useTimeline() {\n return useContext(TimelineContext);\n}\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useTimeline } from \"./Timeline.context\";\nimport type { TimelineItemProps } from \"./Timeline.types\";\nimport type { Color } from \"../../utils/types\";\n\nconst dotColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"bg-brand\",\n slate: \"bg-slate-400 dark:bg-slate-600\", gray: \"bg-gray-400 dark:bg-gray-600\",\n zinc: \"bg-zinc-300 dark:bg-zinc-600\", neutral: \"bg-neutral-400 dark:bg-neutral-600\",\n stone: \"bg-stone-400 dark:bg-stone-600\",\n red: \"bg-red-500\", orange: \"bg-orange-500\", amber: \"bg-amber-500\",\n yellow: \"bg-yellow-500\", lime: \"bg-lime-500\", green: \"bg-green-500\",\n emerald: \"bg-emerald-500\", teal: \"bg-teal-500\", cyan: \"bg-cyan-500\",\n sky: \"bg-sky-500\", blue: \"bg-blue-500\", indigo: \"bg-indigo-500\",\n violet: \"bg-violet-500\", purple: \"bg-purple-500\", fuchsia: \"bg-fuchsia-500\",\n pink: \"bg-pink-500\", rose: \"bg-rose-500\",\n};\n\nconst ringColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"ring-brand/30\",\n slate: \"ring-slate-400/30\", gray: \"ring-gray-400/30\",\n zinc: \"ring-zinc-400/30 dark:ring-zinc-500/30\", neutral: \"ring-neutral-400/30\",\n stone: \"ring-stone-400/30\",\n red: \"ring-red-500/30\", orange: \"ring-orange-500/30\", amber: \"ring-amber-500/30\",\n yellow: \"ring-yellow-500/30\", lime: \"ring-lime-500/30\", green: \"ring-green-500/30\",\n emerald: \"ring-emerald-500/30\", teal: \"ring-teal-500/30\", cyan: \"ring-cyan-500/30\",\n sky: \"ring-sky-500/30\", blue: \"ring-blue-500/30\", indigo: \"ring-indigo-500/30\",\n violet: \"ring-violet-500/30\", purple: \"ring-purple-500/30\", fuchsia: \"ring-fuchsia-500/30\",\n pink: \"ring-pink-500/30\", rose: \"ring-rose-500/30\",\n};\n\nfunction Dot({ icon, emoji, color, active }: Pick<TimelineItemProps, \"icon\" | \"emoji\" | \"color\" | \"active\">) {\n const c = color ?? \"zinc\";\n\n if (emoji) {\n return (\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\">\n <span className=\"text-sm\">{emoji}</span>\n </span>\n );\n }\n\n if (icon) {\n return (\n <span\n className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-white\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n >\n {icon}\n </span>\n );\n }\n\n return (\n <span\n className={cn(\n \"h-3 w-3 shrink-0 rounded-full\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n />\n );\n}\n\nfunction useIntersectionReveal(animated: boolean) {\n const ref = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(!animated);\n\n useEffect(() => {\n if (!animated || !ref.current) return;\n const el = ref.current;\n const observer = new IntersectionObserver(\n ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.disconnect(); } },\n { threshold: 0.2 },\n );\n observer.observe(el);\n return () => observer.disconnect();\n }, [animated]);\n\n return { ref, visible };\n}\n\nexport const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ children, icon, emoji, date, color = \"zinc\", active = false, className }, _ref) => {\n const { variant, index, total, animated } = useTimeline();\n const { ref, visible } = useIntersectionReveal(animated);\n const isLast = index === total - 1;\n const isLargeDot = !!icon || !!emoji;\n const isEven = index % 2 === 0;\n\n // ── Horizontal ────────────────────────────────────────\n if (variant === \"horizontal\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"flex flex-col items-center\",\n !isLast && \"min-w-40\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot + horizontal line (fixed height for alignment) */}\n <div className=\"flex h-8 w-full items-center\">\n {index > 0\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n <Dot icon={icon} emoji={emoji} color={color} active={active} />\n {!isLast\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n </div>\n\n {/* Content below */}\n <div className=\"mt-3 max-w-40 px-2 text-center\">\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Alternating ───────────────────────────────────────\n if (variant === \"alternating\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4 md:grid md:grid-cols-[1fr_1.5rem_1fr] md:gap-x-6\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center md:col-start-2 md:row-start-1 md:w-auto md:justify-center\">\n {!isLargeDot ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div> : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\n \"min-w-0 flex-1\",\n !isLast && \"pb-8\",\n isLargeDot && \"pt-1\",\n isEven ? \"md:col-start-1 md:row-start-1 md:text-right\" : \"md:col-start-3\",\n )}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Stacked (default) ─────────────────────────────────\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center\">\n {!isLargeDot\n ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div>\n : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\"min-w-0 flex-1\", !isLast && \"pb-8\", isLargeDot && \"pt-1\")}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n },\n);\n\nTimelineItem.displayName = \"TimelineItem\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport type { TimelineBlockProps } from \"./Timeline.types\";\n\nexport const TimelineBlock = forwardRef<HTMLDivElement, TimelineBlockProps>(\n ({ heading, children, icon, emoji, color = \"zinc\", active = false, className }, ref) => {\n return (\n <TimelineItem icon={icon} emoji={emoji} color={color} active={active}>\n <div\n ref={ref}\n data-react-fancy-timeline-block=\"\"\n className={cn(\n \"rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n active && \"ring-2 ring-blue-500/20 dark:ring-blue-400/20\",\n className,\n )}\n >\n {heading && (\n <div className=\"mb-2 text-sm font-semibold text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">\n {heading}\n </div>\n )}\n <div className=\"text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\">{children}</div>\n </div>\n </TimelineItem>\n );\n },\n);\n\nTimelineBlock.displayName = \"TimelineBlock\";\n","import { Children, forwardRef, useCallback, useRef, type WheelEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineContext } from \"./Timeline.context\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport { TimelineBlock } from \"./TimelineBlock\";\nimport type { TimelineProps, TimelineVariant } from \"./Timeline.types\";\n\nconst TimelineRoot = forwardRef<HTMLDivElement, TimelineProps>(\n ({\n children,\n variant: variantProp,\n orientation,\n events,\n heading,\n description,\n animated = true,\n className,\n }, ref) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Backward compat: map deprecated orientation to variant\n let variant: TimelineVariant = variantProp ?? \"stacked\";\n if (!variantProp && orientation) {\n variant = orientation === \"horizontal\" ? \"horizontal\" : \"stacked\";\n }\n\n const isHorizontal = variant === \"horizontal\";\n const isAlternating = variant === \"alternating\";\n\n // Build items from events prop (data-driven) or children (compound)\n const items = events\n ? events.map((e, i) => (\n <TimelineItem key={i} date={e.date} emoji={e.emoji} icon={e.icon} color={e.color}>\n {e.title && <h3 className=\"font-semibold text-zinc-900 dark:text-white\">{e.title}</h3>}\n {e.description && <div className=\"mt-1 text-sm leading-relaxed text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\">{e.description}</div>}\n </TimelineItem>\n ))\n : Children.toArray(children);\n\n const handleWheel = useCallback((e: WheelEvent) => {\n if (!scrollRef.current) return;\n e.preventDefault();\n scrollRef.current.scrollLeft += e.deltaY;\n }, []);\n\n const content = items.map((child, i) => (\n <TimelineContext.Provider key={i} value={{ variant, index: i, total: items.length, animated }}>\n {child}\n </TimelineContext.Provider>\n ));\n\n return (\n <div ref={ref} data-react-fancy-timeline=\"\" data-variant={variant} className={className}>\n {(heading || description) && (\n <div className=\"mb-8\">\n {heading && <h2 className=\"text-xl font-semibold text-zinc-900 dark:text-white\">{heading}</h2>}\n {description && <p className=\"mt-1 text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{description}</p>}\n </div>\n )}\n\n {isHorizontal ? (\n <div\n ref={scrollRef}\n className=\"overflow-x-auto pb-4 -mb-4 [scrollbar-color:var(--fancy-text-faint,rgb(161_161_170))_transparent] dark:[scrollbar-color:var(--fancy-text-faint-dark,rgb(161_161_170))_transparent]\"\n style={{ scrollbarWidth: \"thin\" }}\n onWheel={handleWheel}\n >\n <div className=\"flex min-w-max items-start\">\n {content}\n </div>\n </div>\n ) : (\n /* Vertical variants: continuous background line behind all events */\n <div className=\"relative\">\n {items.length > 1 && (\n <div className={cn(\n \"absolute top-0 bottom-0 w-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n isAlternating\n ? \"left-4 md:left-1/2 md:-translate-x-px\"\n : \"left-4\",\n )} />\n )}\n {content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTimelineRoot.displayName = \"Timeline\";\n\nexport const Timeline = Object.assign(TimelineRoot, {\n Item: TimelineItem,\n Block: TimelineBlock,\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ReorderableGrid/move-item.ts","../src/components/ReorderableGrid/ReorderableGrid.tsx"],"names":["moved","useMemo","useControllableState","useCallback","useState","useRef","total","useId","useEscapeKey","useEffect","t","useLayoutEffect","jsxs","composeRefs","cn","jsx","forwardRef"],"mappings":";;;;;;;;;;AASA,SAAS,cAAiB,MAAA,EAAmE;AAC3F,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA;AACzC,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAM,CAAA;AAC1B,EAAA,OAAO,IAAI,IAAA,GAAO,CAAC,OAAU,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,GAAI,IAAA;AAC7C;AAkBO,SAAS,SACd,GAAA,EACA,SAAA,EACA,OAAA,EACA,OAAA,GAA8B,EAAC,EAC1B;AACL,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,CAAC,CAAA,IAAK;AAAA,IACtB,CAAC,aAAa,SAAS,CAAA;AAAA,IACvB,CAAC,WAAW,OAAO;AAAA,GACrB,EAAY;AACV,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,CAAC,KAAK,CAAA,GAAI,CAAA,IAAK,KAAK,CAAA,EAAG;AAC3C,MAAA,MAAM,IAAI,WAAW,CAAA,UAAA,EAAa,IAAI,IAAI,CAAC,CAAA,eAAA,EAAkB,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,EAAA,IAAI,SAAA,KAAc,SAAS,OAAO,GAAA;AAElC,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,CAACA,MAAK,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AACvC,IAAA,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,CAAA,EAAGA,MAAU,CAAA;AACjC,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,SAAS,CAAM,CAAA,IAAK,SAAS,GAAA,CAAI,OAAO,CAAM,CAAA,EAAG,OAAO,GAAA;AAGzE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,CAAC,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AACpE,EAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAI,CAAC,CAAM,CAAA;AACzC,EAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA,CAAK,OAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG,CAAC,CAAA;AACvD,EAAA,IAAA,CAAK,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,GAAG,KAAU,CAAA;AACjD,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM;AACzB,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA;AAAA,EACpB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;ACrCA,IAAM,cAAA,GAAiB;AAAA,EACrB,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,WAAA,GAAc,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,EAAA,EAAI,OAAA,EAAS,EAAA,EAAI,QAAA,EAAS;AAE5E,IAAM,UAAA,GACJ,uHAAA;AAEF,IAAM,SAAA,GACJ,6NAAA;AAGF,IAAM,WAAA,GACJ,kYAAA;AAKF,IAAM,kBAAA,GACJ,iJAAA;AAGF,IAAM,cAAA,GAAiB,CAAA;AAEvB,IAAM,IAAA,GAAO,EAAA;AACb,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,QAAA,GAAW,GAAA;AAGjB,IAAM,WAAA,GAAc,0FAAA;AAEpB,IAAM,cAAA,GAAwC;AAAA,EAC5C,YAAA,EACE,wGAAA;AAAA,EACF,eAAA,EAAiB,kBAAA;AAAA,EACjB,UAAU,CAAC,CAAA,KACT,CAAA,UAAA,EAAa,CAAA,CAAE,KAAK,CAAA,aAAA,EAAgB,CAAA,CAAE,QAAQ,CAAA,IAAA,EAAO,EAAE,KAAK,CAAA,MAAA,EAAS,EAAE,GAAG,CAAA,QAAA,EAAW,EAAE,MAAM,CAAA,6DAAA,CAAA;AAAA,EAE/F,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,kBAAA,EAAqB,EAAE,QAAQ,CAAA,IAAA,EAAO,CAAA,CAAE,KAAK,CAAA,MAAA,EAAS,CAAA,CAAE,GAAG,CAAA,QAAA,EAAW,EAAE,MAAM,CAAA,CAAA;AAAA,EAC5F,SAAS,CAAC,CAAA,KAAM,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK,CAAA,aAAA,EAAgB,CAAA,CAAE,QAAQ,CAAA,IAAA,EAAO,EAAE,KAAK,CAAA,MAAA,EAAS,EAAE,GAAG,CAAA,QAAA,EAAW,EAAE,MAAM,CAAA,CAAA;AAAA,EAC3G,WAAW,CAAC,CAAA,KACV,CAAA,WAAA,EAAc,CAAA,CAAE,KAAK,CAAA,sBAAA,EAAyB,CAAA,CAAE,QAAQ,CAAA,IAAA,EAAO,EAAE,KAAK,CAAA,MAAA,EAAS,EAAE,GAAG,CAAA,QAAA,EAAW,EAAE,MAAM,CAAA,CAAA;AAAA,EACzG,MAAA,EAAQ,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,KAAK,CAAA,8BAAA;AAC3B,CAAA;AAMA,SAAS,YAAA,CAAa,OAAsC,KAAA,EAAiD;AAC3G,EAAA,MAAM,MAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,GAAG,CAAA;AACzB,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,EAAA,IAAM,KAAA,IAAS,EAAC,EAAG;AAC5B,IAAA,IAAI,KAAA,CAAM,IAAI,EAAE,CAAA,IAAK,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,SAAA,CAAU,GAAsB,CAAA,EAA+B;AACtE,EAAA,OAAO,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,CAAM,CAAC,EAAA,EAAI,CAAA,KAAM,EAAA,KAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AAChE;AAEA,SAAS,oBAAA,GAAgC;AACvC,EAAA,OAAO,OAAO,UAAA,KAAe,UAAA,IAAc,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AAC5F;AA2BA,SAAS,aAAa,EAAA,EAAqC;AACzD,EAAA,KAAA,IAAS,IAAI,EAAA,CAAG,aAAA,EAAe,CAAA,EAAG,CAAA,GAAI,EAAE,aAAA,EAAe;AACrD,IAAA,MAAM,CAAA,GAAI,iBAAiB,CAAC,CAAA;AAC5B,IAAA,IAAI,gBAAgB,IAAA,CAAK,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACnD,MAAA,IAAI,CAAA,CAAE,eAAe,CAAA,CAAE,YAAA,IAAgB,EAAE,WAAA,GAAc,CAAA,CAAE,aAAa,OAAO,CAAA;AAAA,IAC/E;AAAA,EACF;AACA,EAAA,OAAQ,SAAS,gBAAA,IAA2C,IAAA;AAC9D;AAEA,SAAS,oBAAA,CACP;AAAA,EACE,KAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,GAAA,GAAM,IAAA;AAAA,EACN,QAAA,GAAW,KAAA;AAAA,EACX,KAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,IAAK,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,MAAA,GAASC,aAAA,CAAQ,OAAO,EAAE,GAAG,cAAA,EAAgB,GAAG,cAAA,EAAe,CAAA,EAAI,CAAC,cAAc,CAAC,CAAA;AAGzF,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIC,uCAA2C,KAAA,EAAO,YAAA,EAAc,CAAC,IAAA,KAAS;AACpG,IAAA,IAAI,IAAA,cAAkB,IAAI,CAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,MAAM,SAAA,GAAYD,aAAA,CAAQ,MAAM,YAAA,CAAa,MAAA,EAAQ,KAAK,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAE5E,EAAA,MAAM,OAAOA,aAAA,CAAQ,MAAM,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAI,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACxE,EAAA,MAAM,YAAYA,aAAA,CAAQ,MAAM,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACvF,EAAA,MAAM,QAAA,GAAWE,iBAAA,CAAY,CAAC,EAAA,KAAe,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,MAAA,KAAW,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAElF,EAAA,MAAM,CAAC,OAAA,EAAS,eAAe,CAAA,GAAIC,eAAyB,IAAI,CAAA;AAChE,EAAA,MAAM,UAAA,GAAaC,aAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAaF,iBAAA,CAAY,CAAC,CAAA,KAAsB;AACpD,IAAA,UAAA,CAAW,OAAA,GAAU,CAAA;AACrB,IAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAYA,iBAAA;AAAA,IAChB,CAAC,MACC,CAAA,CAAE,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA,KAAW,EAAE,WAAA,GAChC,CAAA,CAAE,SACF,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA,CAAE,WAAA,EAAa,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AAAA,IACvE,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,KAAA,GAAQF,aAAA;AAAA,IACZ,MAAO,OAAA,GAAU,YAAA,CAAa,UAAU,OAAO,CAAA,EAAG,KAAK,CAAA,GAAI,SAAA;AAAA,IAC3D,CAAC,OAAA,EAAS,SAAA,EAAW,KAAA,EAAO,SAAS;AAAA,GACvC;AACA,EAAA,MAAM,QAAA,GAAWI,aAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAGnB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAID,eAAS,EAAE,CAAA;AACnD,EAAA,MAAM,OAAA,GAAUD,iBAAA;AAAA,IACd,CAAC,EAAA,KAAe;AACd,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACxB,MAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,MAAA,IAAI,YAAA,EAAc,OAAO,YAAA,CAAa,IAAI,CAAA;AAC1C,MAAA,MAAM,IAAK,IAAA,CAA6B,KAAA;AACxC,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,EAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,MAAM,YAAY;AAAA,GACrB;AACA,EAAA,MAAM,KAAA,GAAQA,iBAAA;AAAA,IACZ,CAAC,EAAA,EAAY,KAAA,EAAeG,MAAAA,MAAuD;AAAA,MACjF,EAAA;AAAA,MACA,KAAA,EAAO,QAAQ,EAAE,CAAA;AAAA,MACjB,UAAU,KAAA,GAAQ,CAAA;AAAA,MAClB,KAAA,EAAAA,MAAAA;AAAA,MACA,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA,GAAI,CAAA;AAAA,MAChC,MAAA,EAAS,QAAQ,IAAA,GAAQ;AAAA,KAC3B,CAAA;AAAA,IACA,CAAC,SAAS,IAAI;AAAA,GAChB;AAGA,EAAA,MAAM,OAAA,GAAUD,aAA8B,IAAI,CAAA;AAClD,EAAA,MAAM,QAAA,GAAWA,YAAA,iBAAO,IAAI,GAAA,EAA6B,CAAA;AACzD,EAAA,MAAM,OAAA,GAAUF,iBAAA;AAAA,IACd,CAAC,EAAA,KAAe,CAAC,EAAA,KAA8B;AAC7C,MAAA,IAAI,EAAA,EAAI,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,WAC9B,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA;AAAA,IACjC,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,iBAAiBI,WAAA,EAAM;AAC7B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIH,eAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,aAAa,IAAA,IAAQ,KAAA,CAAM,SAAS,QAAQ,CAAA,GAAI,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA;AAElF,EAAA,MAAM,OAAA,GAAUC,aAAsB,IAAI,CAAA;AAG1C,EAAA,MAAM,IAAA,GAAOA,aAA2B,IAAI,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAUA,aAAmF,IAAI,CAAA;AACvG,EAAA,MAAM,WAAA,GAAcA,aAAsB,IAAI,CAAA;AAE9C,EAAA,MAAM,MAAA,GAASF,iBAAA,CAAY,CAAC,EAAA,KAAe;AACzC,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAClC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAI,EAAA,CAAG,KAAA,CAAM,SAAA,IAAa,CAAC,sBAAqB,EAAG;AACjD,MAAA,EAAA,CAAG,KAAA,CAAM,UAAA,GAAa,CAAA,UAAA,EAAa,QAAQ,CAAA,OAAA,CAAA;AAC3C,MAAA,MAAA,CAAO,WAAW,MAAM;AACtB,QAAA,IAAI,CAAC,EAAA,CAAG,KAAA,CAAM,SAAA,EAAW,EAAA,CAAG,MAAM,UAAA,GAAa,EAAA;AAAA,MACjD,CAAA,EAAG,WAAW,EAAE,CAAA;AAAA,IAClB;AACA,IAAA,EAAA,CAAG,MAAM,SAAA,GAAY,EAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACnC,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,IAAI,WAAA,CAAY,YAAY,IAAA,EAAM;AAChC,MAAA,oBAAA,CAAqB,YAAY,OAAO,CAAA;AACxC,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,IACxB;AACA,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,IAAA,EAAM,oBAAoB,CAAA,CAAE,SAAS,GAAG,IAAA,CAAK,qBAAA,GAAwB,EAAE,SAAS,CAAA;AACpF,IAAA,MAAA,CAAO,EAAE,EAAE,CAAA;AAAA,EACb,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM;AAC/B,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,UAAA,EAAW;AACX,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY,OAAA,CAAQ,UAAU,CAAA,CAAE,EAAA;AAC/C,IAAA,eAAA,CAAgB,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,MAAM,CAAC,CAAC,CAAA;AAAA,EAC/E,GAAG,CAAC,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE1C,EAAA,MAAM,IAAA,GAAOA,kBAAY,MAAM;AAC7B,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,CAAA,CAAE,WAAW,IAAA,EAAM;AACrB,MAAA,MAAA,EAAO;AACP,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,IAAA,UAAA,EAAW;AACX,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY,OAAA,CAAQ,UAAU,CAAA,CAAE,EAAA;AAC/C,IAAA,eAAA,CAAgB,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAE,EAAA,EAAI,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AACnE,IAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,EAAE,MAAM,CAAA,YAAa,KAAK,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,YAAY,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,SAAS,CAAC,CAAA;AAIxE,EAAAK,8BAAA,CAAa,MAAA,EAAQ,YAAY,IAAI,CAAA;AAErC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAU,MAAA,EAAO;AAAA,EACvB,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAAA,eAAA,CAAU,MAAM,MAAM,UAAA,EAAW,EAAG,CAAC,UAAU,CAAC,CAAA;AAEhD,EAAA,MAAM,KAAA,GAAQN,iBAAA;AAAA,IACZ,CAAC,IAAY,IAAA,KAAwB;AACnC,MAAA,MAAM,SAAS,QAAA,CAAS,OAAA;AACxB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAC/B,MAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,KAAA;AACtB,MAAA,IAAI,QAAA,CAAS,EAAE,CAAA,EAAG;AAChB,QAAA,eAAA,CAAgB,MAAA,CAAO,OAAO,KAAA,CAAM,EAAA,EAAI,OAAO,MAAA,CAAO,MAAM,CAAC,CAAC,CAAA;AAC9D,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,UAAA,CAAW,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,aAAa,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAClE,MAAA,eAAA,CAAgB,MAAA,CAAO,SAAS,KAAA,CAAM,EAAA,EAAI,OAAO,MAAA,CAAO,MAAM,CAAC,CAAC,CAAA;AAChE,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,UAAU;AAAA,GACtC;AAEA,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,CAAC,MAAA,KAA0B;AACzB,MAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,MAAA,IAAI,CAAC,CAAA,IAAK,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ;AAC/B,MAAA,UAAA,CAAW,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,CAAA;AAC3B,MAAA,IAAI,MAAA,KAAW,IAAA,EAAM,eAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,CAAA,CAAE,EAAA,EAAI,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,MAAM,CAAC,CAAC,CAAA;AAAA,IACzF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,MAAA,EAAQ,UAAU;AAAA,GAC5B;AAYA,EAAA,MAAM,IAAA,GAAOA,iBAAA;AAAA,IACX,CAAC,KAAA,EAAiB,IAAA,EAAc,GAAA,EAAa,UAAA,KAAuC;AAClF,MAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,MAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc,CAAC,cAAc,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAW,CAAA;AACvE,MAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAe,GAAA,KAAgB;AAC3C,QAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,CAAA;AACnE,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AACA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,YAAA;AACH,UAAA,OAAO,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,CAAC,CAAA;AAAA,QACzB,KAAK,WAAA;AACH,UAAA,OAAO,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA;AAAA,QAC1B,KAAK,WAAA,EAAa;AAChB,UAAA,IAAI,IAAI,IAAA,GAAO,IAAA;AACf,UAAA,IAAI,CAAA,GAAI,IAAI,CAAA,EAAG;AACb,YAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAI,CAAA,IAAK,IAAA,CAAK,KAAA,CAAA,CAAO,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,EAAG,OAAO,IAAA;AAClE,YAAA,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,UACV;AACA,UAAA,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,QAClB;AAAA,QACA,KAAK,SAAA;AACH,UAAA,OAAO,OAAO,IAAA,GAAO,CAAA,GAAI,OAAO,IAAA,CAAK,IAAA,GAAO,MAAM,EAAE,CAAA;AAAA,QACtD,KAAK,MAAA;AACH,UAAA,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,QAClB,KAAK,KAAA;AACH,UAAA,OAAO,IAAA,CAAK,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA;AAAA,QACvB;AACE,UAAA,OAAO,IAAA;AAAA;AACX,IACF,CAAA;AAAA,IACA,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,EAAuC,EAAA,KAAe;AAE3E,IAAA,IAAI,QAAA,IAAY,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AAC9C,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AAErB,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,CAAA,EAAG,IAAA,KAAS,UAAA,EAAY,IAAA,EAAK;AAAA,WAAA,IACxB,CAAC,CAAA,EAAG,KAAA,CAAM,EAAA,EAAI,UAAU,CAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,CAAC,YAAA,EAAc,WAAA,EAAa,WAAA,EAAa,SAAA,EAAW,MAAA,EAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,EAAG;AACzF,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,IAAI,CAAA,EAAG,SAAS,UAAA,EAAY;AAC1B,MAAA,IAAI,CAAA,CAAE,WAAW,IAAA,EAAM;AACvB,MAAA,MAAMO,EAAAA,GAAI,KAAK,QAAA,CAAS,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,CAAE,KAAK,IAAI,CAAA;AACtD,MAAA,IAAIA,EAAAA,KAAM,IAAA,EAAM,QAAA,CAASA,EAAC,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,EAAG;AAEP,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,EAAO,KAAA,CAAM,QAAQ,EAAE,CAAA,EAAG,CAAA,CAAE,GAAA,EAAK,KAAK,CAAA;AACrD,IAAA,IAAI,MAAM,IAAA,EAAM;AAChB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG,KAAA,EAAM;AAAA,EACpC,CAAA;AAKA,EAAA,MAAM,OAAA,GAAU,CAAC,OAAA,EAAiB,OAAA,KAAoB;AACpD,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,MAAM,CAAA,GAAI,KAAK,qBAAA,EAAsB;AACrC,IAAA,OAAO,EAAE,CAAA,EAAG,OAAA,GAAU,CAAA,CAAE,OAAO,IAAA,CAAK,UAAA,EAAY,CAAA,EAAG,OAAA,GAAU,CAAA,CAAE,GAAA,GAAM,IAAA,CAAK,SAAA,EAAW,MAAM,CAAA,EAAE;AAAA,EAC/F,CAAA;AAUA,EAAA,MAAM,OAAA,GAAU,CAAC,OAAA,EAAiB,OAAA,KAAmC;AACnE,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,IAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,MAAK,GAAI,OAAA,CAAQ,SAAS,OAAO,CAAA;AAC/C,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,OAAA,GAAU,IAAA,CAAK,KAAA,IAAS,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO,OAAA,GAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAA;AAEvG,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,IAAI,QAAA,GAAW,QAAA;AACf,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAA,EAAI,CAAA,KAAM;AACvB,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAClC,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,IAAI,EAAA,CAAG,UAAA;AACb,MAAA,MAAM,IAAI,EAAA,CAAG,SAAA;AACb,MAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,IAAK,CAAA,GAAI,EAAA,CAAG,WAAA,CAAY,CAAA;AACtD,MAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,IAAK,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,CAAA;AACvD,MAAA,MAAM,IAAA,GAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AAC5B,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,IAAA,GAAO,CAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,IAAA,GAAO,CAAA,EAAG,OAAO,CAAA,CAAE,MAAA;AACvB,IAAA,IAAI,QAAA,CAAS,MAAM,IAAI,CAAW,GAAG,OAAO,CAAA,CAAE,UAAU,CAAA,CAAE,WAAA;AAC1D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,kBAAA,GAAqBP,kBAAY,MAAM;AAC3C,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,IAAA,EAAM;AACjB,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,EAAE,CAAA;AACpC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,CAAA,GAAI,KAAK,qBAAA,EAAsB;AACrC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,OAAO,IAAA,CAAK,UAAA;AACrC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,MAAM,IAAA,CAAK,SAAA;AACpC,IAAA,MAAM,EAAA,GAAK,EAAE,WAAA,CAAY,CAAA,IAAK,KAAK,CAAA,CAAE,QAAA,CAAS,KAAK,EAAA,CAAG,UAAA;AACtD,IAAA,MAAM,EAAA,GAAK,EAAE,WAAA,CAAY,CAAA,IAAK,KAAK,CAAA,CAAE,QAAA,CAAS,KAAK,EAAA,CAAG,SAAA;AACtD,IAAA,EAAA,CAAG,MAAM,UAAA,GAAa,EAAA;AACtB,IAAA,EAAA,CAAG,KAAA,CAAM,SAAA,GAAY,CAAA,YAAA,EAAe,EAAE,OAAO,EAAE,CAAA,MAAA,CAAA;AAAA,EACjD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,OAAO,CAAC,CAAA;AACtC,IAAA,kBAAA,EAAmB;AAAA,EACrB,CAAA;AAGA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,IAAI,CAAC,CAAA,EAAG,QAAA,IAAY,OAAO,0BAA0B,UAAA,EAAY;AACjE,IAAA,MAAM,KAAK,CAAA,CAAE,QAAA;AACb,IAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,CAAS,gBAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAA,GACR,EAAE,GAAA,EAAK,GAAG,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,MAAA,CAAO,aAAa,KAAA,EAAO,MAAA,CAAO,UAAA,EAAW,GACxE,GAAG,qBAAA,EAAsB;AAC7B,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAkB,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,IAAA,CAAA,CAAO,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAQ,eAAe,CAAA,GAAI,CAAA;AACrG,IAAA,IAAI,KAAK,KAAA,CAAM,CAAA,CAAE,UAAU,GAAA,CAAI,GAAG,IAAI,CAAC,KAAA,CAAM,CAAA,CAAE,OAAA,GAAU,IAAI,GAAG,CAAA,GAAI,MAAM,GAAA,CAAI,MAAA,GAAS,EAAE,OAAO,CAAA;AAChG,IAAA,IAAI,KAAK,KAAA,CAAM,CAAA,CAAE,UAAU,GAAA,CAAI,IAAI,IAAI,CAAC,KAAA,CAAM,CAAA,CAAE,OAAA,GAAU,IAAI,IAAI,CAAA,GAAI,MAAM,GAAA,CAAI,KAAA,GAAQ,EAAE,OAAO,CAAA;AAEjG,IAAA,IAAK,EAAA,GAAK,CAAA,IAAK,EAAA,CAAG,SAAA,IAAa,CAAA,IAAO,EAAA,GAAK,CAAA,IAAK,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,YAAA,IAAgB,EAAA,CAAG,cAAe,EAAA,GAAK,CAAA;AACzG,IAAA,IAAK,EAAA,GAAK,CAAA,IAAK,EAAA,CAAG,UAAA,IAAc,CAAA,IAAO,EAAA,GAAK,CAAA,IAAK,EAAA,CAAG,UAAA,GAAa,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,aAAc,EAAA,GAAK,CAAA;AACzG,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,EAAI;AACd,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAA,CAAY,YAAY,IAAA,EAAM;AAClC,IAAA,WAAA,CAAY,OAAA,GAAU,sBAAsB,MAAM;AAChD,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,MAAA,EAAA,CAAG,SAAA,IAAa,EAAA;AAChB,MAAA,EAAA,CAAG,UAAA,IAAc,EAAA;AACjB,MAAA,KAAA,EAAM;AACN,MAAA,UAAA,EAAW;AAAA,IACb,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,EAAsC,EAAA,KAAe;AAC9E,IAAA,IAAI,QAAA,IAAY,EAAE,MAAA,KAAW,CAAA,IAAK,WAAW,OAAA,IAAW,QAAA,CAAS,EAAE,CAAA,EAAG;AACtE,IAAA,MAAM,SAAS,CAAA,CAAE,aAAA;AACjB,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,2BAA2B,CAAA;AACzD,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG,CAEvC,MAAA,IAAW,MAAA,CAAO,aAAA,CAAc,2BAA2B,CAAA,EAAG;AAC5D,MAAA;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA;AAC9C,MAAA,IAAI,eAAe,WAAA,KAAgB,MAAA,IAAU,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG;AAAA,IAC7E;AACA,IAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,EAAA,EAAI,SAAA,EAAW,CAAA,CAAE,SAAA,EAAW,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,EACzF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAyC;AAClE,IAAA,MAAM,IAAI,OAAA,CAAQ,OAAA;AAClB,IAAA,IAAI,KAAK,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,IAAa,CAAC,KAAK,OAAA,EAAS;AACrD,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,OAAO,CAAA,GAAI,cAAA,EAAgB;AAC/E,MAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,EAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA,IAAI,CAAC,QAAQ,CAAC,EAAA,IAAM,CAAC,KAAA,CAAM,CAAA,CAAE,EAAA,EAAI,SAAS,CAAA,EAAG;AAG7C,MAAA,IAAA,CAAK,iBAAA,GAAoB,EAAE,SAAS,CAAA;AACpC,MAAA,MAAA,CAAO,YAAA,MAAkB,eAAA,EAAgB;AACzC,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAA,CAAE,OAAA,EAAS,EAAE,OAAO,CAAA;AAC1C,MAAA,IAAA,CAAK,OAAA,GAAU;AAAA,QACb,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,aAAa,EAAE,CAAA,EAAG,GAAG,UAAA,EAAY,CAAA,EAAG,GAAG,SAAA,EAAU;AAAA,QACjD,UAAU,EAAE,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,QACnC,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,QAAA,EAAU,aAAa,IAAI;AAAA,OAC7B;AAAA,IACF;AACA,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,IAAI,CAAC,CAAA,IAAK,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,EAAW;AACvC,IAAA,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AACd,IAAA,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AACd,IAAA,KAAA,EAAM;AACN,IAAA,UAAA,EAAW;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAyC;AAChE,IAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,SAAA,KAAc,CAAA,CAAE,SAAA,EAAW;AAC9C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA;AACf,IAAA,IAAI,CAAC,CAAA,IAAK,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,EAAW;AACvC,IAAA,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AACd,IAAA,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AACd,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,EAAS,EAAE,OAAO,CAAA;AAC3C,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,IAAI,CAAA,IAAK,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ;AAE5B,MAAA,UAAA,CAAW,OAAA,GAAU,EAAE,GAAG,CAAA,EAAG,MAAA,EAAO;AAAA,IACtC;AACA,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAyC;AACpE,IAAA,IAAI,QAAQ,OAAA,EAAS,SAAA,KAAc,CAAA,CAAE,SAAA,UAAmB,OAAA,GAAU,IAAA;AAClE,IAAA,IAAI,IAAA,CAAK,OAAA,EAAS,SAAA,KAAc,CAAA,CAAE,WAAW,MAAA,EAAO;AAAA,EACtD,CAAA;AAIA,EAAA,MAAM,OAAA,GAAUE,YAAA,iBAAO,IAAI,GAAA,EAAuC,CAAA;AAClE,EAAA,MAAM,WAAA,GAAcA,YAAA,iBAAO,IAAI,GAAA,EAAqB,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,IAAQ,CAAA;AAEpC,EAAAM,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAsC;AACvD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,QAAA,CAAS,SAAS,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,GAAG,EAAA,CAAG,UAAA,EAAY,CAAA,EAAG,EAAA,CAAG,WAAW,CAAA;AAC3F,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAGlB,IAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,oBAAA,EAAqB,EAAG;AACxC,MAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,SAAS,OAAA,EAAS;AACvC,QAAA,IAAI,EAAA,KAAO,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAC7B,QAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,QAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,QAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,IAAM,CAAA,CAAE,CAAA,KAAM,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,KAAM,CAAA,CAAE,CAAA,EAAI;AAC9C,QAAA,EAAA,CAAG,MAAM,UAAA,GAAa,MAAA;AACtB,QAAA,EAAA,CAAG,KAAA,CAAM,SAAA,GAAY,CAAA,YAAA,EAAe,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,IAAA,EAAO,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,CAAA;AAC7D,QAAA,KAAK,EAAA,CAAG,WAAA;AACR,QAAA,EAAA,CAAG,KAAA,CAAM,UAAA,GAAa,CAAA,UAAA,EAAa,QAAQ,CAAA,OAAA,CAAA;AAC3C,QAAA,EAAA,CAAG,MAAM,SAAA,GAAY,EAAA;AACrB,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AACtC,QAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,YAAA,CAAa,GAAG,CAAA;AAC9C,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAA;AAAA,UAClB,EAAA;AAAA,UACA,MAAA,CAAO,WAAW,MAAM;AACtB,YAAA,WAAA,CAAY,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC7B,YAAA,IAAI,CAAC,EAAA,CAAG,KAAA,CAAM,SAAA,EAAW,EAAA,CAAG,MAAM,UAAA,GAAa,EAAA;AAAA,UACjD,CAAA,EAAG,WAAW,EAAE;AAAA,SAClB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,kBAAA,EAAmB;AAGnB,IAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,IAAA,MAAM,OAAO,CAAA,EAAG,IAAA,KAAS,UAAA,GAAa,CAAA,CAAE,KAAK,OAAA,CAAQ,OAAA;AACrD,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,IAAI,EAAA,IAAM,QAAA,CAAS,aAAA,KAAkB,EAAA,KAAO,KAAA,EAAM;AAAA,IACpD;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAA,EAAS,kBAAkB,CAAC,CAAA;AAE1C,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,WAAA,CAAY,OAAA;AAC3B,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,KAAK,MAAA,CAAO,MAAA,EAAO,EAAG,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,IACxD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,QAAQ,OAAA,GAAW,OAAA,CAAQ,IAAA,KAAS,SAAA,GAAY,aAAa,WAAA,GAAe,MAAA;AAClF,EAAA,MAAM,YAAY,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,IAAA,GAAO,QAAQ,MAAA,GAAS,MAAA;AACxE,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAKC,6BAAA,CAAY,OAAA,EAAS,YAAY,CAAA;AAAA,MACtC,mCAAA,EAAkC,EAAA;AAAA,MAClC,cAAA,EAAc,IAAA;AAAA,MACd,YAAA,EAAY,KAAA;AAAA,MACZ,iBAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,aAAA,EAAe,iBAAA;AAAA,MACf,WAAA,EAAa,eAAA;AAAA,MACb,eAAA,EAAiB,mBAAA;AAAA,MACjB,oBAAA,EAAsB,CAAC,CAAA,KAAM;AAC3B,QAAA,IAAI,IAAA,CAAK,OAAA,EAAS,SAAA,KAAc,CAAA,CAAE,WAAW,MAAA,EAAO;AAAA,MACtD,CAAA;AAAA,MACA,SAAA,EAAWC,oBAAA;AAAA,QACT,eAAA;AAAA,QACA,cAAA,CAAe,OAAO,CAAC,CAAA;AAAA,QACvB,YAAY,GAAG,CAAA;AAAA,QACf,OAAA,EAAS,SAAS,SAAA,IAAa,6BAAA;AAAA,QAC/B,QAAA,IAAY,YAAA;AAAA,QACZ;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,EAAI,KAAA,KAAU;AACxB,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACxB,UAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,UAAA,MAAM,MAAA,GAAS,KAAK,MAAA,KAAW,IAAA;AAC/B,UAAA,MAAM,MAAA,GAAS,SAAS,EAAA,KAAO,EAAA;AAC/B,UAAA,MAAM,QAAA,GAAW,MAAA,IAAU,OAAA,EAAS,IAAA,KAAS,SAAA;AAC7C,UAAA,MAAM,QAAA,GAAW,MAAA,IAAU,OAAA,EAAS,IAAA,KAAS,UAAA;AAC7C,UAAA,MAAM,UAAA,GAAa,UAAU,SAAA,KAAc,KAAA;AAC3C,UAAA,MAAM,OAAA,GAAU,MAAA,IAAU,OAAA,EAAS,MAAA,KAAW,IAAA;AAC9C,UAAA,MAAM,SAAA,GAAY;AAAA,YAChB,KAAA;AAAA,YACA,UAAU,KAAA,GAAQ,CAAA;AAAA,YAClB,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA,GAAI,CAAA;AAAA,YAChC,MAAA,EAAS,QAAQ,IAAA,GAAQ,CAAA;AAAA,YACzB,KAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA;AAAA,YACA,MAAA;AAAA,YACA,QAAA;AAAA,YACA,WAAA,EAAa,EAAE,yBAAA,EAA2B,EAAA;AAAY,WACxD;AACA,UAAA,uBACEC,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,GAAA,EAAK,QAAQ,EAAE,CAAA;AAAA,cACf,wCAAA,EAAuC,EAAA;AAAA,cACvC,qBAAA,EAAqB,EAAA;AAAA,cACrB,YAAA,EAAY,KAAA;AAAA,cACZ,YAAA,EAAY,QAAA,GAAW,UAAA,GAAa,QAAA,GAAW,WAAA,GAAc,MAAA;AAAA,cAC7D,aAAA,EAAa,SAAS,MAAA,GAAS,MAAA;AAAA,cAC/B,kBAAA,EAAkB,aAAa,EAAA,GAAK,MAAA;AAAA,cACpC,IAAA,EAAK,QAAA;AAAA,cACL,wBAAsB,MAAA,CAAO,eAAA;AAAA,cAC7B,kBAAA,EAAkB,cAAA;AAAA,cAClB,cAAA,EAAc,MAAA;AAAA,cACd,eAAA,EAAe,YAAY,MAAA,IAAU,MAAA;AAAA,cACrC,QAAA,EAAU,QAAA,GAAW,EAAA,GAAK,EAAA,KAAO,UAAU,CAAA,GAAI,EAAA;AAAA,cAC/C,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,cAA2B,EAAE,CAAA;AAAA,cAClD,CAAA;AAAA,cACA,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,EAAE,CAAA;AAAA,cACrC,aAAA,EAAe,CAAC,CAAA,KAAM,iBAAA,CAAkB,GAAG,EAAE,CAAA;AAAA,cAC7C,SAAA,EAAWD,oBAAA;AAAA,gBACT,SAAA;AAAA,gBACA,CAAC,QAAA,IAAY,WAAA;AAAA,gBACb,CAAC,YAAY,MAAA,IAAU,kBAAA;AAAA,gBACvB,MAAA,IAAU,WAAW,gBAAA,GAAmB,aAAA;AAAA,gBACxC,QAAA,IAAYA,oBAAA,CAAG,uCAAA,EAAyC,UAAU,CAAA;AAAA,gBAClE,QAAA,IAAYA,oBAAA,CAAG,uBAAA,EAAyB,UAAU,CAAA;AAAA,gBAClD,OAAA,IAAW,YAAA;AAAA,gBACX;AAAA,eACF;AAAA,cAEC,uBAAa,UAAA,CAAW,IAAA,EAAM,SAAS,CAAA,GAAI,QAAQ,EAAE;AAAA,aAAA;AAAA,YA9BjD;AAAA,WA+BP;AAAA,QAEJ,CAAC,CAAA;AAAA,uCACA,KAAA,EAAA,EAAI,EAAA,EAAI,gBAAgB,SAAA,EAAU,SAAA,EAChC,iBAAO,YAAA,EACV,CAAA;AAAA,wBACAC,cAAA,CAAC,KAAA,EAAA,EAAI,wCAAA,EAAuC,EAAA,EAAG,WAAA,EAAU,aAAY,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,SAAA,EAC/F,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAUO,IAAM,eAAA,GAAkBC,iBAAW,oBAAoB;AAI9D,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-QP6VNKLW.cjs","sourcesContent":["export interface MoveItemOptions<T> {\n /**\n * Pinned entries. A locked entry keeps its absolute index: it cannot be\n * moved, nothing can be dropped onto its slot, and the other entries flow\n * around it. Either the locked ids themselves or a predicate.\n */\n locked?: Iterable<T> | ((id: T) => boolean);\n}\n\nfunction lockPredicate<T>(locked: MoveItemOptions<T>[\"locked\"]): ((id: T) => boolean) | null {\n if (!locked) return null;\n if (typeof locked === \"function\") return locked;\n const set = new Set(locked);\n return set.size ? (id: T) => set.has(id) : null;\n}\n\n/**\n * Move the entry at `fromIndex` so that it ends up at `toIndex`, row-major,\n * and return a NEW array. The input is never mutated.\n *\n * This is the whole reorder rule of `ReorderableGrid`, with no DOM: the grid's\n * pointer drags and arrow keys both go through it, and an agent bridge can call\n * it directly to reorder from a tool call.\n *\n * - `toIndex` is the entry's index in the RESULT, so `moveItem(ids, 0, ids.length - 1)`\n * moves the first entry to the end.\n * - An index outside the list (or not an integer) throws `RangeError`. That is\n * a caller bug, and a silent no-op would hide it.\n * - With `locked`: a locked entry keeps its absolute index and the move happens\n * among the free slots only. Moving a locked entry, or onto a locked slot,\n * returns the order unchanged: that is the rule doing its job, not an error.\n */\nexport function moveItem<T>(\n ids: readonly T[],\n fromIndex: number,\n toIndex: number,\n options: MoveItemOptions<T> = {},\n): T[] {\n const n = ids.length;\n for (const [name, i] of [\n [\"fromIndex\", fromIndex],\n [\"toIndex\", toIndex],\n ] as const) {\n if (!Number.isInteger(i) || i < 0 || i >= n) {\n throw new RangeError(`moveItem: ${name} ${i} is outside 0..${n - 1}`);\n }\n }\n\n const out = ids.slice();\n if (fromIndex === toIndex) return out;\n\n const isLocked = lockPredicate(options.locked);\n if (!isLocked) {\n const [moved] = out.splice(fromIndex, 1);\n out.splice(toIndex, 0, moved as T);\n return out;\n }\n\n if (isLocked(ids[fromIndex] as T) || isLocked(ids[toIndex] as T)) return out;\n\n // Move within the free slots only; locked entries never leave theirs.\n const slots: number[] = [];\n for (let i = 0; i < n; i++) if (!isLocked(ids[i] as T)) slots.push(i);\n const free = slots.map((i) => ids[i] as T);\n const [moved] = free.splice(slots.indexOf(fromIndex), 1);\n free.splice(slots.indexOf(toIndex), 0, moved as T);\n slots.forEach((slot, k) => {\n out[slot] = free[k] as T;\n });\n return out;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n Ref,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { moveItem } from \"./move-item\";\nimport type {\n ReorderableGridAnnouncementContext,\n ReorderableGridItem,\n ReorderableGridLabels,\n ReorderableGridProps,\n} from \"./ReorderableGrid.types\";\n\n/*\n * Literal class names, not `grid-cols-${n}`: Tailwind only generates classes it\n * can read in source, and the consumer's build scans this file's dist. That is\n * also why the column count is not an inline style, as Grid's is.\n */\nconst COLUMN_CLASSES = [\n \"grid-cols-1\",\n \"grid-cols-2\",\n \"grid-cols-3\",\n \"grid-cols-4\",\n \"grid-cols-5\",\n \"grid-cols-6\",\n \"grid-cols-7\",\n \"grid-cols-8\",\n \"grid-cols-9\",\n \"grid-cols-10\",\n \"grid-cols-11\",\n \"grid-cols-12\",\n] as const;\n\nconst GAP_CLASSES = { none: \"gap-0\", sm: \"gap-3\", md: \"gap-6\", lg: \"gap-10\" } as const;\n\nconst FOCUS_RING =\n \"ring-[color:var(--fancy-focus,var(--color-blue-500))] dark:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]\";\n\nconst CELL_BASE =\n \"relative min-w-0 select-none touch-none outline-none \" +\n \"focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))] dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]\";\n\nconst CELL_STYLED =\n \"rounded-lg border p-3 text-sm \" +\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] \" +\n \"bg-[color:var(--fancy-surface,var(--color-white))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] \" +\n \"text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst CELL_LOCKED_STYLED =\n \"border-dashed bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\";\n\n/** Movement before a press becomes a drag, so clicks inside a cell still click. */\nconst DRAG_THRESHOLD = 4;\n/** Distance from a scroll container's edge at which a drag starts scrolling it. */\nconst EDGE = 48;\nconst MAX_SCROLL_STEP = 18;\nconst SHIFT_MS = 150;\n\n/** A press on one of these inside a cell is the element's, not a drag (unless it is the handle). */\nconst INTERACTIVE = \"input, textarea, select, button, a[href], [contenteditable=''], [contenteditable='true']\";\n\nconst DEFAULT_LABELS: ReorderableGridLabels = {\n instructions:\n \"Press Space or Enter to pick up. Use the arrow keys to move, Space or Enter to drop, Escape to cancel.\",\n roleDescription: \"reorderable item\",\n pickedUp: (c) =>\n `Picked up ${c.label} at position ${c.position} of ${c.total}, row ${c.row} column ${c.column}. ` +\n \"Arrow keys move it, Space or Enter drops it, Escape cancels\",\n moved: (c) => `Moved to position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n dropped: (c) => `Dropped ${c.label} at position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n cancelled: (c) =>\n `Cancelled. ${c.label} returned to position ${c.position} of ${c.total}, row ${c.row} column ${c.column}`,\n locked: (c) => `${c.label} is locked and cannot be moved`,\n};\n\n/**\n * The order to show: `order`'s known ids first, then any item it does not\n * mention, in `items` order. A stale or partial order can never hide a cell.\n */\nfunction resolveOrder(order: readonly string[] | undefined, items: readonly ReorderableGridItem[]): string[] {\n const ids = items.map((i) => i.id);\n const known = new Set(ids);\n const seen = new Set<string>();\n const out: string[] = [];\n for (const id of order ?? []) {\n if (known.has(id) && !seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n for (const id of ids) {\n if (!seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n return out;\n}\n\nfunction sameOrder(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((id, i) => id === b[i]);\n}\n\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\ntype Mode = \"pointer\" | \"keyboard\";\n\ninterface Session {\n id: string;\n mode: Mode;\n /** The committed order when the interaction began. Cancel returns here. */\n origin: string[];\n originIndex: number;\n /** Where the item would land. `null`: the pointer is outside the grid, and a release cancels. */\n target: number | null;\n}\n\ninterface PointerDrag {\n id: string;\n pointerId: number;\n /** The cell's layout offset when the drag began. */\n startOffset: { x: number; y: number };\n /** Pointer, in the grid's coordinates, when the drag began. */\n startPos: { x: number; y: number };\n clientX: number;\n clientY: number;\n scroller: HTMLElement | null;\n}\n\n/** Nearest ancestor that can scroll, else the document's scroller. */\nfunction scrollParent(el: HTMLElement): HTMLElement | null {\n for (let p = el.parentElement; p; p = p.parentElement) {\n const s = getComputedStyle(p);\n if (/(auto|scroll)/.test(s.overflowY + s.overflowX)) {\n if (p.scrollHeight > p.clientHeight || p.scrollWidth > p.clientWidth) return p;\n }\n }\n return (document.scrollingElement as HTMLElement | null) ?? null;\n}\n\nfunction ReorderableGridInner<T extends ReorderableGridItem>(\n {\n items,\n value,\n defaultValue,\n onReorder,\n renderItem,\n columns = 2,\n gap = \"sm\",\n disabled = false,\n label,\n getItemLabel,\n labels: labelOverrides,\n unstyled = false,\n cellClassName,\n className,\n ...props\n }: ReorderableGridProps<T>,\n forwardedRef: Ref<HTMLDivElement>,\n) {\n const cols = Math.min(12, Math.max(1, Math.round(columns) || 1));\n const labels = useMemo(() => ({ ...DEFAULT_LABELS, ...labelOverrides }), [labelOverrides]);\n\n // ── order ────────────────────────────────────────────────────────────────\n const [stored, setStored] = useControllableState<string[] | undefined>(value, defaultValue, (next) => {\n if (next) onReorder?.(next);\n });\n const committed = useMemo(() => resolveOrder(stored, items), [stored, items]);\n\n const byId = useMemo(() => new Map(items.map((i) => [i.id, i])), [items]);\n const lockedIds = useMemo(() => items.filter((i) => i.locked).map((i) => i.id), [items]);\n const isLocked = useCallback((id: string) => byId.get(id)?.locked === true, [byId]);\n\n const [session, setSessionState] = useState<Session | null>(null);\n const sessionRef = useRef<Session | null>(null);\n const setSession = useCallback((s: Session | null) => {\n sessionRef.current = s;\n setSessionState(s);\n }, []);\n\n const previewOf = useCallback(\n (s: Session): string[] =>\n s.target === null || s.target === s.originIndex\n ? s.origin\n : moveItem(s.origin, s.originIndex, s.target, { locked: lockedIds }),\n [lockedIds],\n );\n\n const shown = useMemo(\n () => (session ? resolveOrder(previewOf(session), items) : committed),\n [session, previewOf, items, committed],\n );\n const shownRef = useRef(shown);\n shownRef.current = shown;\n\n // ── announcements ────────────────────────────────────────────────────────\n const [announcement, setAnnouncement] = useState(\"\");\n const labelOf = useCallback(\n (id: string) => {\n const item = byId.get(id);\n if (!item) return id;\n if (getItemLabel) return getItemLabel(item);\n const l = (item as { label?: unknown }).label;\n return typeof l === \"string\" ? l : id;\n },\n [byId, getItemLabel],\n );\n const ctxAt = useCallback(\n (id: string, index: number, total: number): ReorderableGridAnnouncementContext => ({\n id,\n label: labelOf(id),\n position: index + 1,\n total,\n row: Math.floor(index / cols) + 1,\n column: (index % cols) + 1,\n }),\n [labelOf, cols],\n );\n\n // ── elements ─────────────────────────────────────────────────────────────\n const rootRef = useRef<HTMLDivElement | null>(null);\n const cellRefs = useRef(new Map<string, HTMLDivElement>());\n const cellRef = useCallback(\n (id: string) => (el: HTMLDivElement | null) => {\n if (el) cellRefs.current.set(id, el);\n else cellRefs.current.delete(id);\n },\n [],\n );\n\n const instructionsId = useId();\n const [activeId, setActiveId] = useState<string | null>(null);\n const tabStop = activeId !== null && shown.includes(activeId) ? activeId : shown[0];\n /** Focus to put back after a drop or cancel moves the focused node. */\n const refocus = useRef<string | null>(null);\n\n // ── commit / cancel ──────────────────────────────────────────────────────\n const drag = useRef<PointerDrag | null>(null);\n const pending = useRef<{ id: string; pointerId: number; clientX: number; clientY: number } | null>(null);\n const scrollFrame = useRef<number | null>(null);\n\n const settle = useCallback((id: string) => {\n const el = cellRefs.current.get(id);\n if (!el) return;\n if (el.style.transform && !prefersReducedMotion()) {\n el.style.transition = `transform ${SHIFT_MS}ms ease`;\n window.setTimeout(() => {\n if (!el.style.transform) el.style.transition = \"\";\n }, SHIFT_MS + 50);\n }\n el.style.transform = \"\";\n }, []);\n\n const endPointer = useCallback(() => {\n const d = drag.current;\n drag.current = null;\n pending.current = null;\n if (scrollFrame.current !== null) {\n cancelAnimationFrame(scrollFrame.current);\n scrollFrame.current = null;\n }\n if (!d) return;\n const root = rootRef.current;\n if (root?.hasPointerCapture?.(d.pointerId)) root.releasePointerCapture?.(d.pointerId);\n settle(d.id);\n }, [settle]);\n\n const cancel = useCallback(() => {\n const s = sessionRef.current;\n if (!s) return;\n endPointer();\n setSession(null);\n if (s.mode === \"keyboard\") refocus.current = s.id;\n setAnnouncement(labels.cancelled(ctxAt(s.id, s.originIndex, s.origin.length)));\n }, [ctxAt, endPointer, labels, setSession]);\n\n const drop = useCallback(() => {\n const s = sessionRef.current;\n if (!s) return;\n if (s.target === null) {\n cancel();\n return;\n }\n const final = previewOf(s);\n endPointer();\n setSession(null);\n if (s.mode === \"keyboard\") refocus.current = s.id;\n setAnnouncement(labels.dropped(ctxAt(s.id, s.target, final.length)));\n if (!sameOrder(final, s.origin)) setStored(final);\n }, [cancel, ctxAt, endPointer, labels, previewOf, setSession, setStored]);\n\n // Escape joins the kit's layer stack, so inside a Modal or a full-screen\n // surface it cancels the pick-up before it closes anything else.\n useEscapeKey(cancel, session !== null);\n\n useEffect(() => {\n if (disabled) cancel();\n }, [disabled, cancel]);\n\n useEffect(() => () => endPointer(), [endPointer]);\n\n const begin = useCallback(\n (id: string, mode: Mode): boolean => {\n const origin = shownRef.current;\n const index = origin.indexOf(id);\n if (index < 0) return false;\n if (isLocked(id)) {\n setAnnouncement(labels.locked(ctxAt(id, index, origin.length)));\n return false;\n }\n setSession({ id, mode, origin, originIndex: index, target: index });\n setAnnouncement(labels.pickedUp(ctxAt(id, index, origin.length)));\n return true;\n },\n [ctxAt, isLocked, labels, setSession],\n );\n\n const retarget = useCallback(\n (target: number | null) => {\n const s = sessionRef.current;\n if (!s || target === s.target) return;\n setSession({ ...s, target });\n if (target !== null) setAnnouncement(labels.moved(ctxAt(s.id, target, s.origin.length)));\n },\n [ctxAt, labels, setSession],\n );\n\n // ── keyboard ─────────────────────────────────────────────────────────────\n\n /**\n * The slot an arrow key leads to from `from`, or null for none. Left/Right\n * step one slot, Up/Down one row. When `skipLocked`, a pinned slot is passed\n * over: Left/Right go on to the next free slot that way; Up/Down take the\n * nearest free slot after the pinned one in reading order (forward for Down,\n * backward for Up). Down from a row above a short last row lands on the last\n * slot.\n */\n const step = useCallback(\n (order: string[], from: number, key: string, skipLocked: boolean): number | null => {\n const n = order.length;\n const free = (i: number) => !skipLocked || !isLocked(order[i] as string);\n const scan = (start: number, dir: 1 | -1) => {\n for (let i = start; i >= 0 && i < n; i += dir) if (free(i)) return i;\n return null;\n };\n switch (key) {\n case \"ArrowRight\":\n return scan(from + 1, 1);\n case \"ArrowLeft\":\n return scan(from - 1, -1);\n case \"ArrowDown\": {\n let t = from + cols;\n if (t > n - 1) {\n if (Math.floor(from / cols) >= Math.floor((n - 1) / cols)) return null;\n t = n - 1;\n }\n return scan(t, 1);\n }\n case \"ArrowUp\":\n return from - cols < 0 ? null : scan(from - cols, -1);\n case \"Home\":\n return scan(0, 1);\n case \"End\":\n return scan(n - 1, -1);\n default:\n return null;\n }\n },\n [cols, isLocked],\n );\n\n const onCellKeyDown = (e: ReactKeyboardEvent<HTMLDivElement>, id: string) => {\n // Keys typed into a field inside the cell belong to the field.\n if (disabled || e.target !== e.currentTarget) return;\n const s = sessionRef.current;\n\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (s?.mode === \"keyboard\") drop();\n else if (!s) begin(id, \"keyboard\");\n return;\n }\n\n if (![\"ArrowRight\", \"ArrowLeft\", \"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(e.key)) return;\n e.preventDefault();\n\n if (s?.mode === \"keyboard\") {\n if (s.target === null) return;\n const t = step(shownRef.current, s.target, e.key, true);\n if (t !== null) retarget(t);\n return;\n }\n if (s) return;\n\n const order = shownRef.current;\n const t = step(order, order.indexOf(id), e.key, false);\n if (t === null) return;\n const next = order[t] as string;\n setActiveId(next);\n cellRefs.current.get(next)?.focus();\n };\n\n // ── pointer ──────────────────────────────────────────────────────────────\n\n /** Client point to the grid's own coordinates (the space cell offsets are in). */\n const toLocal = (clientX: number, clientY: number) => {\n const root = rootRef.current!;\n const r = root.getBoundingClientRect();\n return { x: clientX - r.left - root.clientLeft, y: clientY - r.top - root.clientTop, rect: r };\n };\n\n /**\n * The slot under the pointer. Kanban's rule (compare the pointer with each\n * card's box) extended to two dimensions: the nearest cell box wins, so a\n * point in a gutter belongs to the closer neighbour. Boxes are layout\n * offsets, which ignore transforms, so cells mid-animation do not move the\n * target. Outside the grid is `null`: a release there cancels. A pinned cell\n * is not a target; the current target stands.\n */\n const hitTest = (clientX: number, clientY: number): number | null => {\n const s = sessionRef.current;\n if (!s) return null;\n const { x, y, rect } = toLocal(clientX, clientY);\n if (clientX < rect.left || clientX > rect.right || clientY < rect.top || clientY > rect.bottom) return null;\n\n const order = shownRef.current;\n let best = -1;\n let bestDist = Infinity;\n order.forEach((id, i) => {\n const el = cellRefs.current.get(id);\n if (!el) return;\n const l = el.offsetLeft;\n const t = el.offsetTop;\n const dx = Math.max(l - x, 0, x - (l + el.offsetWidth));\n const dy = Math.max(t - y, 0, y - (t + el.offsetHeight));\n const dist = dx * dx + dy * dy;\n if (dist < bestDist) {\n bestDist = dist;\n best = i;\n }\n });\n if (best < 0) return s.target;\n if (isLocked(order[best] as string)) return s.target ?? s.originIndex;\n return best;\n };\n\n /** The dragged cell follows the pointer from where it STARTED, whatever slot it now has. */\n const applyDragTransform = useCallback(() => {\n const d = drag.current;\n const root = rootRef.current;\n if (!d || !root) return;\n const el = cellRefs.current.get(d.id);\n if (!el) return;\n const r = root.getBoundingClientRect();\n const px = d.clientX - r.left - root.clientLeft;\n const py = d.clientY - r.top - root.clientTop;\n const tx = d.startOffset.x + (px - d.startPos.x) - el.offsetLeft;\n const ty = d.startOffset.y + (py - d.startPos.y) - el.offsetTop;\n el.style.transition = \"\";\n el.style.transform = `translate3d(${tx}px, ${ty}px, 0)`;\n }, []);\n\n const track = () => {\n const d = drag.current;\n if (!d) return;\n retarget(hitTest(d.clientX, d.clientY));\n applyDragTransform();\n };\n\n /** Scroll the nearest scroller while the pointer is near its edge. */\n const autoScroll = () => {\n const d = drag.current;\n if (!d?.scroller || typeof requestAnimationFrame !== \"function\") return;\n const sc = d.scroller;\n const isDoc = sc === document.scrollingElement;\n const box = isDoc\n ? { top: 0, left: 0, bottom: window.innerHeight, right: window.innerWidth }\n : sc.getBoundingClientRect();\n const speed = (dist: number) => (dist < EDGE ? Math.ceil(((EDGE - dist) / EDGE) * MAX_SCROLL_STEP) : 0);\n let vy = speed(d.clientY - box.top) ? -speed(d.clientY - box.top) : speed(box.bottom - d.clientY);\n let vx = speed(d.clientX - box.left) ? -speed(d.clientX - box.left) : speed(box.right - d.clientX);\n // Only where it can actually go.\n if ((vy < 0 && sc.scrollTop <= 0) || (vy > 0 && sc.scrollTop + sc.clientHeight >= sc.scrollHeight)) vy = 0;\n if ((vx < 0 && sc.scrollLeft <= 0) || (vx > 0 && sc.scrollLeft + sc.clientWidth >= sc.scrollWidth)) vx = 0;\n if (!vx && !vy) {\n scrollFrame.current = null;\n return;\n }\n if (scrollFrame.current !== null) return;\n scrollFrame.current = requestAnimationFrame(() => {\n scrollFrame.current = null;\n if (!drag.current) return;\n sc.scrollTop += vy;\n sc.scrollLeft += vx;\n track();\n autoScroll();\n });\n };\n\n const onCellPointerDown = (e: ReactPointerEvent<HTMLDivElement>, id: string) => {\n if (disabled || e.button !== 0 || sessionRef.current || isLocked(id)) return;\n const cellEl = e.currentTarget;\n const target = e.target as Element;\n const handle = target.closest(\"[data-reorderable-handle]\");\n if (handle && cellEl.contains(handle)) {\n // The handle: always a drag.\n } else if (cellEl.querySelector(\"[data-reorderable-handle]\")) {\n return; // This cell has a handle and the press was elsewhere.\n } else {\n const interactive = target.closest(INTERACTIVE);\n if (interactive && interactive !== cellEl && cellEl.contains(interactive)) return;\n }\n pending.current = { id, pointerId: e.pointerId, clientX: e.clientX, clientY: e.clientY };\n };\n\n const onRootPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const p = pending.current;\n if (p && p.pointerId === e.pointerId && !drag.current) {\n if (Math.hypot(e.clientX - p.clientX, e.clientY - p.clientY) < DRAG_THRESHOLD) return;\n const root = rootRef.current;\n const el = cellRefs.current.get(p.id);\n pending.current = null;\n if (!root || !el || !begin(p.id, \"pointer\")) return;\n // Capture on the ROOT, never the cell: the live preview moves the cell's\n // DOM node, and moving a node can drop a capture held on it.\n root.setPointerCapture?.(e.pointerId);\n window.getSelection?.()?.removeAllRanges();\n const start = toLocal(p.clientX, p.clientY);\n drag.current = {\n id: p.id,\n pointerId: e.pointerId,\n startOffset: { x: el.offsetLeft, y: el.offsetTop },\n startPos: { x: start.x, y: start.y },\n clientX: e.clientX,\n clientY: e.clientY,\n scroller: scrollParent(root),\n };\n }\n const d = drag.current;\n if (!d || d.pointerId !== e.pointerId) return;\n d.clientX = e.clientX;\n d.clientY = e.clientY;\n track();\n autoScroll();\n };\n\n const onRootPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (pending.current?.pointerId === e.pointerId) {\n pending.current = null;\n return;\n }\n const d = drag.current;\n if (!d || d.pointerId !== e.pointerId) return;\n d.clientX = e.clientX;\n d.clientY = e.clientY;\n const target = hitTest(e.clientX, e.clientY);\n const s = sessionRef.current;\n if (s && target !== s.target) {\n // Commit what the release point says, not the last move event.\n sessionRef.current = { ...s, target };\n }\n drop();\n };\n\n const onRootPointerCancel = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (pending.current?.pointerId === e.pointerId) pending.current = null;\n if (drag.current?.pointerId === e.pointerId) cancel();\n };\n\n // ── layout effects: follow the pointer, shift the others, keep focus ──────\n\n const offsets = useRef(new Map<string, { x: number; y: number }>());\n const shiftTimers = useRef(new Map<string, number>());\n const shownKey = shown.join(\"\\u0000\");\n\n useLayoutEffect(() => {\n const prev = offsets.current;\n const next = new Map<string, { x: number; y: number }>();\n for (const [id, el] of cellRefs.current) next.set(id, { x: el.offsetLeft, y: el.offsetTop });\n offsets.current = next;\n\n // FLIP: cells the preview displaced slide from where they were.\n if (prev.size && !prefersReducedMotion()) {\n for (const [id, el] of cellRefs.current) {\n if (id === drag.current?.id) continue;\n const a = prev.get(id);\n const b = next.get(id);\n if (!a || !b || (a.x === b.x && a.y === b.y)) continue;\n el.style.transition = \"none\";\n el.style.transform = `translate3d(${a.x - b.x}px, ${a.y - b.y}px, 0)`;\n void el.offsetWidth;\n el.style.transition = `transform ${SHIFT_MS}ms ease`;\n el.style.transform = \"\";\n const old = shiftTimers.current.get(id);\n if (old !== undefined) window.clearTimeout(old);\n shiftTimers.current.set(\n id,\n window.setTimeout(() => {\n shiftTimers.current.delete(id);\n if (!el.style.transform) el.style.transition = \"\";\n }, SHIFT_MS + 50),\n );\n }\n }\n\n applyDragTransform();\n\n // React moves DOM nodes to reorder them, and a moved node can lose focus.\n const s = sessionRef.current;\n const keep = s?.mode === \"keyboard\" ? s.id : refocus.current;\n refocus.current = null;\n if (keep) {\n const el = cellRefs.current.get(keep);\n if (el && document.activeElement !== el) el.focus();\n }\n }, [shownKey, session, applyDragTransform]);\n\n useEffect(() => {\n const timers = shiftTimers.current;\n return () => {\n for (const t of timers.values()) window.clearTimeout(t);\n };\n }, []);\n\n // ── render ───────────────────────────────────────────────────────────────\n\n const state = session ? (session.mode === \"pointer\" ? \"dragging\" : \"picked-up\") : \"idle\";\n const dropIndex = session && session.target !== null ? session.target : undefined;\n const total = shown.length;\n\n return (\n <div\n {...props}\n ref={composeRefs(rootRef, forwardedRef)}\n data-react-fancy-reorderable-grid=\"\"\n data-columns={cols}\n data-state={state}\n data-drop-index={dropIndex}\n data-disabled={disabled ? \"\" : undefined}\n role=\"group\"\n aria-label={label}\n aria-disabled={disabled || undefined}\n onPointerMove={onRootPointerMove}\n onPointerUp={onRootPointerUp}\n onPointerCancel={onRootPointerCancel}\n onLostPointerCapture={(e) => {\n if (drag.current?.pointerId === e.pointerId) cancel();\n }}\n className={cn(\n \"relative grid\",\n COLUMN_CLASSES[cols - 1],\n GAP_CLASSES[gap],\n session?.mode === \"pointer\" && \"cursor-grabbing select-none\",\n disabled && \"opacity-60\",\n className,\n )}\n >\n {shown.map((id, index) => {\n const item = byId.get(id);\n if (!item) return null;\n const locked = item.locked === true;\n const active = session?.id === id;\n const dragging = active && session?.mode === \"pointer\";\n const pickedUp = active && session?.mode === \"keyboard\";\n const dropTarget = active && dropIndex === index;\n const outside = active && session?.target === null;\n const itemState = {\n index,\n position: index + 1,\n row: Math.floor(index / cols) + 1,\n column: (index % cols) + 1,\n total,\n dragging,\n pickedUp,\n dropTarget,\n locked,\n disabled,\n handleProps: { \"data-reorderable-handle\": \"\" as const },\n };\n return (\n <div\n key={id}\n ref={cellRef(id)}\n data-react-fancy-reorderable-grid-item=\"\"\n data-reorderable-id={id}\n data-index={index}\n data-state={dragging ? \"dragging\" : pickedUp ? \"picked-up\" : \"idle\"}\n data-locked={locked ? \"true\" : undefined}\n data-drop-target={dropTarget ? \"\" : undefined}\n role=\"button\"\n aria-roledescription={labels.roleDescription}\n aria-describedby={instructionsId}\n aria-pressed={active}\n aria-disabled={disabled || locked || undefined}\n tabIndex={disabled ? -1 : id === tabStop ? 0 : -1}\n onFocus={(e) => {\n if (e.target === e.currentTarget) setActiveId(id);\n }}\n onKeyDown={(e) => onCellKeyDown(e, id)}\n onPointerDown={(e) => onCellPointerDown(e, id)}\n className={cn(\n CELL_BASE,\n !unstyled && CELL_STYLED,\n !unstyled && locked && CELL_LOCKED_STYLED,\n locked || disabled ? \"cursor-default\" : \"cursor-grab\",\n dragging && cn(\"z-10 cursor-grabbing shadow-lg ring-2\", FOCUS_RING),\n pickedUp && cn(\"z-10 shadow-md ring-2\", FOCUS_RING),\n outside && \"opacity-60\",\n cellClassName,\n )}\n >\n {renderItem ? renderItem(item, itemState) : labelOf(id)}\n </div>\n );\n })}\n <div id={instructionsId} className=\"sr-only\">\n {labels.instructions}\n </div>\n <div data-react-fancy-reorderable-grid-live=\"\" aria-live=\"assertive\" aria-atomic=\"true\" className=\"sr-only\">\n {announcement}\n </div>\n </div>\n );\n}\n\n/**\n * A grid of cells reordered in place, row-major, by pointer or keyboard.\n *\n * Built for field-order designers: the grid looks like the grid it designs.\n * Order is a list of ids (`value` / `defaultValue` / `onReorder`); the pure\n * `moveItem(ids, from, to, { locked })` is the same rule without a DOM, for\n * agents.\n */\nexport const ReorderableGrid = forwardRef(ReorderableGridInner) as (<T extends ReorderableGridItem>(\n props: ReorderableGridProps<T> & { ref?: Ref<HTMLDivElement> },\n) => ReactElement) & { displayName?: string };\n\nReorderableGrid.displayName = \"ReorderableGrid\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Popover/Popover.context.ts","../src/components/Popover/PopoverTrigger.tsx","../src/components/Popover/PopoverContent.tsx","../src/components/Popover/Popover.tsx"],"names":["jsx","useRef","useCallback"],"mappings":";;;;;;;;AAGO,IAAM,cAAA,GAAiB,cAA0C,IAAI,CAAA;AAErE,SAAS,UAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAM,WAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,GAAA;AACT;ACPO,SAAS,eAAe,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,EAAwB;AACpF,EAAA,MAAM,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,OAAO,YAAA,EAAc,YAAA,KAAiB,UAAA,EAAW;AAEnF,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,kCAAA,EAAiC,EAAA;AAAA,MACjC,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS,CAAA;AAAA,MACtC,SAAS,KAAA,GAAQ,MAAA,GAAY,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MAChD,YAAA,EAAc,QAAQ,YAAA,GAAe,MAAA;AAAA,MACrC,YAAA,EAAc,QAAQ,YAAA,GAAe,MAAA;AAAA,MACrC,eAAA,EAAe,IAAA;AAAA,MACf,eAAA,EAAa,IAAA;AAAA,MAEZ;AAAA;AAAA,GACH;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACftB,SAAS,eAAe,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,EAAwB;AAC3F,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,YAAA,EAAa,GAAI,UAAA,EAAW;AACnH,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,SAAA,EAAW,WAAA,EAAa;AAAA,IAC3D,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACzD,EAAA,eAAA,CAAgB,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,CAAC,OAAO,SAAS,CAAA;AAC5D,EAAA,YAAA,CAAa,OAAO,IAAI,CAAA;AAGxB,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,KAAM,KAAA,IAAS,SAAS,CAAA,KAAM,KAAA;AAE1D,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,uBACEA,GAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,QAAC,YAA8D,OAAA,GAAU,IAAA;AAAA,MAC3E,CAAA;AAAA,MACA,0BAAA,EAAyB,EAAA;AAAA,MACzB,SAAA,EAAW,EAAA;AAAA,QACT,oVAAA;AAAA,QACA,aAAa,gBAAA,GAAmB,WAAA;AAAA,QAChC;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,MAAM,QAAA,CAAS,CAAA,EAAG,GAAA,EAAK,QAAA,CAAS,CAAA,EAAE;AAAA,MACrD,YAAA,EAAc,QAAQ,YAAA,GAAe,MAAA;AAAA,MACrC,YAAA,EAAc,QAAQ,YAAA,GAAe,MAAA;AAAA,MAEpC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;AC9C7B,SAAS,WAAA,CAAY;AAAA,EACnB,QAAA;AAAA,EACA,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,MAAA,GAAS,CAAA;AAAA,EACT,KAAA,GAAQ,KAAA;AAAA,EACR,UAAA,GAAa,GAAA;AAAA,EACb,eAAA,GAAkB;AACpB,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAE7C,EAAA,MAAM,SAAA,GAAYC,OAAoB,IAAI,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAcA,OAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,eAAA,GAAkBA,OAAsC,MAAS,CAAA;AAEvE,EAAA,MAAM,OAAA,GAAUC,WAAAA;AAAA,IACd,CAAC,IAAA,KAAkB;AACjB,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC7B;AAEA,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,YAAA,CAAa,gBAAgB,OAAO,CAAA;AACpC,IAAA,eAAA,CAAgB,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,UAAU,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE/B,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,YAAA,CAAa,gBAAgB,OAAO,CAAA;AACpC,IAAA,eAAA,CAAgB,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,KAAK,GAAG,eAAe,CAAA;AAAA,EAC5E,CAAA,EAAG,CAAC,KAAA,EAAO,eAAA,EAAiB,OAAO,CAAC,CAAA;AAEpC,EAAA,MAAM,GAAA,GAAM,OAAA;AAAA,IACV,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,aAAa,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,YAAA,EAAa,CAAA;AAAA,IACrG,CAAC,IAAA,EAAM,OAAA,EAAS,WAAW,MAAA,EAAQ,KAAA,EAAO,cAAc,YAAY;AAAA,GACtE;AAEA,EAAA,uBACEF,GAAAA,CAAC,cAAA,CAAe,UAAf,EAAwB,KAAA,EAAO,KAAM,QAAA,EAAS,CAAA;AAEnD;AAEO,IAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa;AAAA,EAChD,OAAA,EAAS,cAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAC","file":"chunk-QTS4Q2NK.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { PopoverContextValue } from \"./Popover.types\";\n\nexport const PopoverContext = createContext<PopoverContextValue | null>(null);\n\nexport function usePopover(): PopoverContextValue {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(\"Popover compound components must be used within <Popover>\");\n }\n return ctx;\n}\n","import { cn } from \"../../utils/cn\";\nimport { usePopover } from \"./Popover.context\";\nimport type { PopoverTriggerProps } from \"./Popover.types\";\n\nexport function PopoverTrigger({ children, className, ...rest }: PopoverTriggerProps) {\n const { setOpen, open, anchorRef, hover, onHoverEnter, onHoverLeave } = usePopover();\n\n return (\n <span\n {...rest}\n ref={anchorRef as React.RefObject<HTMLSpanElement>}\n data-react-fancy-popover-trigger=\"\"\n className={cn(\"inline-flex\", className)}\n onClick={hover ? undefined : () => setOpen(!open)}\n onMouseEnter={hover ? onHoverEnter : undefined}\n onMouseLeave={hover ? onHoverLeave : undefined}\n aria-expanded={open}\n aria-haspopup\n >\n {children}\n </span>\n );\n}\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n","import { useCallback, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { usePopover } from \"./Popover.context\";\nimport { useFloatingPosition } from \"../../hooks/use-floating-position\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport type { PopoverContentProps } from \"./Popover.types\";\n\nexport function PopoverContent({ children, className, style, ...rest }: PopoverContentProps) {\n const { open, setOpen, anchorRef, floatingRef, placement, offset, hover, onHoverEnter, onHoverLeave } = usePopover();\n const outsideRef = useRef<HTMLDivElement>(null);\n\n const position = useFloatingPosition(anchorRef, floatingRef, {\n placement,\n offset,\n enabled: open,\n });\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useOutsideClick(outsideRef, close, open && !hover, anchorRef);\n useEscapeKey(close, open);\n\n // Hide until position is calculated to prevent flash at (-9999, -9999)\n const positioned = position.x !== -9999 && position.y !== -9999;\n\n if (!open) return null;\n\n return (\n <Portal>\n <div\n {...rest}\n ref={(node) => {\n outsideRef.current = node;\n (floatingRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-react-fancy-popover=\"\"\n className={cn(\n \"fixed z-50 rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 text-zinc-700 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:text-zinc-200 dark:shadow-zinc-950/50\",\n positioned ? \"fancy-scale-in\" : \"invisible\",\n className,\n )}\n style={{ ...style, left: position.x, top: position.y }}\n onMouseEnter={hover ? onHoverEnter : undefined}\n onMouseLeave={hover ? onHoverLeave : undefined}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nPopoverContent.displayName = \"PopoverContent\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { PopoverContext } from \"./Popover.context\";\nimport { PopoverTrigger } from \"./PopoverTrigger\";\nimport { PopoverContent } from \"./PopoverContent\";\nimport type { PopoverProps } from \"./Popover.types\";\n\nfunction PopoverRoot({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n offset = 8,\n hover = false,\n hoverDelay = 200,\n hoverCloseDelay = 300,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const anchorRef = useRef<HTMLElement>(null);\n const floatingRef = useRef<HTMLDivElement>(null);\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const onHoverEnter = useCallback(() => {\n if (!hover) return;\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = setTimeout(() => setOpen(true), hoverDelay);\n }, [hover, hoverDelay, setOpen]);\n\n const onHoverLeave = useCallback(() => {\n if (!hover) return;\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);\n }, [hover, hoverCloseDelay, setOpen]);\n\n const ctx = useMemo(\n () => ({ open, setOpen, anchorRef, floatingRef, placement, offset, hover, onHoverEnter, onHoverLeave }),\n [open, setOpen, placement, offset, hover, onHoverEnter, onHoverLeave],\n );\n\n return (\n <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>\n );\n}\n\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AccordionPanel/AccordionPanel.context.ts","../src/components/AccordionPanel/AccordionPanel.Section.tsx","../src/components/AccordionPanel/AccordionPanel.Trigger.tsx","../src/components/AccordionPanel/AccordionPanel.Content.tsx","../src/components/AccordionPanel/AccordionPanel.tsx"],"names":["jsx","useMemo"],"mappings":"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","file":"chunk-RANTYGKW.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AccordionOrientation } from \"./AccordionPanel.types\";\n\n// ── Panel-level context ─────────────────────────────────────────────────\n\nexport interface AccordionPanelContextValue {\n orientation: AccordionOrientation;\n isOpen: (id: string) => boolean;\n toggle: (id: string) => void;\n open: (id: string) => void;\n close: (id: string) => void;\n /** Ordered list of all section ids registered in this panel */\n sectionIds: string[];\n registerSection: (id: string) => () => void;\n}\n\nexport const AccordionPanelContext =\n createContext<AccordionPanelContextValue | null>(null);\n\nexport function useAccordionPanel(): AccordionPanelContextValue {\n const ctx = useContext(AccordionPanelContext);\n if (!ctx) {\n throw new Error(\n \"AccordionPanel components must be used inside <AccordionPanel>\",\n );\n }\n return ctx;\n}\n\n// ── Section-level context ───────────────────────────────────────────────\n\nexport interface AccordionSectionContextValue {\n id: string;\n open: boolean;\n pinned: boolean;\n orientation: AccordionOrientation;\n toggle: () => void;\n}\n\nexport const AccordionSectionContext =\n createContext<AccordionSectionContextValue | null>(null);\n\nexport function useAccordionSection(): AccordionSectionContextValue {\n const ctx = useContext(AccordionSectionContext);\n if (!ctx) {\n throw new Error(\n \"<AccordionPanel.Trigger> must be rendered inside <AccordionPanel.Section>\",\n );\n }\n return ctx;\n}\n","import { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n AccordionSectionContext,\n useAccordionPanel,\n} from \"./AccordionPanel.context\";\nimport type { AccordionPanelSectionProps } from \"./AccordionPanel.types\";\n\n/**\n * One collapsible section inside an AccordionPanel.\n *\n * Compose with `<AccordionPanel.Trigger>` and `<AccordionPanel.Content>`\n * children — Content renders only when open, Trigger always renders and\n * adapts its look by state. Children that are not Trigger/Content are\n * rendered as-is, regardless of state, so static decorations stay put.\n *\n * Pinned sections never collapse and don't need a Trigger.\n */\nexport function AccordionPanelSection({\n id,\n pinned = false,\n className,\n openClassName,\n closedClassName,\n unstyled,\n children,\n}: AccordionPanelSectionProps) {\n const panel = useAccordionPanel();\n const { orientation, isOpen, toggle, registerSection } = panel;\n\n useEffect(() => registerSection(id), [id, registerSection]);\n\n const open = pinned || isOpen(id);\n\n const sectionCtx = useMemo(\n () => ({\n id,\n open,\n pinned,\n orientation,\n toggle: () => toggle(id),\n }),\n [id, open, pinned, orientation, toggle],\n );\n\n return (\n <AccordionSectionContext.Provider value={sectionCtx}>\n <div\n data-react-fancy-accordion-section=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-pinned={pinned ? \"\" : undefined}\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0\",\n !unstyled && \"items-center gap-1\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n open ? openClassName : closedClassName,\n )}\n >\n {children}\n </div>\n </AccordionSectionContext.Provider>\n );\n}\n\nAccordionPanelSection.displayName = \"AccordionPanelSection\";\n","import { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\nimport type {\n AccordionPanelTriggerProps,\n SectionRenderable,\n SectionRenderState,\n} from \"./AccordionPanel.types\";\n\nfunction renderSlot(slot: SectionRenderable, state: SectionRenderState) {\n return typeof slot === \"function\" ? slot(state) : slot;\n}\n\n/**\n * Trigger for an AccordionPanel.Section.\n *\n * Has two visual roles, picked automatically from section state:\n *\n * - When the section is OPEN: renders as a thin divider on the section's\n * trailing edge. Hovering reveals an inset chevron pointing toward the\n * section so the user knows clicking will collapse it.\n *\n * - When the section is CLOSED: renders as a standalone chevron button\n * in place of the section content. Clicking re-expands the section.\n *\n * Supply `children` (node or render-prop) to fully replace the default\n * rendering. The render-prop receives `{ open, toggle, orientation, id }`.\n */\nexport function AccordionPanelTrigger({\n children,\n className,\n \"aria-label\": ariaLabel,\n}: AccordionPanelTriggerProps) {\n const { id, open, orientation, toggle } = useAccordionSection();\n const state: SectionRenderState = { id, open, orientation, toggle };\n\n // Custom render path — caller is in charge of look & feel.\n if (children !== undefined) {\n return (\n <div\n data-react-fancy-accordion-trigger=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-orientation={orientation}\n className={className}\n >\n {renderSlot(children, state)}\n </div>\n );\n }\n\n // Default rendering ----------------------------------------------------\n\n if (open) {\n // Trailing-edge divider. The visible line is 1px (rendered via the\n // ::before pseudo-element so it stays narrow); the button's actual\n // hitbox is much wider (w-3 / h-3 = 12px) so users don't have to land\n // pixel-perfect on the line. Hovering the hitbox highlights the line\n // and reveals an inset chevron signalling \"click to collapse\".\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Collapse section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"open\"\n data-orientation={orientation}\n className={cn(\n \"group relative flex shrink-0 items-center justify-center cursor-pointer\",\n \"text-zinc-500 dark:text-zinc-500\",\n \"hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n // Wide hitbox + thin visible line (drawn via ::before).\n orientation === \"horizontal\"\n ? \"w-3 self-stretch\"\n : \"h-3 self-stretch\",\n \"before:absolute before:bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:before:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n \"before:transition-colors group-hover:before:bg-zinc-400 dark:group-hover:before:bg-zinc-500\",\n orientation === \"horizontal\"\n ? \"before:top-0 before:bottom-0 before:w-px before:left-1/2 before:-translate-x-1/2\"\n : \"before:left-0 before:right-0 before:h-px before:top-1/2 before:-translate-y-1/2\",\n \"transition-colors\",\n className,\n )}\n >\n <ChevronIcon\n orientation={orientation}\n purpose=\"collapse\"\n className=\"relative opacity-0 group-hover:opacity-100 transition-opacity\"\n />\n </button>\n );\n }\n\n // Closed: standalone chevron button. Click to re-expand.\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Expand section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"closed\"\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-md\",\n \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n \"hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n \"hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n \"transition-colors cursor-pointer\",\n orientation === \"horizontal\" ? \"h-8 w-6 mx-0.5\" : \"w-8 h-6 my-0.5\",\n className,\n )}\n >\n <ChevronIcon orientation={orientation} purpose=\"expand\" />\n </button>\n );\n}\n\nAccordionPanelTrigger.displayName = \"AccordionPanelTrigger\";\n\n// ── Internal chevron ────────────────────────────────────────────────────\n\nfunction ChevronIcon({\n orientation,\n purpose,\n className,\n}: {\n orientation: \"horizontal\" | \"vertical\";\n /** \"expand\" → closed section, click to open. \"collapse\" → open section, click to close. */\n purpose: \"expand\" | \"collapse\";\n className?: string;\n}) {\n // For horizontal: both states use a left-pointing chevron (matches the\n // screenshot convention — closed sections show ❮, open dividers reveal\n // a ❮ on hover indicating the section will collapse leftward).\n //\n // For vertical: closed shows down ⌄ (click to expand below); open\n // divider on hover shows up ⌃ (click to collapse upward).\n const transform =\n orientation === \"horizontal\"\n ? \"rotate(180deg)\"\n : purpose === \"expand\"\n ? \"rotate(90deg)\"\n : \"rotate(270deg)\";\n\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ transform }}\n className={className}\n aria-hidden=\"true\"\n >\n <polyline points=\"6 4 10 8 6 12\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\n\nexport interface AccordionPanelContentProps {\n children: ReactNode;\n className?: string;\n /**\n * Skip the default flex-row/flex-col + items-center + gap classes so the\n * consumer can lay out the open-state content however they want (e.g. a\n * full-height chat panel with header/scroll/input rows). The\n * `data-react-fancy-accordion-content` attribute and conditional render\n * (only when the section is open) are kept.\n */\n unstyled?: boolean;\n}\n\n/**\n * Wrapper for the open-state content of a Section. Renders its children\n * only when the parent Section is open; returns `null` otherwise.\n *\n * Use this so siblings of `<AccordionPanel.Trigger>` inside a section can\n * cleanly toggle in/out of the DOM.\n *\n * The default styling assumes an inline cluster — flex row (horizontal\n * orientation) or column (vertical), centered, with a small gap. For panel\n * use cases where the content needs full-bleed layout (chat panes, canvas\n * surfaces, etc.), pass `unstyled` and supply your own className.\n */\nexport function AccordionPanelContent({\n children,\n className,\n unstyled,\n}: AccordionPanelContentProps) {\n const { open, orientation } = useAccordionSection();\n if (!open) return null;\n\n return (\n <div\n data-react-fancy-accordion-content=\"\"\n data-orientation={orientation}\n className={cn(\n !unstyled && \"flex items-center gap-1\",\n !unstyled && (orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nAccordionPanelContent.displayName = \"AccordionPanelContent\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { AccordionPanelContext } from \"./AccordionPanel.context\";\nimport { AccordionPanelSection } from \"./AccordionPanel.Section\";\nimport { AccordionPanelTrigger } from \"./AccordionPanel.Trigger\";\nimport { AccordionPanelContent } from \"./AccordionPanel.Content\";\nimport type { AccordionPanelProps } from \"./AccordionPanel.types\";\n\n/**\n * Horizontal or vertical accordion of collapsible sections.\n *\n * Use the compound parts:\n * <AccordionPanel orientation=\"horizontal\" defaultValue={[\"wishlist\"]}>\n * <AccordionPanel.Section id=\"home\" pinned>\n * <Button icon=\"home\" />\n * </AccordionPanel.Section>\n * <AccordionPanel.Section id=\"wishlist\">\n * <Button icon=\"list\">Wishlist</Button>\n * </AccordionPanel.Section>\n * </AccordionPanel>\n *\n * Each non-pinned section renders a trigger (default chevron-divider) that\n * collapses/expands. Pass a custom `trigger` prop on a Section, or use the\n * exported `AccordionPanel.Trigger` directly to compose your own.\n */\nfunction AccordionPanelRoot({\n orientation = \"horizontal\",\n value: controlledValue,\n defaultValue,\n onValueChange,\n className,\n children,\n}: AccordionPanelProps) {\n const [openIds, setOpenIds] = useControllableState<string[]>(\n controlledValue,\n defaultValue ?? [],\n onValueChange,\n );\n\n const openSet = useMemo(() => new Set(openIds), [openIds]);\n\n const isOpen = useCallback((id: string) => openSet.has(id), [openSet]);\n\n const open = useCallback(\n (id: string) => {\n setOpenIds(openSet.has(id) ? (openIds ?? []) : [...(openIds ?? []), id]);\n },\n [openSet, openIds, setOpenIds],\n );\n\n const close = useCallback(\n (id: string) => {\n setOpenIds((openIds ?? []).filter((x) => x !== id));\n },\n [openIds, setOpenIds],\n );\n\n const toggle = useCallback(\n (id: string) => {\n setOpenIds(\n openSet.has(id)\n ? (openIds ?? []).filter((x) => x !== id)\n : [...(openIds ?? []), id],\n );\n },\n [openSet, openIds, setOpenIds],\n );\n\n // Track section order for downstream consumers (e.g. trigger direction\n // heuristics that need to know neighbors).\n const [sectionIds, setSectionIds] = useState<string[]>([]);\n const orderRef = useRef<string[]>([]);\n\n const registerSection = useCallback((id: string) => {\n if (!orderRef.current.includes(id)) {\n orderRef.current = [...orderRef.current, id];\n setSectionIds(orderRef.current);\n }\n return () => {\n orderRef.current = orderRef.current.filter((x) => x !== id);\n setSectionIds(orderRef.current);\n };\n }, []);\n\n const ctx = useMemo(\n () => ({\n orientation,\n isOpen,\n toggle,\n open,\n close,\n sectionIds,\n registerSection,\n }),\n [orientation, isOpen, toggle, open, close, sectionIds, registerSection],\n );\n\n return (\n <AccordionPanelContext.Provider value={ctx}>\n <div\n data-react-fancy-accordion-panel=\"\"\n data-orientation={orientation}\n className={cn(\n \"inline-flex items-stretch\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionPanelContext.Provider>\n );\n}\n\nAccordionPanelRoot.displayName = \"AccordionPanel\";\n\n// ── Compound exports ────────────────────────────────────────────────────\n\ntype AccordionPanelType = typeof AccordionPanelRoot & {\n Section: typeof AccordionPanelSection;\n Trigger: typeof AccordionPanelTrigger;\n Content: typeof AccordionPanelContent;\n};\n\nexport const AccordionPanel = AccordionPanelRoot as AccordionPanelType;\nAccordionPanel.Section = AccordionPanelSection;\nAccordionPanel.Trigger = AccordionPanelTrigger;\nAccordionPanel.Content = AccordionPanelContent;\n"]}
|