@chartts/core 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/area.cjs +10 -10
- package/dist/area.js +5 -5
- package/dist/bar.cjs +9 -9
- package/dist/bar.js +4 -4
- package/dist/baseline.cjs +9 -9
- package/dist/baseline.js +4 -4
- package/dist/boxplot.cjs +9 -9
- package/dist/boxplot.js +4 -4
- package/dist/bubble.cjs +9 -9
- package/dist/bubble.js +4 -4
- package/dist/bullet.cjs +10 -10
- package/dist/bullet.js +5 -5
- package/dist/calendar.cjs +10 -10
- package/dist/calendar.js +5 -5
- package/dist/candlestick.cjs +9 -9
- package/dist/candlestick.js +4 -4
- package/dist/chord.cjs +10 -10
- package/dist/chord.js +5 -5
- package/dist/chunk-2OWMJBRN.js +122 -0
- package/dist/chunk-2OWMJBRN.js.map +1 -0
- package/dist/{chunk-DR5MQC3W.js → chunk-2VHG2N75.js} +4 -4
- package/dist/{chunk-DR5MQC3W.js.map → chunk-2VHG2N75.js.map} +1 -1
- package/dist/{chunk-RN7NNB6I.js → chunk-2X7UIG3G.js} +3 -3
- package/dist/{chunk-RN7NNB6I.js.map → chunk-2X7UIG3G.js.map} +1 -1
- package/dist/{chunk-ZTUKOCJN.cjs → chunk-35XUPEAD.cjs} +4 -4
- package/dist/{chunk-ZTUKOCJN.cjs.map → chunk-35XUPEAD.cjs.map} +1 -1
- package/dist/{chunk-2EZ2TVYT.cjs → chunk-3HBRAGJA.cjs} +13 -13
- package/dist/{chunk-2EZ2TVYT.cjs.map → chunk-3HBRAGJA.cjs.map} +1 -1
- package/dist/{chunk-WJP6CRML.js → chunk-45Y77XDM.js} +3 -3
- package/dist/{chunk-WJP6CRML.js.map → chunk-45Y77XDM.js.map} +1 -1
- package/dist/{chunk-DRIJNFWP.cjs → chunk-47R2QUID.cjs} +10 -10
- package/dist/{chunk-DRIJNFWP.cjs.map → chunk-47R2QUID.cjs.map} +1 -1
- package/dist/{chunk-FDNJNVKA.cjs → chunk-4C5IV57Z.cjs} +9 -9
- package/dist/{chunk-FDNJNVKA.cjs.map → chunk-4C5IV57Z.cjs.map} +1 -1
- package/dist/{chunk-5YNIOIKK.js → chunk-4EV5UN6V.js} +3 -3
- package/dist/{chunk-5YNIOIKK.js.map → chunk-4EV5UN6V.js.map} +1 -1
- package/dist/{chunk-KTCP23W6.js → chunk-5JDHVXPE.js} +3 -3
- package/dist/{chunk-KTCP23W6.js.map → chunk-5JDHVXPE.js.map} +1 -1
- package/dist/{chunk-QERWC7U6.js → chunk-5VI5F5XA.js} +3 -3
- package/dist/{chunk-QERWC7U6.js.map → chunk-5VI5F5XA.js.map} +1 -1
- package/dist/{chunk-AG7VY6MJ.cjs → chunk-64B7FGFP.cjs} +8 -8
- package/dist/{chunk-AG7VY6MJ.cjs.map → chunk-64B7FGFP.cjs.map} +1 -1
- package/dist/{chunk-ILCWDAKD.js → chunk-66GE7TI3.js} +3 -3
- package/dist/{chunk-ILCWDAKD.js.map → chunk-66GE7TI3.js.map} +1 -1
- package/dist/{chunk-CCMLOCTH.js → chunk-6H34P4AG.js} +3 -3
- package/dist/{chunk-CCMLOCTH.js.map → chunk-6H34P4AG.js.map} +1 -1
- package/dist/{chunk-E43H3A3G.cjs → chunk-6KNS32OH.cjs} +7 -7
- package/dist/{chunk-E43H3A3G.cjs.map → chunk-6KNS32OH.cjs.map} +1 -1
- package/dist/{chunk-YX6RW6ZW.cjs → chunk-6S2NCXNP.cjs} +6 -6
- package/dist/{chunk-YX6RW6ZW.cjs.map → chunk-6S2NCXNP.cjs.map} +1 -1
- package/dist/{chunk-QKJUAMRK.cjs → chunk-6XD3VSAM.cjs} +6 -6
- package/dist/{chunk-QKJUAMRK.cjs.map → chunk-6XD3VSAM.cjs.map} +1 -1
- package/dist/{chunk-WYIIWTIR.cjs → chunk-6XWZSV6M.cjs} +4 -4
- package/dist/{chunk-WYIIWTIR.cjs.map → chunk-6XWZSV6M.cjs.map} +1 -1
- package/dist/{chunk-UZH6PVHD.js → chunk-7FUQMZGT.js} +4 -4
- package/dist/{chunk-UZH6PVHD.js.map → chunk-7FUQMZGT.js.map} +1 -1
- package/dist/chunk-7LZVSOZR.cjs +172 -0
- package/dist/chunk-7LZVSOZR.cjs.map +1 -0
- package/dist/{chunk-VBEZS3Q4.cjs → chunk-7XOK2HLV.cjs} +9 -9
- package/dist/{chunk-VBEZS3Q4.cjs.map → chunk-7XOK2HLV.cjs.map} +1 -1
- package/dist/{chunk-46ZZTP5B.js → chunk-ACN4JCSF.js} +4 -4
- package/dist/{chunk-46ZZTP5B.js.map → chunk-ACN4JCSF.js.map} +1 -1
- package/dist/{chunk-EHNX3MG3.cjs → chunk-AOZ47DTE.cjs} +13 -13
- package/dist/{chunk-EHNX3MG3.cjs.map → chunk-AOZ47DTE.cjs.map} +1 -1
- package/dist/{chunk-4XVJYNOT.js → chunk-AYEXPYFE.js} +4 -4
- package/dist/{chunk-4XVJYNOT.js.map → chunk-AYEXPYFE.js.map} +1 -1
- package/dist/{chunk-FZIBM3G5.cjs → chunk-BPXEQPZU.cjs} +10 -10
- package/dist/{chunk-FZIBM3G5.cjs.map → chunk-BPXEQPZU.cjs.map} +1 -1
- package/dist/{chunk-XWN43PZF.cjs → chunk-BQUMYOBP.cjs} +7 -7
- package/dist/{chunk-XWN43PZF.cjs.map → chunk-BQUMYOBP.cjs.map} +1 -1
- package/dist/{chunk-OFEROCC5.cjs → chunk-CG4KMZRU.cjs} +6 -6
- package/dist/{chunk-OFEROCC5.cjs.map → chunk-CG4KMZRU.cjs.map} +1 -1
- package/dist/{chunk-2ITF366P.js → chunk-CLBVCWJG.js} +3 -3
- package/dist/{chunk-2ITF366P.js.map → chunk-CLBVCWJG.js.map} +1 -1
- package/dist/{chunk-OUN3MWRQ.cjs → chunk-CVKWXLXW.cjs} +10 -10
- package/dist/{chunk-OUN3MWRQ.cjs.map → chunk-CVKWXLXW.cjs.map} +1 -1
- package/dist/{chunk-RJIPFWW7.js → chunk-D4RP2H6A.js} +4 -4
- package/dist/{chunk-RJIPFWW7.js.map → chunk-D4RP2H6A.js.map} +1 -1
- package/dist/{chunk-K5TPJVOK.js → chunk-DMBUUJGU.js} +3 -3
- package/dist/{chunk-K5TPJVOK.js.map → chunk-DMBUUJGU.js.map} +1 -1
- package/dist/{chunk-6JNW43SE.js → chunk-DQAFYVCX.js} +5 -5
- package/dist/{chunk-6JNW43SE.js.map → chunk-DQAFYVCX.js.map} +1 -1
- package/dist/{chunk-RHTVKBRC.cjs → chunk-EXA5HCX7.cjs} +9 -9
- package/dist/{chunk-RHTVKBRC.cjs.map → chunk-EXA5HCX7.cjs.map} +1 -1
- package/dist/{chunk-RWQH5EO5.cjs → chunk-F3TVVAYG.cjs} +11 -11
- package/dist/{chunk-RWQH5EO5.cjs.map → chunk-F3TVVAYG.cjs.map} +1 -1
- package/dist/{chunk-HFWO37RY.cjs → chunk-FCDKWHIV.cjs} +8 -8
- package/dist/{chunk-HFWO37RY.cjs.map → chunk-FCDKWHIV.cjs.map} +1 -1
- package/dist/{chunk-FSDI3NJV.js → chunk-FWKYNE3A.js} +3 -3
- package/dist/{chunk-FSDI3NJV.js.map → chunk-FWKYNE3A.js.map} +1 -1
- package/dist/{chunk-HMB2RIEE.js → chunk-GAXX6YK5.js} +4 -4
- package/dist/{chunk-HMB2RIEE.js.map → chunk-GAXX6YK5.js.map} +1 -1
- package/dist/{chunk-ZFSFOD5W.cjs → chunk-H2DHSBPO.cjs} +6 -6
- package/dist/{chunk-ZFSFOD5W.cjs.map → chunk-H2DHSBPO.cjs.map} +1 -1
- package/dist/{chunk-4L62MAZA.js → chunk-I7HB3FBC.js} +5 -5
- package/dist/{chunk-4L62MAZA.js.map → chunk-I7HB3FBC.js.map} +1 -1
- package/dist/{chunk-YJHB2GHQ.js → chunk-IGIAGPC5.js} +3 -3
- package/dist/{chunk-YJHB2GHQ.js.map → chunk-IGIAGPC5.js.map} +1 -1
- package/dist/{chunk-RQJRVKAH.js → chunk-ILD5ZZHH.js} +3 -3
- package/dist/{chunk-RQJRVKAH.js.map → chunk-ILD5ZZHH.js.map} +1 -1
- package/dist/{chunk-FV7R2LLD.js → chunk-IN7SCXMD.js} +4 -4
- package/dist/{chunk-FV7R2LLD.js.map → chunk-IN7SCXMD.js.map} +1 -1
- package/dist/chunk-IRBGJP2E.js +170 -0
- package/dist/chunk-IRBGJP2E.js.map +1 -0
- package/dist/{chunk-3SOKHPAO.js → chunk-J6A72I5K.js} +4 -4
- package/dist/{chunk-3SOKHPAO.js.map → chunk-J6A72I5K.js.map} +1 -1
- package/dist/chunk-JRTD6Y34.cjs +148 -0
- package/dist/chunk-JRTD6Y34.cjs.map +1 -0
- package/dist/{chunk-ASNAQ35U.js → chunk-K7NVM76W.js} +4 -4
- package/dist/{chunk-ASNAQ35U.js.map → chunk-K7NVM76W.js.map} +1 -1
- package/dist/chunk-KNUMF6K2.cjs +156 -0
- package/dist/chunk-KNUMF6K2.cjs.map +1 -0
- package/dist/chunk-KQJZJADP.js +146 -0
- package/dist/chunk-KQJZJADP.js.map +1 -0
- package/dist/{chunk-YOLF5DYU.js → chunk-KRLKDJPM.js} +4 -4
- package/dist/{chunk-YOLF5DYU.js.map → chunk-KRLKDJPM.js.map} +1 -1
- package/dist/{chunk-6EGHZDZI.cjs → chunk-KSCMLSUI.cjs} +15 -15
- package/dist/{chunk-6EGHZDZI.cjs.map → chunk-KSCMLSUI.cjs.map} +1 -1
- package/dist/{chunk-4H2LGLGI.cjs → chunk-KT4LY42Y.cjs} +11 -11
- package/dist/{chunk-4H2LGLGI.cjs.map → chunk-KT4LY42Y.cjs.map} +1 -1
- package/dist/chunk-KX4ZBUHB.cjs +211 -0
- package/dist/chunk-KX4ZBUHB.cjs.map +1 -0
- package/dist/{chunk-2MWA7H6J.js → chunk-KXJOIVL5.js} +5 -5
- package/dist/{chunk-2MWA7H6J.js.map → chunk-KXJOIVL5.js.map} +1 -1
- package/dist/{chunk-4ORSJM2I.js → chunk-LFV46XLH.js} +4 -4
- package/dist/{chunk-4ORSJM2I.js.map → chunk-LFV46XLH.js.map} +1 -1
- package/dist/{chunk-MPQECPE3.js → chunk-LKSKGQX7.js} +3 -3
- package/dist/{chunk-MPQECPE3.js.map → chunk-LKSKGQX7.js.map} +1 -1
- package/dist/{chunk-OAL5RS2X.cjs → chunk-LQ26WSLH.cjs} +10 -10
- package/dist/{chunk-OAL5RS2X.cjs.map → chunk-LQ26WSLH.cjs.map} +1 -1
- package/dist/{chunk-LK2A3HBT.js → chunk-LROB73B4.js} +4 -4
- package/dist/{chunk-LK2A3HBT.js.map → chunk-LROB73B4.js.map} +1 -1
- package/dist/{chunk-XWCY67K5.js → chunk-LXBBM6IF.js} +4 -4
- package/dist/{chunk-XWCY67K5.js.map → chunk-LXBBM6IF.js.map} +1 -1
- package/dist/{chunk-RFEKSP62.js → chunk-MCORUYWB.js} +3 -3
- package/dist/{chunk-RFEKSP62.js.map → chunk-MCORUYWB.js.map} +1 -1
- package/dist/{chunk-F5AOBHQY.js → chunk-MJFCMUIY.js} +4 -4
- package/dist/{chunk-F5AOBHQY.js.map → chunk-MJFCMUIY.js.map} +1 -1
- package/dist/{chunk-PQCHNZHM.cjs → chunk-NHSPO4BN.cjs} +9 -9
- package/dist/{chunk-PQCHNZHM.cjs.map → chunk-NHSPO4BN.cjs.map} +1 -1
- package/dist/{chunk-DKXW2FQC.cjs → chunk-NR5NQ6TV.cjs} +10 -10
- package/dist/{chunk-DKXW2FQC.cjs.map → chunk-NR5NQ6TV.cjs.map} +1 -1
- package/dist/{chunk-GAWIUMAK.cjs → chunk-NRMQMPUE.cjs} +7 -7
- package/dist/{chunk-GAWIUMAK.cjs.map → chunk-NRMQMPUE.cjs.map} +1 -1
- package/dist/{chunk-LIY7MYRG.js → chunk-NW4JBVY2.js} +4 -4
- package/dist/{chunk-LIY7MYRG.js.map → chunk-NW4JBVY2.js.map} +1 -1
- package/dist/{chunk-WVQVGQJO.cjs → chunk-OLY33H6E.cjs} +7 -7
- package/dist/{chunk-WVQVGQJO.cjs.map → chunk-OLY33H6E.cjs.map} +1 -1
- package/dist/{chunk-7ZPHLIFP.cjs → chunk-OUQ63IJQ.cjs} +6 -6
- package/dist/{chunk-7ZPHLIFP.cjs.map → chunk-OUQ63IJQ.cjs.map} +1 -1
- package/dist/{chunk-TVDQNLGJ.js → chunk-PHFBF5ON.js} +3 -3
- package/dist/{chunk-TVDQNLGJ.js.map → chunk-PHFBF5ON.js.map} +1 -1
- package/dist/{chunk-NG7DRWWT.cjs → chunk-PL3M46GS.cjs} +6 -6
- package/dist/{chunk-NG7DRWWT.cjs.map → chunk-PL3M46GS.cjs.map} +1 -1
- package/dist/{chunk-MY4KMVJ5.cjs → chunk-PNHDHEBQ.cjs} +8 -8
- package/dist/{chunk-MY4KMVJ5.cjs.map → chunk-PNHDHEBQ.cjs.map} +1 -1
- package/dist/{chunk-XN6YS55F.cjs → chunk-PX7MLSIH.cjs} +377 -124
- package/dist/chunk-PX7MLSIH.cjs.map +1 -0
- package/dist/{chunk-4WQUX2B4.cjs → chunk-QCEC2KBW.cjs} +12 -12
- package/dist/{chunk-4WQUX2B4.cjs.map → chunk-QCEC2KBW.cjs.map} +1 -1
- package/dist/{chunk-IRUIWMH6.js → chunk-QRVTY6UU.js} +3 -3
- package/dist/{chunk-IRUIWMH6.js.map → chunk-QRVTY6UU.js.map} +1 -1
- package/dist/chunk-QS6GR2CQ.js +154 -0
- package/dist/chunk-QS6GR2CQ.js.map +1 -0
- package/dist/{chunk-G6R6MSRF.cjs → chunk-QVQKYVD2.cjs} +8 -8
- package/dist/{chunk-G6R6MSRF.cjs.map → chunk-QVQKYVD2.cjs.map} +1 -1
- package/dist/{chunk-JNQ4NL3R.cjs → chunk-RIJPMRKC.cjs} +8 -8
- package/dist/{chunk-JNQ4NL3R.cjs.map → chunk-RIJPMRKC.cjs.map} +1 -1
- package/dist/{chunk-XE5ZYFGM.js → chunk-RKX7GKOU.js} +4 -4
- package/dist/{chunk-XE5ZYFGM.js.map → chunk-RKX7GKOU.js.map} +1 -1
- package/dist/{chunk-ECB3UPTC.cjs → chunk-ROUFAI5M.cjs} +11 -11
- package/dist/{chunk-ECB3UPTC.cjs.map → chunk-ROUFAI5M.cjs.map} +1 -1
- package/dist/{chunk-NGKUI7XE.cjs → chunk-S52RCLDQ.cjs} +12 -12
- package/dist/{chunk-NGKUI7XE.cjs.map → chunk-S52RCLDQ.cjs.map} +1 -1
- package/dist/{chunk-SXVMEC6N.cjs → chunk-SEOHPUXV.cjs} +12 -12
- package/dist/{chunk-SXVMEC6N.cjs.map → chunk-SEOHPUXV.cjs.map} +1 -1
- package/dist/{chunk-ZY7ETQD6.js → chunk-SI4VJK4A.js} +3 -3
- package/dist/{chunk-ZY7ETQD6.js.map → chunk-SI4VJK4A.js.map} +1 -1
- package/dist/{chunk-UFMPALRH.js → chunk-SUB5WML4.js} +3 -3
- package/dist/{chunk-UFMPALRH.js.map → chunk-SUB5WML4.js.map} +1 -1
- package/dist/{chunk-R6ZDSXN7.cjs → chunk-T5NDUMLD.cjs} +8 -8
- package/dist/{chunk-R6ZDSXN7.cjs.map → chunk-T5NDUMLD.cjs.map} +1 -1
- package/dist/{chunk-YDQDZWZ7.cjs → chunk-TKHYY3B5.cjs} +6 -6
- package/dist/{chunk-YDQDZWZ7.cjs.map → chunk-TKHYY3B5.cjs.map} +1 -1
- package/dist/{chunk-66BHM3UN.cjs → chunk-TMQ2V5B2.cjs} +10 -10
- package/dist/{chunk-66BHM3UN.cjs.map → chunk-TMQ2V5B2.cjs.map} +1 -1
- package/dist/{chunk-3V64BDKG.cjs → chunk-TNIMRV3N.cjs} +13 -13
- package/dist/{chunk-3V64BDKG.cjs.map → chunk-TNIMRV3N.cjs.map} +1 -1
- package/dist/{chunk-7PNCJ4OQ.js → chunk-TUPPYHUR.js} +3 -3
- package/dist/{chunk-7PNCJ4OQ.js.map → chunk-TUPPYHUR.js.map} +1 -1
- package/dist/{chunk-6UWYKNFN.cjs → chunk-U456ET3M.cjs} +12 -12
- package/dist/{chunk-6UWYKNFN.cjs.map → chunk-U456ET3M.cjs.map} +1 -1
- package/dist/{chunk-6E6ZDWZD.cjs → chunk-UMS2MPYC.cjs} +10 -10
- package/dist/{chunk-6E6ZDWZD.cjs.map → chunk-UMS2MPYC.cjs.map} +1 -1
- package/dist/{chunk-YZQROIJY.js → chunk-UNQBXGX5.js} +3 -3
- package/dist/{chunk-YZQROIJY.js.map → chunk-UNQBXGX5.js.map} +1 -1
- package/dist/{chunk-BT5H3WMI.js → chunk-V3AENTZB.js} +4 -4
- package/dist/{chunk-BT5H3WMI.js.map → chunk-V3AENTZB.js.map} +1 -1
- package/dist/{chunk-5J26EN5I.js → chunk-V5LLTYOY.js} +4 -4
- package/dist/{chunk-5J26EN5I.js.map → chunk-V5LLTYOY.js.map} +1 -1
- package/dist/chunk-VALFF4NG.cjs +124 -0
- package/dist/chunk-VALFF4NG.cjs.map +1 -0
- package/dist/{chunk-V45C74EB.js → chunk-VJT5UA7J.js} +4 -4
- package/dist/{chunk-V45C74EB.js.map → chunk-VJT5UA7J.js.map} +1 -1
- package/dist/{chunk-UMIJYYF3.cjs → chunk-W626EAS5.cjs} +112 -13
- package/dist/chunk-W626EAS5.cjs.map +1 -0
- package/dist/{chunk-PVPTFMJJ.js → chunk-WHGNA44O.js} +4 -4
- package/dist/{chunk-PVPTFMJJ.js.map → chunk-WHGNA44O.js.map} +1 -1
- package/dist/{chunk-TWSWD4PU.js → chunk-WIA4MDRX.js} +3 -3
- package/dist/{chunk-TWSWD4PU.js.map → chunk-WIA4MDRX.js.map} +1 -1
- package/dist/{chunk-47EP245Y.cjs → chunk-WOYVHVXC.cjs} +7 -7
- package/dist/{chunk-47EP245Y.cjs.map → chunk-WOYVHVXC.cjs.map} +1 -1
- package/dist/{chunk-CDS2NXGT.cjs → chunk-X5SG6MFS.cjs} +4 -4
- package/dist/{chunk-CDS2NXGT.cjs.map → chunk-X5SG6MFS.cjs.map} +1 -1
- package/dist/{chunk-MYXLKVJE.js → chunk-XB5K7OYD.js} +361 -108
- package/dist/chunk-XB5K7OYD.js.map +1 -0
- package/dist/{chunk-DX4FBN3I.js → chunk-XIVC32HU.js} +112 -13
- package/dist/chunk-XIVC32HU.js.map +1 -0
- package/dist/{chunk-GPSNBZPX.js → chunk-XQ7BTVV3.js} +4 -4
- package/dist/{chunk-GPSNBZPX.js.map → chunk-XQ7BTVV3.js.map} +1 -1
- package/dist/{chunk-BYB3LQAT.cjs → chunk-YMOQGTGJ.cjs} +9 -9
- package/dist/{chunk-BYB3LQAT.cjs.map → chunk-YMOQGTGJ.cjs.map} +1 -1
- package/dist/{chunk-EHKHXQ46.cjs → chunk-YOK3JGW5.cjs} +10 -10
- package/dist/{chunk-EHKHXQ46.cjs.map → chunk-YOK3JGW5.cjs.map} +1 -1
- package/dist/{chunk-XKERO5K2.js → chunk-YUIHMAHA.js} +3 -3
- package/dist/{chunk-XKERO5K2.js.map → chunk-YUIHMAHA.js.map} +1 -1
- package/dist/chunk-ZBWBLCY2.js +209 -0
- package/dist/chunk-ZBWBLCY2.js.map +1 -0
- package/dist/{chunk-OAIMES5S.cjs → chunk-ZCLW4B5S.cjs} +17 -17
- package/dist/{chunk-OAIMES5S.cjs.map → chunk-ZCLW4B5S.cjs.map} +1 -1
- package/dist/combo.cjs +9 -9
- package/dist/combo.js +4 -4
- package/dist/custom.cjs +10 -10
- package/dist/custom.js +5 -5
- package/dist/donut.cjs +11 -11
- package/dist/donut.js +6 -6
- package/dist/dumbbell.cjs +10 -10
- package/dist/dumbbell.js +5 -5
- package/dist/funnel.cjs +10 -10
- package/dist/funnel.js +5 -5
- package/dist/gauge.cjs +10 -10
- package/dist/gauge.js +5 -5
- package/dist/geo.cjs +12 -12
- package/dist/geo.js +5 -5
- package/dist/graph-type-Cyb5U1y2.d.ts +5 -0
- package/dist/graph-type-DRbMI2E9.d.cts +5 -0
- package/dist/graph.cjs +10 -10
- package/dist/graph.d.cts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/graph.js +5 -5
- package/dist/heatmap.cjs +10 -10
- package/dist/heatmap.js +5 -5
- package/dist/histogram.cjs +9 -9
- package/dist/histogram.js +4 -4
- package/dist/horizontal-bar.cjs +9 -9
- package/dist/horizontal-bar.js +4 -4
- package/dist/index.cjs +242 -192
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +123 -93
- package/dist/index.js.map +1 -1
- package/dist/kagi.cjs +10 -10
- package/dist/kagi.js +5 -5
- package/dist/line.cjs +9 -9
- package/dist/line.js +4 -4
- package/dist/lines.cjs +10 -10
- package/dist/lines.js +5 -5
- package/dist/lollipop.cjs +9 -9
- package/dist/lollipop.js +4 -4
- package/dist/matrix.cjs +10 -10
- package/dist/matrix.js +5 -5
- package/dist/ohlc.cjs +9 -9
- package/dist/ohlc.js +4 -4
- package/dist/pack-type-CdtdkPBR.d.cts +10 -0
- package/dist/pack-type-Dm27RLC-.d.ts +10 -0
- package/dist/pack.cjs +33 -0
- package/dist/pack.cjs.map +1 -0
- package/dist/pack.d.cts +8 -0
- package/dist/pack.d.ts +8 -0
- package/dist/pack.js +12 -0
- package/dist/pack.js.map +1 -0
- package/dist/parallel.cjs +10 -10
- package/dist/parallel.js +5 -5
- package/dist/pictorialbar.cjs +10 -10
- package/dist/pictorialbar.js +5 -5
- package/dist/pie.cjs +11 -11
- package/dist/pie.js +6 -6
- package/dist/pillar-type-CIcSuZdu.d.cts +11 -0
- package/dist/pillar-type-DNpR_98h.d.ts +11 -0
- package/dist/pillar.cjs +33 -0
- package/dist/pillar.cjs.map +1 -0
- package/dist/pillar.d.cts +8 -0
- package/dist/pillar.d.ts +8 -0
- package/dist/pillar.js +12 -0
- package/dist/pillar.js.map +1 -0
- package/dist/polar.cjs +11 -11
- package/dist/polar.js +6 -6
- package/dist/radar.cjs +10 -10
- package/dist/radar.js +5 -5
- package/dist/radialbar.cjs +10 -10
- package/dist/radialbar.js +5 -5
- package/dist/range.cjs +9 -9
- package/dist/range.js +4 -4
- package/dist/renko.cjs +10 -10
- package/dist/renko.js +5 -5
- package/dist/sankey.cjs +10 -10
- package/dist/sankey.js +5 -5
- package/dist/scatter.cjs +9 -9
- package/dist/scatter.js +4 -4
- package/dist/sparkline.cjs +9 -9
- package/dist/sparkline.js +4 -4
- package/dist/stacked-bar.cjs +9 -9
- package/dist/stacked-bar.js +4 -4
- package/dist/step.cjs +10 -10
- package/dist/step.js +5 -5
- package/dist/sunburst.cjs +11 -11
- package/dist/sunburst.js +6 -6
- package/dist/themeriver.cjs +10 -10
- package/dist/themeriver.js +5 -5
- package/dist/tree.cjs +10 -10
- package/dist/tree.js +5 -5
- package/dist/treemap.cjs +10 -10
- package/dist/treemap.js +5 -5
- package/dist/violin-type-6KmTiJNp.d.cts +5 -0
- package/dist/violin-type-BOmiulQc.d.ts +5 -0
- package/dist/violin.cjs +33 -0
- package/dist/violin.cjs.map +1 -0
- package/dist/violin.d.cts +8 -0
- package/dist/violin.d.ts +8 -0
- package/dist/violin.js +12 -0
- package/dist/violin.js.map +1 -0
- package/dist/volume.cjs +9 -9
- package/dist/volume.js +4 -4
- package/dist/voronoi-type-BU5WnrcT.d.cts +12 -0
- package/dist/voronoi-type-D7n4mFNp.d.ts +12 -0
- package/dist/voronoi.cjs +33 -0
- package/dist/voronoi.cjs.map +1 -0
- package/dist/voronoi.d.cts +8 -0
- package/dist/voronoi.d.ts +8 -0
- package/dist/voronoi.js +12 -0
- package/dist/voronoi.js.map +1 -0
- package/dist/waterfall.cjs +9 -9
- package/dist/waterfall.js +4 -4
- package/dist/wordcloud-type-C6X9ORRR.d.ts +11 -0
- package/dist/wordcloud-type-CCm8rWK7.d.cts +11 -0
- package/dist/wordcloud.cjs +33 -0
- package/dist/wordcloud.cjs.map +1 -0
- package/dist/wordcloud.d.cts +8 -0
- package/dist/wordcloud.d.ts +8 -0
- package/dist/wordcloud.js +12 -0
- package/dist/wordcloud.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-DX4FBN3I.js.map +0 -1
- package/dist/chunk-MYXLKVJE.js.map +0 -1
- package/dist/chunk-UMIJYYF3.cjs.map +0 -1
- package/dist/chunk-XN6YS55F.cjs.map +0 -1
- package/dist/graph-type-Bg04GFeS.d.ts +0 -15
- package/dist/graph-type-DF-vww8T.d.cts +0 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/graph/parse.ts","../src/charts/graph/text-measure.ts","../src/charts/graph/shapes.ts","../src/charts/graph/edges.ts","../src/charts/graph/layout-force.ts","../src/charts/graph/layout-hierarchy.ts","../src/charts/graph/layout-circular.ts","../src/charts/graph/graph-type.ts"],"names":["circle","PathBuilder","path","rect","text","line","prepareNoAxes","forceLayout","group"],"mappings":";;;;;;AAYO,SAAS,cAAA,CACd,MACA,OAAA,EACsD;AACtD,EAAA,MAAM,IAAA,GAAO,OAAA;AACb,EAAA,MAAM,YAAA,GAA0B,KAAK,SAAA,IAAa,MAAA;AAGlD,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,EAAO;AAC5B,IAAA,OAAO,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,YAAY,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,IAAA;AAAA,IAC3B,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,QAAG,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,IAAI;AAAA,GACrD;AACA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,kBAAA,CAAmB,MAAM,YAAY,CAAA;AAAA,EAC9C;AAGA,EAAA,OAAO,oBAAA,CAAqB,MAAM,YAAY,CAAA;AAChD;AAMA,SAAS,SACP,EAAA,EACA,KAAA,EACA,OACA,KAAA,EACA,KAAA,EACA,OACA,GAAA,EACW;AACX,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG,CAAA;AAAA,IACH,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,SACP,MAAA,EACA,MAAA,EACA,MAAA,EACA,KAAA,EACA,OACA,KAAA,EACW;AACX,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAO,KAAA,EAAM;AACvD;AAMA,SAAS,eAAA,CACP,KAAA,EACA,IAAA,EACA,YAAA,EACsD;AACtD,EAAA,MAAM,aAA0B,EAAC;AACjC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAG1C,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,KAAA,EAAO;AAChC,MAAA,MAAM,MAAM,UAAA,CAAW,MAAA;AACvB,MAAA,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,EAAA,EAAI,GAAG,CAAA;AAC7B,MAAA,UAAA,CAAW,IAAA;AAAA,QACT,QAAA;AAAA,UACE,OAAA,CAAQ,EAAA;AAAA,UACR,OAAA,CAAQ,SAAS,OAAA,CAAQ,EAAA;AAAA,UACzB,GAAA;AAAA,UACA,CAAA;AAAA,UACA,QAAQ,KAAA,IAAS,YAAA;AAAA,UACjB,QAAQ,KAAA,IAAS,IAAA;AAAA,UACjB,QAAQ,GAAA,IAAO;AAAA;AACjB,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAA0B,EAAC;AAEjC,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,KAAA,EAAO;AAEhC,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClC,QAAA,MAAM,MAAM,UAAA,CAAW,MAAA;AACvB,QAAA,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AACjC,QAAA,UAAA,CAAW,IAAA;AAAA,UACT,QAAA,CAAS,QAAQ,MAAA,EAAQ,OAAA,CAAQ,QAAQ,GAAA,EAAK,CAAA,EAAG,YAAA,EAAc,IAAA,EAAM,IAAI;AAAA,SAC3E;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClC,QAAA,MAAM,MAAM,UAAA,CAAW,MAAA;AACvB,QAAA,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AACjC,QAAA,UAAA,CAAW,IAAA;AAAA,UACT,QAAA,CAAS,QAAQ,MAAA,EAAQ,OAAA,CAAQ,QAAQ,GAAA,EAAK,CAAA,EAAG,YAAA,EAAc,IAAA,EAAM,IAAI;AAAA,SAC3E;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAC3C,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAE3C,MAAA,UAAA,CAAW,IAAA;AAAA,QACT,QAAA;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAQ,MAAA,IAAU,CAAA;AAAA,UAClB,QAAQ,KAAA,IAAS,IAAA;AAAA,UACjB,QAAQ,KAAA,IAAS,OAAA;AAAA,UACjB,QAAQ,KAAA,IAAS;AAAA;AACnB,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,YAAY,UAAA,EAAW;AAClC;AAMA,IAAM,QAAA,GAAW,gBAAA;AAEjB,SAAS,kBAAA,CACP,MACA,YAAA,EACsD;AACtD,EAAA,MAAM,aAA0B,EAAC;AACjC,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,MAAM,aAA0B,EAAC;AAEjC,EAAA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,IAAA,IAAI,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,GAAA;AAC9B,IAAA,GAAA,GAAM,UAAA,CAAW,MAAA;AACjB,IAAA,WAAA,CAAY,GAAA,CAAI,MAAM,GAAG,CAAA;AACzB,IAAA,UAAA,CAAW,IAAA,CAAK,SAAS,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA,EAAG,YAAA,EAAc,IAAA,EAAM,IAAI,CAAC,CAAA;AACtE,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,MAAA,IAAU,KAAK,MAAA,EAAQ;AAChC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAEtB,IAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AACvB,IAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AACvB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAEnC,IAAA,MAAM,MAAA,GAAS,gBAAgB,OAAO,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,gBAAgB,OAAO,CAAA;AAGtC,IAAA,UAAA,CAAW,MAAM,EAAG,KAAA,IAAS,MAAA;AAC7B,IAAA,UAAA,CAAW,MAAM,EAAG,KAAA,IAAS,MAAA;AAE7B,IAAA,UAAA,CAAW,IAAA,CAAK,SAAS,MAAA,EAAQ,MAAA,EAAQ,QAAQ,IAAA,EAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,EAAE,YAAY,UAAA,EAAW;AAClC;AAMA,SAAS,oBAAA,CACP,MACA,YAAA,EACsD;AACtD,EAAA,MAAM,aAA0B,EAAC;AAGjC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,IAAK,CAAC,CAAA;AACrD,IAAA,UAAA,CAAW,IAAA,CAAK,SAAS,IAAA,EAAM,IAAA,EAAM,GAAG,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,aAA0B,EAAC;AAGjC,EAAA,IAAI,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA,IAAK,KAAK,MAAA,CAAO,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACvE,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AACzB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC1C,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAChC,QAAA,IAAI,SAAS,CAAA,EAAG;AACd,UAAA,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG,CAAA,EAAG,QAAQ,IAAA,EAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,YAAY,UAAA,EAAW;AAClC;;;AChOA,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,SAAA,GAAY,EAAA;AAMX,SAAS,eAAA,CACd,KAAA,EACA,QAAA,EACA,KAAA,EACmC;AACnC,EAAA,MAAM,YAAY,QAAA,GAAW,gBAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,SAAA;AACjC,EAAA,MAAM,aAAa,QAAA,GAAW,GAAA;AAE9B,EAAA,IAAI,CAAA,GAAI,YAAY,SAAA,GAAY,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,aAAa,SAAA,GAAY,CAAA;AAGjC,EAAA,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAE,CAAA;AAClB,EAAA,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAE,CAAA;AAElB,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,QAAA,EAAU;AAEb,MAAA,MAAM,IAAI,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AACjC,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,IAC/B;AAAA,IACA,KAAK,SAAA,EAAW;AAEd,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,GAAI,IAAA,EAAM,MAAA,EAAQ,IAAI,IAAA,EAAK;AAAA,IAC7C;AAAA,IACA,KAAK,SAAA,EAAW;AAEd,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,GAAI,IAAA,EAAM,MAAA,EAAQ,IAAI,IAAA,EAAK;AAAA,IAC7C;AAAA,IACA,KAAK,SAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA;AAEnC;;;ACpCO,SAAS,eAAA,CACd,IAAA,EACA,KAAA,EACA,KAAA,EACc;AACd,EAAA,MAAM,KAAK,IAAA,CAAK,CAAA;AAChB,EAAA,MAAM,KAAK,IAAA,CAAK,CAAA;AAChB,EAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA;AAEf,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,KAAA,EAAO,oBAAA;AAAA,IACP,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,IAAA;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,WAAA,EAAa,GAAA;AAAA,IACb,eAAe,IAAA,CAAK,KAAA;AAAA,IACpB,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,CAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAW,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA;AAAA,GACzC;AAEA,EAAA,IAAI,SAAA;AAEJ,EAAA,QAAQ,KAAK,KAAA;AAAO,IAClB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AAC3B,MAAA,SAAA,GAAYA,yBAAO,EAAA,EAAI,EAAA,EAAI,GAAG,EAAE,GAAG,WAAW,CAAA;AAC9C,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,EAAA,GAAK,IAAIC,6BAAA,EAAY;AAC3B,MAAA,EAAA,CAAG,MAAA,CAAO,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAC,EACrB,MAAA,CAAO,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA,CACrB,OAAO,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAC,CAAA,CACrB,MAAA,CAAO,KAAK,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA,CACrB,KAAA,EAAM;AACT,MAAA,SAAA,GAAYC,uBAAK,EAAA,CAAG,KAAA,IAAS,EAAE,GAAG,WAAW,CAAA;AAC7C,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,EAAA,GAAK,IAAID,6BAAA,EAAY;AAE3B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,QAAA,MAAM,KAAA,GAAS,IAAA,CAAK,EAAA,GAAK,GAAA,IAAQ,CAAA,GAAI,EAAA,CAAA;AACrC,QAAA,MAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AACnC,QAAA,MAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AACnC,QAAA,IAAI,CAAA,KAAM,CAAA,EAAG,EAAA,CAAG,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA,aACxB,EAAA,CAAG,MAAA,CAAO,EAAA,EAAI,EAAE,CAAA;AAAA,MACvB;AACA,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,SAAA,GAAYC,uBAAK,EAAA,CAAG,KAAA,IAAS,EAAE,GAAG,WAAW,CAAA;AAC7C,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,SAAA,GAAYC,sBAAA,CAAK,KAAK,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA,EAAG;AAAA,QAC7C,GAAG,SAAA;AAAA,QACH,IAAI,CAAA,GAAI;AAAA,OACT,CAAA;AACD,MAAA;AAAA,IACF;AAAA;AAAA,IAGA,SAAS;AACP,MAAA,SAAA,GAAYA,sBAAA,CAAK,KAAK,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA,EAAG;AAAA,QAC7C,GAAG,SAAA;AAAA,QACH,EAAA,EAAI;AAAA,OACL,CAAA;AACD,MAAA;AAAA,IACF;AAAA;AAGF,EAAA,MAAM,SAAA,GAAYC,sBAAA,CAAK,EAAA,EAAI,EAAA,EAAI,KAAK,KAAA,EAAO;AAAA,IACzC,KAAA,EAAO,qBAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY,QAAA;AAAA,IACZ,gBAAA,EAAkB,SAAA;AAAA,IAClB,UAAU,KAAA,CAAM,aAAA;AAAA,IAChB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,OAAO,CAAC,WAAW,SAAS,CAAA;AAC9B;AAOA,IAAM,GAAA,GAAM,CAAA;AAEL,SAAS,kBAAA,CACd,MACA,KAAA,EAC0B;AAC1B,EAAA,MAAM,KAAK,IAAA,CAAK,CAAA;AAChB,EAAA,MAAM,KAAK,IAAA,CAAK,CAAA;AAChB,EAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA;AACf,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAE1B,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,EAAA;AAEJ,EAAA,QAAQ,KAAK,KAAA;AAAO,IAClB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AAC3B,MAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,MAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AAQd,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,EAAA,CAAA;AACpD,MAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,MAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AAId,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,EAAA,GAAK,YAAY,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,KAAA,EAAO,KAAK,GAAG,CAAA;AACtD,MAAA,EAAA,GAAK,EAAA,CAAG,CAAA;AACR,MAAA,EAAA,GAAK,EAAA,CAAG,CAAA;AACR,MAAA;AAAA,IACF;AAAA;AAAA,IAGA,SAAS;AACP,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAErC,MAAA,IAAI,CAAA,GAAA,CAAM,SAAS,CAAA,GAAI,IAAA,CAAK,MAAO,CAAA,GAAI,IAAA,CAAK,EAAA,KAAO,CAAA,GAAI,IAAA,CAAK,EAAA,CAAA;AAE5D,MAAA,IAAI,IAAI,WAAA,IAAe,CAAA,IAAK,CAAA,GAAI,IAAA,CAAK,KAAK,WAAA,EAAa;AAErD,QAAA,MAAM,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC3B,QAAA,EAAA,GAAK,EAAA,GAAK,EAAA;AACV,QAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AAAA,MAChB,CAAA,MAAA,IAAW,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,WAAA,EAAa;AAEpC,QAAA,MAAM,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC3B,QAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,QAAA,EAAA,GAAK,EAAA,GAAK,EAAA;AAAA,MACZ,CAAA,MAAA,IAAW,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,WAAA,EAAa;AAEpC,QAAA,MAAM,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC3B,QAAA,EAAA,GAAK,EAAA,GAAK,EAAA;AACV,QAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AAAA,MAChB,CAAA,MAAO;AAEL,QAAA,MAAM,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC3B,QAAA,EAAA,GAAK,KAAK,CAAA,GAAI,GAAA;AACd,QAAA,EAAA,GAAK,EAAA,GAAK,EAAA;AAAA,MACZ;AACA,MAAA;AAAA,IACF;AAAA;AAIF,EAAA,EAAA,IAAM,GAAA,GAAM,GAAA;AACZ,EAAA,EAAA,IAAM,GAAA,GAAM,GAAA;AAEZ,EAAA,OAAO,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAG;AACxB;AAMA,SAAS,YACP,EAAA,EACA,EAAA,EACA,IACA,EAAA,EACA,MAAA,EACA,KACA,GAAA,EAC0B;AAE1B,EAAA,MAAM,QAAyC,EAAC;AAChD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,CAAA,GAAK,IAAA,CAAK,EAAA,GAAK,GAAA,IAAQ,CAAA,GAAI,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,KAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,EAAG,KAAK,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAG,CAAA;AAAA,EACnE;AAIA,EAAA,IAAI,KAAA,GAAQ,QAAA;AACZ,EAAA,IAAI,MAAA,GAAS,EAAE,CAAA,EAAG,EAAA,GAAK,KAAK,GAAA,EAAK,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,GAAA,EAAI;AAElD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,KAAA,CAAA,CAAO,CAAA,GAAI,CAAA,IAAK,CAAC,CAAA;AAI5B,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAA;AACrB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAA;AAErB,IAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,EAAA,GAAK,GAAA,GAAM,EAAA;AAC/B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,KAAA,EAAO;AAE7B,IAAA,MAAM,CAAA,GAAA,CAAA,CAAM,GAAG,CAAA,GAAI,EAAA,IAAM,MAAM,EAAA,CAAG,CAAA,GAAI,MAAM,EAAA,IAAM,KAAA;AAClD,IAAA,MAAM,CAAA,GAAI,GAAA,KAAQ,CAAA,GAAA,CACZ,EAAA,GAAK,CAAA,GAAI,GAAA,GAAO,EAAA,CAAG,CAAA,IAAK,EAAA,GAAA,CACxB,EAAA,GAAK,CAAA,GAAI,GAAA,GAAO,GAAG,CAAA,IAAK,EAAA;AAE9B,IAAA,IAAI,CAAA,GAAI,QAAQ,CAAA,IAAK,KAAA,IAAS,KAAK,CAAA,GAAI,IAAA,IAAQ,IAAI,KAAA,EAAO;AACxD,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,MAAA,GAAS,EAAE,GAAG,EAAA,GAAK,CAAA,GAAI,KAAK,CAAA,EAAG,EAAA,GAAK,IAAI,GAAA,EAAI;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC5OA,SAAS,eAAA,CACP,IAAA,EACA,IAAA,EACA,KAAA,EACA,MACA,KAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAG3B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,GAAO,IAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,GAAO,IAAA;AAG5B,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,GAAO,IAAA,GAAO,GAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,GAAO,GAAA;AAE5B,EAAA,MAAM,QAAQ,KAAA,GAAQ,KAAA;AACtB,EAAA,MAAM,QAAQ,KAAA,GAAQ,KAAA;AACtB,EAAA,MAAM,SAAS,KAAA,GAAQ,KAAA;AACvB,EAAA,MAAM,SAAS,KAAA,GAAQ,KAAA;AAEvB,EAAA,MAAM,EAAA,GAAK,IAAIH,6BAAA,EAAY;AAC3B,EAAA,EAAA,CAAG,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA,CACjB,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA,CACnB,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA,CACrB,KAAA,EAAM;AAET,EAAA,OAAOC,sBAAA,CAAK,EAAA,CAAG,KAAA,EAAM,EAAG;AAAA,IACtB,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR,CAAA;AACH;AAMO,SAAS,WAAA,CACd,KAAA,EACA,KAAA,EACA,OAAA,EACA,KAAA,EACc;AACd,EAAA,MAAM,SAAuB,EAAC;AAI9B,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAE1C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAK;AAGlB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,GAAI,IAAI,CAAA,EAAG,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,GAAA,EAAK,KAAK,CAAA;AAC3C,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,GAAA,EAAK,KAAA,GAAQ,KAAK,EAAE,CAAA;AAGnD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,IAAS,KAAA,CAAM,SAAA;AACtC,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,KAAA,EAAO,oBAAA;AAAA,MACP,MAAA,EAAQ,SAAA;AAAA,MACR,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,GAAG,CAAC,CAAA;AAAA,MACvD,eAAA,EACE,KAAK,KAAA,KAAU,QAAA,GACX,QACA,IAAA,CAAK,KAAA,KAAU,WACb,KAAA,GACA,MAAA;AAAA,MACR,OAAA,EAAS,GAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAGA,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI,MAAA,GAAA,CAAU,KAAA,CAAM,CAAA,GAAI,GAAA,CAAI,CAAA,IAAK,CAAA;AACjC,IAAA,IAAI,MAAA,GAAA,CAAU,KAAA,CAAM,CAAA,GAAI,GAAA,CAAI,CAAA,IAAK,CAAA;AAEjC,IAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,UAAA,IAAc,OAAA,CAAQ,cAAc,MAAA,EAAW;AAEvE,MAAA,MAAA,CAAO,IAAA,CAAKG,sBAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AAEL,MAAA,MAAM,OAAA,GACJ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAM,CAAA,GACjC,GAAA,GACA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,IAAK,CAAA;AACtC,MAAA,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,GAAA,GAAM,CAAC,CAAA;AAG9B,MAAA,MAAM,IAAA,GAAO,GAAA,GAAM,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,EAAA;AAEjC,MAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,GAAG,EAAE,CAAA;AAE3C,MAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,CAAA,GAAI,GAAA,CAAI,CAAA,IAAK,CAAA;AAC/B,MAAA,MAAM,EAAA,GAAA,CAAM,KAAA,CAAM,CAAA,GAAI,GAAA,CAAI,CAAA,IAAK,CAAA;AAG/B,MAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,IAAA,CAAK,EAAA,GAAK,CAAA;AACpC,MAAA,MAAM,KAAK,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,SAAS,IAAI,MAAA,GAAS,IAAA;AAC/C,MAAA,MAAM,KAAK,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,SAAS,IAAI,MAAA,GAAS,IAAA;AAE/C,MAAA,MAAM,EAAA,GAAK,IAAIJ,6BAAA,EAAY;AAC3B,MAAA,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA;AAEvD,MAAA,MAAA,CAAO,KAAKC,sBAAA,CAAK,EAAA,CAAG,KAAA,EAAM,EAAG,SAAS,CAAC,CAAA;AAIvC,MAAA,UAAA,GAAa,KAAK,KAAA,CAAM,GAAA,CAAI,IAAI,EAAA,EAAI,GAAA,CAAI,IAAI,EAAE,CAAA;AAG9C,MAAA,MAAA,GAAS,OAAO,KAAA,CAAM,CAAA,GAAI,GAAA,GAAM,EAAA,GAAK,OAAO,GAAA,CAAI,CAAA;AAChD,MAAA,MAAA,GAAS,OAAO,KAAA,CAAM,CAAA,GAAI,GAAA,GAAM,EAAA,GAAK,OAAO,GAAA,CAAI,CAAA;AAAA,IAClD;AAGA,IAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,EAAO;AAC5B,MAAA,MAAM,SAAA,GAAY,CAAA;AAClB,MAAA,MAAA,CAAO,IAAA,CAAK,gBAAgB,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,EAAG,UAAA,EAAY,SAAA,EAAW,SAAS,CAAC,CAAA;AAAA,IAC7E;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,MAAA,MAAM,EAAA,GAAK,MAAA;AACX,MAAA,MAAM,EAAA,GAAK,MAAA;AAGX,MAAA,MAAM,SAAA,GAAA,CAAa,KAAA,CAAM,aAAA,GAAgB,CAAA,IAAK,GAAA;AAC9C,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,SAAA,GAAY,CAAA;AAC3C,MAAA,MAAM,EAAA,GAAM,KAAA,CAAM,aAAA,GAAgB,CAAA,GAAK,CAAA;AAEvC,MAAA,MAAM,MAAA,GACJ,KAAA,CAAM,UAAA,KAAe,aAAA,GAAgB,SAAS,KAAA,CAAM,UAAA;AAEtD,MAAA,MAAA,CAAO,IAAA;AAAA,QACLC,sBAAA,CAAK,KAAK,EAAA,GAAK,CAAA,EAAG,KAAK,EAAA,GAAK,CAAA,EAAG,IAAI,EAAA,EAAI;AAAA,UACrC,IAAA,EAAM,MAAA;AAAA,UACN,EAAA,EAAI;AAAA,SACL;AAAA,OACH;AAEA,MAAA,MAAA,CAAO,IAAA;AAAA,QACLC,sBAAA,CAAK,EAAA,EAAI,EAAA,EAAI,IAAA,CAAK,KAAA,EAAO;AAAA,UACvB,MAAM,KAAA,CAAM,SAAA;AAAA,UACZ,UAAA,EAAY,QAAA;AAAA,UACZ,gBAAA,EAAkB,SAAA;AAAA,UAClB,QAAA,EAAU,MAAM,aAAA,GAAgB,CAAA;AAAA,UAChC,YAAY,KAAA,CAAM;AAAA,SACnB;AAAA,OACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC3JO,SAAS,WAAA,CACd,KAAA,EACA,KAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,IAAA;AAC7B,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,IAAI,MAAM,CAAA,EAAG;AAEb,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAIlC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA;AACpC,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,GAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA,GAAK,CAAA;AAClC,MAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,GAAA;AAC9C,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AAChC,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AACV,IAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AAAA,EACZ;AAGA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,EAAA,KAAO,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,EAAO,EAAA,CAAG,MAAM,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AACpF,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA;AAAA,IACb,IAAA,CAAK,IAAA,CAAM,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,SAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACrD,WAAA,GAAc;AAAA,GAChB;AACA,EAAA,MAAM,SAAA,GAAY,IAAI,CAAA,GAAI,GAAA;AAE1B,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,UAAA,EAAY,IAAA,EAAA,EAAQ;AAC5C,IAAA,MAAM,IAAA,GAAO,GAAA,IAAO,CAAA,GAAI,IAAA,GAAO,UAAA,CAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,GAAA;AAGjF,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AACV,MAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AAAA,IACZ;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,QAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAA;AACrB,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAA;AACrB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,EAAG,CAAC,CAAA;AAGrD,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,MAAM,CAAA,GAAI,CAAA;AACpE,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,MAAM,CAAA,GAAI,CAAA;AACpE,QAAA,MAAM,OAAA,GAAU,KAAK,EAAA,GAAK,EAAA;AAC1B,QAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,OAAA,GAAU,KAAK,CAAC,CAAA;AAEtD,QAAA,MAAM,KAAA,GAAQ,aAAa,aAAA,GAAgB,aAAA,CAAA;AAC3C,QAAA,MAAM,EAAA,GAAM,KAAK,IAAA,GAAQ,KAAA;AACzB,QAAA,MAAM,EAAA,GAAM,KAAK,IAAA,GAAQ,KAAA;AAEzB,QAAA,EAAA,CAAG,EAAA,IAAM,EAAA;AACT,QAAA,EAAA,CAAG,EAAA,IAAM,EAAA;AACT,QAAA,EAAA,CAAG,EAAA,IAAM,EAAA;AACT,QAAA,EAAA,CAAG,EAAA,IAAM,EAAA;AAAA,MACX;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA;AACvB,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,EAAG,CAAC,CAAA;AACrD,MAAA,MAAM,KAAA,GAAS,OAAO,IAAA,GAAQ,CAAA;AAC9B,MAAA,MAAM,EAAA,GAAM,EAAA,GAAK,IAAA,GAAQ,KAAA,GAAQ,IAAA;AACjC,MAAA,MAAM,EAAA,GAAM,EAAA,GAAK,IAAA,GAAQ,KAAA,GAAQ,IAAA;AAEjC,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AAAA,IACZ;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,MAAA,IAAA,CAAK,MAAM,EAAA,GAAK,IAAA;AAChB,MAAA,IAAA,CAAK,MAAM,EAAA,GAAK,IAAA;AAAA,IAClB;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,KAAK,GAAA,EAAK;AAEd,MAAA,IAAA,CAAK,EAAA,IAAM,GAAA;AACX,MAAA,IAAA,CAAK,EAAA,IAAM,GAAA;AAEX,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAE,CAAA;AAC7D,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACnC,QAAA,IAAA,CAAK,CAAA,IAAM,IAAA,CAAK,EAAA,GAAK,KAAA,GAAS,MAAA;AAC9B,QAAA,IAAA,CAAK,CAAA,IAAM,IAAA,CAAK,EAAA,GAAK,KAAA,GAAS,MAAA;AAAA,MAChC;AAGA,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAC,CAAA;AAC1C,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,GAAQ,EAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AACzE,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,GAAS,EAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAC5E;AAAA,EACF;AAGA,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,EAAA,EAAI,IAAA,EAAA,EAAQ;AACpC,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,QAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,QAAA,IAAI,EAAA,CAAG,GAAA,IAAO,EAAA,CAAG,GAAA,EAAK;AAGtB,QAAA,MAAM,QAAA,GAAA,CAAY,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AACrE,QAAA,MAAM,QAAA,GAAA,CAAY,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,MAAA,IAAU,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AACvE,QAAA,IAAI,QAAA,IAAY,CAAA,IAAK,QAAA,IAAY,CAAA,EAAG;AAGpC,QAAA,MAAM,QAAQ,QAAA,GAAW,QAAA;AACzB,QAAA,MAAM,IAAA,GAAA,CAAQ,KAAA,GAAQ,QAAA,GAAW,QAAA,IAAY,CAAA,GAAI,CAAA;AAEjD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,GAAA,GAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,IAAI,CAAA,GAAI,EAAA;AAC/B,UAAA,IAAI,CAAC,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,KAAK,GAAA,GAAM,IAAA;AAC3B,UAAA,IAAI,CAAC,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,KAAK,GAAA,GAAM,IAAA;AAAA,QAC7B,CAAA,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,IAAI,CAAA,GAAI,EAAA;AAC/B,UAAA,IAAI,CAAC,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,KAAK,GAAA,GAAM,IAAA;AAC3B,UAAA,IAAI,CAAC,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,KAAK,GAAA,GAAM,IAAA;AAAA,QAC7B;AACA,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AAGZ,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,KAAK,GAAA,EAAK;AACd,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAC,CAAA;AAC1C,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,GAAQ,EAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AACzE,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,GAAS,EAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAC5E;AAAA,EACF;AACF;;;AC3JO,SAAS,eAAA,CACd,KAAA,EACA,KAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,IAAI,MAAM,CAAA,EAAG;AAEb,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,IAAA;AAG5B,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAgB,CAAC,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAgB,CAAC,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,QAAA,CAAS,CAAC,IAAI,EAAC;AACf,IAAA,QAAA,CAAS,CAAC,IAAI,EAAC;AAAA,EACjB;AAGA,EAAA,MAAM,YAAY,KAAA,CAAM,GAAA,CAAI,QAAM,EAAE,GAAG,GAAE,CAAE,CAAA;AAC3C,EAAA,WAAA,CAAY,SAAA,EAAW,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAA;AAG5C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAA;AAGjD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,MAAA,EAAQ,CAAC,CAAA;AAC1C,EAAA,WAAA,CAAY,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,CAAC,CAAA;AAG9C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAG,QAAQ,CAAC,CAAA;AACtC,EAAA,MAAM,aAAa,QAAA,GAAW,CAAA;AAC9B,EAAA,MAAM,UAAA,GAAa,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,IAAA;AAGvD,EAAA,MAAM,iBAA2B,IAAI,KAAA,CAAM,UAAU,CAAA,CAAE,KAAK,CAAC,CAAA;AAC7D,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,KAAK,CAAA,IAAK,EAAC;AACnC,IAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,MAAA,MAAM,EAAA,GAAK,MAAM,GAAG,CAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,UAAA,GAAa,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,KAAA;AAC1C,MAAA,IAAI,QAAQ,cAAA,CAAe,KAAK,CAAA,EAAI,cAAA,CAAe,KAAK,CAAA,GAAI,KAAA;AAAA,IAC9D;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,GAAA,IAAO,UAAA,GAAa,CAAA,CAAA;AACvF,EAAA,MAAM,kBAAA,GAAqB,UAAA,GAAa,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,KAAA;AAE3D,EAAA,MAAM,KAAA,GAAQ,cAAA,GAAiB,kBAAA,GAAqB,kBAAA,GAAqB,cAAA,GAAiB,CAAA;AAG1F,EAAA,MAAM,cAAwB,IAAI,KAAA,CAAM,UAAU,CAAA,CAAE,KAAK,CAAC,CAAA;AAE1D,EAAA,MAAM,gBAAgB,cAAA,GAAiB,KAAA;AACvC,EAAA,MAAM,MAAA,GAAA,CAAU,qBAAqB,aAAA,IAAiB,CAAA;AACtD,EAAA,IAAI,MAAA,GAAS,MAAA,GAAU,cAAA,CAAe,CAAC,IAAK,KAAA,GAAS,CAAA;AACrD,EAAA,WAAA,CAAY,CAAC,CAAA,GAAI,MAAA;AACjB,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAA,IAAW,cAAA,CAAe,KAAA,GAAQ,CAAC,CAAA,GAAK,KAAA,GAAS,CAAA,GAAI,GAAA,GAAM,KAAA,GAAS,cAAA,CAAe,KAAK,CAAA,GAAK,KAAA,GAAS,CAAA;AACtG,IAAA,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,EACvB;AAGA,EAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,IAAA,EAAM;AAC5C,IAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,EACtB;AAEA,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,QAAA,EAAU,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,KAAK,CAAA,IAAK,EAAC;AACnC,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AAEtB,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,QAAQ,GAAA,EAAA,EAAO;AACzC,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAE,CAAA;AAG5B,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA;AACpC,QAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA;AACpC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAA,CAAW,GAAA,GAAM,CAAA,KAAM,GAAA,CAAI,MAAA,GAAS,CAAA,CAAA;AAC1C,MAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAElC,MAAA,QAAQ,SAAA;AAAW,QACjB,KAAK,IAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,OAAA,GAAU,IAAA,CAAK,KAAA;AACjC,UAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,QAAA;AAClB,UAAA;AAAA,QACF,KAAK,IAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,QAAA;AAClB,UAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,OAAA,GAAU,IAAA,CAAK,MAAA;AACjC,UAAA;AAAA;AACJ,IACF;AAAA,EACF;AACF;AAMA,SAAS,WAAA,CACP,KAAA,EACA,CAAA,EACA,QAAA,EACA,QAAA,EACM;AAEN,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,CAAG,IAAA,CAAK,EAAE,MAAM,CAAA;AACjC,IAAA,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,CAAG,IAAA,CAAK,EAAE,MAAM,CAAA;AAAA,EACnC;AAGA,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,IAAA,GAAO,CAAA,EAAG,KAAA,GAAQ,CAAA;AACnC,EAAA,MAAM,QAAQ,IAAI,KAAA,CAAc,CAAC,CAAA,CAAE,KAAK,KAAK,CAAA;AAE7C,EAAA,SAAS,IAAI,CAAA,EAAiB;AAC5B,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AACX,IAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,IAAA,EAAM;AAGrB,QAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,UAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AACpC,YAAA,CAAA,CAAE,MAAA,GAAS,CAAA;AACX,YAAA,CAAA,CAAE,MAAA,GAAS,CAAA;AACX,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AACf,QAAA,CAAA,EAAA;AACA,QAAA,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AACnB,QAAA,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AACnB,QAAA,MAAM,GAAA,GAAM,QAAA,CAAS,CAAC,CAAA,CAAG,QAAQ,CAAC,CAAA;AAClC,QAAA,IAAI,OAAO,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,CAAG,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1C,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,EAAO;AAC7B,QAAA,GAAA,CAAI,CAAC,CAAA;AAAA,MACP;AAAA,IACF;AACA,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA;AAAA,EACb;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,MAAW,CAAC,CAAA;AAAA,EAC/B;AACF;AAMA,SAAS,YAAA,CACP,CAAA,EACA,QAAA,EACA,QAAA,EACU;AACV,EAAA,MAAM,SAAS,IAAI,KAAA,CAAc,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAG3C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,SAAS,CAAC,CAAA,CAAG,WAAW,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EAC7C;AAGA,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAG7C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AACZ,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACd;AAEA,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,OAAO,EAAA,GAAK,MAAM,MAAA,EAAQ;AACxB,IAAA,MAAM,CAAA,GAAI,MAAM,EAAA,EAAI,CAAA;AACpB,IAAA,KAAA,MAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAI;AAC5B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,GAAK,CAAA;AAC9B,MAAA,IAAI,MAAA,CAAO,CAAC,CAAA,GAAK,QAAA,EAAU;AACzB,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,QAAA;AACZ,QAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,OAAO,CAAC,CAAA,GAAK,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,YAAA,CAAa,QAAkB,CAAA,EAAuB;AAC7D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAG,QAAQ,CAAC,CAAA;AACtC,EAAA,MAAM,MAAA,GAAqB,IAAI,KAAA,CAAM,QAAA,GAAW,CAAC,CAAA;AACjD,EAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,IAAK,QAAA,EAAU,KAAK,MAAA,CAAO,CAAC,IAAI,EAAC;AAEjD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAA,CAAO,MAAA,CAAO,CAAC,CAAE,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,WAAA,CACP,WAAA,EACA,QAAA,EACA,QAAA,EACA,MAAA,EACM;AACN,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,MAAA,EAAQ,IAAA,EAAA,EAAQ;AAExC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,MAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAA,GAAI,CAAC,CAAA;AACnC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA,EAAI,CAAC,CAAA;AAEtE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,QAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AACzC,QAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AACzC,QAAA,OAAO,EAAA,GAAK,EAAA;AAAA,MACd,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,IAAS,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,MAAA,MAAM,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,MAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAA,GAAI,CAAC,CAAA;AACnC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA,EAAI,CAAC,CAAA;AAEtE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,QAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AACzC,QAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AACzC,QAAA,OAAO,EAAA,GAAK,EAAA;AAAA,MACd,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,UAAA,CACP,OAAA,EACA,GAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,IAAI,OAAO,CAAA;AAC7B,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAEnC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AACzB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,GAAA,IAAO,GAAA;AACP,MAAA,KAAA,EAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA,GAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,GAAQ,CAAA;AACnC;;;AC3RO,SAAS,cAAA,CACd,KAAA,EACA,KAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,IAAI,MAAM,CAAA,EAAG;AAEb,EAAA,MAAM,EAAE,MAAK,GAAI,IAAA;AACjB,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAGlC,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,EAAO,KAAK,CAAA;AAG5C,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,KAAA,CAAM,GAAG,EAAG,GAAA,EAAK,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAC,CAAA;AACzC,EAAA,MAAM,SAAA,GAAa,CAAA,GAAI,IAAA,CAAK,EAAA,GAAM,KAAA;AAGlC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAA,EAAA,KAAM,EAAA,CAAG,KAAK,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,IAAI,CAAA,EAAA,KAAM,EAAA,CAAG,MAAM,CAAA,EAAG,EAAE,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,EAAA;AAGf,EAAA,IAAI,EAAA,GAAK,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,WAAW,CAAA,GAAI,MAAA;AACzC,EAAA,IAAI,EAAA,GAAK,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,WAAW,CAAA,GAAI,MAAA;AAI1C,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,MACnB,GAAG,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,KAAM,KAAK,IAAA,CAAK,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,MACzE;AAAA,KACF;AACA,IAAA,MAAM,aAAa,OAAA,GAAU,EAAA;AAE7B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,EAAA,IAAM,CAAA,IAAK,EAAA,GAAK,EAAA,CAAA,GAAM,IAAA,CAAK,IAAA,CAAA,CAAM,CAAA,GAAI,EAAA,GAAK,EAAA,KAAO,EAAA,GAAK,IAAI,EAAA,CAAG,CAAA,CAAA;AACtF,IAAA,MAAM,iBAAiB,WAAA,GAAc,KAAA;AACrC,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,MAAM,QAAQ,UAAA,GAAa,cAAA;AAC3B,MAAA,EAAA,IAAM,KAAA;AACN,MAAA,EAAA,IAAM,KAAA;AAAA,IACR;AAAA,EACF;AAGA,EAAA,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,MAAM,CAAC,CAAA;AACvD,EAAA,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,MAAM,CAAC,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA;AAE9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,CAAC,CAAE,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,aAAa,SAAA,GAAY,CAAA;AACvC,IAAA,IAAA,CAAK,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EACnC;AAGA,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA;AACpC,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA;AAAA,IACtC;AAAA,EACF;AACF;AAMA,SAAS,iBAAA,CAAkB,OAAoB,KAAA,EAA8B;AAC3E,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,IAAI,CAAA,KAAM,CAAA,EAAG,OAAO,EAAC;AAGrB,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAgB,CAAC,CAAA;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAC,IAAI,EAAC;AAEtC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,CAAG,IAAA,CAAK,EAAE,MAAM,CAAA;AAC5B,IAAA,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,CAAG,IAAA,CAAK,EAAE,MAAM,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,CAAG,MAAA,GAAS,MAAA,EAAQ;AAC3B,MAAA,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAG,MAAA;AACjB,MAAA,SAAA,GAAY,CAAA;AAAA,IACd;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,KAAA,GAAkB,CAAC,SAAS,CAAA;AAClC,EAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AAErB,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,CAAA,GAAI,MAAM,KAAA,EAAM;AACtB,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAGZ,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,CAAC,CAAA,CAAG,MAAA,CAAO,OAAK,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AACrD,IAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,CAAC,CAAA,CAAG,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAG,MAAM,CAAA;AAExD,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG;AACnB,QAAA,OAAA,CAAQ,IAAI,CAAC,CAAA;AACb,QAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,KAAA;AACT;;;ACxFO,IAAM,cAAA,GAAkC;AAAA,EAC7C,IAAA,EAAM,OAAA;AAAA,EAEN,aAAA,GAAgD;AAC9C,IAAA,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,QAAA,EAAS;AAAA,EACzC,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,MAAM,IAAA,GAAO,OAAA;AAEb,IAAA,IAAA,CAAK,KAAK,KAAA,IAAS,IAAA,CAAK,KAAA,MAAW,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,CAAO,MAAA,KAAW,CAAC,CAAA,CAAA,EAAI;AACxG,MAAA,OAAO;AAAA,QACL,QAAQ,EAAC;AAAA,QACT,QAAQ,EAAC;AAAA,QACT,MAAA,EAAQ,EAAE,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAA;AAAE,OAC/C;AAAA,IACF;AACA,IAAA,OAAOE,+BAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EACpC,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,SAAQ,GAAI,GAAA;AACvC,IAAA,MAAM,SAAA,GAAY,OAAA;AAGlB,IAAA,IAAI,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,KAAA,EAAO;AACtC,MAAA,OAAO,gBAAgB,GAAG,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAsB,EAAC;AAE7B,IAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAI,oBAAA,CAAqB,IAAa,CAAA;AACrE,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAGpC,IAAAC,YAAAA,CAAY,UAAA,EAAY,UAAA,EAAY,IAAA,EAAM,EAAE,CAAA;AAG5C,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,UAAA,CAAW,QAAQ,EAAA,EAAA,EAAM;AAC7C,MAAA,MAAM,IAAA,GAAO,WAAW,EAAE,CAAA;AAC1B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAElC,MAAA,KAAA,CAAM,IAAA,CAAKF,uBAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG;AAAA,QAC1C,KAAA,EAAO,oBAAA;AAAA,QACP,QAAQ,KAAA,CAAM,SAAA;AAAA,QACd,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,GAAG,CAAC,CAAA;AAAA,QACvD,OAAA,EAAS;AAAA,OACV,CAAC,CAAA;AAAA,IACJ;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAI,CAAA;AAGlE,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,UAAA,CAAW,QAAQ,EAAA,EAAA,EAAM;AAC7C,MAAA,MAAM,EAAA,GAAK,WAAW,EAAE,CAAA;AACxB,MAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,EAAA,GAAK,OAAA,CAAQ,OAAO,MAAM,CAAA;AACvD,MAAA,MAAM,CAAA,GAAI,IAAA,GAAQ,EAAA,CAAG,KAAA,GAAQ,UAAW,IAAA,GAAO,IAAA,CAAA;AAC/C,MAAA,MAAM,YAA0B,EAAC;AAEjC,MAAA,SAAA,CAAU,KAAKL,wBAAA,CAAO,EAAA,CAAG,CAAA,EAAG,EAAA,CAAG,GAAG,CAAA,EAAG;AAAA,QACnC,KAAA,EAAO,oBAAA;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,WAAA,EAAa,IAAA;AAAA,QACb,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA,EAAa,GAAA;AAAA,QACb,aAAA,EAAe,EAAA;AAAA,QACf,YAAA,EAAc,CAAA;AAAA,QACd,QAAA,EAAU,CAAA;AAAA,QACV,IAAA,EAAM,KAAA;AAAA,QACN,WAAW,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,GAAG,KAAK,CAAA;AAAA,OACnC,CAAC,CAAA;AAGF,MAAA,SAAA,CAAU,IAAA,CAAKI,uBAAK,EAAA,CAAG,CAAA,EAAG,GAAG,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,EAAA,CAAG,IAAA,EAAM;AAAA,QAC/C,KAAA,EAAO,qBAAA;AAAA,QACP,MAAM,KAAA,CAAM,SAAA;AAAA,QACZ,UAAA,EAAY,QAAA;AAAA,QACZ,gBAAA,EAAkB,MAAA;AAAA,QAClB,UAAU,KAAA,CAAM,aAAA;AAAA,QAChB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAC,CAAA;AAEF,MAAA,KAAA,CAAM,IAAA,CAAKI,wBAAM,SAAA,EAAW;AAAA,QAC1B,KAAA,EAAO,iCAAiC,EAAE,CAAA,CAAA;AAAA,QAC1C,oBAAoB,EAAA,CAAG;AAAA,OACxB,CAAC,CAAA;AAAA,IACJ;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ,GAAI,GAAA;AAChC,IAAA,MAAM,SAAA,GAAY,OAAA;AAGlB,IAAA,IAAI,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,KAAA,EAAO;AACtC,MAAA,OAAO,WAAA,CAAY,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAAA,IAChC;AAGA,IAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAI,oBAAA,CAAqB,IAAa,CAAA;AACrE,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEpC,IAAAD,YAAAA,CAAY,UAAA,EAAY,UAAA,EAAY,IAAA,EAAM,EAAE,CAAA;AAE5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAI,CAAA;AAElE,IAAA,IAAI,IAAA,GAAyB,IAAA;AAC7B,IAAA,IAAI,QAAA,GAAW,QAAA;AAEf,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,UAAA,CAAW,QAAQ,EAAA,EAAA,EAAM;AAC7C,MAAA,MAAM,EAAA,GAAK,WAAW,EAAE,CAAA;AACxB,MAAA,MAAM,CAAA,GAAI,IAAA,GAAQ,EAAA,CAAG,KAAA,GAAQ,UAAW,IAAA,GAAO,IAAA,CAAA;AAC/C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAA,CAAM,EAAA,GAAK,EAAA,CAAG,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,EAAA,CAAG,CAAA,KAAM,CAAC,CAAA;AAC1D,MAAA,IAAI,IAAA,GAAO,QAAA,IAAY,IAAA,GAAO,CAAA,GAAI,CAAA,EAAG;AACnC,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,IAAA,GAAO,EAAE,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA,EAAG,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,EAAA,CAAG,CAAA,EAAE;AAAA,MAC5E;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,SAAS,gBAAgB,GAAA,EAAkC;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,SAAQ,GAAI,GAAA;AACvC,EAAA,MAAM,SAAA,GAAY,OAAA;AAClB,EAAA,MAAM,SAAuB,EAAC;AAE9B,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAI,cAAA,CAAe,MAAM,OAAO,CAAA;AAC/D,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAGpC,EAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,IAAA,MAAM,OAAO,eAAA,CAAgB,IAAA,CAAK,OAAO,KAAA,CAAM,aAAA,EAAe,KAAK,KAAK,CAAA;AACxE,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAClB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AAAA,EACrB;AAGA,EAAA,SAAA,CAAU,UAAA,EAAY,UAAA,EAAY,SAAA,EAAW,IAAI,CAAA;AAIjD,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,UAAA,EAAY,UAAA,EAAY,WAAW,KAAK,CAAA;AACtE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,MAAA,CAAO,KAAKC,uBAAA,CAAM,SAAA,EAAW,EAAE,KAAA,EAAO,qBAAA,EAAuB,CAAC,CAAA;AAAA,EAChE;AAGA,EAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,OAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAC7E,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAErD,IAAA,MAAA,CAAO,IAAA,CAAKA,wBAAM,UAAA,EAAY;AAAA,MAC5B,KAAA,EAAO,CAAA,8BAAA,EAAiC,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,MAClD,oBAAoB,IAAA,CAAK;AAAA,KAC1B,CAAC,CAAA;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,CAAY,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACjF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,SAAQ,GAAI,GAAA;AACvC,EAAA,MAAM,SAAA,GAAY,OAAA;AAElB,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAI,cAAA,CAAe,MAAM,OAAO,CAAA;AAC/D,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEpC,EAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,IAAA,MAAM,OAAO,eAAA,CAAgB,IAAA,CAAK,OAAO,KAAA,CAAM,aAAA,EAAe,KAAK,KAAK,CAAA;AACxE,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAClB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AAAA,EACrB;AACA,EAAA,SAAA,CAAU,UAAA,EAAY,UAAA,EAAY,SAAA,EAAW,IAAI,CAAA;AAEjD,EAAA,IAAI,IAAA,GAAyB,IAAA;AAC7B,EAAA,IAAI,QAAA,GAAW,QAAA;AAEf,EAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,EAAA,EAAI,EAAE,CAAA;AACvC,IAAA,IAAI,IAAA,GAAO,QAAA,IAAY,IAAA,GAAO,CAAA,EAAG;AAC/B,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAA,GAAO,EAAE,WAAA,EAAa,IAAA,CAAK,KAAA,EAAO,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,IACxF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAMA,SAAS,SAAA,CACP,KAAA,EACA,KAAA,EACA,IAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAsB,KAAK,MAAA,IAAU,OAAA;AAE3C,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,cAAA;AACH,MAAA,eAAA,CAAgB,OAAO,KAAA,EAAO;AAAA,QAC5B,IAAA;AAAA,QACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,OAC9B,CAAA;AACD,MAAA;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,cAAA,CAAe,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA;AACrC,MAAA;AAAA,IAEF,KAAK,OAAA;AAAA,IACL;AACE,MAAA,WAAA,CAAgB,OAAO,KAAA,EAAO;AAAA,QAC5B,IAAA;AAAA,QACA,UAAA,EAAY,KAAK,UAAA,IAAc;AAAA,OAChC,CAAA;AACD,MAAA;AAAA;AAEN;AAMA,SAAS,aAAA,CAAc,IAAA,EAAqB,EAAA,EAAY,EAAA,EAAoB;AAC1E,EAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,EAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAEzB,EAAA,QAAQ,KAAK,KAAA;AAAO,IAClB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AAC9C,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AACxC,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA;AAAA,IAC7B;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,GAAQ,CAAA;AACxB,MAAA,MAAM,EAAA,GAAK,KAAK,MAAA,GAAS,CAAA;AACzB,MAAA,MAAM,CAAA,GAAI,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,EAAA;AAC/B,MAAA,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA;AAAA,IAC1D;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,GAAQ,CAAA;AACxB,MAAA,MAAM,EAAA,GAAK,KAAK,MAAA,GAAS,CAAA;AACzB,MAAA,MAAM,IAAK,EAAA,GAAK,EAAA,IAAO,KAAK,EAAA,CAAA,GAAO,EAAA,GAAK,MAAO,EAAA,GAAK,EAAA,CAAA;AACpD,MAAA,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAI,CAAA,CAAA;AAAA,IACrE;AAAA,IAEA,SAAS;AACP,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,GAAQ,CAAA;AACxB,MAAA,MAAM,EAAA,GAAK,KAAK,MAAA,GAAS,CAAA;AACzB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,EAAE,CAAA;AACjC,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,EAAE,CAAA;AACjC,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAAA,IACpC;AAAA;AAEJ;AAMA,SAAS,oBAAA,CACP,MACA,QAAA,EACsD;AACtD,EAAA,MAAM,aAA0B,EAAC;AACjC,EAAA,MAAM,aAA0B,EAAC;AACjC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AAExC,EAAA,SAAS,eAAA,CAAgB,IAAA,EAAc,KAAA,GAAQ,CAAA,EAAW;AACxD,IAAA,IAAI,QAAQ,GAAA,CAAI,IAAI,GAAG,OAAO,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC9C,IAAA,MAAM,MAAM,UAAA,CAAW,MAAA;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,GAAG,CAAA;AACrB,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,IAAA;AAAA,MAAM,KAAA,EAAO,GAAA;AAAA,MAAK,KAAA;AAAA,MAClB,CAAA,EAAG,CAAA;AAAA,MAAG,CAAA,EAAG,CAAA;AAAA,MAAG,EAAA,EAAI,CAAA;AAAA,MAAG,EAAA,EAAI;AAAA,KACxB,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,QAAG,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AAErF,EAAA,IAAI,SAAA,EAAW;AAEb,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,MAAA,EAAQ;AAChC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAChD,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACtB,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,EAAK;AAC/B,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,EAAK;AAC/B,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAEnC,MAAA,MAAM,GAAA,GAAM,gBAAgB,OAAO,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,gBAAgB,OAAO,CAAA;AACnC,MAAA,UAAA,CAAW,KAAK,EAAE,MAAA,EAAQ,KAAK,MAAA,EAAQ,GAAA,EAAK,QAAQ,CAAA;AACpD,MAAA,UAAA,CAAW,GAAG,EAAG,KAAA,IAAS,MAAA;AAC1B,MAAA,UAAA,CAAW,GAAG,EAAG,KAAA,IAAS,MAAA;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,eAAA,CAAgB,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,GAAG,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA;AAAA,IAClF;AAGA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA,IAAK,KAAK,MAAA,CAAO,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACvE,MAAA,KAAA,IAAS,KAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,EAAA,EAAA,EAAM;AAC9C,QAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,IAAA,CAAK,OAAO,EAAE,CAAA,CAAG,MAAA,CAAO,MAAA,EAAQ,CAAA,EAAA,EAAK;AACvD,UAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,CAAG,OAAO,CAAC,CAAA;AACrC,UAAA,IAAI,GAAA,GAAM,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACvB,YAAA,UAAA,CAAW,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,QAAQ,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAA;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,YAAY,UAAA,EAAW;AAClC;AAMA,SAASD,YAAAA,CACP,KAAA,EACA,KAAA,EACA,IAAA,EACA,UAAA,EACM;AACN,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAClC,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAEhB,EAAA,IAAI,MAAM,CAAA,EAAG;AAGb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,KAAA,GAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA,GAAK,CAAA;AAClC,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,GAAA;AAC9C,IAAA,KAAA,CAAM,CAAC,CAAA,CAAG,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AACrC,IAAA,KAAA,CAAM,CAAC,CAAA,CAAG,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AACrC,IAAA,KAAA,CAAM,CAAC,EAAG,EAAA,GAAK,CAAA;AACf,IAAA,KAAA,CAAM,CAAC,EAAG,EAAA,GAAK,CAAA;AAAA,EACjB;AAEA,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAM,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,YAAY,CAAA,GAAI,CAAA;AAEtB,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,UAAA,EAAY,IAAA,EAAA,EAAQ;AAC5C,IAAA,MAAM,IAAA,GAAO,GAAA,IAAO,CAAA,GAAI,IAAA,GAAO,UAAA,CAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,GAAA;AAGjF,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AACV,MAAA,IAAA,CAAK,EAAA,GAAK,CAAA;AAAA,IACZ;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,KAAK,KAAA,CAAM,CAAC,EAAG,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAG,CAAA;AACnC,QAAA,MAAM,KAAK,KAAA,CAAM,CAAC,EAAG,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAG,CAAA;AACnC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,EAAG,CAAC,CAAA;AACrD,QAAA,MAAM,KAAA,GAAQ,aAAa,IAAA,GAAO,IAAA,CAAA;AAClC,QAAA,MAAM,EAAA,GAAM,KAAK,IAAA,GAAQ,KAAA;AACzB,QAAA,MAAM,EAAA,GAAM,KAAK,IAAA,GAAQ,KAAA;AACzB,QAAA,KAAA,CAAM,CAAC,EAAG,EAAA,IAAM,EAAA;AAChB,QAAA,KAAA,CAAM,CAAC,EAAG,EAAA,IAAM,EAAA;AAChB,QAAA,KAAA,CAAM,CAAC,EAAG,EAAA,IAAM,EAAA;AAChB,QAAA,KAAA,CAAM,CAAC,EAAG,EAAA,IAAM,EAAA;AAAA,MAClB;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA;AACvB,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,EAAG,CAAC,CAAA;AACrD,MAAA,MAAM,KAAA,GAAS,OAAO,IAAA,GAAQ,CAAA;AAC9B,MAAA,MAAM,EAAA,GAAM,EAAA,GAAK,IAAA,GAAQ,KAAA,GAAQ,GAAA;AACjC,MAAA,MAAM,EAAA,GAAM,EAAA,GAAK,IAAA,GAAQ,KAAA,GAAQ,GAAA;AACjC,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AACV,MAAA,GAAA,CAAI,EAAA,IAAM,EAAA;AAAA,IACZ;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA;AACrB,MAAA,IAAA,CAAK,MAAM,EAAA,GAAK,IAAA;AAChB,MAAA,IAAA,CAAK,MAAM,EAAA,GAAK,IAAA;AAAA,IAClB;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAE,CAAA;AAC7D,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACnC,QAAA,IAAA,CAAK,CAAA,IAAM,IAAA,CAAK,EAAA,GAAK,KAAA,GAAS,MAAA;AAC9B,QAAA,IAAA,CAAK,CAAA,IAAM,IAAA,CAAK,EAAA,GAAK,KAAA,GAAS,MAAA;AAAA,MAChC;AAGA,MAAA,MAAM,MAAA,GAAS,EAAA;AACf,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,GAAQ,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AACjF,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IACpF;AAAA,EACF;AACF","file":"chunk-PX7MLSIH.cjs","sourcesContent":["import type { PreparedData, ResolvedOptions } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions, NodeShape } from './types'\n\n/**\n * Parse graph data from three possible input formats into internal\n * GraphNode[] and GraphEdge[] arrays.\n *\n * Auto-detection order:\n * 1. Rich format — options contain `.nodes` or `.edges`\n * 2. Arrow notation — any series name contains `→` or `->`\n * 3. Adjacency matrix — fallback\n */\nexport function parseGraphData(\n data: PreparedData,\n options: ResolvedOptions,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const opts = options as unknown as GraphOptions\n const defaultShape: NodeShape = opts.nodeShape ?? 'rect'\n\n // --- 1. Rich format ---\n if (opts.nodes || opts.edges) {\n return parseRichFormat(data, opts, defaultShape)\n }\n\n // --- 2. Arrow notation ---\n const hasArrow = data.series.some(\n (s) => s.name.includes('→') || s.name.includes('->'),\n )\n if (hasArrow) {\n return parseArrowNotation(data, defaultShape)\n }\n\n // --- 3. Adjacency matrix ---\n return parseAdjacencyMatrix(data, defaultShape)\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction makeNode(\n id: string,\n label: string,\n index: number,\n value: number,\n shape: NodeShape,\n color: string | null,\n pin: { x: number; y: number } | null,\n): GraphNode {\n return {\n id,\n label,\n index,\n value,\n shape,\n color,\n pin,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0,\n width: 0,\n height: 0,\n }\n}\n\nfunction makeEdge(\n source: number,\n target: number,\n weight: number,\n label: string | null,\n style: 'solid' | 'dashed' | 'dotted',\n color: string | null,\n): GraphEdge {\n return { source, target, weight, label, style, color }\n}\n\n// ---------------------------------------------------------------------------\n// Rich format\n// ---------------------------------------------------------------------------\n\nfunction parseRichFormat(\n _data: PreparedData,\n opts: GraphOptions,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const idToIndex = new Map<string, number>()\n\n // Create nodes from opts.nodes\n if (opts.nodes) {\n for (const nodeDef of opts.nodes) {\n const idx = graphNodes.length\n idToIndex.set(nodeDef.id, idx)\n graphNodes.push(\n makeNode(\n nodeDef.id,\n nodeDef.label ?? nodeDef.id,\n idx,\n 1,\n nodeDef.shape ?? defaultShape,\n nodeDef.color ?? null,\n nodeDef.pin ?? null,\n ),\n )\n }\n }\n\n const graphEdges: GraphEdge[] = []\n\n if (opts.edges) {\n for (const edgeDef of opts.edges) {\n // Auto-create source node if not declared\n if (!idToIndex.has(edgeDef.source)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.source, idx)\n graphNodes.push(\n makeNode(edgeDef.source, edgeDef.source, idx, 1, defaultShape, null, null),\n )\n }\n\n // Auto-create target node if not declared\n if (!idToIndex.has(edgeDef.target)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.target, idx)\n graphNodes.push(\n makeNode(edgeDef.target, edgeDef.target, idx, 1, defaultShape, null, null),\n )\n }\n\n const srcIdx = idToIndex.get(edgeDef.source)!\n const tgtIdx = idToIndex.get(edgeDef.target)!\n\n graphEdges.push(\n makeEdge(\n srcIdx,\n tgtIdx,\n edgeDef.weight ?? 1,\n edgeDef.label ?? null,\n edgeDef.style ?? 'solid',\n edgeDef.color ?? null,\n ),\n )\n }\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Arrow notation\n// ---------------------------------------------------------------------------\n\nconst ARROW_RE = /\\s*(?:→|->)\\s*/\n\nfunction parseArrowNotation(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const nameToIndex = new Map<string, number>()\n const graphEdges: GraphEdge[] = []\n\n function getOrCreateNode(name: string): number {\n let idx = nameToIndex.get(name)\n if (idx !== undefined) return idx\n idx = graphNodes.length\n nameToIndex.set(name, idx)\n graphNodes.push(makeNode(name, name, idx, 0, defaultShape, null, null))\n return idx\n }\n\n for (const series of data.series) {\n const parts = series.name.split(ARROW_RE)\n if (parts.length < 2) continue\n\n const srcName = parts[0]!\n const tgtName = parts[1]!\n const weight = series.values[0] ?? 1\n\n const srcIdx = getOrCreateNode(srcName)\n const tgtIdx = getOrCreateNode(tgtName)\n\n // Accumulate value from edge weights\n graphNodes[srcIdx]!.value += weight\n graphNodes[tgtIdx]!.value += weight\n\n graphEdges.push(makeEdge(srcIdx, tgtIdx, weight, null, 'solid', null))\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Adjacency matrix\n// ---------------------------------------------------------------------------\n\nfunction parseAdjacencyMatrix(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n\n // Create nodes from labels\n for (let i = 0; i < data.labels.length; i++) {\n const name = String(data.labels[i])\n const value = Math.abs(data.series[0]?.values[i] ?? 1)\n graphNodes.push(makeNode(name, name, i, value, defaultShape, null, null))\n }\n\n const graphEdges: GraphEdge[] = []\n\n // If series count > 1 and matches label count, treat as adjacency matrix\n if (data.series.length > 1 && data.series.length === data.labels.length) {\n for (let i = 0; i < data.series.length; i++) {\n const row = data.series[i]!\n for (let j = 0; j < row.values.length; j++) {\n const weight = row.values[j] ?? 0\n if (weight > 0) {\n graphEdges.push(makeEdge(i, j, weight, null, 'solid', null))\n }\n }\n }\n }\n\n return { graphNodes, graphEdges }\n}\n","import type { NodeShape } from './types'\n\nconst CHAR_WIDTH_RATIO = 0.6\nconst PADDING_H = 16\nconst PADDING_V = 10\n\n/**\n * Heuristic text measurement (no DOM access).\n * Returns the bounding box needed for the node shape to contain the label.\n */\nexport function measureNodeSize(\n label: string,\n fontSize: number,\n shape: NodeShape,\n): { width: number; height: number } {\n const charWidth = fontSize * CHAR_WIDTH_RATIO\n const textWidth = label.length * charWidth\n const textHeight = fontSize * 1.2\n\n let w = textWidth + PADDING_H * 2\n let h = textHeight + PADDING_V * 2\n\n // Enforce minimums\n w = Math.max(w, 40)\n h = Math.max(h, 28)\n\n switch (shape) {\n case 'circle': {\n // Circle must contain the text bbox\n const d = Math.sqrt(w * w + h * h)\n return { width: d, height: d }\n }\n case 'diamond': {\n // Diamond needs ~1.4x bbox dimensions\n return { width: w * 1.45, height: h * 1.45 }\n }\n case 'hexagon': {\n // Hexagon needs slightly wider to contain text\n return { width: w * 1.25, height: h * 1.15 }\n }\n case 'stadium':\n case 'rect':\n default:\n return { width: w, height: h }\n }\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode } from './types'\nimport { path, rect, circle, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n// ---------------------------------------------------------------------------\n// renderNodeShape — returns [shape, label] RenderNodes for a graph node\n// ---------------------------------------------------------------------------\n\nexport function renderNodeShape(\n node: GraphNode,\n color: string,\n theme: ThemeConfig,\n): RenderNode[] {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n\n const baseAttrs = {\n class: 'chartts-graph-node',\n fill: color,\n fillOpacity: 0.85,\n stroke: color,\n strokeWidth: 1.5,\n 'data-series': node.index,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${node.label}: ${node.value}`,\n } as const\n\n let shapeNode: RenderNode\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n shapeNode = circle(cx, cy, r, { ...baseAttrs })\n break\n }\n\n case 'diamond': {\n const pb = new PathBuilder()\n pb.moveTo(cx, cy - h / 2)\n .lineTo(cx + w / 2, cy)\n .lineTo(cx, cy + h / 2)\n .lineTo(cx - w / 2, cy)\n .close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'hexagon': {\n const rx = w / 2\n const ry = h / 2\n const pb = new PathBuilder()\n // flat-top hexagon: vertices at 0°, 60°, 120°, 180°, 240°, 300°\n for (let i = 0; i < 6; i++) {\n const angle = (Math.PI / 180) * (i * 60)\n const px = cx + rx * Math.cos(angle)\n const py = cy + ry * Math.sin(angle)\n if (i === 0) pb.moveTo(px, py)\n else pb.lineTo(px, py)\n }\n pb.close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'stadium': {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: h / 2,\n })\n break\n }\n\n // 'rect' is the default\n default: {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: 8,\n })\n break\n }\n }\n\n const labelNode = text(cx, cy, node.label, {\n class: 'chartts-graph-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n })\n\n return [shapeNode, labelNode]\n}\n\n// ---------------------------------------------------------------------------\n// clipToNodeBoundary — find the point on a shape boundary at given angle\n// ---------------------------------------------------------------------------\n\n/** Small outward padding so edges don't touch the shape directly. */\nconst PAD = 3\n\nexport function clipToNodeBoundary(\n node: GraphNode,\n angle: number,\n): { x: number; y: number } {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n const cos = Math.cos(angle)\n const sin = Math.sin(angle)\n\n let bx: number\n let by: number\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n bx = cx + r * cos\n by = cy + r * sin\n break\n }\n\n case 'diamond': {\n // Diamond has 4 edges. The half-extents along x/y are w/2 and h/2.\n // For a diamond with vertices at (0,-h/2), (w/2,0), (0,h/2), (-w/2,0)\n // the boundary along direction (cos,sin) can be found via the Minkowski\n // support function. For a rhombus the implicit equation is\n // |x|/(w/2) + |y|/(h/2) = 1\n // so the ray t*(cos,sin) hits the boundary at\n // t = 1 / (|cos|/(w/2) + |sin|/(h/2))\n const hw = w / 2\n const hh = h / 2\n const t = 1 / (Math.abs(cos) / hw + Math.abs(sin) / hh)\n bx = cx + t * cos\n by = cy + t * sin\n break\n }\n\n case 'hexagon': {\n // Flat-top hexagon with rx = w/2, ry = h/2.\n // Vertices at angles 0°,60°,120°,180°,240°,300°.\n // Find which edge segment the ray intersects and compute intersection.\n const rx = w / 2\n const ry = h / 2\n const pt = hexBoundary(cx, cy, rx, ry, angle, cos, sin)\n bx = pt.x\n by = pt.y\n break\n }\n\n // rect and stadium share the same rectangular bounding box logic\n default: {\n const hw = w / 2\n const hh = h / 2\n const cornerAngle = Math.atan2(hh, hw)\n // Normalize angle into [0, 2π)\n let a = ((angle % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)\n\n if (a < cornerAngle || a >= 2 * Math.PI - cornerAngle) {\n // hits right edge\n const t = hw / Math.abs(cos)\n bx = cx + hw\n by = cy + t * sin\n } else if (a < Math.PI - cornerAngle) {\n // hits bottom edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy + hh\n } else if (a < Math.PI + cornerAngle) {\n // hits left edge\n const t = hw / Math.abs(cos)\n bx = cx - hw\n by = cy + t * sin\n } else {\n // hits top edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy - hh\n }\n break\n }\n }\n\n // Apply outward padding\n bx += PAD * cos\n by += PAD * sin\n\n return { x: bx, y: by }\n}\n\n// ---------------------------------------------------------------------------\n// Hexagon boundary helper\n// ---------------------------------------------------------------------------\n\nfunction hexBoundary(\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n _angle: number,\n cos: number,\n sin: number,\n): { x: number; y: number } {\n // Compute the 6 vertices of the flat-top hexagon\n const verts: Array<{ x: number; y: number }> = []\n for (let i = 0; i < 6; i++) {\n const a = (Math.PI / 180) * (i * 60)\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) })\n }\n\n // Ray from center: P(t) = (cx + t*cos, cy + t*sin), t > 0\n // Test intersection with each of the 6 edges\n let bestT = Infinity\n let bestPt = { x: cx + rx * cos, y: cy + ry * sin } // fallback\n\n for (let i = 0; i < 6; i++) {\n const v0 = verts[i]!\n const v1 = verts[(i + 1) % 6]!\n\n // Edge: Q(s) = v0 + s*(v1 - v0), s in [0,1]\n // Solve: (cx + t*cos, cy + t*sin) = (v0.x + s*dx, v0.y + s*dy)\n const dx = v1.x - v0.x\n const dy = v1.y - v0.y\n\n const denom = cos * dy - sin * dx\n if (Math.abs(denom) < 1e-12) continue // parallel\n\n const t = ((v0.x - cx) * dy - (v0.y - cy) * dx) / denom\n const s = cos !== 0\n ? ((cx + t * cos) - v0.x) / dx\n : ((cy + t * sin) - v0.y) / dy\n\n if (t > 1e-6 && s >= -1e-6 && s <= 1 + 1e-6 && t < bestT) {\n bestT = t\n bestPt = { x: cx + t * cos, y: cy + t * sin }\n }\n }\n\n return bestPt\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions } from './types'\nimport { path, rect, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { clipToNodeBoundary } from './shapes'\n\n// ---------------------------------------------------------------------------\n// Arrowhead helper\n// ---------------------------------------------------------------------------\n\nfunction renderArrowhead(\n tipX: number,\n tipY: number,\n angle: number,\n size: number,\n color: string,\n): RenderNode {\n const cosA = Math.cos(angle)\n const sinA = Math.sin(angle)\n\n // Base center (back from the tip along the edge direction)\n const baseX = tipX - cosA * size\n const baseY = tipY - sinA * size\n\n // Perpendicular offset\n const perpX = -sinA * size * 0.4\n const perpY = cosA * size * 0.4\n\n const leftX = baseX + perpX\n const leftY = baseY + perpY\n const rightX = baseX - perpX\n const rightY = baseY - perpY\n\n const pb = new PathBuilder()\n pb.moveTo(tipX, tipY)\n .lineTo(leftX, leftY)\n .lineTo(rightX, rightY)\n .close()\n\n return path(pb.build(), {\n fill: color,\n class: 'chartts-graph-arrow',\n })\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function renderEdges(\n nodes: GraphNode[],\n edges: GraphEdge[],\n options: GraphOptions,\n theme: ThemeConfig,\n): RenderNode[] {\n const result: RenderNode[] = []\n\n // Build a map of (source,target) pair counts so we can alternate curve\n // direction for multi-edges between the same pair.\n const pairIndex = new Map<string, number>()\n\n for (const edge of edges) {\n const src = nodes[edge.source]\n const tgt = nodes[edge.target]\n if (!src || !tgt) continue\n\n // --- 1. Connection points ------------------------------------------\n const angle = Math.atan2(tgt.y - src.y, tgt.x - src.x)\n const start = clipToNodeBoundary(src, angle)\n const end = clipToNodeBoundary(tgt, angle + Math.PI)\n\n // Edge attrs shared between straight / curved\n const edgeColor = edge.color ?? theme.gridColor\n const edgeAttrs = {\n class: 'chartts-graph-edge',\n stroke: edgeColor,\n strokeWidth: Math.max(1, Math.min(3, edge.weight * 0.5)),\n strokeDasharray:\n edge.style === 'dashed'\n ? '8,4'\n : edge.style === 'dotted'\n ? '2,4'\n : undefined,\n opacity: 0.6,\n fill: 'none',\n }\n\n // --- 2. Edge path ---------------------------------------------------\n let arrowAngle = angle // angle at the target end for the arrowhead\n let labelX = (start.x + end.x) / 2\n let labelY = (start.y + end.y) / 2\n\n if (options.edgeStyle === 'straight' || options.edgeStyle === undefined) {\n // Default: straight line\n result.push(line(start.x, start.y, end.x, end.y, edgeAttrs))\n } else {\n // Curved: quadratic bezier\n const pairKey =\n Math.min(edge.source, edge.target) +\n ':' +\n Math.max(edge.source, edge.target)\n const idx = pairIndex.get(pairKey) ?? 0\n pairIndex.set(pairKey, idx + 1)\n\n // Alternate direction: even indices go one way, odd the other\n const sign = idx % 2 === 0 ? 1 : -1\n\n const offset = Math.max(edge.weight * 8, 15)\n\n const mx = (start.x + end.x) / 2\n const my = (start.y + end.y) / 2\n\n // Perpendicular direction to the edge\n const perpAngle = angle + Math.PI / 2\n const cx = mx + Math.cos(perpAngle) * offset * sign\n const cy = my + Math.sin(perpAngle) * offset * sign\n\n const pb = new PathBuilder()\n pb.moveTo(start.x, start.y).quadTo(cx, cy, end.x, end.y)\n\n result.push(path(pb.build(), edgeAttrs))\n\n // For curved edges the arrow should follow the last segment direction\n // (from control point to end point)\n arrowAngle = Math.atan2(end.y - cy, end.x - cx)\n\n // Label at the midpoint of the quadratic bezier: Q(0.5) = 0.25*P0 + 0.5*CP + 0.25*P1\n labelX = 0.25 * start.x + 0.5 * cx + 0.25 * end.x\n labelY = 0.25 * start.y + 0.5 * cy + 0.25 * end.y\n }\n\n // --- 3. Arrowhead ---------------------------------------------------\n if (options.arrows !== false) {\n const arrowSize = 8\n result.push(renderArrowhead(end.x, end.y, arrowAngle, arrowSize, edgeColor))\n }\n\n // --- 4. Edge label --------------------------------------------------\n if (edge.label != null) {\n const lx = labelX\n const ly = labelY\n\n // Estimate label dimensions for background rect\n const charWidth = (theme.fontSizeSmall - 1) * 0.6\n const pw = edge.label.length * charWidth + 8\n const ph = (theme.fontSizeSmall - 1) + 6\n\n const bgFill =\n theme.background === 'transparent' ? '#fff' : theme.background\n\n result.push(\n rect(lx - pw / 2, ly - ph / 2, pw, ph, {\n fill: bgFill,\n rx: 3,\n }),\n )\n\n result.push(\n text(lx, ly, edge.label, {\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall - 1,\n fontFamily: theme.fontFamily,\n }),\n )\n }\n }\n\n return result\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Force-directed layout (Fruchterman-Reingold style).\n *\n * - Node-size-aware repulsion (prevents shape overlap)\n * - Pin support (pinned nodes keep position, still repel)\n * - Velocity damping (0.8x per iteration)\n */\n\nexport interface ForceLayoutOpts {\n iterations: number\n area: { x: number; y: number; width: number; height: number }\n}\n\nexport function forceLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: ForceLayoutOpts,\n): void {\n const { area, iterations } = opts\n const n = nodes.length\n if (n === 0) return\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Initialize positions: pinned nodes get their pin, others in a circle\n // Use large initial spread so force simulation pushes nodes apart, not together\n for (let i = 0; i < n; i++) {\n const node = nodes[i]!\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n } else {\n const angle = (2 * Math.PI * i) / n\n const r = Math.min(area.width, area.height) * 0.4\n node.x = cx + r * Math.cos(angle)\n node.y = cy + r * Math.sin(angle)\n }\n node.vx = 0\n node.vy = 0\n }\n\n // k = ideal edge length, scaled up for node sizes\n const avgNodeSize = nodes.reduce((s, nd) => s + Math.max(nd.width, nd.height), 0) / n\n const k = Math.max(\n Math.sqrt((area.width * area.height) / Math.max(n, 1)),\n avgNodeSize * 2,\n )\n const repulsion = k * k * 1.5\n\n for (let iter = 0; iter < iterations; iter++) {\n const temp = 0.1 * (1 - iter / iterations) * Math.min(area.width, area.height) * 0.5\n\n // Reset velocities\n for (const node of nodes) {\n node.vx = 0\n node.vy = 0\n }\n\n // Repulsion between all pairs (node-size-aware)\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const ni = nodes[i]!\n const nj = nodes[j]!\n const dx = ni.x - nj.x\n const dy = ni.y - nj.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n\n // Minimum separation = sum of half-diagonals + gap\n const ri = Math.sqrt(ni.width * ni.width + ni.height * ni.height) / 2\n const rj = Math.sqrt(nj.width * nj.width + nj.height * nj.height) / 2\n const minDist = ri + rj + 12\n const effectiveDist = Math.max(dist - minDist * 0.5, 1)\n\n const force = repulsion / (effectiveDist * effectiveDist)\n const fx = (dx / dist) * force\n const fy = (dy / dist) * force\n\n ni.vx += fx\n ni.vy += fy\n nj.vx -= fx\n nj.vy -= fy\n }\n }\n\n // Attraction along edges (weaker to let repulsion separate nodes)\n for (const edge of edges) {\n const src = nodes[edge.source]!\n const tgt = nodes[edge.target]!\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n const force = (dist * dist) / k\n const fx = (dx / dist) * force * 0.08\n const fy = (dy / dist) * force * 0.08\n\n src.vx += fx\n src.vy += fy\n tgt.vx -= fx\n tgt.vy -= fy\n }\n\n // Gravity toward center\n for (const node of nodes) {\n const dx = cx - node.x\n const dy = cy - node.y\n node.vx += dx * 0.01\n node.vy += dy * 0.01\n }\n\n // Apply velocities with temperature damping\n for (const node of nodes) {\n if (node.pin) continue\n\n node.vx *= 0.8\n node.vy *= 0.8\n\n const speed = Math.sqrt(node.vx * node.vx + node.vy * node.vy)\n if (speed > 0) {\n const capped = Math.min(speed, temp)\n node.x += (node.vx / speed) * capped\n node.y += (node.vy / speed) * capped\n }\n\n // Constrain to area with margin for node size\n const mx = Math.max(20, node.width / 2 + 5)\n const my = Math.max(20, node.height / 2 + 5)\n node.x = Math.max(area.x + mx, Math.min(area.x + area.width - mx, node.x))\n node.y = Math.max(area.y + my, Math.min(area.y + area.height - my, node.y))\n }\n }\n\n // Post-layout overlap resolution: push apart any nodes that still overlap\n for (let pass = 0; pass < 10; pass++) {\n let moved = false\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const ni = nodes[i]!\n const nj = nodes[j]!\n if (ni.pin && nj.pin) continue\n\n // Axis-aligned overlap check\n const overlapX = (ni.width + nj.width) / 2 + 8 - Math.abs(ni.x - nj.x)\n const overlapY = (ni.height + nj.height) / 2 + 8 - Math.abs(ni.y - nj.y)\n if (overlapX <= 0 || overlapY <= 0) continue\n\n // Push apart along the axis with less overlap\n const pushX = overlapX < overlapY\n const push = (pushX ? overlapX : overlapY) / 2 + 1\n\n if (pushX) {\n const dir = ni.x >= nj.x ? 1 : -1\n if (!ni.pin) ni.x += dir * push\n if (!nj.pin) nj.x -= dir * push\n } else {\n const dir = ni.y >= nj.y ? 1 : -1\n if (!ni.pin) ni.y += dir * push\n if (!nj.pin) nj.y -= dir * push\n }\n moved = true\n }\n }\n if (!moved) break\n\n // Re-constrain\n for (const node of nodes) {\n if (node.pin) continue\n const mx = Math.max(20, node.width / 2 + 5)\n const my = Math.max(20, node.height / 2 + 5)\n node.x = Math.max(area.x + mx, Math.min(area.x + area.width - mx, node.x))\n node.y = Math.max(area.y + my, Math.min(area.y + area.height - my, node.y))\n }\n }\n}\n","import type { GraphNode, GraphEdge, LayoutDirection } from './types'\n\n/**\n * Hierarchical layout — simplified Sugiyama algorithm.\n *\n * Steps:\n * 1. Layer assignment (longest-path from roots)\n * 2. Ordering (barycenter heuristic, 3 passes)\n * 3. Coordinate assignment (even distribution per layer)\n * 4. Direction mapping (TB / BT / LR / RL)\n *\n * Cycles are handled by detecting back-edges and temporarily reversing them\n * during layout, then restoring original direction.\n */\n\nexport interface HierarchyLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n direction: LayoutDirection\n}\n\nexport function hierarchyLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: HierarchyLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area, direction } = opts\n\n // Build adjacency lists\n const outgoing = new Array<number[]>(n)\n const incoming = new Array<number[]>(n)\n for (let i = 0; i < n; i++) {\n outgoing[i] = []\n incoming[i] = []\n }\n\n // Detect and break cycles via DFS\n const edgesCopy = edges.map(e => ({ ...e }))\n breakCycles(edgesCopy, n, outgoing, incoming)\n\n // 1. Layer assignment (longest path from roots)\n const layers = assignLayers(n, outgoing, incoming)\n\n // 2. Ordering within layers (barycenter heuristic)\n const layerGroups = groupByLayer(layers, n)\n orderLayers(layerGroups, outgoing, incoming, 3)\n\n // 3. Node-size-aware coordinate assignment\n const maxLayer = Math.max(...layers, 0)\n const layerCount = maxLayer + 1\n const isVertical = direction === 'TB' || direction === 'BT'\n\n // Compute the max \"thickness\" per layer (height for TB/BT, width for LR/RL)\n const layerThickness: number[] = new Array(layerCount).fill(0)\n for (let layer = 0; layer < layerCount; layer++) {\n const grp = layerGroups[layer] ?? []\n for (const idx of grp) {\n const nd = nodes[idx]!\n const thick = isVertical ? nd.height : nd.width\n if (thick > layerThickness[layer]!) layerThickness[layer] = thick\n }\n }\n\n // Total thickness of all layers + gaps between them\n const gap = 24 // min gap between layer edges\n const totalThickness = layerThickness.reduce((s, t) => s + t, 0) + gap * (layerCount - 1)\n const availableThickness = isVertical ? area.height : area.width\n // Scale factor if nodes are too tightly packed\n const scale = totalThickness > availableThickness ? availableThickness / totalThickness : 1\n\n // Compute cumulative layer center positions\n const layerCenter: number[] = new Array(layerCount).fill(0)\n // Center the layout within the available space\n const usedThickness = totalThickness * scale\n const offset = (availableThickness - usedThickness) / 2\n let cursor = offset + (layerThickness[0]! * scale) / 2\n layerCenter[0] = cursor\n for (let layer = 1; layer < layerCount; layer++) {\n cursor += (layerThickness[layer - 1]! * scale) / 2 + gap * scale + (layerThickness[layer]! * scale) / 2\n layerCenter[layer] = cursor\n }\n\n // Reverse order for BT/RL\n if (direction === 'BT' || direction === 'RL') {\n layerCenter.reverse()\n }\n\n for (let layer = 0; layer <= maxLayer; layer++) {\n const grp = layerGroups[layer] ?? []\n if (grp.length === 0) continue\n\n for (let pos = 0; pos < grp.length; pos++) {\n const node = nodes[grp[pos]!]!\n\n // Pinned nodes override layout\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n continue\n }\n\n const posFrac = (pos + 1) / (grp.length + 1)\n const layerPos = layerCenter[layer]!\n\n switch (direction) {\n case 'TB':\n case 'BT':\n node.x = area.x + posFrac * area.width\n node.y = area.y + layerPos\n break\n case 'LR':\n case 'RL':\n node.x = area.x + layerPos\n node.y = area.y + posFrac * area.height\n break\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cycle breaking via DFS\n// ---------------------------------------------------------------------------\n\nfunction breakCycles(\n edges: GraphEdge[],\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): void {\n // Build adjacency from edges\n for (const e of edges) {\n outgoing[e.source]!.push(e.target)\n incoming[e.target]!.push(e.source)\n }\n\n // DFS-based cycle detection — reverse back-edges\n const WHITE = 0, GRAY = 1, BLACK = 2\n const color = new Array<number>(n).fill(WHITE)\n\n function dfs(u: number): void {\n color[u] = GRAY\n const out = outgoing[u]!\n for (let i = 0; i < out.length; i++) {\n const v = out[i]!\n if (color[v] === GRAY) {\n // Back-edge: reverse it in the edges list\n // Find the edge u → v and reverse it\n for (const e of edges) {\n if (e.source === u && e.target === v) {\n e.source = v\n e.target = u\n break\n }\n }\n // Update adjacency\n out.splice(i, 1)\n i--\n outgoing[v]!.push(u)\n incoming[u]!.push(v)\n const idx = incoming[v]!.indexOf(u)\n if (idx >= 0) incoming[v]!.splice(idx, 1)\n } else if (color[v] === WHITE) {\n dfs(v)\n }\n }\n color[u] = BLACK\n }\n\n for (let i = 0; i < n; i++) {\n if (color[i] === WHITE) dfs(i)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Layer assignment (longest path from roots)\n// ---------------------------------------------------------------------------\n\nfunction assignLayers(\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): number[] {\n const layers = new Array<number>(n).fill(-1)\n\n // Roots = nodes with no incoming edges\n const roots: number[] = []\n for (let i = 0; i < n; i++) {\n if (incoming[i]!.length === 0) roots.push(i)\n }\n\n // If no roots (all cycles broken), pick node 0\n if (roots.length === 0 && n > 0) roots.push(0)\n\n // BFS from roots\n const queue: number[] = []\n for (const r of roots) {\n layers[r] = 0\n queue.push(r)\n }\n\n let qi = 0\n while (qi < queue.length) {\n const u = queue[qi++]!\n for (const v of outgoing[u]!) {\n const newLayer = layers[u]! + 1\n if (layers[v]! < newLayer) {\n layers[v] = newLayer\n queue.push(v)\n }\n }\n }\n\n // Any unassigned nodes get layer 0\n for (let i = 0; i < n; i++) {\n if (layers[i]! < 0) layers[i] = 0\n }\n\n return layers\n}\n\n// ---------------------------------------------------------------------------\n// Group nodes by layer\n// ---------------------------------------------------------------------------\n\nfunction groupByLayer(layers: number[], n: number): number[][] {\n const maxLayer = Math.max(...layers, 0)\n const groups: number[][] = new Array(maxLayer + 1)\n for (let i = 0; i <= maxLayer; i++) groups[i] = []\n\n for (let i = 0; i < n; i++) {\n groups[layers[i]!]!.push(i)\n }\n return groups\n}\n\n// ---------------------------------------------------------------------------\n// Barycenter ordering\n// ---------------------------------------------------------------------------\n\nfunction orderLayers(\n layerGroups: number[][],\n outgoing: number[][],\n incoming: number[][],\n passes: number,\n): void {\n for (let pass = 0; pass < passes; pass++) {\n // Forward pass: order each layer based on positions of predecessors\n for (let l = 1; l < layerGroups.length; l++) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const prevLayer = layerGroups[l - 1]!\n for (let i = 0; i < prevLayer.length; i++) posMap.set(prevLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, incoming, posMap)\n const bb = barycenter(b, incoming, posMap)\n return ba - bb\n })\n }\n\n // Backward pass: order each layer based on positions of successors\n for (let l = layerGroups.length - 2; l >= 0; l--) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const nextLayer = layerGroups[l + 1]!\n for (let i = 0; i < nextLayer.length; i++) posMap.set(nextLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, outgoing, posMap)\n const bb = barycenter(b, outgoing, posMap)\n return ba - bb\n })\n }\n }\n}\n\nfunction barycenter(\n nodeIdx: number,\n adj: number[][],\n posMap: Map<number, number>,\n): number {\n const neighbors = adj[nodeIdx]!\n if (neighbors.length === 0) return 0\n\n let sum = 0\n let count = 0\n for (const nb of neighbors) {\n const pos = posMap.get(nb)\n if (pos !== undefined) {\n sum += pos\n count++\n }\n }\n return count > 0 ? sum / count : 0\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Circular layout — nodes arranged equally around a circle.\n *\n * Features:\n * - Connectivity-based ordering to reduce edge crossings\n * - Pin support: pinned nodes keep their position, others fill gaps\n */\n\nexport interface CircularLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n}\n\nexport function circularLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: CircularLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area } = opts\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Order nodes to reduce crossings (BFS from most-connected node)\n const order = connectivityOrder(nodes, edges)\n\n // Count unpinned nodes to distribute them evenly\n const unpinned: number[] = []\n for (const idx of order) {\n if (!nodes[idx]!.pin) unpinned.push(idx)\n }\n\n const count = Math.max(unpinned.length, 1)\n const angleStep = (2 * Math.PI) / count\n\n // Use elliptical layout to fill non-square areas better\n const maxNodeW = Math.max(...nodes.map(nd => nd.width), 40)\n const maxNodeH = Math.max(...nodes.map(nd => nd.height), 40)\n const margin = 10\n\n // Radii: fill the area minus room for the largest node\n let rx = area.width / 2 - maxNodeW / 2 - margin\n let ry = area.height / 2 - maxNodeH / 2 - margin\n\n // Ensure nodes don't overlap along the ellipse:\n // minimum arc spacing ≈ max(node diagonal) + gap\n if (count > 1) {\n const maxDiag = Math.max(\n ...nodes.map(nd => Math.sqrt(nd.width * nd.width + nd.height * nd.height)),\n 40,\n )\n const minSpacing = maxDiag + 16\n // Approximate ellipse perimeter ≈ π * (3(a+b) - √((3a+b)(a+3b)))\n const perimApprox = Math.PI * (3 * (rx + ry) - Math.sqrt((3 * rx + ry) * (rx + 3 * ry)))\n const spacingPerNode = perimApprox / count\n if (spacingPerNode < minSpacing) {\n const scale = minSpacing / spacingPerNode\n rx *= scale\n ry *= scale\n }\n }\n\n // Clamp so nodes stay within area\n rx = Math.max(20, Math.min(rx, area.width / 2 - margin))\n ry = Math.max(20, Math.min(ry, area.height / 2 - margin))\n\n const startAngle = -Math.PI / 2 // 12 o'clock\n\n for (let i = 0; i < unpinned.length; i++) {\n const node = nodes[unpinned[i]!]!\n const angle = startAngle + angleStep * i\n node.x = cx + rx * Math.cos(angle)\n node.y = cy + ry * Math.sin(angle)\n }\n\n // Apply pinned positions\n for (const node of nodes) {\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Connectivity-based ordering (BFS from most-connected node)\n// ---------------------------------------------------------------------------\n\nfunction connectivityOrder(nodes: GraphNode[], edges: GraphEdge[]): number[] {\n const n = nodes.length\n if (n === 0) return []\n\n // Build adjacency list\n const adj = new Array<number[]>(n)\n for (let i = 0; i < n; i++) adj[i] = []\n\n for (const e of edges) {\n adj[e.source]!.push(e.target)\n adj[e.target]!.push(e.source)\n }\n\n // Find most-connected node as BFS start\n let startNode = 0\n let maxDeg = 0\n for (let i = 0; i < n; i++) {\n if (adj[i]!.length > maxDeg) {\n maxDeg = adj[i]!.length\n startNode = i\n }\n }\n\n // BFS\n const visited = new Set<number>()\n const order: number[] = []\n const queue: number[] = [startNode]\n visited.add(startNode)\n\n while (queue.length > 0) {\n const u = queue.shift()!\n order.push(u)\n\n // Sort neighbors by degree (descending) for better ordering\n const neighbors = adj[u]!.filter(v => !visited.has(v))\n neighbors.sort((a, b) => adj[b]!.length - adj[a]!.length)\n\n for (const v of neighbors) {\n if (!visited.has(v)) {\n visited.add(v)\n queue.push(v)\n }\n }\n }\n\n // Add any disconnected nodes\n for (let i = 0; i < n; i++) {\n if (!visited.has(i)) order.push(i)\n }\n\n return order\n}\n","import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, circle, text, line } from '../../render/tree'\nimport type { GraphNode as RichGraphNode, GraphEdge as RichGraphEdge, GraphOptions, GraphLayout } from './types'\nimport { parseGraphData } from './parse'\nimport { measureNodeSize } from './text-measure'\nimport { renderNodeShape } from './shapes'\nimport { renderEdges } from './edges'\nimport { forceLayout as richForceLayout } from './layout-force'\nimport { hierarchyLayout } from './layout-hierarchy'\nimport { circularLayout } from './layout-circular'\n\n/**\n * Graph / Network chart — node-link diagram with force-directed layout.\n *\n * Data convention:\n * - labels: node names\n * - series[0].values: node values (controls circle radius)\n * - Edge encoding: series names contain \"→\" or \"->\" (e.g., \"A → B\")\n * with values[0] = edge weight. Same as Sankey convention.\n *\n * Alternative: adjacency matrix\n * - series[i].values[j] > 0 means there's an edge from node i to node j.\n *\n * Rich format (via options):\n * - options.nodes: Array of { id, label, shape, color, pin }\n * - options.edges: Array of { source, target, label, style, color, weight }\n * - options.layout: 'force' | 'hierarchical' | 'circular'\n *\n * Uses a simple force simulation (no external deps):\n * - Repulsion between all nodes (Coulomb's law)\n * - Attraction along edges (Hooke's law)\n * - Gravity toward center\n */\n\ninterface GraphNode {\n name: string\n index: number\n value: number\n x: number\n y: number\n vx: number\n vy: number\n}\n\ninterface GraphEdge {\n source: number\n target: number\n weight: number\n}\n\nexport const graphChartType: ChartTypePlugin = {\n type: 'graph',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const opts = options as unknown as GraphOptions\n // Rich format: data lives in options.nodes/edges, not series\n if ((opts.nodes || opts.edges) && (!data.series.length || data.series.every(s => s.values.length === 0))) {\n return {\n series: [],\n labels: [],\n bounds: { xMin: 0, xMax: 1, yMin: 0, yMax: 1 },\n }\n }\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n\n // Rich format — use the new modular pipeline\n if (graphOpts.nodes || graphOpts.edges) {\n return renderRichGraph(ctx)\n }\n\n // Legacy format — original rendering pipeline\n const nodes: RenderNode[] = []\n\n const { graphNodes, graphEdges } = parseLegacyGraphData(data, options)\n if (graphNodes.length === 0) return nodes\n\n // Run force simulation\n forceLayout(graphNodes, graphEdges, area, 80)\n\n // Render edges\n for (let ei = 0; ei < graphEdges.length; ei++) {\n const edge = graphEdges[ei]!\n const src = graphNodes[edge.source]!\n const tgt = graphNodes[edge.target]!\n\n nodes.push(line(src.x, src.y, tgt.x, tgt.y, {\n class: 'chartts-graph-edge',\n stroke: theme.gridColor,\n strokeWidth: Math.max(1, Math.min(3, edge.weight * 0.5)),\n opacity: 0.5,\n }))\n }\n\n // Compute node radii\n const maxVal = Math.max(...graphNodes.map(n => n.value), 1)\n const minR = 5\n const maxR = Math.min(20, Math.min(area.width, area.height) * 0.06)\n\n // Render nodes\n for (let ni = 0; ni < graphNodes.length; ni++) {\n const gn = graphNodes[ni]!\n const color = options.colors[ni % options.colors.length]!\n const r = minR + (gn.value / maxVal) * (maxR - minR)\n const nodeGroup: RenderNode[] = []\n\n nodeGroup.push(circle(gn.x, gn.y, r, {\n class: 'chartts-graph-node',\n fill: color,\n fillOpacity: 0.85,\n stroke: color,\n strokeWidth: 1.5,\n 'data-series': ni,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${gn.name}: ${gn.value}`,\n }))\n\n // Label\n nodeGroup.push(text(gn.x, gn.y - r - 5, gn.name, {\n class: 'chartts-graph-label',\n fill: theme.textColor,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(nodeGroup, {\n class: `chartts-series chartts-series-${ni}`,\n 'data-series-name': gn.name,\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n\n // Rich format — use modular hit test\n if (graphOpts.nodes || graphOpts.edges) {\n return richHitTest(ctx, mx, my)\n }\n\n // Legacy format — original hit test\n const { graphNodes, graphEdges } = parseLegacyGraphData(data, options)\n if (graphNodes.length === 0) return null\n\n forceLayout(graphNodes, graphEdges, area, 80)\n\n const maxVal = Math.max(...graphNodes.map(n => n.value), 1)\n const minR = 5\n const maxR = Math.min(20, Math.min(area.width, area.height) * 0.06)\n\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (let ni = 0; ni < graphNodes.length; ni++) {\n const gn = graphNodes[ni]!\n const r = minR + (gn.value / maxVal) * (maxR - minR)\n const dist = Math.sqrt((mx - gn.x) ** 2 + (my - gn.y) ** 2)\n if (dist < bestDist && dist < r + 8) {\n bestDist = dist\n best = { seriesIndex: ni, pointIndex: 0, distance: dist, x: gn.x, y: gn.y }\n }\n }\n\n return best\n },\n}\n\n// ---------------------------------------------------------------------------\n// Rich format rendering (new — shapes, layouts, edge arrows)\n// ---------------------------------------------------------------------------\n\nfunction renderRichGraph(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n const result: RenderNode[] = []\n\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return result\n\n // Measure text for each node\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n\n // Layout\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n\n // Render edges first (behind nodes)\n const edgeNodes = renderEdges(graphNodes, graphEdges, graphOpts, theme)\n if (edgeNodes.length > 0) {\n result.push(group(edgeNodes, { class: 'chartts-graph-edges' }))\n }\n\n // Render node shapes\n for (const node of graphNodes) {\n const color = node.color ?? options.colors[node.index % options.colors.length]!\n const shapeNodes = renderNodeShape(node, color, theme)\n\n result.push(group(shapeNodes, {\n class: `chartts-series chartts-series-${node.index}`,\n 'data-series-name': node.label,\n }))\n }\n\n return result\n}\n\nfunction richHitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return null\n\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (const node of graphNodes) {\n const dist = shapeDistance(node, mx, my)\n if (dist < bestDist && dist < 8) {\n bestDist = dist\n best = { seriesIndex: node.index, pointIndex: 0, distance: dist, x: node.x, y: node.y }\n }\n }\n\n return best\n}\n\n// ---------------------------------------------------------------------------\n// Layout dispatcher\n// ---------------------------------------------------------------------------\n\nfunction runLayout(\n nodes: RichGraphNode[],\n edges: RichGraphEdge[],\n opts: GraphOptions,\n area: { x: number; y: number; width: number; height: number },\n): void {\n const layout: GraphLayout = opts.layout ?? 'force'\n\n switch (layout) {\n case 'hierarchical':\n hierarchyLayout(nodes, edges, {\n area,\n direction: opts.direction ?? 'TB',\n })\n break\n\n case 'circular':\n circularLayout(nodes, edges, { area })\n break\n\n case 'force':\n default:\n richForceLayout(nodes, edges, {\n area,\n iterations: opts.iterations ?? 120,\n })\n break\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shape-aware distance (0 = inside shape, >0 = outside)\n// ---------------------------------------------------------------------------\n\nfunction shapeDistance(node: RichGraphNode, mx: number, my: number): number {\n const dx = mx - node.x\n const dy = my - node.y\n const absDx = Math.abs(dx)\n const absDy = Math.abs(dy)\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(node.width, node.height) / 2\n const dist = Math.sqrt(dx * dx + dy * dy)\n return Math.max(0, dist - r)\n }\n\n case 'diamond': {\n const hw = node.width / 2\n const hh = node.height / 2\n const d = absDx / hw + absDy / hh\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (d - 1)\n }\n\n case 'hexagon': {\n const rx = node.width / 2\n const ry = node.height / 2\n const d = (dx * dx) / (rx * rx) + (dy * dy) / (ry * ry)\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (Math.sqrt(d) - 1)\n }\n\n default: {\n const hw = node.width / 2\n const hh = node.height / 2\n const ox = Math.max(0, absDx - hw)\n const oy = Math.max(0, absDy - hh)\n return Math.sqrt(ox * ox + oy * oy)\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Legacy data parsing (original code, untouched)\n// ---------------------------------------------------------------------------\n\nfunction parseLegacyGraphData(\n data: PreparedData,\n _options: ResolvedOptions,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const graphEdges: GraphEdge[] = []\n const nodeMap = new Map<string, number>()\n\n function getOrCreateNode(name: string, value = 1): number {\n if (nodeMap.has(name)) return nodeMap.get(name)!\n const idx = graphNodes.length\n nodeMap.set(name, idx)\n graphNodes.push({\n name, index: idx, value,\n x: 0, y: 0, vx: 0, vy: 0,\n })\n return idx\n }\n\n const hasArrows = data.series.some(s => s.name.includes('→') || s.name.includes('->'))\n\n if (hasArrows) {\n // Edge list format\n for (const series of data.series) {\n const parts = series.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length < 2) continue\n const srcName = parts[0]!.trim()\n const tgtName = parts[1]!.trim()\n const weight = series.values[0] ?? 1\n\n const src = getOrCreateNode(srcName)\n const tgt = getOrCreateNode(tgtName)\n graphEdges.push({ source: src, target: tgt, weight })\n graphNodes[src]!.value += weight\n graphNodes[tgt]!.value += weight\n }\n } else {\n // Adjacency matrix or node list\n for (let i = 0; i < data.labels.length; i++) {\n getOrCreateNode(String(data.labels[i]), Math.abs(data.series[0]?.values[i] ?? 1))\n }\n\n // If multiple series with matching dimensions, treat as adjacency matrix\n if (data.series.length > 1 && data.series.length === data.labels.length) {\n for (let si = 0; si < data.series.length; si++) {\n for (let j = 0; j < data.series[si]!.values.length; j++) {\n const val = data.series[si]!.values[j]!\n if (val > 0 && si !== j) {\n graphEdges.push({ source: si, target: j, weight: val })\n }\n }\n }\n }\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Legacy force-directed layout (original code, untouched)\n// ---------------------------------------------------------------------------\n\nfunction forceLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n area: { x: number; y: number; width: number; height: number },\n iterations: number,\n): void {\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const n = nodes.length\n\n if (n === 0) return\n\n // Initialize positions in a circle\n for (let i = 0; i < n; i++) {\n const angle = (2 * Math.PI * i) / n\n const r = Math.min(area.width, area.height) * 0.3\n nodes[i]!.x = cx + r * Math.cos(angle)\n nodes[i]!.y = cy + r * Math.sin(angle)\n nodes[i]!.vx = 0\n nodes[i]!.vy = 0\n }\n\n const k = Math.sqrt((area.width * area.height) / Math.max(n, 1))\n const repulsion = k * k\n\n for (let iter = 0; iter < iterations; iter++) {\n const temp = 0.1 * (1 - iter / iterations) * Math.min(area.width, area.height) * 0.5\n\n // Reset velocities\n for (const node of nodes) {\n node.vx = 0\n node.vy = 0\n }\n\n // Repulsion between all pairs\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = nodes[i]!.x - nodes[j]!.x\n const dy = nodes[i]!.y - nodes[j]!.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n const force = repulsion / (dist * dist)\n const fx = (dx / dist) * force\n const fy = (dy / dist) * force\n nodes[i]!.vx += fx\n nodes[i]!.vy += fy\n nodes[j]!.vx -= fx\n nodes[j]!.vy -= fy\n }\n }\n\n // Attraction along edges\n for (const edge of edges) {\n const src = nodes[edge.source]!\n const tgt = nodes[edge.target]!\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n const force = (dist * dist) / k\n const fx = (dx / dist) * force * 0.1\n const fy = (dy / dist) * force * 0.1\n src.vx += fx\n src.vy += fy\n tgt.vx -= fx\n tgt.vy -= fy\n }\n\n // Gravity toward center\n for (const node of nodes) {\n const dx = cx - node.x\n const dy = cy - node.y\n node.vx += dx * 0.01\n node.vy += dy * 0.01\n }\n\n // Apply velocities with temperature damping\n for (const node of nodes) {\n const speed = Math.sqrt(node.vx * node.vx + node.vy * node.vy)\n if (speed > 0) {\n const capped = Math.min(speed, temp)\n node.x += (node.vx / speed) * capped\n node.y += (node.vy / speed) * capped\n }\n\n // Constrain to area\n const margin = 20\n node.x = Math.max(area.x + margin, Math.min(area.x + area.width - margin, node.x))\n node.y = Math.max(area.y + margin, Math.min(area.y + area.height - margin, node.y))\n }\n }\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunk6XWZSV6M_cjs = require('./chunk-6XWZSV6M.cjs');
|
|
4
|
+
var chunkX5SG6MFS_cjs = require('./chunk-X5SG6MFS.cjs');
|
|
5
|
+
var chunkW626EAS5_cjs = require('./chunk-W626EAS5.cjs');
|
|
6
6
|
|
|
7
7
|
// src/charts/pie/pie-type.ts
|
|
8
8
|
var pieChartType = {
|
|
@@ -11,7 +11,7 @@ var pieChartType = {
|
|
|
11
11
|
return { x: "categorical", y: "linear" };
|
|
12
12
|
},
|
|
13
13
|
prepareData(data, options) {
|
|
14
|
-
return
|
|
14
|
+
return chunkX5SG6MFS_cjs.prepareNoAxes(data, options);
|
|
15
15
|
},
|
|
16
16
|
render(ctx) {
|
|
17
17
|
const { data, area, theme } = ctx;
|
|
@@ -44,7 +44,7 @@ var pieChartType = {
|
|
|
44
44
|
continue;
|
|
45
45
|
}
|
|
46
46
|
const sliceInnerPad = Math.min(innerPadAngle, sliceAngle * 0.15);
|
|
47
|
-
const d =
|
|
47
|
+
const d = chunk6XWZSV6M_cjs.roundedSlicePath(
|
|
48
48
|
cx,
|
|
49
49
|
cy,
|
|
50
50
|
outerR,
|
|
@@ -57,7 +57,7 @@ var pieChartType = {
|
|
|
57
57
|
);
|
|
58
58
|
const colorIndex = i % ctx.options.colors.length;
|
|
59
59
|
const sliceNodes = [
|
|
60
|
-
|
|
60
|
+
chunkW626EAS5_cjs.path(d, {
|
|
61
61
|
class: "chartts-slice",
|
|
62
62
|
fill: `url(#chartts-pie-${colorIndex})`,
|
|
63
63
|
"data-series": 0,
|
|
@@ -73,7 +73,7 @@ var pieChartType = {
|
|
|
73
73
|
const lx = cx + labelR * Math.cos(midAngle);
|
|
74
74
|
const ly = cy + labelR * Math.sin(midAngle);
|
|
75
75
|
const pct = Math.round(value / total * 100);
|
|
76
|
-
sliceNodes.push(
|
|
76
|
+
sliceNodes.push(chunkW626EAS5_cjs.text(lx, ly, `${pct}%`, {
|
|
77
77
|
class: "chartts-slice-label",
|
|
78
78
|
fill: "#fff",
|
|
79
79
|
textAnchor: "middle",
|
|
@@ -83,7 +83,7 @@ var pieChartType = {
|
|
|
83
83
|
fontWeight: 600
|
|
84
84
|
}));
|
|
85
85
|
}
|
|
86
|
-
nodes.push(
|
|
86
|
+
nodes.push(chunkW626EAS5_cjs.group(sliceNodes, {
|
|
87
87
|
class: `chartts-series chartts-series-${i}`,
|
|
88
88
|
"data-series-name": String(data.labels[i] ?? `Slice ${i + 1}`)
|
|
89
89
|
}));
|
|
@@ -109,9 +109,9 @@ var pieChartType = {
|
|
|
109
109
|
const sliceAngle = Math.abs(values[i]) / total * Math.PI * 2;
|
|
110
110
|
const endAngle = startAngle + sliceAngle;
|
|
111
111
|
if (i === hit.pointIndex) {
|
|
112
|
-
const d =
|
|
112
|
+
const d = chunk6XWZSV6M_cjs.roundedSlicePath(cx, cy, outerR + 3, innerR - 2, startAngle, endAngle, startAngle, endAngle, 0);
|
|
113
113
|
return [
|
|
114
|
-
|
|
114
|
+
chunkW626EAS5_cjs.path(d, {
|
|
115
115
|
class: "chartts-highlight-slice",
|
|
116
116
|
fill: "none",
|
|
117
117
|
stroke: series.color,
|
|
@@ -170,5 +170,5 @@ var donutChartType = {
|
|
|
170
170
|
|
|
171
171
|
exports.donutChartType = donutChartType;
|
|
172
172
|
exports.pieChartType = pieChartType;
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-QCEC2KBW.cjs.map
|
|
174
|
+
//# sourceMappingURL=chunk-QCEC2KBW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/pie/pie-type.ts"],"names":["prepareNoAxes","roundedSlicePath","path","text","group"],"mappings":";;;;;;;AAuBO,IAAM,YAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,KAAA;AAAA,EAEN,aAAA,GAAgD;AAC9C,IAAA,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,QAAA,EAAS;AAAA,EACzC,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,OAAOA,+BAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EACpC,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM,GAAI,GAAA;AAC9B,IAAA,MAAM,QAAsB,EAAC;AAE7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,KAAA;AAElD,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAC5D,IAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AAExB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA,GAAI,CAAA;AACvD,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,MAAM,UAAA,GAAa,KAAK,WAAA,IAAe,IAAA;AACvC,IAAA,MAAM,MAAA,GAAS,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,UAAU,CAAC,CAAA;AAC7D,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,IAAO,CAAA;AAC1B,IAAA,MAAM,UAAU,KAAA,GAAQ,CAAA;AACxB,IAAA,MAAM,YAAA,GAAe,KAAK,YAAA,IAAgB,CAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,IAAA;AAOtC,IAAA,MAAM,gBAAgB,OAAA,GAAU,MAAA;AAChC,IAAA,MAAM,WAAA,GAAc,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,GAAS,CAAA;AACpD,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,gBAAgB,CAAC,CAAA;AAE7D,IAAA,IAAI,UAAA,GAAa,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA;AAE5B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,CAAC,CAAE,CAAA;AACjC,MAAA,MAAM,UAAA,GAAc,KAAA,GAAQ,KAAA,GAAS,IAAA,CAAK,EAAA,GAAK,CAAA;AAC/C,MAAA,MAAM,WAAW,UAAA,GAAa,UAAA;AAG9B,MAAA,IAAI,UAAA,GAAa,aAAA,GAAgB,CAAA,GAAI,IAAA,EAAM;AACzC,QAAA,UAAA,GAAa,QAAA;AACb,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,aAAa,IAAI,CAAA;AAE/D,MAAA,MAAM,CAAA,GAAIC,kCAAA;AAAA,QACR,EAAA;AAAA,QAAI,EAAA;AAAA,QAAI,MAAA;AAAA,QAAQ,MAAA;AAAA,QAChB,UAAA,GAAa,aAAA;AAAA,QAAe,QAAA,GAAW,aAAA;AAAA,QACvC,UAAA,GAAa,aAAA;AAAA,QAAe,QAAA,GAAW,aAAA;AAAA,QACvC;AAAA,OACF;AAEA,MAAA,MAAM,UAAA,GAAa,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,MAAA;AAC1C,MAAA,MAAM,UAAA,GAA2B;AAAA,QAC/BC,uBAAK,CAAA,EAAG;AAAA,UACN,KAAA,EAAO,eAAA;AAAA,UACP,IAAA,EAAM,oBAAoB,UAAU,CAAA,CAAA,CAAA;AAAA,UACpC,aAAA,EAAe,CAAA;AAAA,UACf,YAAA,EAAc,CAAA;AAAA,UACd,QAAA,EAAU,CAAA;AAAA,UACV,IAAA,EAAM,KAAA;AAAA,UACN,SAAA,EAAW,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,SAC/D;AAAA,OACH;AAGA,MAAA,IAAI,UAAA,IAAc,aAAa,GAAA,EAAK;AAClC,QAAA,MAAM,QAAA,GAAA,CAAY,aAAa,QAAA,IAAY,CAAA;AAC3C,QAAA,MAAM,MAAA,GAAA,CAAU,SAAS,MAAA,IAAU,CAAA;AACnC,QAAA,MAAM,EAAA,GAAK,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,IAAI,QAAQ,CAAA;AAC1C,QAAA,MAAM,EAAA,GAAK,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,IAAI,QAAQ,CAAA;AAC1C,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,QAAS,GAAG,CAAA;AAE5C,QAAA,UAAA,CAAW,KAAKC,sBAAA,CAAK,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,EAAK;AAAA,UACtC,KAAA,EAAO,qBAAA;AAAA,UACP,IAAA,EAAM,MAAA;AAAA,UACN,UAAA,EAAY,QAAA;AAAA,UACZ,gBAAA,EAAkB,SAAA;AAAA,UAClB,UAAU,KAAA,CAAM,aAAA;AAAA,UAChB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,UAAA,EAAY;AAAA,SACb,CAAC,CAAA;AAAA,MACJ;AAEA,MAAA,KAAA,CAAM,IAAA,CAAKC,wBAAM,UAAA,EAAY;AAAA,QAC3B,KAAA,EAAO,iCAAiC,CAAC,CAAA,CAAA;AAAA,QACzC,kBAAA,EAAoB,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE;AAAA,OAC9D,CAAC,CAAA;AAEF,MAAA,UAAA,GAAa,QAAA;AAAA,IACf;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAAA,EAEA,iBAAA,CAAkB,KAAoB,GAAA,EAA8B;AAClE,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,GAAA;AACvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,OAAO,MAAA,KAAW,CAAA,SAAU,EAAC;AAEnD,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAC5D,IAAA,IAAI,KAAA,KAAU,CAAA,EAAG,OAAO,EAAC;AAEzB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA,GAAI,CAAA;AACvD,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,MAAM,UAAA,GAAa,KAAK,WAAA,IAAe,IAAA;AACvC,IAAA,MAAM,MAAA,GAAS,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,UAAU,CAAC,CAAA;AAG7D,IAAA,IAAI,UAAA,GAAa,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA;AAC5B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,UAAA,GAAc,KAAK,GAAA,CAAI,MAAA,CAAO,CAAC,CAAE,CAAA,GAAI,KAAA,GAAS,IAAA,CAAK,EAAA,GAAK,CAAA;AAC9D,MAAA,MAAM,WAAW,UAAA,GAAa,UAAA;AAC9B,MAAA,IAAI,CAAA,KAAM,IAAI,UAAA,EAAY;AAExB,QAAA,MAAM,CAAA,GAAIH,kCAAA,CAAiB,EAAA,EAAI,EAAA,EAAI,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,CAAA,EAAG,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,CAAC,CAAA;AACxG,QAAA,OAAO;AAAA,UACLC,uBAAK,CAAA,EAAG;AAAA,YACN,KAAA,EAAO,yBAAA;AAAA,YACP,IAAA,EAAM,MAAA;AAAA,YACN,QAAQ,MAAA,CAAO,KAAA;AAAA,YACf,WAAA,EAAa,CAAA;AAAA,YACb,aAAA,EAAe;AAAA,WAChB;AAAA,SACH;AAAA,MACF;AACA,MAAA,UAAA,GAAa,QAAA;AAAA,IACf;AACA,IAAA,OAAO,EAAC;AAAA,EACV,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,GAAA;AACvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AAElD,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AACjC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA,GAAI,CAAA;AACvD,IAAA,MAAM,UAAA,GAAc,GAAA,CAAI,OAAA,CAAkC,WAAA,IAAe,IAAA;AACzE,IAAA,MAAM,MAAA,GAAS,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,UAAU,CAAC,CAAA;AAE7D,IAAA,MAAM,KAAK,EAAA,GAAK,EAAA;AAChB,IAAA,MAAM,KAAK,EAAA,GAAK,EAAA;AAChB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAExC,IAAA,IAAI,IAAA,GAAO,MAAA,IAAU,IAAA,GAAO,MAAA,EAAQ,OAAO,IAAA;AAE3C,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAC7B,IAAA,IAAI,QAAQ,CAAC,IAAA,CAAK,KAAK,CAAA,EAAG,KAAA,IAAS,KAAK,EAAA,GAAK,CAAA;AAE7C,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAC5D,IAAA,IAAI,KAAA,KAAU,GAAG,OAAO,IAAA;AAExB,IAAA,IAAI,UAAA,GAAa,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA;AAC5B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,UAAA,GAAc,KAAK,GAAA,CAAI,MAAA,CAAO,CAAC,CAAE,CAAA,GAAI,KAAA,GAAS,IAAA,CAAK,EAAA,GAAK,CAAA;AAC9D,MAAA,MAAM,WAAW,UAAA,GAAa,UAAA;AAE9B,MAAA,IAAI,KAAA,IAAS,UAAA,IAAc,KAAA,GAAQ,QAAA,EAAU;AAC3C,QAAA,MAAM,QAAA,GAAA,CAAY,aAAa,QAAA,IAAY,CAAA;AAC3C,QAAA,MAAM,IAAA,GAAA,CAAQ,SAAS,MAAA,IAAU,CAAA;AACjC,QAAA,OAAO,EAAE,aAAa,CAAA,EAAG,UAAA,EAAY,GAAG,QAAA,EAAU,CAAA,EAAG,GAAG,EAAA,GAAK,IAAA,GAAO,KAAK,GAAA,CAAI,QAAQ,GAAG,CAAA,EAAG,EAAA,GAAK,OAAO,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAE;AAAA,MAC5H;AAEA,MAAA,UAAA,GAAa,QAAA;AAAA,IACf;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGO,IAAM,cAAA,GAAkC;AAAA,EAC7C,GAAG,YAAA;AAAA,EACH,IAAA,EAAM,OAAA;AAAA,EACN,OAAO,GAAA,EAAkC;AACvC,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,cAAc,GAAA,EAAK;AAC/C,MAAC,KAAoB,WAAA,GAAc,IAAA;AAAA,IACrC;AACA,IAAA,OAAO,YAAA,CAAa,OAAO,GAAG,CAAA;AAAA,EAChC;AACF","file":"chunk-4WQUX2B4.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\nexport interface PieOptions {\n /** Inner radius ratio (0 = pie, 0.5+ = donut). Default 0.08 (small center gap). */\n innerRadius?: number\n /** Uniform pixel gap between slices. Default 4. */\n gap?: number\n /** Corner radius in px for rounded slice edges. Default 6. */\n cornerRadius?: number\n /** Show value labels on slices. Default true. */\n showLabels?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Pie chart type\n// ---------------------------------------------------------------------------\n\nexport const pieChartType: ChartTypePlugin = {\n type: 'pie',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme } = ctx\n const nodes: RenderNode[] = []\n\n const series = data.series[0]\n if (!series || series.values.length === 0) return nodes\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const opts = ctx.options as unknown as PieOptions\n const innerRatio = opts.innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n const gapPx = opts.gap ?? 4\n const halfGap = gapPx / 2\n const cornerRadius = opts.cornerRadius ?? 6\n const showLabels = opts.showLabels ?? true\n\n // Angular gap offsets per radius.\n // At the outer edge, uniform pixel gap is straightforward.\n // At the inner edge, clamp the pad angle so it never eats more than 15%\n // of the smallest slice — otherwise the inner path self-intersects.\n // When innerR is tiny, use the same angle as outer (gap tapers to center).\n const outerPadAngle = halfGap / outerR\n const rawInnerPad = innerR > 0 ? halfGap / innerR : 0\n const innerPadAngle = Math.min(rawInnerPad, outerPadAngle * 3)\n\n let startAngle = -Math.PI / 2\n\n for (let i = 0; i < values.length; i++) {\n const value = Math.abs(values[i]!)\n const sliceAngle = (value / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n\n // Check if slice is too small to render with gap\n if (sliceAngle < outerPadAngle * 2 + 0.01) {\n startAngle = endAngle\n continue\n }\n\n // Per-slice clamp: inner pad must not exceed 15% of the slice angle\n const sliceInnerPad = Math.min(innerPadAngle, sliceAngle * 0.15)\n\n const d = roundedSlicePath(\n cx, cy, outerR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + sliceInnerPad, endAngle - sliceInnerPad,\n cornerRadius,\n )\n\n const colorIndex = i % ctx.options.colors.length\n const sliceNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-slice',\n fill: `url(#chartts-pie-${colorIndex})`,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Slice ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label\n if (showLabels && sliceAngle > 0.3) {\n const midAngle = (startAngle + endAngle) / 2\n const labelR = (outerR + innerR) / 2\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const pct = Math.round((value / total) * 100)\n\n sliceNodes.push(text(lx, ly, `${pct}%`, {\n class: 'chartts-slice-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n nodes.push(group(sliceNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Slice ${i + 1}`),\n }))\n\n startAngle = endAngle\n }\n\n return nodes\n },\n\n getHighlightNodes(ctx: RenderContext, hit: HitResult): RenderNode[] {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return []\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return []\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const opts = ctx.options as unknown as PieOptions\n const innerRatio = opts.innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n\n // Find the hit slice angles\n let startAngle = -Math.PI / 2\n for (let i = 0; i < values.length; i++) {\n const sliceAngle = (Math.abs(values[i]!) / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n if (i === hit.pointIndex) {\n // Draw a bright outline around this slice\n const d = roundedSlicePath(cx, cy, outerR + 3, innerR - 2, startAngle, endAngle, startAngle, endAngle, 0)\n return [\n path(d, {\n class: 'chartts-highlight-slice',\n fill: 'none',\n stroke: series.color,\n strokeWidth: 2,\n strokeOpacity: 0.8,\n }),\n ]\n }\n startAngle = endAngle\n }\n return []\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const innerRatio = (ctx.options as unknown as PieOptions).innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n if (dist > outerR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return null\n\n let startAngle = -Math.PI / 2\n for (let i = 0; i < values.length; i++) {\n const sliceAngle = (Math.abs(values[i]!) / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n\n if (angle >= startAngle && angle < endAngle) {\n const midAngle = (startAngle + endAngle) / 2\n const midR = (innerR + outerR) / 2\n return { seriesIndex: 0, pointIndex: i, distance: 0, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n\n startAngle = endAngle\n }\n\n return null\n },\n}\n\n/** Donut chart = pie with innerRadius */\nexport const donutChartType: ChartTypePlugin = {\n ...pieChartType,\n type: 'donut',\n render(ctx: RenderContext): RenderNode[] {\n const opts = ctx.options as unknown as PieOptions\n if (!opts.innerRadius || opts.innerRadius < 0.3) {\n (opts as PieOptions).innerRadius = 0.55\n }\n return pieChartType.render(ctx)\n },\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/pie/pie-type.ts"],"names":["prepareNoAxes","roundedSlicePath","path","text","group"],"mappings":"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","file":"chunk-QCEC2KBW.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\nexport interface PieOptions {\n /** Inner radius ratio (0 = pie, 0.5+ = donut). Default 0.08 (small center gap). */\n innerRadius?: number\n /** Uniform pixel gap between slices. Default 4. */\n gap?: number\n /** Corner radius in px for rounded slice edges. Default 6. */\n cornerRadius?: number\n /** Show value labels on slices. Default true. */\n showLabels?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Pie chart type\n// ---------------------------------------------------------------------------\n\nexport const pieChartType: ChartTypePlugin = {\n type: 'pie',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme } = ctx\n const nodes: RenderNode[] = []\n\n const series = data.series[0]\n if (!series || series.values.length === 0) return nodes\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const opts = ctx.options as unknown as PieOptions\n const innerRatio = opts.innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n const gapPx = opts.gap ?? 4\n const halfGap = gapPx / 2\n const cornerRadius = opts.cornerRadius ?? 6\n const showLabels = opts.showLabels ?? true\n\n // Angular gap offsets per radius.\n // At the outer edge, uniform pixel gap is straightforward.\n // At the inner edge, clamp the pad angle so it never eats more than 15%\n // of the smallest slice — otherwise the inner path self-intersects.\n // When innerR is tiny, use the same angle as outer (gap tapers to center).\n const outerPadAngle = halfGap / outerR\n const rawInnerPad = innerR > 0 ? halfGap / innerR : 0\n const innerPadAngle = Math.min(rawInnerPad, outerPadAngle * 3)\n\n let startAngle = -Math.PI / 2\n\n for (let i = 0; i < values.length; i++) {\n const value = Math.abs(values[i]!)\n const sliceAngle = (value / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n\n // Check if slice is too small to render with gap\n if (sliceAngle < outerPadAngle * 2 + 0.01) {\n startAngle = endAngle\n continue\n }\n\n // Per-slice clamp: inner pad must not exceed 15% of the slice angle\n const sliceInnerPad = Math.min(innerPadAngle, sliceAngle * 0.15)\n\n const d = roundedSlicePath(\n cx, cy, outerR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + sliceInnerPad, endAngle - sliceInnerPad,\n cornerRadius,\n )\n\n const colorIndex = i % ctx.options.colors.length\n const sliceNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-slice',\n fill: `url(#chartts-pie-${colorIndex})`,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Slice ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label\n if (showLabels && sliceAngle > 0.3) {\n const midAngle = (startAngle + endAngle) / 2\n const labelR = (outerR + innerR) / 2\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const pct = Math.round((value / total) * 100)\n\n sliceNodes.push(text(lx, ly, `${pct}%`, {\n class: 'chartts-slice-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n nodes.push(group(sliceNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Slice ${i + 1}`),\n }))\n\n startAngle = endAngle\n }\n\n return nodes\n },\n\n getHighlightNodes(ctx: RenderContext, hit: HitResult): RenderNode[] {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return []\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return []\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const opts = ctx.options as unknown as PieOptions\n const innerRatio = opts.innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n\n // Find the hit slice angles\n let startAngle = -Math.PI / 2\n for (let i = 0; i < values.length; i++) {\n const sliceAngle = (Math.abs(values[i]!) / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n if (i === hit.pointIndex) {\n // Draw a bright outline around this slice\n const d = roundedSlicePath(cx, cy, outerR + 3, innerR - 2, startAngle, endAngle, startAngle, endAngle, 0)\n return [\n path(d, {\n class: 'chartts-highlight-slice',\n fill: 'none',\n stroke: series.color,\n strokeWidth: 2,\n strokeOpacity: 0.8,\n }),\n ]\n }\n startAngle = endAngle\n }\n return []\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 2\n const innerRatio = (ctx.options as unknown as PieOptions).innerRadius ?? 0.08\n const innerR = outerR * Math.max(0, Math.min(0.9, innerRatio))\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n if (dist > outerR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const values = series.values\n const total = values.reduce((sum, v) => sum + Math.abs(v), 0)\n if (total === 0) return null\n\n let startAngle = -Math.PI / 2\n for (let i = 0; i < values.length; i++) {\n const sliceAngle = (Math.abs(values[i]!) / total) * Math.PI * 2\n const endAngle = startAngle + sliceAngle\n\n if (angle >= startAngle && angle < endAngle) {\n const midAngle = (startAngle + endAngle) / 2\n const midR = (innerR + outerR) / 2\n return { seriesIndex: 0, pointIndex: i, distance: 0, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n\n startAngle = endAngle\n }\n\n return null\n },\n}\n\n/** Donut chart = pie with innerRadius */\nexport const donutChartType: ChartTypePlugin = {\n ...pieChartType,\n type: 'donut',\n render(ctx: RenderContext): RenderNode[] {\n const opts = ctx.options as unknown as PieOptions\n if (!opts.innerRadius || opts.innerRadius < 0.3) {\n (opts as PieOptions).innerRadius = 0.55\n }\n return pieChartType.render(ctx)\n },\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getBandwidth } from './chunk-E6PR75X7.js';
|
|
2
|
-
import { rect, group, prepareData } from './chunk-
|
|
2
|
+
import { rect, group, prepareData } from './chunk-XIVC32HU.js';
|
|
3
3
|
|
|
4
4
|
// src/charts/candlestick/candlestick-type.ts
|
|
5
5
|
var candlestickChartType = {
|
|
@@ -105,5 +105,5 @@ var candlestickChartType = {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
export { candlestickChartType };
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-QRVTY6UU.js.map
|
|
109
|
+
//# sourceMappingURL=chunk-QRVTY6UU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/candlestick/candlestick-type.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/charts/candlestick/candlestick-type.ts"],"names":[],"mappings":"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","file":"chunk-QRVTY6UU.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\nexport interface CandlestickOptions {\n /** OHLC data: { open, high, low, close } arrays. */\n ohlc?: {\n open: number[]\n high: number[]\n low: number[]\n close: number[]\n }\n /** Up candle color. Default green. */\n upColor?: string\n /** Down candle color. Default red. */\n downColor?: string\n /** Wick width. Default 1.5. */\n wickWidth?: number\n}\n\n/**\n * Candlestick / OHLC chart for financial data.\n *\n * Pass OHLC data via options:\n * ```ts\n * Candlestick('#el', {\n * data: { labels: ['Mon','Tue','Wed'], series: [{ name: 'AAPL', values: [150, 152, 148] }] },\n * ohlc: {\n * open: [148, 150, 152],\n * high: [153, 155, 154],\n * low: [146, 149, 147],\n * close: [150, 152, 148],\n * }\n * })\n * ```\n * The series values are used as close prices for scale computation.\n */\nexport const candlestickChartType: ChartTypePlugin = {\n type: 'candlestick',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const cOpts = options as unknown as CandlestickOptions\n const ohlc = cOpts.ohlc\n\n // Expand bounds to include all OHLC values\n const prepared = prepareData(data, options)\n\n if (ohlc) {\n let yMin = prepared.bounds.yMin\n let yMax = prepared.bounds.yMax\n for (let i = 0; i < ohlc.high.length; i++) {\n if (ohlc.high[i]! < yMin) yMin = ohlc.high[i]!\n if (ohlc.high[i]! > yMax) yMax = ohlc.high[i]!\n if (ohlc.low[i]! < yMin) yMin = ohlc.low[i]!\n if (ohlc.low[i]! > yMax) yMax = ohlc.low[i]!\n }\n prepared.bounds.yMin = yMin\n prepared.bounds.yMax = yMax\n }\n\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, xScale, yScale, options } = ctx\n const nodes: RenderNode[] = []\n\n const cOpts = options as unknown as CandlestickOptions\n const ohlc = cOpts.ohlc\n if (!ohlc) return nodes\n\n const series = data.series[0]\n if (!series) return nodes\n\n const upColor = cOpts.upColor ?? 'var(--color-emerald-500, #10b981)'\n const downColor = cOpts.downColor ?? 'var(--color-red-500, #ef4444)'\n const wickWidth = cOpts.wickWidth ?? 1.5\n\n // Get bandwidth for candle width\n const bw = getBandwidth(xScale)\n const candleWidth = bw * 0.6\n\n const candleNodes: RenderNode[] = []\n\n for (let i = 0; i < ohlc.open.length; i++) {\n const open = ohlc.open[i]!\n const high = ohlc.high[i]!\n const low = ohlc.low[i]!\n const close = ohlc.close[i]!\n\n const cx = xScale.map(i)\n const isUp = close >= open\n const color = isUp ? upColor : downColor\n\n const yHigh = yScale.map(high)\n const yLow = yScale.map(low)\n const yOpen = yScale.map(open)\n const yClose = yScale.map(close)\n\n const bodyTop = Math.min(yOpen, yClose)\n const bodyHeight = Math.max(Math.abs(yOpen - yClose), 1)\n\n // Wick (high-low line)\n candleNodes.push({\n type: 'line',\n x1: cx,\n y1: yHigh,\n x2: cx,\n y2: yLow,\n attrs: {\n class: 'chartts-wick',\n stroke: color,\n strokeWidth: wickWidth,\n 'data-series': 0,\n 'data-index': i,\n },\n })\n\n // Body (open-close rect)\n candleNodes.push(rect(cx - candleWidth / 2, bodyTop, candleWidth, bodyHeight, {\n rx: 2, ry: 2,\n class: 'chartts-candle',\n fill: isUp ? color : color,\n stroke: color,\n strokeWidth: 1,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? i}: O${open} H${high} L${low} C${close}`,\n }))\n }\n\n nodes.push(group(candleNodes, {\n class: 'chartts-series chartts-series-0',\n 'data-series-name': series.name,\n }))\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, _my: number): HitResult | null {\n const { xScale, yScale, options } = ctx\n const cOpts = options as unknown as CandlestickOptions\n const ohlc = cOpts.ohlc\n if (!ohlc) return null\n\n const bw = getBandwidth(xScale)\n const candleWidth = bw * 0.6\n\n for (let i = 0; i < ohlc.open.length; i++) {\n const cx = xScale.map(i)\n if (mx >= cx - candleWidth / 2 - 4 && mx <= cx + candleWidth / 2 + 4) {\n return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx), x: cx, y: yScale.map(ohlc.close[i]!) }\n }\n }\n\n return null\n },\n}\n"]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { prepareNoAxes } from './chunk-LKSKGQX7.js';
|
|
2
|
+
import { rect, text, group } from './chunk-XIVC32HU.js';
|
|
3
|
+
|
|
4
|
+
// src/charts/pillar/pillar-type.ts
|
|
5
|
+
var pillarChartType = {
|
|
6
|
+
type: "pillar",
|
|
7
|
+
getScaleTypes() {
|
|
8
|
+
return { x: "categorical", y: "linear" };
|
|
9
|
+
},
|
|
10
|
+
prepareData(data, options) {
|
|
11
|
+
return prepareNoAxes(data, options);
|
|
12
|
+
},
|
|
13
|
+
render(ctx) {
|
|
14
|
+
const { data, area, theme, options } = ctx;
|
|
15
|
+
const nodes = [];
|
|
16
|
+
const series = data.series[0];
|
|
17
|
+
if (!series || series.values.length === 0) return nodes;
|
|
18
|
+
const opts = options;
|
|
19
|
+
const intensity = opts.intensity ?? 1;
|
|
20
|
+
const showLabels = opts.showLabels ?? true;
|
|
21
|
+
const horizontal = opts.orientation === "horizontal";
|
|
22
|
+
const values = series.values;
|
|
23
|
+
const numRings = values.length;
|
|
24
|
+
let maxVal = 0;
|
|
25
|
+
for (const v of values) if (Math.abs(v) > maxVal) maxVal = Math.abs(v);
|
|
26
|
+
if (maxVal === 0) maxVal = 1;
|
|
27
|
+
const gap = 3;
|
|
28
|
+
const cx = area.x + area.width / 2;
|
|
29
|
+
const cy = area.y + area.height / 2;
|
|
30
|
+
if (horizontal) {
|
|
31
|
+
const totalW = area.width * 0.9;
|
|
32
|
+
const ringW = (totalW - gap * (numRings - 1)) / numRings;
|
|
33
|
+
const maxH = area.height * 0.85 * intensity;
|
|
34
|
+
const startX = cx - totalW / 2;
|
|
35
|
+
for (let i = 0; i < numRings; i++) {
|
|
36
|
+
const norm = Math.abs(values[i]) / maxVal;
|
|
37
|
+
const h = maxH * (0.15 + norm * 0.85);
|
|
38
|
+
const x = startX + i * (ringW + gap);
|
|
39
|
+
const y = cy - h / 2;
|
|
40
|
+
const color = options.colors[i % options.colors.length];
|
|
41
|
+
const colorIndex = i % options.colors.length;
|
|
42
|
+
const r = Math.min(ringW * 0.25, h * 0.15, 8);
|
|
43
|
+
const segNodes = [];
|
|
44
|
+
segNodes.push(rect(x, y, ringW, h, {
|
|
45
|
+
fill: `url(#chartts-bar-${colorIndex})`,
|
|
46
|
+
stroke: color,
|
|
47
|
+
strokeWidth: 1,
|
|
48
|
+
rx: r,
|
|
49
|
+
ry: r,
|
|
50
|
+
opacity: 0.92,
|
|
51
|
+
"data-series": 0,
|
|
52
|
+
"data-index": i,
|
|
53
|
+
tabindex: 0,
|
|
54
|
+
role: "img",
|
|
55
|
+
ariaLabel: `${data.labels[i] ?? `Ring ${i + 1}`}: ${values[i]}`
|
|
56
|
+
}));
|
|
57
|
+
if (showLabels) {
|
|
58
|
+
const label = data.labels[i] != null ? String(data.labels[i]) : "";
|
|
59
|
+
const valStr = label ? `${label}
|
|
60
|
+
${values[i]}` : String(values[i]);
|
|
61
|
+
segNodes.push(text(x + ringW / 2, cy, valStr, {
|
|
62
|
+
fill: theme.textColor,
|
|
63
|
+
textAnchor: "middle",
|
|
64
|
+
dominantBaseline: "central",
|
|
65
|
+
fontSize: theme.fontSize - 1,
|
|
66
|
+
fontFamily: theme.fontFamily,
|
|
67
|
+
fontWeight: 600
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
nodes.push(group(segNodes, {
|
|
71
|
+
class: `chartts-series chartts-series-${i}`,
|
|
72
|
+
"data-series-name": String(data.labels[i] ?? `Ring ${i + 1}`)
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
const totalH = area.height * 0.9;
|
|
77
|
+
const ringH = (totalH - gap * (numRings - 1)) / numRings;
|
|
78
|
+
const maxW = area.width * 0.85 * intensity;
|
|
79
|
+
const startY = cy - totalH / 2;
|
|
80
|
+
for (let i = 0; i < numRings; i++) {
|
|
81
|
+
const norm = Math.abs(values[i]) / maxVal;
|
|
82
|
+
const w = maxW * (0.15 + norm * 0.85);
|
|
83
|
+
const x = cx - w / 2;
|
|
84
|
+
const y = startY + i * (ringH + gap);
|
|
85
|
+
const color = options.colors[i % options.colors.length];
|
|
86
|
+
const colorIndex = i % options.colors.length;
|
|
87
|
+
const r = Math.min(w * 0.08, ringH * 0.25, 8);
|
|
88
|
+
const segNodes = [];
|
|
89
|
+
segNodes.push(rect(x, y, w, ringH, {
|
|
90
|
+
fill: `url(#chartts-bar-${colorIndex})`,
|
|
91
|
+
stroke: color,
|
|
92
|
+
strokeWidth: 1,
|
|
93
|
+
rx: r,
|
|
94
|
+
ry: r,
|
|
95
|
+
opacity: 0.92,
|
|
96
|
+
"data-series": 0,
|
|
97
|
+
"data-index": i,
|
|
98
|
+
tabindex: 0,
|
|
99
|
+
role: "img",
|
|
100
|
+
ariaLabel: `${data.labels[i] ?? `Ring ${i + 1}`}: ${values[i]}`
|
|
101
|
+
}));
|
|
102
|
+
if (showLabels) {
|
|
103
|
+
const label = data.labels[i] != null ? String(data.labels[i]) : "";
|
|
104
|
+
const valStr = label ? `${label}: ${values[i]}` : String(values[i]);
|
|
105
|
+
segNodes.push(text(cx, y + ringH / 2, valStr, {
|
|
106
|
+
fill: theme.textColor,
|
|
107
|
+
textAnchor: "middle",
|
|
108
|
+
dominantBaseline: "central",
|
|
109
|
+
fontSize: theme.fontSize - 1,
|
|
110
|
+
fontFamily: theme.fontFamily,
|
|
111
|
+
fontWeight: 600
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
nodes.push(group(segNodes, {
|
|
115
|
+
class: `chartts-series chartts-series-${i}`,
|
|
116
|
+
"data-series-name": String(data.labels[i] ?? `Ring ${i + 1}`)
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return nodes;
|
|
121
|
+
},
|
|
122
|
+
hitTest(ctx, mx, my) {
|
|
123
|
+
const { data, area, options } = ctx;
|
|
124
|
+
const series = data.series[0];
|
|
125
|
+
if (!series || series.values.length === 0) return null;
|
|
126
|
+
const opts = options;
|
|
127
|
+
const horizontal = opts.orientation === "horizontal";
|
|
128
|
+
const numRings = series.values.length;
|
|
129
|
+
const gap = 3;
|
|
130
|
+
const cx = area.x + area.width / 2;
|
|
131
|
+
const cy = area.y + area.height / 2;
|
|
132
|
+
if (horizontal) {
|
|
133
|
+
const totalW = area.width * 0.9;
|
|
134
|
+
const ringW = (totalW - gap * (numRings - 1)) / numRings;
|
|
135
|
+
const startX = cx - totalW / 2;
|
|
136
|
+
const idx = Math.floor((mx - startX) / (ringW + gap));
|
|
137
|
+
if (idx < 0 || idx >= numRings) return null;
|
|
138
|
+
const ringCx = startX + idx * (ringW + gap) + ringW / 2;
|
|
139
|
+
return { seriesIndex: 0, pointIndex: idx, distance: Math.abs(mx - ringCx), x: ringCx, y: cy };
|
|
140
|
+
} else {
|
|
141
|
+
const totalH = area.height * 0.9;
|
|
142
|
+
const ringH = (totalH - gap * (numRings - 1)) / numRings;
|
|
143
|
+
const startY = cy - totalH / 2;
|
|
144
|
+
const idx = Math.floor((my - startY) / (ringH + gap));
|
|
145
|
+
if (idx < 0 || idx >= numRings) return null;
|
|
146
|
+
const ringCy = startY + idx * (ringH + gap) + ringH / 2;
|
|
147
|
+
return { seriesIndex: 0, pointIndex: idx, distance: Math.abs(my - ringCy), x: cx, y: ringCy };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export { pillarChartType };
|
|
153
|
+
//# sourceMappingURL=chunk-QS6GR2CQ.js.map
|
|
154
|
+
//# sourceMappingURL=chunk-QS6GR2CQ.js.map
|