@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/theme/presets.ts","../src/theme/engine.ts","../src/events/bus.ts","../src/styles/chart.ts","../src/render/svg.ts","../src/render/canvas.ts","../src/render/webgl.ts","../src/scales/nice.ts","../src/scales/linear.ts","../src/scales/categorical.ts","../src/interaction/zoom-pan.ts","../src/interaction/brush.ts","../src/debug/debug.ts","../src/data/decimate.ts","../src/layout/compute.ts","../src/layout/responsive.ts","../src/render/tree.ts","../src/axis/axis.ts","../src/legend/legend.ts","../src/render/effects.ts","../src/tooltip/tooltip.ts","../src/interaction/highlight.ts","../src/interaction/interaction.ts","../src/render/states.ts","../src/api/create.ts","../src/render/string.ts","../src/data/validate.ts","../src/data/prepare.ts"],"names":["el","ATTR_MAP","resolveTheme","path","n","resolveColor","mapTextAlign","mapTextBaseline","round2","rect","NS","canvas"],"mappings":"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;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","file":"chunk-UMIJYYF3.cjs","sourcesContent":["/**\n * Chartts constants and default values.\n *\n * RULES:\n * - Imports ONLY from types.ts.\n * - Single source of truth for all default values.\n * - Colors use var(--color-*) with hex fallbacks — Tailwind-first.\n * - Every other module reads defaults from here. No duplicates.\n */\n\nimport type { ThemeConfig, ResolvedOptions, ChartOptions } from './types'\n\n// ---------------------------------------------------------------------------\n// CSS custom property prefix\n// ---------------------------------------------------------------------------\n\nexport const CSS_PREFIX = '--chartts' as const\n\n// ---------------------------------------------------------------------------\n// Color palette — Tailwind CSS var() references with hex fallbacks\n//\n// Tailwind v4: exposes --color-blue-500 etc. automatically.\n// Tailwind v3: @chartts/tailwind plugin bridges the gap.\n// No Tailwind: hex fallbacks work perfectly on their own.\n// ---------------------------------------------------------------------------\n\nexport const PALETTE = [\n 'var(--color-blue-500, #3b82f6)',\n 'var(--color-red-500, #ef4444)',\n 'var(--color-emerald-500, #10b981)',\n 'var(--color-amber-500, #f59e0b)',\n 'var(--color-violet-500, #8b5cf6)',\n 'var(--color-pink-500, #ec4899)',\n 'var(--color-cyan-500, #06b6d4)',\n 'var(--color-lime-500, #84cc16)',\n 'var(--color-orange-500, #f97316)',\n 'var(--color-indigo-500, #6366f1)',\n] as const\n\n// ---------------------------------------------------------------------------\n// Font stack\n// ---------------------------------------------------------------------------\n\nexport const FONT_FAMILY =\n 'var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)'\n\n// ---------------------------------------------------------------------------\n// Theme presets\n// ---------------------------------------------------------------------------\n\nexport const LIGHT_THEME: ThemeConfig = {\n colors: [...PALETTE],\n background: 'transparent',\n textColor: 'var(--color-gray-800, #1f2937)',\n textMuted: 'var(--color-gray-500, #6b7280)',\n axisColor: 'var(--color-gray-300, #d1d5db)',\n gridColor: 'var(--color-gray-200, #e5e7eb)',\n tooltipBackground: 'var(--color-white, #ffffff)',\n tooltipText: 'var(--color-gray-800, #1f2937)',\n tooltipBorder: 'var(--color-gray-200, #e5e7eb)',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 14,\n borderRadius: 8,\n gridStyle: 'dashed',\n gridWidth: 1,\n axisWidth: 1,\n pointRadius: 4,\n lineWidth: 2.5,\n}\n\nexport const DARK_THEME: ThemeConfig = {\n colors: [...PALETTE],\n background: 'transparent',\n textColor: 'var(--color-gray-100, #f3f4f6)',\n textMuted: 'var(--color-gray-500, #6b7280)',\n axisColor: 'var(--color-gray-700, #374151)',\n gridColor: 'var(--color-gray-800, #1f2937)',\n tooltipBackground: 'var(--color-gray-900, #111827)',\n tooltipText: 'var(--color-gray-100, #f3f4f6)',\n tooltipBorder: 'var(--color-gray-700, #374151)',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 14,\n borderRadius: 8,\n gridStyle: 'dashed',\n gridWidth: 1,\n axisWidth: 1,\n pointRadius: 4,\n lineWidth: 2.5,\n}\n\n// ---------------------------------------------------------------------------\n// Chart type classification sets\n// ---------------------------------------------------------------------------\n\n/** Chart types that suppress axes/grid and render their own layout. */\nexport const NO_AXES_TYPES = new Set([\n 'sparkline', 'gauge', 'funnel', 'radar', 'pie', 'donut',\n 'heatmap', 'horizontal-bar', 'treemap', 'polar',\n 'radial-bar', 'bullet', 'dumbbell', 'calendar', 'sankey',\n 'sunburst', 'tree', 'graph', 'parallel', 'themeriver',\n 'pictorialbar', 'chord', 'geo', 'lines', 'matrix', 'custom',\n 'kagi', 'renko',\n])\n\n/** Chart types that use band mode for the x-scale. */\nexport const BAND_SCALE_TYPES = new Set([\n 'bar', 'stacked-bar', 'horizontal-bar', 'candlestick',\n 'waterfall', 'histogram', 'boxplot', 'lollipop', 'combo',\n 'ohlc', 'volume',\n])\n\n// ---------------------------------------------------------------------------\n// Default options resolver\n// ---------------------------------------------------------------------------\n\nexport function resolveOptions(\n opts: ChartOptions,\n seriesCount: number,\n): ResolvedOptions {\n const multi = seriesCount > 1\n\n // Spread original opts first so chart-type-specific properties (ohlc, sizes,\n // totals, gaugeMin, etc.) survive into RenderContext.options.\n return {\n ...opts,\n width: opts.width ?? 0,\n height: opts.height ?? 0,\n padding: opts.padding ?? [12, 16, 8, 8],\n renderer: opts.renderer ?? 'svg',\n theme: opts.theme ?? 'auto',\n\n xLabel: opts.xLabel ?? '',\n yLabel: opts.yLabel ?? '',\n xFormat: opts.xFormat ?? formatX,\n yFormat: opts.yFormat ?? formatY,\n xGrid: opts.xGrid ?? false,\n yGrid: opts.yGrid ?? true,\n xAxis: opts.xAxis ?? true,\n yAxis: opts.yAxis ?? true,\n xTicks: opts.xTicks ?? 0,\n yTicks: opts.yTicks ?? 5,\n yMin: opts.yMin,\n yMax: opts.yMax,\n\n legend: opts.legend === undefined\n ? (multi ? 'top' : false)\n : opts.legend === true ? 'top' : opts.legend,\n tooltip: opts.tooltip === undefined || opts.tooltip === true\n ? { enabled: true }\n : opts.tooltip === false ? false : opts.tooltip,\n\n animate: opts.animate ?? true,\n duration: opts.duration ?? 300,\n\n zoom: opts.zoom ?? false,\n pan: opts.pan ?? false,\n crosshair: !opts.crosshair\n ? false\n : opts.crosshair === true\n ? { enabled: true, mode: 'vertical' as const }\n : { enabled: opts.crosshair.enabled ?? true, mode: opts.crosshair.mode ?? 'vertical' as const },\n brush: opts.brush ?? false,\n\n colors: opts.colors ?? [...PALETTE],\n fontFamily: opts.fontFamily ?? FONT_FAMILY,\n fontSize: opts.fontSize ?? 12,\n curve: opts.curve ?? 'monotone',\n barRadius: opts.barRadius ?? 4,\n barGap: opts.barGap ?? 0.2,\n\n ariaLabel: opts.ariaLabel ?? 'Chart',\n ariaDescription: opts.ariaDescription ?? '',\n\n onClick: opts.onClick,\n onHover: opts.onHover,\n\n className: opts.className ?? '',\n }\n}\n\n// ---------------------------------------------------------------------------\n// Default formatters\n// ---------------------------------------------------------------------------\n\nfunction formatX(value: string | number | Date): string {\n if (value instanceof Date) return value.toLocaleDateString()\n return String(value)\n}\n\nfunction formatY(value: number): string {\n const abs = Math.abs(value)\n if (abs >= 1e12) return trim(value / 1e12, 'T')\n if (abs >= 1e9) return trim(value / 1e9, 'B')\n if (abs >= 1e6) return trim(value / 1e6, 'M')\n if (abs >= 1e3) return trim(value / 1e3, 'K')\n if (Number.isInteger(value)) return String(value)\n return value.toFixed(1)\n}\n\n/** Format with suffix, dropping trailing .0 (e.g. 1.0K → 1K) */\nfunction trim(v: number, suffix: string): string {\n const s = v.toFixed(1)\n return (s.endsWith('.0') ? s.slice(0, -2) : s) + suffix\n}\n","import type { ThemeConfig } from '../types'\nimport { FONT_FAMILY } from '../constants'\n\n/**\n * Named theme presets for different use cases.\n *\n * Each preset defines a complete ThemeConfig with a curated color palette,\n * typography, and styling tuned for a specific aesthetic.\n */\n\n// ---------------------------------------------------------------------------\n// Corporate / Finance — muted blues and grays, solid grid, conservative\n// ---------------------------------------------------------------------------\n\nexport const CORPORATE_THEME: ThemeConfig = {\n colors: [\n '#1e40af', '#2563eb', '#3b82f6', '#60a5fa', '#93c5fd',\n '#1e3a5f', '#0f766e', '#4f46e5', '#7c3aed', '#be185d',\n ],\n background: 'transparent',\n textColor: '#1e293b',\n textMuted: '#64748b',\n axisColor: '#94a3b8',\n gridColor: '#e2e8f0',\n tooltipBackground: '#ffffff',\n tooltipText: '#1e293b',\n tooltipBorder: '#cbd5e1',\n fontFamily: '\"Inter\", \"Segoe UI\", -apple-system, sans-serif',\n fontSize: 11,\n fontSizeSmall: 9,\n fontSizeLarge: 13,\n borderRadius: 4,\n gridStyle: 'solid',\n gridWidth: 1,\n axisWidth: 1,\n pointRadius: 3,\n lineWidth: 2,\n}\n\n// ---------------------------------------------------------------------------\n// SaaS / Dashboard — vibrant, modern, slightly rounded\n// ---------------------------------------------------------------------------\n\nexport const SAAS_THEME: ThemeConfig = {\n colors: [\n '#6366f1', '#8b5cf6', '#ec4899', '#f43f5e', '#f97316',\n '#eab308', '#22c55e', '#06b6d4', '#0ea5e9', '#a855f7',\n ],\n background: 'transparent',\n textColor: '#0f172a',\n textMuted: '#475569',\n axisColor: '#cbd5e1',\n gridColor: '#f1f5f9',\n tooltipBackground: '#0f172a',\n tooltipText: '#f8fafc',\n tooltipBorder: '#334155',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 14,\n borderRadius: 8,\n gridStyle: 'dashed',\n gridWidth: 1,\n axisWidth: 1,\n pointRadius: 4,\n lineWidth: 2.5,\n}\n\n// ---------------------------------------------------------------------------\n// Startup / Bold — high contrast, energetic palette\n// ---------------------------------------------------------------------------\n\nexport const STARTUP_THEME: ThemeConfig = {\n colors: [\n '#ff6b6b', '#feca57', '#48dbfb', '#ff9ff3', '#54a0ff',\n '#5f27cd', '#01a3a4', '#f368e0', '#ff6348', '#2ed573',\n ],\n background: 'transparent',\n textColor: '#2d3436',\n textMuted: '#636e72',\n axisColor: '#b2bec3',\n gridColor: '#dfe6e9',\n tooltipBackground: '#2d3436',\n tooltipText: '#dfe6e9',\n tooltipBorder: '#636e72',\n fontFamily: '\"DM Sans\", \"Inter\", -apple-system, sans-serif',\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 15,\n borderRadius: 10,\n gridStyle: 'dotted',\n gridWidth: 1,\n axisWidth: 2,\n pointRadius: 5,\n lineWidth: 3,\n}\n\n// ---------------------------------------------------------------------------\n// Editorial / Minimal — newspaper-inspired, serif accents, restrained palette\n// ---------------------------------------------------------------------------\n\nexport const EDITORIAL_THEME: ThemeConfig = {\n colors: [\n '#1a1a1a', '#c0392b', '#2980b9', '#8e44ad', '#27ae60',\n '#d35400', '#2c3e50', '#16a085', '#f39c12', '#7f8c8d',\n ],\n background: 'transparent',\n textColor: '#1a1a1a',\n textMuted: '#7f8c8d',\n axisColor: '#bdc3c7',\n gridColor: '#ecf0f1',\n tooltipBackground: '#1a1a1a',\n tooltipText: '#ecf0f1',\n tooltipBorder: '#34495e',\n fontFamily: '\"Georgia\", \"Times New Roman\", serif',\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 14,\n borderRadius: 0,\n gridStyle: 'solid',\n gridWidth: 0.5,\n axisWidth: 1.5,\n pointRadius: 3,\n lineWidth: 1.5,\n}\n\n// ---------------------------------------------------------------------------\n// Ocean / Dark — rich dark mode with ocean-inspired gradients\n// ---------------------------------------------------------------------------\n\nexport const OCEAN_THEME: ThemeConfig = {\n colors: [\n '#00d2ff', '#3a7bd5', '#00b894', '#fdcb6e', '#e17055',\n '#a29bfe', '#fd79a8', '#55efc4', '#74b9ff', '#ffeaa7',\n ],\n background: 'transparent',\n textColor: '#dfe6e9',\n textMuted: '#636e72',\n axisColor: '#2d3436',\n gridColor: '#2d3436',\n tooltipBackground: '#0a0a23',\n tooltipText: '#dfe6e9',\n tooltipBorder: '#2d3436',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n fontSizeSmall: 10,\n fontSizeLarge: 14,\n borderRadius: 6,\n gridStyle: 'dashed',\n gridWidth: 1,\n axisWidth: 1,\n pointRadius: 3.5,\n lineWidth: 2,\n}\n\n/** All named presets keyed by name */\nexport const THEME_PRESETS: Record<string, ThemeConfig> = {\n corporate: CORPORATE_THEME,\n saas: SAAS_THEME,\n startup: STARTUP_THEME,\n editorial: EDITORIAL_THEME,\n ocean: OCEAN_THEME,\n}\n","import type { ThemeConfig } from '../types'\nimport { CSS_PREFIX, LIGHT_THEME, DARK_THEME } from '../constants'\nimport { THEME_PRESETS } from './presets'\n\nexport function resolveTheme(theme: string | ThemeConfig): ThemeConfig {\n if (typeof theme === 'object') return { ...LIGHT_THEME, ...theme }\n\n switch (theme) {\n case 'dark': return DARK_THEME\n case 'light': return LIGHT_THEME\n case 'auto': return detectScheme() === 'dark' ? DARK_THEME : LIGHT_THEME\n default: {\n const preset = THEME_PRESETS[theme]\n if (preset) return preset\n return LIGHT_THEME\n }\n }\n}\n\n/**\n * Apply theme as CSS custom properties on a DOM element.\n * Every token becomes --chartts-* so users can override via CSS or Tailwind.\n */\nexport function applyTheme(el: HTMLElement | SVGElement, theme: ThemeConfig): void {\n const s = el.style\n\n theme.colors.forEach((c, i) => s.setProperty(`${CSS_PREFIX}-color-${i + 1}`, c))\n\n s.setProperty(`${CSS_PREFIX}-bg`, theme.background)\n s.setProperty(`${CSS_PREFIX}-text`, theme.textColor)\n s.setProperty(`${CSS_PREFIX}-text-muted`, theme.textMuted)\n s.setProperty(`${CSS_PREFIX}-axis`, theme.axisColor)\n s.setProperty(`${CSS_PREFIX}-grid`, theme.gridColor)\n s.setProperty(`${CSS_PREFIX}-tooltip-bg`, theme.tooltipBackground)\n s.setProperty(`${CSS_PREFIX}-tooltip-text`, theme.tooltipText)\n s.setProperty(`${CSS_PREFIX}-tooltip-border`, theme.tooltipBorder)\n s.setProperty(`${CSS_PREFIX}-font-family`, theme.fontFamily)\n s.setProperty(`${CSS_PREFIX}-font-size`, `${theme.fontSize}px`)\n s.setProperty(`${CSS_PREFIX}-font-size-sm`, `${theme.fontSizeSmall}px`)\n s.setProperty(`${CSS_PREFIX}-font-size-lg`, `${theme.fontSizeLarge}px`)\n s.setProperty(`${CSS_PREFIX}-radius`, `${theme.borderRadius}px`)\n s.setProperty(`${CSS_PREFIX}-grid-width`, String(theme.gridWidth))\n s.setProperty(`${CSS_PREFIX}-axis-width`, String(theme.axisWidth))\n s.setProperty(`${CSS_PREFIX}-point-r`, String(theme.pointRadius))\n s.setProperty(`${CSS_PREFIX}-line-w`, String(theme.lineWidth))\n}\n\n/** Watch for system color scheme changes. Returns unsubscribe function. */\nexport function watchScheme(cb: (scheme: 'light' | 'dark') => void): () => void {\n if (typeof window === 'undefined' || !window.matchMedia) return () => {}\n const mql = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = (e: MediaQueryListEvent): void => cb(e.matches ? 'dark' : 'light')\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n}\n\nfunction detectScheme(): 'light' | 'dark' {\n if (typeof window === 'undefined' || !window.matchMedia) return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n","import type { ChartEvents, EventHandler, Unsubscribe, EventBus } from '../types'\n\nexport function createEventBus(): EventBus {\n const listeners = new Map<string, Set<EventHandler<unknown>>>()\n\n return {\n on<K extends keyof ChartEvents>(\n event: K,\n handler: EventHandler<ChartEvents[K]>,\n ): Unsubscribe {\n let set = listeners.get(event as string)\n if (!set) {\n set = new Set()\n listeners.set(event as string, set)\n }\n set.add(handler as EventHandler<unknown>)\n return () => {\n set.delete(handler as EventHandler<unknown>)\n if (set.size === 0) listeners.delete(event as string)\n }\n },\n\n emit<K extends keyof ChartEvents>(event: K, payload: ChartEvents[K]): void {\n const set = listeners.get(event as string)\n if (set) for (const h of set) h(payload)\n },\n\n off<K extends keyof ChartEvents>(\n event: K,\n handler: EventHandler<ChartEvents[K]>,\n ): void {\n const set = listeners.get(event as string)\n if (!set) return\n set.delete(handler as EventHandler<unknown>)\n if (set.size === 0) listeners.delete(event as string)\n },\n\n destroy(): void {\n listeners.clear()\n },\n }\n}\n","/**\n * Embedded CSS for chart animations, hover effects, and visual polish.\n * Injected into SVG <defs> as a <style> element.\n */\n\nexport const CHART_CSS = /* css */ `\n/* ---- Base ---- */\n.chartts {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* ---- Lines ---- */\n.chartts-line {\n stroke-linecap: round;\n stroke-linejoin: round;\n transition: stroke-width 0.2s ease, opacity 0.2s ease;\n}\n.chartts-series:hover .chartts-line {\n stroke-width: 2.5;\n}\n\n/* Line draw animation */\n@keyframes chartts-draw {\n from { stroke-dashoffset: var(--chartts-path-len); }\n to { stroke-dashoffset: 0; }\n}\n.chartts-line[style*=\"--chartts-path-len\"] {\n animation: chartts-draw 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n}\n\n/* ---- Area fills ---- */\n@keyframes chartts-fade-up {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-area {\n animation: chartts-fade-up 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n transition: opacity 0.2s ease;\n}\n\n/* ---- Line glow ---- */\n.chartts-line-glow {\n stroke-linecap: round;\n stroke-linejoin: round;\n pointer-events: none;\n}\n\n/* ---- Point glow ---- */\n.chartts-point-glow, .chartts-dot-glow {\n pointer-events: none;\n}\n\n/* ---- Data points ---- */\n@keyframes chartts-point-pop {\n 0% { opacity: 0; transform: scale(0); }\n 60% { transform: scale(1.3); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-point {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-point-pop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 10ms + 0.4s);\n opacity: 0;\n transition: opacity 0.15s ease, stroke-width 0.15s ease;\n cursor: pointer;\n}\n.chartts-point:hover {\n stroke-width: 3;\n filter: brightness(1.15);\n}\n\n/* ---- Bars ---- */\n@keyframes chartts-bar-in {\n from { opacity: 0; transform: scaleY(0.3); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-bar {\n transform-origin: bottom center;\n transform-box: fill-box;\n animation: chartts-bar-in 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-bar:hover {\n filter: brightness(1.12) saturate(1.1);\n}\n.chartts-bar-horizontal {\n transform-origin: left center;\n animation-name: chartts-hbar-in;\n}\n@keyframes chartts-hbar-in {\n from { opacity: 0; transform: scaleX(0.3); }\n to { opacity: 1; transform: scaleX(1); }\n}\n\n/* ---- Pie / Donut slices ---- */\n@keyframes chartts-slice-in {\n from { opacity: 0; transform: scale(0.85); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-slice {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-slice-in 0.5s cubic-bezier(0.34, 1.3, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 25ms);\n opacity: 0;\n transition: filter 0.2s ease, opacity 0.2s ease, transform 0.2s cubic-bezier(0.34, 1.3, 0.64, 1);\n cursor: pointer;\n pointer-events: all;\n}\n.chartts-slice:hover {\n filter: brightness(1.08) saturate(1.15) drop-shadow(0 2px 8px rgba(0,0,0,0.2));\n transform: scale(1.04);\n}\n\n/* ---- Sparkline ---- */\n.chartts-sparkline-line {\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.chartts-sparkline-line[style*=\"--chartts-path-len\"] {\n animation: chartts-draw 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n}\n\n/* ---- Radar ---- */\n@keyframes chartts-radar-in {\n from { opacity: 0; transform: scale(0.3); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-radar-area {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-radar-in 0.7s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-radar-i, 0) * 35ms);\n opacity: 0;\n transition: opacity 0.2s ease, fill-opacity 0.2s ease;\n}\n.chartts-radar-area:hover {\n fill-opacity: 0.35;\n}\n.chartts-radar-point {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-point-pop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 10ms + 0.5s);\n opacity: 0;\n transition: r 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-radar-point:hover {\n filter: brightness(1.15);\n}\n\n/* ---- Gauge ---- */\n@keyframes chartts-gauge-draw {\n from { stroke-dashoffset: var(--chartts-path-len); }\n to { stroke-dashoffset: 0; }\n}\n@keyframes chartts-gauge-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-gauge-fill[style*=\"--chartts-path-len\"] {\n animation: chartts-gauge-draw 1s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n}\n.chartts-gauge-needle {\n animation: chartts-gauge-fade 0.4s ease 0.6s forwards;\n opacity: 0;\n}\n.chartts-gauge-needle-cap {\n animation: chartts-gauge-fade 0.3s ease 0.65s forwards;\n opacity: 0;\n}\n.chartts-gauge-tick {\n opacity: 0.5;\n}\n\n/* ---- Funnel ---- */\n@keyframes chartts-funnel-slide {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.chartts-funnel-step {\n animation: chartts-funnel-slide 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 25ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-funnel-step:hover {\n filter: brightness(1.1);\n}\n\n/* ---- Waterfall ---- */\n@keyframes chartts-waterfall-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.chartts-waterfall-bar {\n animation: chartts-waterfall-in 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-waterfall-bar:hover {\n filter: brightness(1.12);\n}\n\n/* ---- Candlestick ---- */\n@keyframes chartts-candle-in {\n from { opacity: 0; transform: scaleY(0.5); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-candle {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-candle-in 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-candle:hover {\n filter: brightness(1.15);\n}\n.chartts-wick {\n transition: opacity 0.15s ease;\n}\n\n/* ---- Bubble ---- */\n@keyframes chartts-bubble-pop {\n 0% { opacity: 0; transform: scale(0); }\n 70% { transform: scale(1.08); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-bubble {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-bubble-pop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-bubble:hover {\n filter: brightness(1.1) saturate(1.1);\n}\n\n/* ---- Scatter dots ---- */\n.chartts-dot {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-point-pop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 10ms);\n opacity: 0;\n transition: filter 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-dot:hover {\n filter: brightness(1.15);\n opacity: 1;\n}\n\n/* ---- Heatmap ---- */\n@keyframes chartts-cell-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-heatmap-cell {\n animation: chartts-cell-in 0.3s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-heatmap-cell:hover {\n filter: brightness(1.2) saturate(1.2);\n stroke: currentColor;\n stroke-width: 1.5;\n}\n\n/* ---- Boxplot ---- */\n@keyframes chartts-boxplot-in {\n from { opacity: 0; transform: scaleY(0.4); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-boxplot-box {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-boxplot-in 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 3ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-boxplot-box:hover {\n filter: brightness(1.15);\n}\n.chartts-boxplot-whisker, .chartts-boxplot-cap, .chartts-boxplot-median {\n pointer-events: none;\n}\n\n/* ---- Treemap ---- */\n@keyframes chartts-cell-grow {\n from { opacity: 0; transform: scale(0.85); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-treemap-cell {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-cell-grow 0.4s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 12ms);\n cursor: pointer;\n transition: filter 0.15s ease;\n}\n.chartts-treemap-cell:hover {\n filter: brightness(1.15);\n}\n.chartts-treemap-label, .chartts-treemap-value {\n pointer-events: none;\n}\n\n/* ---- Polar ---- */\n@keyframes chartts-wedge-in {\n from { opacity: 0; transform: scale(0); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-polar-wedge {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-wedge-in 0.5s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n cursor: pointer;\n transition: filter 0.15s ease;\n}\n.chartts-polar-wedge:hover {\n filter: brightness(1.15);\n}\n.chartts-polar-label {\n pointer-events: none;\n}\n.chartts-polar-grid {\n pointer-events: none;\n}\n\n/* ---- Radial Bar ---- */\n@keyframes chartts-radialbar-in {\n from { opacity: 0; stroke-dashoffset: var(--chartts-path-len, 200); }\n to { opacity: 1; stroke-dashoffset: 0; }\n}\n.chartts-radialbar-arc {\n animation: chartts-radialbar-in 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 30ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-radialbar-arc:hover {\n filter: brightness(1.15);\n}\n.chartts-radialbar-track {\n pointer-events: none;\n}\n\n/* ---- Lollipop ---- */\n@keyframes chartts-lollipop-in {\n from { opacity: 0; transform: scaleY(0.3); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-lollipop-stem {\n transform-origin: bottom center;\n transform-box: fill-box;\n animation: chartts-lollipop-in 0.4s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 12ms);\n}\n.chartts-lollipop-dot {\n cursor: pointer;\n transition: r 0.15s ease, filter 0.15s ease;\n}\n.chartts-lollipop-dot:hover {\n filter: brightness(1.15);\n}\n\n/* ---- Bullet ---- */\n@keyframes chartts-bullet-in {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n}\n.chartts-bullet-bar {\n transform-origin: left center;\n transform-box: fill-box;\n animation: chartts-bullet-in 0.5s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 25ms);\n cursor: pointer;\n transition: filter 0.15s ease;\n}\n.chartts-bullet-bar:hover {\n filter: brightness(1.15);\n}\n.chartts-bullet-range, .chartts-bullet-target, .chartts-bullet-label {\n pointer-events: none;\n}\n\n/* ---- Dumbbell ---- */\n@keyframes chartts-dumbbell-in {\n 0% { opacity: 0; transform: scale(0); }\n 70% { transform: scale(1.15); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-dumbbell-dot {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-dumbbell-in 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 3ms);\n opacity: 0;\n cursor: pointer;\n transition: filter 0.15s ease;\n}\n.chartts-dumbbell-dot:hover {\n filter: brightness(1.15);\n}\n.chartts-dumbbell-connector, .chartts-dumbbell-label {\n pointer-events: none;\n}\n\n/* ---- Calendar ---- */\n.chartts-calendar-cell {\n cursor: pointer;\n transition: filter 0.15s ease;\n animation: chartts-cell-in 0.3s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 3ms);\n}\n.chartts-calendar-cell:hover {\n filter: brightness(1.2);\n}\n.chartts-calendar-daylabel {\n pointer-events: none;\n}\n\n/* ---- Sankey ---- */\n@keyframes chartts-sankey-link-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-sankey-link {\n animation: chartts-sankey-link-in 0.5s ease forwards;\n opacity: 0;\n transition: fill-opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-sankey-link:hover {\n fill-opacity: 0.5 !important;\n}\n.chartts-sankey-node {\n cursor: pointer;\n transition: filter 0.15s ease;\n}\n.chartts-sankey-node:hover {\n filter: brightness(1.15);\n}\n.chartts-sankey-label {\n pointer-events: none;\n}\n\n/* ---- Combo ---- */\n.chartts-combo-line {\n pointer-events: none;\n}\n.chartts-combo-point {\n cursor: pointer;\n transition: r 0.15s ease;\n}\n\n/* ---- Sunburst ---- */\n@keyframes chartts-sunburst-in {\n from { opacity: 0; transform: scale(0.85); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-sunburst-sector {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-sunburst-in 0.5s cubic-bezier(0.34, 1.3, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 10ms);\n opacity: 0;\n transition: filter 0.15s ease, fill-opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-sunburst-sector:hover {\n filter: brightness(1.15);\n fill-opacity: 0.95 !important;\n}\n.chartts-sunburst-label {\n pointer-events: none;\n}\n\n/* ---- Tree ---- */\n@keyframes chartts-tree-node-in {\n 0% { opacity: 0; transform: scale(0); }\n 70% { transform: scale(1.2); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-tree-node {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-tree-node-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 15ms);\n opacity: 0;\n transition: filter 0.15s ease, r 0.15s ease;\n cursor: pointer;\n}\n.chartts-tree-node:hover {\n filter: brightness(1.15);\n}\n.chartts-tree-edge {\n opacity: 0.6;\n pointer-events: none;\n}\n.chartts-tree-label {\n pointer-events: none;\n}\n\n/* ---- Graph ---- */\n@keyframes chartts-graph-node-in {\n 0% { opacity: 0; transform: scale(0); }\n 70% { transform: scale(1.15); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-graph-node {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-graph-node-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 12ms);\n opacity: 0;\n transition: filter 0.15s ease, r 0.15s ease;\n cursor: pointer;\n}\n.chartts-graph-node:hover {\n filter: brightness(1.15) saturate(1.2);\n}\n.chartts-graph-edge {\n pointer-events: none;\n animation: chartts-sankey-link-in 0.5s ease forwards;\n opacity: 0;\n}\n.chartts-graph-label {\n pointer-events: none;\n}\n\n/* ---- Parallel ---- */\n@keyframes chartts-parallel-in {\n from { opacity: 0; stroke-dashoffset: var(--chartts-path-len, 1000); }\n to { opacity: 1; stroke-dashoffset: 0; }\n}\n.chartts-parallel-line {\n transition: opacity 0.2s ease, stroke-width 0.2s ease;\n cursor: pointer;\n}\n.chartts-parallel-line:hover {\n opacity: 1 !important;\n stroke-width: 3;\n}\n.chartts-parallel-axis {\n pointer-events: none;\n}\n.chartts-parallel-label, .chartts-parallel-tick {\n pointer-events: none;\n}\n\n/* ---- ThemeRiver ---- */\n@keyframes chartts-stream-in {\n from { opacity: 0; transform: scaleY(0.3); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-themeriver-stream {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-stream-in 0.6s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 25ms);\n opacity: 0;\n transition: fill-opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-themeriver-stream:hover {\n fill-opacity: 0.9 !important;\n}\n.chartts-themeriver-label {\n pointer-events: none;\n}\n\n/* ---- PictorialBar ---- */\n@keyframes chartts-pictorial-in {\n 0% { opacity: 0; transform: scale(0); }\n 70% { transform: scale(1.1); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.chartts-pictorialbar-symbol {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-pictorial-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n animation-delay: calc(var(--chartts-i, 0) * 3ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-pictorialbar-symbol:hover {\n filter: brightness(1.15);\n}\n.chartts-pictorialbar-value, .chartts-pictorialbar-label {\n pointer-events: none;\n}\n\n/* ---- Chord ---- */\n@keyframes chartts-chord-arc-in {\n from { opacity: 0; transform: scale(0.9); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-chord-arc {\n transform-origin: center;\n transform-box: fill-box;\n animation: chartts-chord-arc-in 0.5s ease forwards;\n animation-delay: calc(var(--chartts-i, 0) * 3ms);\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-chord-arc:hover {\n filter: brightness(1.15);\n}\n@keyframes chartts-chord-ribbon-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-chord-ribbon {\n animation: chartts-chord-ribbon-in 0.6s ease 0.3s forwards;\n opacity: 0;\n transition: fill-opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-chord-ribbon:hover {\n fill-opacity: 0.55 !important;\n}\n.chartts-chord-label {\n pointer-events: none;\n}\n\n/* ---- States (empty / loading / error) ---- */\n.chartts-state {\n opacity: 1;\n}\n@keyframes chartts-shimmer {\n 0% { opacity: 0.3; }\n 50% { opacity: 0.7; }\n 100% { opacity: 0.3; }\n}\n.chartts-skeleton-bar {\n animation: chartts-shimmer 1.5s ease-in-out infinite;\n animation-delay: calc(var(--chartts-i, 0) * 40ms);\n}\n\n/* ---- Grid ---- */\n.chartts-grid-h, .chartts-grid-v {\n opacity: 0.6;\n}\n\n/* ---- GEO/Map ---- */\n@keyframes chartts-geo-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-geo-region {\n animation: chartts-geo-in 0.4s ease calc(var(--chartts-i, 0) * 3ms) forwards;\n opacity: 0;\n transition: fill-opacity 0.15s ease, filter 0.15s ease, stroke-width 0.15s ease, stroke 0.15s ease;\n cursor: pointer;\n}\n.chartts-geo-region:hover {\n filter: brightness(1.15) drop-shadow(0 0 2px rgba(0,0,0,0.3));\n fill-opacity: 0.95 !important;\n stroke: #fff !important;\n stroke-width: 1.5px !important;\n}\n.chartts-geo-label {\n pointer-events: none;\n text-shadow: 0 0 3px rgba(0,0,0,0.5), 0 0 6px rgba(0,0,0,0.3);\n}\n.chartts-geo-scatter {\n transition: r 0.15s ease, opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-geo-scatter:hover {\n opacity: 0.9;\n filter: drop-shadow(0 0 4px currentColor);\n}\n.chartts-geo-legend text {\n user-select: none;\n}\n\n/* ---- Lines (flow) ---- */\n@keyframes chartts-lines-flow-in {\n from { stroke-dashoffset: 300; opacity: 0; }\n to { stroke-dashoffset: 0; opacity: 1; }\n}\n.chartts-lines-flow {\n stroke-dasharray: 300;\n animation: chartts-lines-flow-in 0.8s ease calc(var(--chartts-i, 0) * 8ms) forwards;\n opacity: 0;\n transition: stroke-width 0.2s ease, stroke-opacity 0.2s ease;\n cursor: pointer;\n}\n.chartts-lines-flow:hover {\n stroke-opacity: 0.9;\n stroke-width: 4;\n}\n.chartts-lines-node {\n transition: r 0.15s ease;\n cursor: pointer;\n}\n\n/* ---- Matrix ---- */\n@keyframes chartts-matrix-in {\n from { opacity: 0; transform: scale(0.8); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-matrix-cell {\n animation: chartts-matrix-in 0.3s ease calc(var(--chartts-i, 0) * 5ms) forwards;\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-matrix-cell:hover {\n filter: brightness(1.15);\n}\n\n/* ---- OHLC ---- */\n@keyframes chartts-ohlc-in {\n from { opacity: 0; transform: scaleY(0.5); }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-ohlc-stem, .chartts-ohlc-tick {\n animation: chartts-ohlc-in 0.3s ease calc(var(--chartts-i, 0) * 8ms) forwards;\n opacity: 0;\n transition: stroke-width 0.15s ease;\n}\n.chartts-ohlc-stem:hover, .chartts-ohlc-tick:hover {\n stroke-width: 2.5;\n}\n\n/* ---- Volume ---- */\n@keyframes chartts-volume-in {\n from { opacity: 0; transform: scaleY(0); transform-origin: bottom; }\n to { opacity: 1; transform: scaleY(1); }\n}\n.chartts-volume-bar {\n animation: chartts-volume-in 0.3s ease calc(var(--chartts-i, 0) * 8ms) forwards;\n opacity: 0;\n transition: filter 0.15s ease, fill-opacity 0.15s ease;\n cursor: pointer;\n}\n.chartts-volume-bar:hover {\n filter: brightness(1.1);\n fill-opacity: 1 !important;\n}\n\n/* ---- Range / Band ---- */\n@keyframes chartts-range-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-range-band {\n animation: chartts-range-in 0.5s ease forwards;\n opacity: 0;\n}\n.chartts-range-center {\n animation: chartts-range-in 0.6s ease 0.1s forwards;\n opacity: 0;\n}\n.chartts-range-bound {\n animation: chartts-range-in 0.5s ease 0.05s forwards;\n opacity: 0;\n}\n\n/* ---- Baseline ---- */\n@keyframes chartts-baseline-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.chartts-baseline-pos, .chartts-baseline-neg {\n animation: chartts-baseline-in 0.5s ease forwards;\n opacity: 0;\n}\n.chartts-baseline-line {\n animation: chartts-baseline-in 0.6s ease 0.1s forwards;\n opacity: 0;\n}\n.chartts-baseline-ref {\n animation: chartts-baseline-in 0.3s ease forwards;\n opacity: 0;\n}\n\n/* ---- Kagi ---- */\n@keyframes chartts-kagi-in {\n from { stroke-dashoffset: 200; opacity: 0; }\n to { stroke-dashoffset: 0; opacity: 1; }\n}\n.chartts-kagi-line {\n stroke-dasharray: 200;\n animation: chartts-kagi-in 0.6s ease calc(var(--chartts-i, 0) * 12ms) forwards;\n opacity: 0;\n transition: stroke-width 0.15s ease;\n}\n\n/* ---- Renko ---- */\n@keyframes chartts-renko-in {\n from { opacity: 0; transform: scale(0.8); }\n to { opacity: 1; transform: scale(1); }\n}\n.chartts-renko-brick {\n animation: chartts-renko-in 0.3s ease calc(var(--chartts-i, 0) * 8ms) forwards;\n opacity: 0;\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n.chartts-renko-brick:hover {\n filter: brightness(1.15);\n}\n\n/* ---- DataZoom ---- */\n.chartts-datazoom-handle {\n cursor: ew-resize;\n transition: fill 0.15s ease;\n}\n.chartts-datazoom-handle:hover {\n fill: #374151;\n}\n.chartts-datazoom-selected {\n cursor: grab;\n}\n\n/* ---- Text ---- */\n.chartts-x-label, .chartts-y-label,\n.chartts-x-axis-label, .chartts-y-axis-label,\n.chartts-legend text, .chartts-slice-label {\n user-select: none;\n pointer-events: none;\n}\n\n/* ---- Legend ---- */\n.chartts-legend-item {\n cursor: pointer;\n transition: opacity 0.15s ease;\n}\n.chartts-legend-item:hover {\n opacity: 0.7;\n}\n\n/* ---- Skip animations on data update ---- */\n.chartts-skip-anim .chartts-line, .chartts-skip-anim .chartts-area, .chartts-skip-anim .chartts-point,\n.chartts-skip-anim .chartts-bar, .chartts-skip-anim .chartts-slice, .chartts-skip-anim .chartts-bubble,\n.chartts-skip-anim .chartts-funnel-step, .chartts-skip-anim .chartts-waterfall-bar,\n.chartts-skip-anim .chartts-sparkline-line, .chartts-skip-anim .chartts-gauge-fill,\n.chartts-skip-anim .chartts-gauge-needle, .chartts-skip-anim .chartts-gauge-needle-cap,\n.chartts-skip-anim .chartts-radar-area, .chartts-skip-anim .chartts-radar-point,\n.chartts-skip-anim .chartts-treemap-cell, .chartts-skip-anim .chartts-polar-wedge,\n.chartts-skip-anim .chartts-lollipop-stem, .chartts-skip-anim .chartts-bullet-bar,\n.chartts-skip-anim .chartts-dumbbell-dot, .chartts-skip-anim .chartts-boxplot-box,\n.chartts-skip-anim .chartts-radialbar-arc, .chartts-skip-anim .chartts-sankey-link,\n.chartts-skip-anim .chartts-calendar-cell,\n.chartts-skip-anim .chartts-sunburst-sector, .chartts-skip-anim .chartts-tree-node,\n.chartts-skip-anim .chartts-graph-node, .chartts-skip-anim .chartts-graph-edge,\n.chartts-skip-anim .chartts-themeriver-stream, .chartts-skip-anim .chartts-pictorialbar-symbol,\n.chartts-skip-anim .chartts-chord-arc, .chartts-skip-anim .chartts-chord-ribbon,\n.chartts-skip-anim .chartts-geo-region, .chartts-skip-anim .chartts-lines-flow,\n.chartts-skip-anim .chartts-lines-node, .chartts-skip-anim .chartts-matrix-cell,\n.chartts-skip-anim .chartts-ohlc-stem, .chartts-skip-anim .chartts-ohlc-tick,\n.chartts-skip-anim .chartts-volume-bar, .chartts-skip-anim .chartts-range-band,\n.chartts-skip-anim .chartts-baseline-pos, .chartts-skip-anim .chartts-baseline-neg,\n.chartts-skip-anim .chartts-baseline-line, .chartts-skip-anim .chartts-kagi-line,\n.chartts-skip-anim .chartts-renko-brick {\n animation: none !important;\n opacity: 1 !important;\n}\n.chartts-skip-anim .chartts-line,\n.chartts-skip-anim .chartts-sparkline-line,\n.chartts-skip-anim .chartts-gauge-fill {\n stroke-dashoffset: 0 !important;\n}\n\n/* ---- Reduced motion ---- */\n@media (prefers-reduced-motion: reduce) {\n .chartts-line, .chartts-area, .chartts-point,\n .chartts-bar, .chartts-slice, .chartts-bubble,\n .chartts-funnel-step, .chartts-waterfall-bar,\n .chartts-sparkline-line, .chartts-gauge-fill,\n .chartts-gauge-needle, .chartts-gauge-needle-cap,\n .chartts-radar-area, .chartts-radar-point,\n .chartts-treemap-cell, .chartts-polar-wedge,\n .chartts-lollipop-stem, .chartts-bullet-bar,\n .chartts-dumbbell-dot, .chartts-boxplot-box,\n .chartts-radialbar-arc, .chartts-sankey-link,\n .chartts-calendar-cell,\n .chartts-sunburst-sector, .chartts-tree-node,\n .chartts-graph-node, .chartts-graph-edge,\n .chartts-themeriver-stream, .chartts-pictorialbar-symbol,\n .chartts-chord-arc, .chartts-chord-ribbon,\n .chartts-geo-region, .chartts-lines-flow,\n .chartts-lines-node, .chartts-matrix-cell,\n .chartts-ohlc-stem, .chartts-ohlc-tick,\n .chartts-volume-bar, .chartts-range-band,\n .chartts-baseline-pos, .chartts-baseline-neg,\n .chartts-baseline-line, .chartts-kagi-line,\n .chartts-renko-brick {\n animation: none !important;\n opacity: 1 !important;\n }\n .chartts-line,\n .chartts-sparkline-line,\n .chartts-gauge-fill {\n stroke-dashoffset: 0 !important;\n }\n}\n`\n","import type { Renderer, RenderNode, RenderAttrs } from '../types'\nimport { CHART_CSS } from '../styles/chart'\n\nconst NS = 'http://www.w3.org/2000/svg'\n\n/**\n * SVG DOM Renderer.\n *\n * Converts render tree nodes into real SVG elements.\n * All color attributes reference CSS custom properties (var(--chartts-*))\n * so they're overridable via CSS, Tailwind, or theme config.\n */\nexport function createSVGRenderer(): Renderer {\n return {\n createRoot(target, width, height, attrs) {\n const svg = document.createElementNS(NS, 'svg')\n svg.setAttribute('xmlns', NS)\n svg.setAttribute('width', '100%')\n svg.setAttribute('height', '100%')\n svg.setAttribute('viewBox', `0 0 ${width} ${height}`)\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet')\n svg.classList.add('chartts')\n if (attrs) applyAttrs(svg, attrs)\n\n // Inject chart CSS once\n const styleEl = document.createElementNS(NS, 'style')\n styleEl.textContent = CHART_CSS\n svg.appendChild(styleEl)\n\n target.appendChild(svg)\n return { element: svg }\n },\n\n render(root, nodes) {\n // Keep the <style> element, clear everything else\n const styleEl = root.element.querySelector('style')\n clear(root.element)\n if (styleEl) root.element.appendChild(styleEl)\n appendNodes(root.element, nodes)\n applyEntryAnimations(root.element)\n },\n\n update(root, nodes) {\n const styleEl = root.element.querySelector('style')\n clear(root.element)\n if (styleEl) root.element.appendChild(styleEl)\n appendNodes(root.element, nodes)\n applyEntryAnimations(root.element)\n },\n\n clear(root) {\n clear(root.element)\n },\n\n destroy(root) {\n root.element.remove()\n },\n }\n}\n\nfunction clear(el: Element): void {\n while (el.firstChild) el.removeChild(el.firstChild)\n}\n\nfunction appendNodes(parent: Element, nodes: RenderNode[]): void {\n for (const node of nodes) {\n const el = createNode(node)\n if (el) parent.appendChild(el)\n }\n}\n\nfunction createNode(node: RenderNode): SVGElement | null {\n switch (node.type) {\n case 'group': {\n const g = el('g')\n if (node.attrs) applyAttrs(g, node.attrs)\n for (const child of node.children) {\n const c = createNode(child)\n if (c) g.appendChild(c)\n }\n return g\n }\n\n case 'path': {\n const p = el('path')\n p.setAttribute('d', node.d)\n if (!node.attrs?.fill) p.setAttribute('fill', 'none')\n if (node.attrs) applyAttrs(p, node.attrs)\n return p\n }\n\n case 'rect': {\n const r = el('rect')\n setNum(r, 'x', node.x)\n setNum(r, 'y', node.y)\n setNum(r, 'width', node.width)\n setNum(r, 'height', node.height)\n if (node.rx != null) setNum(r, 'rx', node.rx)\n if (node.ry != null) setNum(r, 'ry', node.ry)\n if (node.attrs) applyAttrs(r, node.attrs)\n return r\n }\n\n case 'circle': {\n const c = el('circle')\n setNum(c, 'cx', node.cx)\n setNum(c, 'cy', node.cy)\n setNum(c, 'r', node.r)\n if (node.attrs) applyAttrs(c, node.attrs)\n return c\n }\n\n case 'line': {\n const l = el('line')\n setNum(l, 'x1', node.x1)\n setNum(l, 'y1', node.y1)\n setNum(l, 'x2', node.x2)\n setNum(l, 'y2', node.y2)\n if (node.attrs) applyAttrs(l, node.attrs)\n return l\n }\n\n case 'text': {\n const t = el('text')\n setNum(t, 'x', node.x)\n setNum(t, 'y', node.y)\n t.textContent = node.content\n if (node.attrs) {\n const a = node.attrs\n if ('textAnchor' in a && a.textAnchor) t.setAttribute('text-anchor', a.textAnchor)\n if ('dominantBaseline' in a && a.dominantBaseline) t.setAttribute('dominant-baseline', a.dominantBaseline)\n if ('fontSize' in a && a.fontSize) t.setAttribute('font-size', String(a.fontSize))\n if ('fontFamily' in a && a.fontFamily) t.setAttribute('font-family', a.fontFamily as string)\n if ('fontWeight' in a && a.fontWeight) t.setAttribute('font-weight', String(a.fontWeight))\n applyAttrs(t, a)\n }\n return t\n }\n\n case 'clipPath': {\n const cp = el('clipPath')\n cp.setAttribute('id', node.id)\n for (const child of node.children) {\n const c = createNode(child)\n if (c) cp.appendChild(c)\n }\n return cp\n }\n\n case 'defs': {\n const d = el('defs')\n for (const child of node.children) {\n const c = createNode(child)\n if (c) d.appendChild(c)\n }\n return d\n }\n\n default:\n return null\n }\n}\n\nfunction el(tag: string): SVGElement {\n return document.createElementNS(NS, tag)\n}\n\nfunction setNum(el: SVGElement, attr: string, val: number): void {\n el.setAttribute(attr, String(val))\n}\n\n/** Map RenderAttrs to SVG DOM attributes */\nfunction applyAttrs(el: SVGElement, attrs: RenderAttrs): void {\n const ATTR_MAP: Record<string, string> = {\n class: 'class',\n style: 'style',\n stroke: 'stroke',\n strokeWidth: 'stroke-width',\n strokeDasharray: 'stroke-dasharray',\n strokeOpacity: 'stroke-opacity',\n strokeLinecap: 'stroke-linecap',\n strokeLinejoin: 'stroke-linejoin',\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n opacity: 'opacity',\n transform: 'transform',\n filter: 'filter',\n cursor: 'cursor',\n pointerEvents: 'pointer-events',\n role: 'role',\n ariaLabel: 'aria-label',\n tabindex: 'tabindex',\n }\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value == null) continue\n // Skip non-SVG attrs handled elsewhere\n if (['textAnchor', 'dominantBaseline', 'fontSize', 'fontFamily', 'fontWeight', 'rx', 'ry'].includes(key)) continue\n\n if (key === 'clipPath') {\n el.setAttribute('clip-path', `url(#${value as string})`)\n } else if (key.startsWith('data-')) {\n el.setAttribute(key, String(value))\n } else if (ATTR_MAP[key]) {\n el.setAttribute(ATTR_MAP[key]!, String(value))\n }\n }\n}\n\n/**\n * Apply entry animations after rendering:\n * - Line draw animation using getTotalLength()\n * - Staggered index CSS variable for bars/points/slices\n */\nfunction applyEntryAnimations(svg: Element): void {\n // Skip entry animation setup entirely if animations are disabled (subsequent renders)\n const skipAnim = svg.classList.contains('chartts-skip-anim')\n\n // Line draw animation — skip dashed/dotted lines (they already have a dasharray pattern)\n if (!skipAnim) {\n svg.querySelectorAll<SVGPathElement>('.chartts-line, .chartts-sparkline-line').forEach((p) => {\n try {\n const existing = p.getAttribute('stroke-dasharray')\n if (existing && existing.includes(',')) return // preserve dashed/dotted pattern\n const len = p.getTotalLength()\n p.style.setProperty('--chartts-path-len', String(len))\n p.setAttribute('stroke-dasharray', String(len))\n p.setAttribute('stroke-dashoffset', String(len))\n } catch { /* ignore for non-path elements */ }\n })\n }\n\n // Stagger animations for all chart element types\n const STAGGER_SELECTORS = [\n '.chartts-point', '.chartts-bar', '.chartts-slice', '.chartts-bubble',\n '.chartts-funnel-step', '.chartts-waterfall-bar', '.chartts-candle',\n '.chartts-dot', '.chartts-radar-point',\n '.chartts-heatmap-cell', '.chartts-treemap-cell', '.chartts-polar-wedge',\n '.chartts-lollipop-stem', '.chartts-bullet-bar', '.chartts-calendar-cell',\n '.chartts-radialbar-arc', '.chartts-dumbbell-dot', '.chartts-boxplot-box',\n '.chartts-sankey-link',\n '.chartts-sunburst-sector', '.chartts-tree-node',\n '.chartts-graph-node', '.chartts-themeriver-stream',\n '.chartts-pictorialbar-symbol', '.chartts-chord-arc',\n '.chartts-chord-ribbon',\n '.chartts-geo-region', '.chartts-lines-flow',\n '.chartts-lines-node', '.chartts-matrix-cell',\n '.chartts-ohlc-stem', '.chartts-volume-bar',\n '.chartts-kagi-line', '.chartts-renko-brick',\n ]\n for (const selector of STAGGER_SELECTORS) {\n svg.querySelectorAll(selector).forEach((el, i) => {\n ;(el as SVGElement).style.setProperty('--chartts-i', String(i))\n })\n }\n\n // Gauge fill draw animation (same technique as line draw)\n if (!skipAnim) {\n svg.querySelectorAll<SVGPathElement>('.chartts-gauge-fill').forEach((p) => {\n try {\n const len = p.getTotalLength()\n p.style.setProperty('--chartts-path-len', String(len))\n p.setAttribute('stroke-dasharray', String(len))\n p.setAttribute('stroke-dashoffset', String(len))\n } catch { /* ignore */ }\n })\n }\n\n // Stagger for radar areas (per series) — uses a different CSS variable\n svg.querySelectorAll('.chartts-radar-area').forEach((el, i) => {\n ;(el as SVGElement).style.setProperty('--chartts-radar-i', String(i))\n })\n}\n","import type { Renderer, RenderNode, RenderAttrs, ThemeConfig } from '../types'\n\n/**\n * Canvas 2D Renderer.\n *\n * Converts the same RenderNode tree used by the SVG renderer into\n * Canvas 2D drawing commands. Designed for 1k–100k data points\n * where SVG DOM overhead becomes a bottleneck.\n *\n * Color resolution: Chart colors use `var(--token, #hex)` strings.\n * Canvas can't interpret CSS variables, so we extract the hex fallback.\n */\n\n// ---------------------------------------------------------------------------\n// Color utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a color value for Canvas 2D.\n * Handles: hex, rgb(), var(--token, #fallback), var(--chartts-*) via theme lookup.\n * Canvas can't interpret CSS variables, so we extract hex fallbacks or look up\n * the --chartts-* token from the current theme's CSS variable map.\n */\nlet cssVarMap: Record<string, string> = {}\n\nfunction buildCssVarMap(theme: import('../types').ThemeConfig): void {\n const p = '--chartts'\n cssVarMap = {\n [`${p}-bg`]: theme.background,\n [`${p}-text`]: theme.textColor,\n [`${p}-text-muted`]: theme.textMuted,\n [`${p}-axis`]: theme.axisColor,\n [`${p}-grid`]: theme.gridColor,\n [`${p}-tooltip-bg`]: theme.tooltipBackground,\n [`${p}-tooltip-text`]: theme.tooltipText,\n [`${p}-tooltip-border`]: theme.tooltipBorder,\n }\n theme.colors.forEach((c, i) => {\n cssVarMap[`${p}-color-${i + 1}`] = typeof c === 'string' ? c : String(c)\n })\n}\n\nfunction resolveColor(value: string | undefined, fallback: string = '#000'): string {\n if (!value) return fallback\n if (value === 'none' || value === 'transparent') return 'transparent'\n if (value.startsWith('url(')) return value\n\n // var(--token, #fallback) — try theme lookup first, then extract fallback\n const varMatch = value.match(/var\\(\\s*([^,)]+)(?:,\\s*([^)]+))?\\)/)\n if (varMatch) {\n const token = varMatch[1]!.trim()\n // Look up --chartts-* in our theme map\n const mapped = cssVarMap[token]\n if (mapped) {\n // The mapped value might itself be var(--color-gray-800, #hex) — recurse once\n return resolveColor(mapped, varMatch[2]?.trim() ?? fallback)\n }\n // No theme mapping — use the inline fallback if present\n return varMatch[2]?.trim() ?? fallback\n }\n\n return value\n}\n\n/** Parse hex to rgba string */\nfunction hexToRgba(hex: string, alpha: number): string {\n const h = hex.replace('#', '')\n const full = h.length === 3\n ? h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!\n : h\n const r = parseInt(full.substring(0, 2), 16)\n const g = parseInt(full.substring(2, 4), 16)\n const b = parseInt(full.substring(4, 6), 16)\n return `rgba(${r},${g},${b},${alpha})`\n}\n\n// ---------------------------------------------------------------------------\n// Gradient cache (per-render)\n// ---------------------------------------------------------------------------\n\n/** Well-known gradient patterns generated by effects.ts */\nfunction resolveGradientRef(\n id: string,\n colors: string[],\n ctx: CanvasRenderingContext2D,\n x: number, y: number, _w: number, h: number,\n): CanvasGradient | string | null {\n // Area gradient: chartts-area-N\n const areaMatch = id.match(/^chartts-area-(\\d+)$/)\n if (areaMatch) {\n const color = resolveColor(colors[parseInt(areaMatch[1]!)])\n const grad = ctx.createLinearGradient(x, y, x, y + h)\n grad.addColorStop(0, hexToRgba(color, 0.35))\n grad.addColorStop(1, hexToRgba(color, 0.02))\n return grad\n }\n\n // Bar gradient: chartts-bar-N\n const barMatch = id.match(/^chartts-bar-(\\d+)$/)\n if (barMatch) {\n const color = resolveColor(colors[parseInt(barMatch[1]!)])\n const grad = ctx.createLinearGradient(x, y, x, y + h)\n grad.addColorStop(0, hexToRgba(color, 1))\n grad.addColorStop(1, hexToRgba(color, 0.75))\n return grad\n }\n\n // Pie gradient: chartts-pie-N\n const pieMatch = id.match(/^chartts-pie-(\\d+)$/)\n if (pieMatch) {\n const color = resolveColor(colors[parseInt(pieMatch[1]!)])\n return color\n }\n\n // Point glow: chartts-pglow-N\n const glowMatch = id.match(/^chartts-pglow-(\\d+)$/)\n if (glowMatch) {\n const color = resolveColor(colors[parseInt(glowMatch[1]!)])\n return hexToRgba(color, 0.4)\n }\n\n return null\n}\n\n/** Parse url(#id) and return the id */\nfunction parseUrlRef(value: string): string | null {\n const match = value.match(/url\\(#([^)]+)\\)/)\n return match ? match[1]! : null\n}\n\n// ---------------------------------------------------------------------------\n// Text alignment mapping\n// ---------------------------------------------------------------------------\n\nfunction mapTextAlign(anchor?: string): CanvasTextAlign {\n switch (anchor) {\n case 'middle': return 'center'\n case 'end': return 'right'\n default: return 'left'\n }\n}\n\nfunction mapTextBaseline(baseline?: string): CanvasTextBaseline {\n switch (baseline) {\n case 'middle':\n case 'central': return 'middle'\n case 'hanging': return 'hanging'\n default: return 'alphabetic'\n }\n}\n\n// ---------------------------------------------------------------------------\n// Canvas Renderer\n// ---------------------------------------------------------------------------\n\nexport interface CanvasRendererRoot {\n element: HTMLCanvasElement\n ctx: CanvasRenderingContext2D\n width: number\n height: number\n dpr: number\n}\n\nexport function createCanvasRenderer(getTheme: ThemeConfig | (() => ThemeConfig)): Renderer {\n // Support both a static theme or a getter function for live theme switching\n const resolveTheme = typeof getTheme === 'function' ? getTheme : () => getTheme\n\n // Clip path registry (id → Path2D)\n let clipPaths: Map<string, Path2D> = new Map()\n // Current colors — refreshed each render from theme\n let currentColors: string[] = []\n\n return {\n createRoot(target, width, height, attrs) {\n const canvas = document.createElement('canvas')\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.round(width * dpr)\n canvas.height = Math.round(height * dpr)\n canvas.style.width = `${width}px`\n canvas.style.height = `${height}px`\n canvas.style.display = 'block'\n\n if (attrs?.class) canvas.className = attrs.class\n if (attrs?.role) canvas.setAttribute('role', attrs.role)\n if (attrs?.ariaLabel) canvas.setAttribute('aria-label', attrs.ariaLabel)\n\n const ctx2d = canvas.getContext('2d')!\n ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n\n target.appendChild(canvas)\n\n const root = { element: canvas } as unknown as { element: HTMLCanvasElement }\n ;(root as unknown as CanvasRendererRoot).ctx = ctx2d\n ;(root as unknown as CanvasRendererRoot).width = width\n ;(root as unknown as CanvasRendererRoot).height = height\n ;(root as unknown as CanvasRendererRoot).dpr = dpr\n\n return root as unknown as import('../types').RendererRoot\n },\n\n render(root, nodes) {\n const cr = root as unknown as CanvasRendererRoot\n const canvas = cr.element\n const dpr = window.devicePixelRatio || 1\n const theme = resolveTheme()\n const colors = theme.colors as unknown as string[]\n\n // Rebuild CSS variable lookup so resolveColor can resolve var(--chartts-*) tokens\n buildCssVarMap(theme)\n\n // Sync dimensions from actual canvas state\n cr.width = canvas.width / dpr\n cr.height = canvas.height / dpr\n cr.dpr = dpr\n\n clipPaths = new Map()\n currentColors = colors\n\n const ctx = cr.ctx\n\n // High-quality rendering settings\n ctx.imageSmoothingEnabled = true\n ctx.imageSmoothingQuality = 'high'\n\n // Paint background — 'transparent' means clear the canvas (let container bg show)\n ctx.save()\n const bg = resolveColor(theme.background, '#ffffff')\n if (bg === 'transparent') {\n ctx.clearRect(0, 0, cr.width, cr.height)\n } else {\n ctx.fillStyle = bg\n ctx.fillRect(0, 0, cr.width, cr.height)\n }\n ctx.restore()\n\n // First pass: collect clip path defs\n collectClipPaths(nodes)\n\n // Second pass: draw\n drawNodes(cr.ctx, nodes, cr.width, cr.height)\n },\n\n update(root, nodes) {\n this.render(root, nodes)\n },\n\n clear(root) {\n const cr = root as unknown as CanvasRendererRoot\n cr.ctx.clearRect(0, 0, cr.width, cr.height)\n },\n\n destroy(root) {\n root.element.remove()\n },\n }\n\n // -----------------------------------------------------------------------\n // Collect clip path definitions (first pass)\n // -----------------------------------------------------------------------\n\n function collectClipPaths(nodes: RenderNode[]): void {\n for (const node of nodes) {\n if (node.type === 'defs') {\n for (const child of node.children) {\n if (child.type === 'clipPath') {\n const path = new Path2D()\n for (const cp of child.children) {\n if (cp.type === 'rect') {\n path.rect(cp.x, cp.y, cp.width, cp.height)\n }\n }\n clipPaths.set(child.id, path)\n }\n }\n } else if (node.type === 'group') {\n collectClipPaths(node.children)\n }\n }\n }\n\n // -----------------------------------------------------------------------\n // Draw node tree\n // -----------------------------------------------------------------------\n\n function drawNodes(ctx: CanvasRenderingContext2D, nodes: RenderNode[], cw: number, ch: number): void {\n for (const node of nodes) {\n drawNode(ctx, node, cw, ch)\n }\n }\n\n function drawNode(ctx: CanvasRenderingContext2D, node: RenderNode, cw: number, ch: number): void {\n switch (node.type) {\n case 'group': {\n ctx.save()\n applyClip(ctx, node.attrs)\n applyTransform(ctx, node.attrs)\n applyOpacity(ctx, node.attrs)\n drawNodes(ctx, node.children, cw, ch)\n ctx.restore()\n break\n }\n\n case 'path': {\n const fill = resolveFill(ctx, node.attrs?.fill, 0, 0, cw, ch)\n const stroke = resolveColor(node.attrs?.stroke)\n const strokeWidth = node.attrs?.strokeWidth ?? 0\n const opacity = node.attrs?.opacity ?? 1\n const fillOpacity = node.attrs?.fillOpacity ?? 1\n const strokeOpacity = node.attrs?.strokeOpacity ?? 1\n\n ctx.save()\n applyClip(ctx, node.attrs)\n ctx.globalAlpha = opacity\n applyLineCaps(ctx, node.attrs)\n\n const p = new Path2D(node.d)\n\n if (fill && fill !== 'transparent' && fill !== 'none' && node.attrs?.fill) {\n ctx.save()\n ctx.globalAlpha = opacity * fillOpacity\n ctx.fillStyle = typeof fill === 'object' ? fill : fill\n ctx.fill(p)\n ctx.restore()\n }\n\n if (stroke && stroke !== 'transparent' && stroke !== 'none' && strokeWidth > 0) {\n ctx.save()\n ctx.globalAlpha = opacity * strokeOpacity\n ctx.strokeStyle = typeof stroke === 'string' ? stroke : '#000'\n ctx.lineWidth = strokeWidth\n applyDash(ctx, node.attrs?.strokeDasharray)\n ctx.stroke(p)\n ctx.restore()\n }\n\n ctx.restore()\n break\n }\n\n case 'rect': {\n const fill = resolveFill(ctx, node.attrs?.fill, node.x, node.y, node.width, node.height)\n const stroke = resolveColor(node.attrs?.stroke)\n const strokeWidth = node.attrs?.strokeWidth ?? 0\n const opacity = node.attrs?.opacity ?? 1\n const fillOpacity = node.attrs?.fillOpacity ?? 1\n const strokeOpacity = node.attrs?.strokeOpacity ?? 1\n const rx = node.rx ?? 0\n\n ctx.save()\n applyClip(ctx, node.attrs)\n ctx.globalAlpha = opacity\n\n if (fill && fill !== 'transparent' && fill !== 'none') {\n ctx.save()\n ctx.globalAlpha = opacity * fillOpacity\n ctx.fillStyle = typeof fill === 'object' ? fill : fill\n if (rx > 0) {\n roundRect(ctx, node.x, node.y, node.width, node.height, rx)\n ctx.fill()\n } else {\n ctx.fillRect(node.x, node.y, node.width, node.height)\n }\n ctx.restore()\n }\n\n if (stroke && stroke !== 'transparent' && stroke !== 'none' && strokeWidth > 0) {\n ctx.save()\n ctx.globalAlpha = opacity * strokeOpacity\n ctx.strokeStyle = typeof stroke === 'string' ? stroke : '#000'\n ctx.lineWidth = strokeWidth\n applyDash(ctx, node.attrs?.strokeDasharray)\n if (rx > 0) {\n roundRect(ctx, node.x, node.y, node.width, node.height, rx)\n ctx.stroke()\n } else {\n ctx.strokeRect(node.x, node.y, node.width, node.height)\n }\n ctx.restore()\n }\n\n ctx.restore()\n break\n }\n\n case 'circle': {\n const fill = resolveFill(ctx, node.attrs?.fill, node.cx - node.r, node.cy - node.r, node.r * 2, node.r * 2)\n const stroke = resolveColor(node.attrs?.stroke)\n const strokeWidth = node.attrs?.strokeWidth ?? 0\n const opacity = node.attrs?.opacity ?? 1\n const fillOpacity = node.attrs?.fillOpacity ?? 1\n const strokeOpacity = node.attrs?.strokeOpacity ?? 1\n\n ctx.save()\n ctx.globalAlpha = opacity\n\n ctx.beginPath()\n ctx.arc(node.cx, node.cy, node.r, 0, Math.PI * 2)\n\n if (fill && fill !== 'transparent' && fill !== 'none') {\n ctx.save()\n ctx.globalAlpha = opacity * fillOpacity\n ctx.fillStyle = typeof fill === 'object' ? fill : fill\n ctx.fill()\n ctx.restore()\n }\n\n if (stroke && stroke !== 'transparent' && stroke !== 'none' && strokeWidth > 0) {\n ctx.save()\n ctx.globalAlpha = opacity * strokeOpacity\n ctx.strokeStyle = typeof stroke === 'string' ? stroke : '#000'\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n ctx.restore()\n }\n\n ctx.restore()\n break\n }\n\n case 'line': {\n const stroke = resolveColor(node.attrs?.stroke, '#000')\n const strokeWidth = node.attrs?.strokeWidth ?? 1\n const opacity = node.attrs?.opacity ?? 1\n const strokeOpacity = node.attrs?.strokeOpacity ?? 1\n\n if (stroke === 'transparent' || stroke === 'none') break\n\n ctx.save()\n ctx.globalAlpha = opacity * strokeOpacity\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n applyLineCaps(ctx, node.attrs)\n applyDash(ctx, node.attrs?.strokeDasharray)\n\n // Subpixel alignment for crisp 1px lines\n const offset = strokeWidth % 2 === 1 ? 0.5 : 0\n ctx.beginPath()\n ctx.moveTo(snapPixel(node.x1, offset), snapPixel(node.y1, offset))\n ctx.lineTo(snapPixel(node.x2, offset), snapPixel(node.y2, offset))\n ctx.stroke()\n ctx.setLineDash([])\n ctx.restore()\n break\n }\n\n case 'text': {\n const t = resolveTheme()\n const fill = resolveColor(node.attrs?.fill, t.textColor)\n const resolvedFill = resolveColor(fill)\n const opacity = node.attrs?.opacity ?? 1\n const extra = node.attrs as Record<string, unknown> | undefined\n const fontSize = (extra?.fontSize as number) ?? t.fontSize\n const fontFamily = (extra?.fontFamily as string) ?? t.fontFamily\n const fontWeight = (extra?.fontWeight as string) ?? 'normal'\n const textAnchor = extra?.textAnchor as string | undefined\n const baseline = extra?.dominantBaseline as string | undefined\n\n ctx.save()\n ctx.globalAlpha = opacity\n ctx.fillStyle = resolvedFill\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = mapTextAlign(textAnchor)\n ctx.textBaseline = mapTextBaseline(baseline)\n\n // Handle transform (rotation for y-axis label)\n applyTransform(ctx, node.attrs)\n\n ctx.fillText(node.content, node.x, node.y)\n ctx.restore()\n break\n }\n\n case 'defs':\n case 'clipPath':\n // Already processed in first pass\n break\n }\n }\n\n // -----------------------------------------------------------------------\n // Helpers\n // -----------------------------------------------------------------------\n\n function resolveFill(\n ctx: CanvasRenderingContext2D,\n fill: string | undefined,\n x: number, y: number, w: number, h: number,\n ): CanvasGradient | string {\n if (!fill) return 'transparent'\n const urlId = parseUrlRef(fill)\n if (urlId) {\n const grad = resolveGradientRef(urlId, currentColors, ctx, x, y, w, h)\n return grad ?? resolveColor(fill)\n }\n return resolveColor(fill)\n }\n\n function applyClip(ctx: CanvasRenderingContext2D, attrs?: RenderAttrs): void {\n if (!attrs?.clipPath) return\n const clipId = attrs.clipPath\n const path = clipPaths.get(clipId)\n if (path) {\n ctx.clip(path)\n }\n }\n\n function applyTransform(ctx: CanvasRenderingContext2D, attrs?: RenderAttrs): void {\n if (!attrs?.transform) return\n const t = attrs.transform\n\n // translate(x, y)\n const translateMatch = t.match(/translate\\(\\s*([^,)]+)[,\\s]+([^)]+)\\)/)\n if (translateMatch) {\n ctx.translate(parseFloat(translateMatch[1]!), parseFloat(translateMatch[2]!))\n }\n\n // rotate(deg) or rotate(deg, cx, cy)\n const rotateMatch = t.match(/rotate\\(\\s*([^,)]+)(?:[,\\s]+([^,)]+)[,\\s]+([^)]+))?\\)/)\n if (rotateMatch) {\n const angle = parseFloat(rotateMatch[1]!) * Math.PI / 180\n if (rotateMatch[2] && rotateMatch[3]) {\n const cx = parseFloat(rotateMatch[2])\n const cy = parseFloat(rotateMatch[3])\n ctx.translate(cx, cy)\n ctx.rotate(angle)\n ctx.translate(-cx, -cy)\n } else {\n ctx.rotate(angle)\n }\n }\n\n // scale(x, y)\n const scaleMatch = t.match(/scale\\(\\s*([^,)]+)(?:[,\\s]+([^)]+))?\\)/)\n if (scaleMatch) {\n const sx = parseFloat(scaleMatch[1]!)\n const sy = scaleMatch[2] ? parseFloat(scaleMatch[2]) : sx\n ctx.scale(sx, sy)\n }\n }\n\n function applyOpacity(ctx: CanvasRenderingContext2D, attrs?: RenderAttrs): void {\n if (attrs?.opacity != null) {\n ctx.globalAlpha *= attrs.opacity\n }\n }\n\n function applyLineCaps(ctx: CanvasRenderingContext2D, attrs?: RenderAttrs): void {\n if (attrs?.strokeLinecap) ctx.lineCap = attrs.strokeLinecap\n if (attrs?.strokeLinejoin) ctx.lineJoin = attrs.strokeLinejoin\n }\n\n function applyDash(ctx: CanvasRenderingContext2D, dasharray?: string): void {\n if (!dasharray) return\n const segments = dasharray.split(/[\\s,]+/).map(Number).filter(n => !isNaN(n))\n if (segments.length > 0) {\n ctx.setLineDash(segments)\n }\n }\n\n /** Snap to pixel grid for crisp lines */\n function snapPixel(v: number, offset: number): number {\n return Math.round(v) + offset\n }\n\n function roundRect(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number): void {\n r = Math.min(r, w / 2, h / 2)\n ctx.beginPath()\n ctx.moveTo(x + r, y)\n ctx.lineTo(x + w - r, y)\n ctx.arcTo(x + w, y, x + w, y + r, r)\n ctx.lineTo(x + w, y + h - r)\n ctx.arcTo(x + w, y + h, x + w - r, y + h, r)\n ctx.lineTo(x + r, y + h)\n ctx.arcTo(x, y + h, x, y + h - r, r)\n ctx.lineTo(x, y + r)\n ctx.arcTo(x, y, x + r, y, r)\n ctx.closePath()\n }\n}\n","/**\n * WebGL Renderer.\n *\n * GPU-accelerated rendering for 100k–1M+ data points.\n * Uses a dual-layer approach:\n * - WebGL canvas: lines, points, bars (data-heavy elements)\n * - 2D canvas overlay: axes, text, grid, legends (needs Canvas2D text API)\n *\n * Falls back to the Canvas 2D renderer if WebGL is not available.\n */\n\nimport type { Renderer, RenderNode, RenderAttrs, RendererRoot, ThemeConfig } from '../types'\n\n// ---------------------------------------------------------------------------\n// Shader sources\n// ---------------------------------------------------------------------------\n\nconst LINE_VERT = `\nattribute vec2 a_position;\nattribute vec4 a_color;\nuniform vec2 u_resolution;\nvarying vec4 v_color;\nvoid main() {\n vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;\n gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);\n v_color = a_color;\n}\n`\n\nconst LINE_FRAG = `\nprecision mediump float;\nvarying vec4 v_color;\nvoid main() {\n gl_FragColor = v_color;\n}\n`\n\nconst POINT_VERT = `\nattribute vec2 a_position;\nattribute float a_radius;\nattribute vec4 a_color;\nuniform vec2 u_resolution;\nvarying vec4 v_color;\nvoid main() {\n vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;\n gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);\n gl_PointSize = a_radius * 2.0;\n v_color = a_color;\n}\n`\n\nconst POINT_FRAG = `\nprecision mediump float;\nvarying vec4 v_color;\nvoid main() {\n vec2 coord = gl_PointCoord - vec2(0.5);\n float dist = length(coord);\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.4, 0.5, dist);\n gl_FragColor = vec4(v_color.rgb, v_color.a * alpha);\n}\n`\n\nconst RECT_VERT = `\nattribute vec2 a_position;\nattribute vec4 a_color;\nuniform vec2 u_resolution;\nvarying vec4 v_color;\nvoid main() {\n vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;\n gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);\n v_color = a_color;\n}\n`\n\nconst RECT_FRAG = `\nprecision mediump float;\nvarying vec4 v_color;\nvoid main() {\n gl_FragColor = v_color;\n}\n`\n\n// ---------------------------------------------------------------------------\n// Color utilities\n// ---------------------------------------------------------------------------\n\nfunction resolveColor(value: string | undefined, fallback = '#000'): string {\n if (!value) return fallback\n if (value === 'none' || value === 'transparent') return 'transparent'\n if (value.startsWith('url(')) return fallback\n const match = value.match(/var\\([^,]+,\\s*([^)]+)\\)/)\n return match ? match[1]!.trim() : value\n}\n\nfunction hexToRGBA(hex: string, alpha = 1): [number, number, number, number] {\n const h = hex.replace('#', '')\n const full = h.length === 3\n ? h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!\n : h\n return [\n parseInt(full.substring(0, 2), 16) / 255,\n parseInt(full.substring(2, 4), 16) / 255,\n parseInt(full.substring(4, 6), 16) / 255,\n alpha,\n ]\n}\n\nfunction colorToRGBA(color: string, alpha = 1): [number, number, number, number] {\n const resolved = resolveColor(color)\n if (resolved === 'transparent') return [0, 0, 0, 0]\n if (resolved.startsWith('#')) return hexToRGBA(resolved, alpha)\n // rgba() parse\n const rgbaMatch = resolved.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/)\n if (rgbaMatch) {\n return [\n parseInt(rgbaMatch[1]!) / 255,\n parseInt(rgbaMatch[2]!) / 255,\n parseInt(rgbaMatch[3]!) / 255,\n rgbaMatch[4] ? parseFloat(rgbaMatch[4]) * alpha : alpha,\n ]\n }\n return [0, 0, 0, alpha]\n}\n\n// ---------------------------------------------------------------------------\n// WebGL helpers\n// ---------------------------------------------------------------------------\n\nfunction createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n const shader = gl.createShader(type)\n if (!shader) return null\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n gl.deleteShader(shader)\n return null\n }\n return shader\n}\n\nfunction createProgram(gl: WebGLRenderingContext, vertSrc: string, fragSrc: string): WebGLProgram | null {\n const vert = createShader(gl, gl.VERTEX_SHADER, vertSrc)\n const frag = createShader(gl, gl.FRAGMENT_SHADER, fragSrc)\n if (!vert || !frag) return null\n\n const program = gl.createProgram()\n if (!program) return null\n gl.attachShader(program, vert)\n gl.attachShader(program, frag)\n gl.linkProgram(program)\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program)\n return null\n }\n return program\n}\n\n// ---------------------------------------------------------------------------\n// WebGL Renderer Root\n// ---------------------------------------------------------------------------\n\ninterface WebGLRendererRoot {\n container: HTMLDivElement\n glCanvas: HTMLCanvasElement\n gl: WebGLRenderingContext\n overlay: HTMLCanvasElement\n ctx2d: CanvasRenderingContext2D\n width: number\n height: number\n dpr: number\n programs: {\n line: WebGLProgram\n point: WebGLProgram\n rect: WebGLProgram\n }\n}\n\n// ---------------------------------------------------------------------------\n// Text alignment helpers (reused from canvas.ts)\n// ---------------------------------------------------------------------------\n\nfunction mapTextAlign(anchor?: string): CanvasTextAlign {\n switch (anchor) {\n case 'middle': return 'center'\n case 'end': return 'right'\n default: return 'left'\n }\n}\n\nfunction mapTextBaseline(baseline?: string): CanvasTextBaseline {\n switch (baseline) {\n case 'middle':\n case 'central': return 'middle'\n case 'hanging': return 'hanging'\n default: return 'alphabetic'\n }\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport function createWebGLRenderer(theme: ThemeConfig): Renderer {\n return {\n createRoot(target, width, height, attrs) {\n // Container div holds both canvases\n const container = document.createElement('div')\n container.style.cssText = `position:relative;width:${width}px;height:${height}px;`\n if (attrs?.class) container.className = attrs.class\n if (attrs?.role) container.setAttribute('role', attrs.role)\n if (attrs?.ariaLabel) container.setAttribute('aria-label', attrs.ariaLabel)\n\n const dpr = window.devicePixelRatio || 1\n\n // WebGL canvas (bottom layer — data rendering)\n const glCanvas = document.createElement('canvas')\n glCanvas.width = width * dpr\n glCanvas.height = height * dpr\n glCanvas.style.cssText = `position:absolute;top:0;left:0;width:${width}px;height:${height}px;`\n container.appendChild(glCanvas)\n\n const gl = glCanvas.getContext('webgl', {\n alpha: true,\n antialias: true,\n premultipliedAlpha: false,\n })!\n\n // 2D overlay canvas (top layer — text, axes, legends)\n const overlay = document.createElement('canvas')\n overlay.width = width * dpr\n overlay.height = height * dpr\n overlay.style.cssText = `position:absolute;top:0;left:0;width:${width}px;height:${height}px;`\n container.appendChild(overlay)\n\n const ctx2d = overlay.getContext('2d')!\n ctx2d.scale(dpr, dpr)\n\n // Compile shader programs\n const lineProgram = createProgram(gl, LINE_VERT, LINE_FRAG)!\n const pointProgram = createProgram(gl, POINT_VERT, POINT_FRAG)!\n const rectProgram = createProgram(gl, RECT_VERT, RECT_FRAG)!\n\n // WebGL setup\n gl.viewport(0, 0, width * dpr, height * dpr)\n gl.enable(gl.BLEND)\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)\n\n target.appendChild(container)\n\n const webglRoot: WebGLRendererRoot = {\n container,\n glCanvas,\n gl,\n overlay,\n ctx2d,\n width,\n height,\n dpr,\n programs: {\n line: lineProgram,\n point: pointProgram,\n rect: rectProgram,\n },\n }\n\n // Store WebGL root data for retrieval in render/update/destroy\n ;(container as unknown as Record<string, unknown>).__chartts_webgl = webglRoot\n\n return { element: container } as unknown as RendererRoot & { _webgl: WebGLRendererRoot }\n },\n\n render(root, nodes) {\n const wr = getWebGLRoot(root)\n if (!wr) return\n\n // Clear both canvases\n const { gl, ctx2d, width, height, dpr } = wr\n gl.viewport(0, 0, width * dpr, height * dpr)\n gl.clearColor(0, 0, 0, 0)\n gl.clear(gl.COLOR_BUFFER_BIT)\n\n ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx2d.clearRect(0, 0, width, height)\n\n // Collect draw commands from the node tree\n const lines: GLLine[] = []\n const points: GLPoint[] = []\n const rects: GLRect[] = []\n\n collectGLNodes(nodes, lines, points, rects)\n\n // Batch draw with WebGL\n drawGLLines(wr, lines)\n drawGLPoints(wr, points)\n drawGLRects(wr, rects)\n\n // Draw text/axes/grid with 2D canvas\n draw2DNodes(ctx2d, nodes, width, height, theme)\n },\n\n update(root, nodes) {\n this.render(root, nodes)\n },\n\n clear(root) {\n const wr = getWebGLRoot(root)\n if (!wr) return\n wr.gl.clear(wr.gl.COLOR_BUFFER_BIT)\n wr.ctx2d.clearRect(0, 0, wr.width, wr.height)\n },\n\n destroy(root) {\n const el = root.element as HTMLElement\n el.remove()\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal types for batched GL draw commands\n// ---------------------------------------------------------------------------\n\ninterface GLLine {\n x1: number; y1: number; x2: number; y2: number\n color: [number, number, number, number]\n width: number\n}\n\ninterface GLPoint {\n x: number; y: number\n radius: number\n color: [number, number, number, number]\n}\n\ninterface GLRect {\n x: number; y: number; w: number; h: number\n color: [number, number, number, number]\n}\n\n// ---------------------------------------------------------------------------\n// Extract WebGLRendererRoot from RendererRoot\n// ---------------------------------------------------------------------------\n\nfunction getWebGLRoot(root: RendererRoot): WebGLRendererRoot | null {\n // We store the WebGL root data on the container's dataset\n const container = root.element as HTMLDivElement\n const glCanvas = container.querySelector('canvas:first-child') as HTMLCanvasElement | null\n const overlay = container.querySelector('canvas:last-child') as HTMLCanvasElement | null\n if (!glCanvas || !overlay) return null\n\n const gl = glCanvas.getContext('webgl')\n const ctx2d = overlay.getContext('2d')\n if (!gl || !ctx2d) return null\n\n const dpr = window.devicePixelRatio || 1\n const width = parseInt(container.style.width) || 400\n const height = parseInt(container.style.height) || 300\n\n // Re-compile programs (cached in WebGL context)\n const lineProgram = createProgram(gl, LINE_VERT, LINE_FRAG)!\n const pointProgram = createProgram(gl, POINT_VERT, POINT_FRAG)!\n const rectProgram = createProgram(gl, RECT_VERT, RECT_FRAG)!\n\n return {\n container,\n glCanvas,\n gl,\n overlay,\n ctx2d,\n width,\n height,\n dpr,\n programs: {\n line: lineProgram,\n point: pointProgram,\n rect: rectProgram,\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Collect GL-renderable nodes from the render tree\n// ---------------------------------------------------------------------------\n\nfunction collectGLNodes(\n nodes: RenderNode[],\n lines: GLLine[],\n points: GLPoint[],\n rects: GLRect[],\n _parentAttrs?: RenderAttrs,\n): void {\n for (const node of nodes) {\n switch (node.type) {\n case 'group':\n collectGLNodes(node.children, lines, points, rects, node.attrs)\n break\n\n case 'line': {\n const stroke = resolveColor(node.attrs?.stroke, '#000')\n if (stroke === 'transparent' || stroke === 'none') break\n const opacity = node.attrs?.opacity ?? 1\n lines.push({\n x1: node.x1, y1: node.y1,\n x2: node.x2, y2: node.y2,\n color: colorToRGBA(stroke, opacity),\n width: node.attrs?.strokeWidth ?? 1,\n })\n break\n }\n\n case 'circle': {\n const fill = resolveColor(node.attrs?.fill)\n if (fill === 'transparent' || fill === 'none') break\n const opacity = (node.attrs?.opacity ?? 1) * (node.attrs?.fillOpacity ?? 1)\n points.push({\n x: node.cx, y: node.cy,\n radius: node.r,\n color: colorToRGBA(fill, opacity),\n })\n break\n }\n\n case 'rect': {\n const fill = resolveColor(node.attrs?.fill)\n if (fill === 'transparent' || fill === 'none') break\n const opacity = (node.attrs?.opacity ?? 1) * (node.attrs?.fillOpacity ?? 1)\n rects.push({\n x: node.x, y: node.y,\n w: node.width, h: node.height,\n color: colorToRGBA(fill, opacity),\n })\n break\n }\n\n case 'path': {\n // Paths with stroke → approximate as line segments for WebGL\n // Complex paths fall through to 2D overlay\n const stroke = resolveColor(node.attrs?.stroke)\n if (stroke && stroke !== 'transparent' && stroke !== 'none') {\n const segs = pathToSegments(node.d)\n const opacity = node.attrs?.opacity ?? 1\n const color = colorToRGBA(stroke, opacity)\n const width = node.attrs?.strokeWidth ?? 2\n for (const seg of segs) {\n lines.push({ ...seg, color, width })\n }\n }\n // Filled paths → handled by 2D overlay for accuracy\n break\n }\n\n // text, defs, clipPath → handled by 2D overlay\n default:\n break\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Parse SVG path d-string into line segments (for GL rendering)\n// ---------------------------------------------------------------------------\n\nfunction pathToSegments(d: string): Array<{ x1: number; y1: number; x2: number; y2: number }> {\n const segments: Array<{ x1: number; y1: number; x2: number; y2: number }> = []\n const commands = d.match(/[MLHVCSQTAZmlhvcsqtaz][^MLHVCSQTAZmlhvcsqtaz]*/g)\n if (!commands) return segments\n\n let cx = 0, cy = 0\n let startX = 0, startY = 0\n\n for (const cmd of commands) {\n const type = cmd[0]!\n const nums = (cmd.slice(1).match(/-?[\\d.]+(?:e[+-]?\\d+)?/gi) ?? []).map(Number)\n\n switch (type) {\n case 'M':\n cx = nums[0] ?? 0\n cy = nums[1] ?? 0\n startX = cx\n startY = cy\n // M can have implicit L commands after first pair\n for (let i = 2; i < nums.length; i += 2) {\n const nx = nums[i] ?? 0\n const ny = nums[i + 1] ?? 0\n segments.push({ x1: cx, y1: cy, x2: nx, y2: ny })\n cx = nx; cy = ny\n }\n break\n\n case 'm':\n cx += nums[0] ?? 0\n cy += nums[1] ?? 0\n startX = cx\n startY = cy\n for (let i = 2; i < nums.length; i += 2) {\n const nx = cx + (nums[i] ?? 0)\n const ny = cy + (nums[i + 1] ?? 0)\n segments.push({ x1: cx, y1: cy, x2: nx, y2: ny })\n cx = nx; cy = ny\n }\n break\n\n case 'L':\n for (let i = 0; i < nums.length; i += 2) {\n const nx = nums[i] ?? 0\n const ny = nums[i + 1] ?? 0\n segments.push({ x1: cx, y1: cy, x2: nx, y2: ny })\n cx = nx; cy = ny\n }\n break\n\n case 'l':\n for (let i = 0; i < nums.length; i += 2) {\n const nx = cx + (nums[i] ?? 0)\n const ny = cy + (nums[i + 1] ?? 0)\n segments.push({ x1: cx, y1: cy, x2: nx, y2: ny })\n cx = nx; cy = ny\n }\n break\n\n case 'H':\n for (const n of nums) {\n segments.push({ x1: cx, y1: cy, x2: n, y2: cy })\n cx = n\n }\n break\n\n case 'h':\n for (const n of nums) {\n const nx = cx + n\n segments.push({ x1: cx, y1: cy, x2: nx, y2: cy })\n cx = nx\n }\n break\n\n case 'V':\n for (const n of nums) {\n segments.push({ x1: cx, y1: cy, x2: cx, y2: n })\n cy = n\n }\n break\n\n case 'v':\n for (const n of nums) {\n const ny = cy + n\n segments.push({ x1: cx, y1: cy, x2: cx, y2: ny })\n cy = ny\n }\n break\n\n case 'C': {\n // Cubic bezier — approximate with line segments\n for (let i = 0; i < nums.length; i += 6) {\n const cp1x = nums[i]!, cp1y = nums[i + 1]!\n const cp2x = nums[i + 2]!, cp2y = nums[i + 3]!\n const ex = nums[i + 4]!, ey = nums[i + 5]!\n approximateCubic(segments, cx, cy, cp1x, cp1y, cp2x, cp2y, ex, ey)\n cx = ex; cy = ey\n }\n break\n }\n\n case 'c': {\n for (let i = 0; i < nums.length; i += 6) {\n const cp1x = cx + nums[i]!, cp1y = cy + nums[i + 1]!\n const cp2x = cx + nums[i + 2]!, cp2y = cy + nums[i + 3]!\n const ex = cx + nums[i + 4]!, ey = cy + nums[i + 5]!\n approximateCubic(segments, cx, cy, cp1x, cp1y, cp2x, cp2y, ex, ey)\n cx = ex; cy = ey\n }\n break\n }\n\n case 'S': {\n for (let i = 0; i < nums.length; i += 4) {\n const cp2x = nums[i]!, cp2y = nums[i + 1]!\n const ex = nums[i + 2]!, ey = nums[i + 3]!\n approximateCubic(segments, cx, cy, cx, cy, cp2x, cp2y, ex, ey)\n cx = ex; cy = ey\n }\n break\n }\n\n case 'Q': {\n // Quadratic bezier\n for (let i = 0; i < nums.length; i += 4) {\n const cpx = nums[i]!, cpy = nums[i + 1]!\n const ex = nums[i + 2]!, ey = nums[i + 3]!\n approximateQuadratic(segments, cx, cy, cpx, cpy, ex, ey)\n cx = ex; cy = ey\n }\n break\n }\n\n case 'Z':\n case 'z':\n if (cx !== startX || cy !== startY) {\n segments.push({ x1: cx, y1: cy, x2: startX, y2: startY })\n }\n cx = startX; cy = startY\n break\n\n // A (arc) — simplified: just connect endpoints\n case 'A':\n if (nums.length >= 7) {\n const ex = nums[5]!, ey = nums[6]!\n segments.push({ x1: cx, y1: cy, x2: ex, y2: ey })\n cx = ex; cy = ey\n }\n break\n\n default:\n // Skip unrecognized\n break\n }\n }\n\n return segments\n}\n\nfunction approximateCubic(\n out: Array<{ x1: number; y1: number; x2: number; y2: number }>,\n x0: number, y0: number,\n cp1x: number, cp1y: number,\n cp2x: number, cp2y: number,\n x3: number, y3: number,\n steps = 8,\n): void {\n let px = x0, py = y0\n for (let i = 1; i <= steps; i++) {\n const t = i / steps\n const t2 = t * t\n const t3 = t2 * t\n const mt = 1 - t\n const mt2 = mt * mt\n const mt3 = mt2 * mt\n const nx = mt3 * x0 + 3 * mt2 * t * cp1x + 3 * mt * t2 * cp2x + t3 * x3\n const ny = mt3 * y0 + 3 * mt2 * t * cp1y + 3 * mt * t2 * cp2y + t3 * y3\n out.push({ x1: px, y1: py, x2: nx, y2: ny })\n px = nx; py = ny\n }\n}\n\nfunction approximateQuadratic(\n out: Array<{ x1: number; y1: number; x2: number; y2: number }>,\n x0: number, y0: number,\n cpx: number, cpy: number,\n x2: number, y2: number,\n steps = 6,\n): void {\n let px = x0, py = y0\n for (let i = 1; i <= steps; i++) {\n const t = i / steps\n const mt = 1 - t\n const nx = mt * mt * x0 + 2 * mt * t * cpx + t * t * x2\n const ny = mt * mt * y0 + 2 * mt * t * cpy + t * t * y2\n out.push({ x1: px, y1: py, x2: nx, y2: ny })\n px = nx; py = ny\n }\n}\n\n// ---------------------------------------------------------------------------\n// WebGL batch draw: Lines\n// ---------------------------------------------------------------------------\n\nfunction drawGLLines(wr: WebGLRendererRoot, lines: GLLine[]): void {\n if (lines.length === 0) return\n const { gl, programs, width, height, dpr } = wr\n\n gl.useProgram(programs.line)\n\n const posLoc = gl.getAttribLocation(programs.line, 'a_position')\n const colorLoc = gl.getAttribLocation(programs.line, 'a_color')\n const resLoc = gl.getUniformLocation(programs.line, 'u_resolution')\n\n gl.uniform2f(resLoc, width, height)\n\n // Build interleaved buffer: [x1,y1,r,g,b,a, x2,y2,r,g,b,a] per line\n const data = new Float32Array(lines.length * 12)\n for (let i = 0; i < lines.length; i++) {\n const l = lines[i]!\n const off = i * 12\n data[off] = l.x1; data[off + 1] = l.y1\n data[off + 2] = l.color[0]; data[off + 3] = l.color[1]\n data[off + 4] = l.color[2]; data[off + 5] = l.color[3]\n data[off + 6] = l.x2; data[off + 7] = l.y2\n data[off + 8] = l.color[0]; data[off + 9] = l.color[1]\n data[off + 10] = l.color[2]; data[off + 11] = l.color[3]\n }\n\n const buf = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, buf)\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW)\n\n const stride = 24 // 6 floats * 4 bytes\n gl.enableVertexAttribArray(posLoc)\n gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, stride, 0)\n gl.enableVertexAttribArray(colorLoc)\n gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, stride, 8)\n\n // Set line width (WebGL limits this, but try)\n const maxWidth = lines.reduce((m, l) => Math.max(m, l.width), 1)\n gl.lineWidth(Math.min(maxWidth * dpr, gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)[1]))\n\n gl.drawArrays(gl.LINES, 0, lines.length * 2)\n\n gl.disableVertexAttribArray(posLoc)\n gl.disableVertexAttribArray(colorLoc)\n gl.deleteBuffer(buf)\n}\n\n// ---------------------------------------------------------------------------\n// WebGL batch draw: Points\n// ---------------------------------------------------------------------------\n\nfunction drawGLPoints(wr: WebGLRendererRoot, points: GLPoint[]): void {\n if (points.length === 0) return\n const { gl, programs, width, height, dpr } = wr\n\n gl.useProgram(programs.point)\n\n const posLoc = gl.getAttribLocation(programs.point, 'a_position')\n const radiusLoc = gl.getAttribLocation(programs.point, 'a_radius')\n const colorLoc = gl.getAttribLocation(programs.point, 'a_color')\n const resLoc = gl.getUniformLocation(programs.point, 'u_resolution')\n\n gl.uniform2f(resLoc, width, height)\n\n // Interleaved: [x, y, radius, r, g, b, a] per point\n const data = new Float32Array(points.length * 7)\n for (let i = 0; i < points.length; i++) {\n const p = points[i]!\n const off = i * 7\n data[off] = p.x; data[off + 1] = p.y\n data[off + 2] = p.radius * dpr\n data[off + 3] = p.color[0]; data[off + 4] = p.color[1]\n data[off + 5] = p.color[2]; data[off + 6] = p.color[3]\n }\n\n const buf = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, buf)\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW)\n\n const stride = 28 // 7 floats * 4 bytes\n gl.enableVertexAttribArray(posLoc)\n gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, stride, 0)\n gl.enableVertexAttribArray(radiusLoc)\n gl.vertexAttribPointer(radiusLoc, 1, gl.FLOAT, false, stride, 8)\n gl.enableVertexAttribArray(colorLoc)\n gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, stride, 12)\n\n gl.drawArrays(gl.POINTS, 0, points.length)\n\n gl.disableVertexAttribArray(posLoc)\n gl.disableVertexAttribArray(radiusLoc)\n gl.disableVertexAttribArray(colorLoc)\n gl.deleteBuffer(buf)\n}\n\n// ---------------------------------------------------------------------------\n// WebGL batch draw: Rects (as triangle pairs)\n// ---------------------------------------------------------------------------\n\nfunction drawGLRects(wr: WebGLRendererRoot, rects: GLRect[]): void {\n if (rects.length === 0) return\n const { gl, programs, width, height } = wr\n\n gl.useProgram(programs.rect)\n\n const posLoc = gl.getAttribLocation(programs.rect, 'a_position')\n const colorLoc = gl.getAttribLocation(programs.rect, 'a_color')\n const resLoc = gl.getUniformLocation(programs.rect, 'u_resolution')\n\n gl.uniform2f(resLoc, width, height)\n\n // 6 vertices per rect (2 triangles), 6 floats per vertex (x,y,r,g,b,a)\n const data = new Float32Array(rects.length * 36)\n for (let i = 0; i < rects.length; i++) {\n const r = rects[i]!\n const off = i * 36\n const x0 = r.x, y0 = r.y, x1 = r.x + r.w, y1 = r.y + r.h\n const c = r.color\n\n // Triangle 1: top-left, top-right, bottom-left\n data[off] = x0; data[off + 1] = y0; data[off + 2] = c[0]; data[off + 3] = c[1]; data[off + 4] = c[2]; data[off + 5] = c[3]\n data[off + 6] = x1; data[off + 7] = y0; data[off + 8] = c[0]; data[off + 9] = c[1]; data[off + 10] = c[2]; data[off + 11] = c[3]\n data[off + 12] = x0; data[off + 13] = y1; data[off + 14] = c[0]; data[off + 15] = c[1]; data[off + 16] = c[2]; data[off + 17] = c[3]\n\n // Triangle 2: top-right, bottom-right, bottom-left\n data[off + 18] = x1; data[off + 19] = y0; data[off + 20] = c[0]; data[off + 21] = c[1]; data[off + 22] = c[2]; data[off + 23] = c[3]\n data[off + 24] = x1; data[off + 25] = y1; data[off + 26] = c[0]; data[off + 27] = c[1]; data[off + 28] = c[2]; data[off + 29] = c[3]\n data[off + 30] = x0; data[off + 31] = y1; data[off + 32] = c[0]; data[off + 33] = c[1]; data[off + 34] = c[2]; data[off + 35] = c[3]\n }\n\n const buf = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, buf)\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW)\n\n const stride = 24\n gl.enableVertexAttribArray(posLoc)\n gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, stride, 0)\n gl.enableVertexAttribArray(colorLoc)\n gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, stride, 8)\n\n gl.drawArrays(gl.TRIANGLES, 0, rects.length * 6)\n\n gl.disableVertexAttribArray(posLoc)\n gl.disableVertexAttribArray(colorLoc)\n gl.deleteBuffer(buf)\n}\n\n// ---------------------------------------------------------------------------\n// 2D canvas overlay: text, axes, complex shapes\n// ---------------------------------------------------------------------------\n\nfunction draw2DNodes(\n ctx: CanvasRenderingContext2D,\n nodes: RenderNode[],\n _cw: number, _ch: number,\n theme: ThemeConfig,\n): void {\n for (const node of nodes) {\n draw2DNode(ctx, node, theme)\n }\n}\n\nfunction draw2DNode(\n ctx: CanvasRenderingContext2D,\n node: RenderNode,\n theme: ThemeConfig,\n): void {\n switch (node.type) {\n case 'group':\n ctx.save()\n if (node.attrs?.transform) apply2DTransform(ctx, node.attrs.transform)\n if (node.attrs?.opacity != null) ctx.globalAlpha *= node.attrs.opacity\n for (const child of node.children) draw2DNode(ctx, child, theme)\n ctx.restore()\n break\n\n case 'text': {\n const fill = resolveColor(node.attrs?.fill, resolveColor(theme.textColor))\n const opacity = node.attrs?.opacity ?? 1\n const fontSize = (node.attrs as Record<string, unknown>)?.fontSize as number ?? theme.fontSize\n const fontFamily = (node.attrs as Record<string, unknown>)?.fontFamily as string ?? theme.fontFamily\n const fontWeight = (node.attrs as Record<string, unknown>)?.fontWeight as string ?? 'normal'\n const textAnchor = (node.attrs as Record<string, unknown>)?.textAnchor as string | undefined\n const baseline = (node.attrs as Record<string, unknown>)?.dominantBaseline as string | undefined\n\n ctx.save()\n ctx.globalAlpha = opacity\n ctx.fillStyle = resolveColor(fill)\n ctx.font = `${fontWeight} ${fontSize}px ${resolveColor(fontFamily)}`\n ctx.textAlign = mapTextAlign(textAnchor)\n ctx.textBaseline = mapTextBaseline(baseline)\n\n if (node.attrs?.transform) apply2DTransform(ctx, node.attrs.transform)\n ctx.fillText(node.content, node.x, node.y)\n ctx.restore()\n break\n }\n\n case 'path': {\n // Only draw filled paths on 2D overlay (stroked paths handled by WebGL)\n const fill = resolveColor(node.attrs?.fill)\n if (fill && fill !== 'transparent' && fill !== 'none' && node.attrs?.fill) {\n const opacity = (node.attrs?.opacity ?? 1) * (node.attrs?.fillOpacity ?? 1)\n ctx.save()\n ctx.globalAlpha = opacity\n ctx.fillStyle = fill\n const p = new Path2D(node.d)\n ctx.fill(p)\n ctx.restore()\n }\n break\n }\n\n // line, rect, circle — already handled by WebGL, skip\n default:\n break\n }\n}\n\nfunction apply2DTransform(ctx: CanvasRenderingContext2D, t: string): void {\n const translateMatch = t.match(/translate\\(\\s*([^,)]+)[,\\s]+([^)]+)\\)/)\n if (translateMatch) {\n ctx.translate(parseFloat(translateMatch[1]!), parseFloat(translateMatch[2]!))\n }\n\n const rotateMatch = t.match(/rotate\\(\\s*([^,)]+)(?:[,\\s]+([^,)]+)[,\\s]+([^)]+))?\\)/)\n if (rotateMatch) {\n const angle = parseFloat(rotateMatch[1]!) * Math.PI / 180\n if (rotateMatch[2] && rotateMatch[3]) {\n const cx = parseFloat(rotateMatch[2])\n const cy = parseFloat(rotateMatch[3])\n ctx.translate(cx, cy)\n ctx.rotate(angle)\n ctx.translate(-cx, -cy)\n } else {\n ctx.rotate(angle)\n }\n }\n}\n","/**\n * Nice number algorithms for human-readable axis ticks.\n * Produces values like 0, 20, 40, 60, 80, 100 — not 0, 17, 34, 51, 68, 85.\n */\n\nexport function niceNumber(value: number, round: boolean): number {\n if (value === 0) return 0\n const exp = Math.floor(Math.log10(Math.abs(value)))\n const frac = value / Math.pow(10, exp)\n\n let nice: number\n if (round) {\n nice = frac < 1.5 ? 1 : frac < 3 ? 2 : frac < 7 ? 5 : 10\n } else {\n nice = frac <= 1 ? 1 : frac <= 2 ? 2 : frac <= 5 ? 5 : 10\n }\n\n return nice * Math.pow(10, exp)\n}\n\nexport function niceRange(\n dataMin: number,\n dataMax: number,\n tickCount: number,\n): { min: number; max: number; spacing: number } {\n if (tickCount < 2) tickCount = 2\n\n if (dataMin === dataMax) {\n if (dataMin === 0) return { min: 0, max: 1, spacing: 0.2 }\n const pad = Math.abs(dataMin) * 0.1 || 1\n return niceRange(dataMin - pad, dataMax + pad, tickCount)\n }\n\n const range = niceNumber(dataMax - dataMin, false)\n const spacing = niceNumber(range / (tickCount - 1), true)\n const min = Math.floor(dataMin / spacing) * spacing\n const max = Math.ceil(dataMax / spacing) * spacing\n\n return { min, max, spacing }\n}\n\nexport function generateTicks(min: number, max: number, spacing: number): number[] {\n if (spacing <= 0) return [min]\n\n const ticks: number[] = []\n const eps = spacing * 1e-10\n\n for (let v = min; v <= max + eps; v += spacing) {\n ticks.push(Math.round(v * 1e12) / 1e12)\n }\n return ticks\n}\n","import type { Scale, Tick } from '../types'\nimport { niceRange, generateTicks } from './nice'\n\nexport interface LinearScaleOpts {\n domain?: [number, number]\n range?: [number, number]\n nice?: boolean\n clamp?: boolean\n format?: (value: number) => string\n}\n\nexport function createLinearScale(opts?: LinearScaleOpts): Scale {\n let dMin = opts?.domain?.[0] ?? 0\n let dMax = opts?.domain?.[1] ?? 1\n let rMin = opts?.range?.[0] ?? 0\n let rMax = opts?.range?.[1] ?? 1\n const useNice = opts?.nice ?? true\n const clamp = opts?.clamp ?? false\n const fmt = opts?.format ?? defaultFmt\n\n // When nice is enabled, adjust the domain to nice values\n // so ticks always map within the chart area\n if (useNice && dMin !== dMax) {\n const { min, max } = niceRange(dMin, dMax, 5)\n dMin = min\n dMax = max\n }\n\n function map(value: number | string | Date): number {\n const v = Number(value)\n const span = dMax - dMin\n if (span === 0) return (rMin + rMax) / 2\n let t = (v - dMin) / span\n if (clamp) t = Math.max(0, Math.min(1, t))\n return round2(rMin + t * (rMax - rMin))\n }\n\n function invert(px: number): number {\n const span = rMax - rMin\n if (span === 0) return (dMin + dMax) / 2\n return dMin + ((px - rMin) / span) * (dMax - dMin)\n }\n\n function ticks(count = 5): Tick[] {\n const { min, max, spacing } = niceRange(dMin, dMax, count)\n const vals = generateTicks(useNice ? min : dMin, useNice ? max : dMax, spacing)\n return vals.map((v) => ({ value: v, position: map(v), label: fmt(v) }))\n }\n\n return {\n map,\n invert,\n ticks,\n setDomain(min, max) { dMin = Number(min); dMax = Number(max) },\n setRange(min, max) { rMin = min; rMax = max },\n getDomain() { return [dMin, dMax] },\n getRange() { return [rMin, rMax] },\n bandwidth() { return 0 },\n }\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nfunction defaultFmt(v: number): string {\n const abs = Math.abs(v)\n if (abs >= 1e12) return trimSuffix(v / 1e12, 'T')\n if (abs >= 1e9) return trimSuffix(v / 1e9, 'B')\n if (abs >= 1e6) return trimSuffix(v / 1e6, 'M')\n if (abs >= 1e3) return trimSuffix(v / 1e3, 'K')\n if (Number.isInteger(v)) return String(v)\n return v.toFixed(1)\n}\n\nfunction trimSuffix(v: number, suffix: string): string {\n const s = v.toFixed(1)\n return (s.endsWith('.0') ? s.slice(0, -2) : s) + suffix\n}\n","import type { Scale, Tick } from '../types'\n\nexport interface CategoricalScaleOpts {\n categories?: (string | number | Date)[]\n range?: [number, number]\n format?: (value: string | number | Date) => string\n /**\n * When true, distributes categories into equal-width bands with\n * each category centered in its band. This prevents items at\n * the edges from overflowing the chart area (critical for bar charts).\n * When false (default), positions are edge-to-edge.\n */\n band?: boolean\n}\n\nexport function createCategoricalScale(opts?: CategoricalScaleOpts): Scale & {\n setCategories(cats: (string | number | Date)[]): void\n /** Get the width of one band (only meaningful in band mode) */\n bandwidth(): number\n} {\n let cats: (string | number | Date)[] = opts?.categories ?? []\n let rMin = opts?.range?.[0] ?? 0\n let rMax = opts?.range?.[1] ?? 1\n const fmt = opts?.format ?? String\n const useBand = opts?.band ?? false\n\n function round2(n: number): number {\n return Math.round(n * 100) / 100\n }\n\n function pos(index: number): number {\n const n = cats.length\n if (n === 0) return round2((rMin + rMax) / 2)\n if (useBand) {\n const slotWidth = (rMax - rMin) / n\n return round2(rMin + (index + 0.5) * slotWidth)\n }\n if (n <= 1) return round2((rMin + rMax) / 2)\n return round2(rMin + (index / (n - 1)) * (rMax - rMin))\n }\n\n function bandwidth(): number {\n const n = cats.length\n if (n === 0) return 0\n if (useBand) return (rMax - rMin) / n\n // For point mode, approximate bandwidth from spacing\n if (n <= 1) return rMax - rMin\n return (rMax - rMin) / (n - 1)\n }\n\n function map(value: number | string | Date): number {\n if (typeof value === 'number' && Number.isFinite(value)) return pos(value)\n\n const idx = cats.findIndex((c) =>\n c instanceof Date && value instanceof Date\n ? c.getTime() === value.getTime()\n : String(c) === String(value),\n )\n return idx === -1 ? (rMin + rMax) / 2 : pos(idx)\n }\n\n function invert(px: number): number {\n const n = cats.length\n if (n === 0) return 0\n if (useBand) {\n const slotWidth = (rMax - rMin) / n\n return Math.floor((px - rMin) / slotWidth)\n }\n if (n <= 1) return 0\n const t = (px - rMin) / (rMax - rMin)\n return Math.round(t * (n - 1))\n }\n\n function ticks(): Tick[] {\n return cats.map((c, i) => ({ value: c, position: pos(i), label: fmt(c) }))\n }\n\n return {\n map,\n invert,\n ticks,\n setDomain() {},\n setRange(min, max) { rMin = min; rMax = max },\n getDomain() { return [cats[0] ?? '', cats[cats.length - 1] ?? ''] },\n getRange() { return [rMin, rMax] },\n setCategories(c) { cats = c },\n bandwidth,\n }\n}\n","/**\n * Zoom & Pan interaction module.\n *\n * Works with all renderers — modifies scale domains, not DOM elements.\n * Wheel zoom on the x-axis, drag to pan. Touch pinch support.\n */\n\nimport type { Scale, ChartArea } from '../types'\n\nexport interface ZoomPanConfig {\n /** Enable x-axis zoom. Default true. */\n x?: boolean\n /** Enable y-axis zoom. Default false. */\n y?: boolean\n /** Enable wheel zoom. Default true. */\n wheel?: boolean\n /** Enable drag pan. Default true. */\n drag?: boolean\n /** Enable pinch zoom. Default true. */\n pinch?: boolean\n /** Minimum zoom level (1 = no zoom). Default 1. */\n minZoom?: number\n /** Maximum zoom level. Default 20. */\n maxZoom?: number\n}\n\nexport interface ZoomPanState {\n zoomX: number\n zoomY: number\n panX: number\n panY: number\n}\n\nexport interface ZoomPanInstance {\n attach(el: HTMLElement | SVGElement, getArea: () => ChartArea, getScales: () => { xScale: Scale; yScale: Scale }): void\n reset(): void\n getState(): ZoomPanState\n applyToScales(xScale: Scale, yScale: Scale, area: ChartArea): void\n destroy(): void\n}\n\n/**\n * Create a zoom & pan controller.\n *\n * Usage:\n * ```ts\n * const zp = createZoomPan({ x: true, y: false }, () => render())\n * zp.attach(svgElement, () => chartArea, () => ({ xScale, yScale }))\n * // On each render, apply to scales:\n * zp.applyToScales(xScale, yScale, area)\n * ```\n */\nexport function createZoomPan(\n config: ZoomPanConfig,\n onUpdate: () => void,\n interactionState?: { isPanning: boolean },\n): ZoomPanInstance {\n const cfg = {\n x: config.x ?? true,\n y: config.y ?? false,\n wheel: config.wheel ?? true,\n drag: config.drag ?? true,\n pinch: config.pinch ?? true,\n minZoom: config.minZoom ?? 1,\n maxZoom: config.maxZoom ?? 20,\n }\n\n const state: ZoomPanState = {\n zoomX: 1,\n zoomY: 1,\n panX: 0,\n panY: 0,\n }\n\n let el: HTMLElement | SVGElement | null = null\n let getArea: (() => ChartArea) | null = null\n let isDragging = false\n let dragStartX = 0\n let dragStartY = 0\n let dragStartPanX = 0\n let dragStartPanY = 0\n\n // Touch state\n let lastPinchDist = 0\n\n // -----------------------------------------------------------------------\n // Wheel zoom\n // -----------------------------------------------------------------------\n\n function onWheel(e: WheelEvent): void {\n if (!cfg.wheel || !getArea) return\n e.preventDefault()\n\n const area = getArea()\n const rect = el!.getBoundingClientRect()\n const mouseX = e.clientX - rect.left\n const relX = (mouseX - area.x) / area.width\n\n // Zoom factor\n const delta = e.deltaY > 0 ? 0.9 : 1.1\n\n if (cfg.x) {\n const newZoom = clamp(state.zoomX * delta, cfg.minZoom, cfg.maxZoom)\n // Adjust pan to zoom around cursor position\n const zoomRatio = newZoom / state.zoomX\n state.panX = relX - (relX - state.panX) * zoomRatio\n state.zoomX = newZoom\n }\n\n if (cfg.y) {\n const mouseY = e.clientY - rect.top\n const relY = (mouseY - area.y) / area.height\n const newZoomY = clamp(state.zoomY * delta, cfg.minZoom, cfg.maxZoom)\n const zoomRatioY = newZoomY / state.zoomY\n state.panY = relY - (relY - state.panY) * zoomRatioY\n state.zoomY = newZoomY\n }\n\n clampPan()\n onUpdate()\n }\n\n // -----------------------------------------------------------------------\n // Drag pan\n // -----------------------------------------------------------------------\n\n function onPointerDown(e: PointerEvent): void {\n if (!cfg.drag) return\n // Don't start pan if shift is held (reserved for brush selection)\n if (e.shiftKey) return\n isDragging = true\n if (interactionState) interactionState.isPanning = true\n dragStartX = e.clientX\n dragStartY = e.clientY\n dragStartPanX = state.panX\n dragStartPanY = state.panY\n el!.setPointerCapture(e.pointerId)\n ;(el as HTMLElement).style.cursor = 'grabbing'\n }\n\n function onPointerMove(e: PointerEvent): void {\n if (!isDragging || !getArea) return\n const area = getArea()\n const dx = e.clientX - dragStartX\n const dy = e.clientY - dragStartY\n\n if (cfg.x) {\n state.panX = dragStartPanX + dx / (area.width * state.zoomX)\n }\n if (cfg.y) {\n state.panY = dragStartPanY + dy / (area.height * state.zoomY)\n }\n\n clampPan()\n onUpdate()\n }\n\n function onPointerUp(e: PointerEvent): void {\n if (!isDragging) return\n isDragging = false\n if (interactionState) interactionState.isPanning = false\n el!.releasePointerCapture(e.pointerId)\n ;(el as HTMLElement).style.cursor = 'crosshair'\n }\n\n // -----------------------------------------------------------------------\n // Touch pinch\n // -----------------------------------------------------------------------\n\n let lastPinchCenterX = 0\n let lastPinchCenterY = 0\n\n function onTouchStart(e: TouchEvent): void {\n if (!cfg.pinch || e.touches.length !== 2) return\n lastPinchDist = pinchDistance(e)\n lastPinchCenterX = (e.touches[0]!.clientX + e.touches[1]!.clientX) / 2\n lastPinchCenterY = (e.touches[0]!.clientY + e.touches[1]!.clientY) / 2\n }\n\n function onTouchMove(e: TouchEvent): void {\n if (!cfg.pinch || e.touches.length !== 2 || !getArea) return\n e.preventDefault()\n\n const area = getArea()\n const rect = el!.getBoundingClientRect()\n const dist = pinchDistance(e)\n const scaleFactor = dist / lastPinchDist\n lastPinchDist = dist\n\n // Pinch center in chart-relative coords\n const cx = (lastPinchCenterX - rect.left - area.x) / area.width\n const cy = (lastPinchCenterY - rect.top - area.y) / area.height\n\n // Update pinch center for next frame\n lastPinchCenterX = (e.touches[0]!.clientX + e.touches[1]!.clientX) / 2\n lastPinchCenterY = (e.touches[0]!.clientY + e.touches[1]!.clientY) / 2\n\n // Zoom toward pinch center (same formula as wheel zoom)\n if (cfg.x) {\n const newZoom = clamp(state.zoomX * scaleFactor, cfg.minZoom, cfg.maxZoom)\n const ratio = newZoom / state.zoomX\n state.panX = cx - (cx - state.panX) * ratio\n state.zoomX = newZoom\n }\n if (cfg.y) {\n const newZoom = clamp(state.zoomY * scaleFactor, cfg.minZoom, cfg.maxZoom)\n const ratio = newZoom / state.zoomY\n state.panY = cy - (cy - state.panY) * ratio\n state.zoomY = newZoom\n }\n\n clampPan()\n onUpdate()\n }\n\n // -----------------------------------------------------------------------\n // Helpers\n // -----------------------------------------------------------------------\n\n function clampPan(): void {\n // Keep visible window within bounds.\n // panX/panY represent the offset of the viewport origin as a fraction of the full area.\n // At zoom=1, pan must be 0. At zoom=2, pan range is [-0.5, 0.5] (can shift half the view).\n const halfVisX = (1 - 1 / state.zoomX) / 2\n state.panX = clamp(state.panX, -halfVisX, halfVisX)\n\n const halfVisY = (1 - 1 / state.zoomY) / 2\n state.panY = clamp(state.panY, -halfVisY, halfVisY)\n }\n\n function pinchDistance(e: TouchEvent): number {\n const dx = e.touches[0]!.clientX - e.touches[1]!.clientX\n const dy = e.touches[0]!.clientY - e.touches[1]!.clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n function clamp(v: number, min: number, max: number): number {\n return Math.min(Math.max(v, min), max)\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n attach(element, areaFn, _scalesFn) {\n el = element\n getArea = areaFn\n\n if (cfg.wheel) {\n el.addEventListener('wheel', onWheel as EventListener, { passive: false })\n }\n if (cfg.drag) {\n el.addEventListener('pointerdown', onPointerDown as EventListener)\n el.addEventListener('pointermove', onPointerMove as EventListener)\n el.addEventListener('pointerup', onPointerUp as EventListener)\n }\n if (cfg.pinch) {\n el.addEventListener('touchstart', onTouchStart as EventListener, { passive: false })\n el.addEventListener('touchmove', onTouchMove as EventListener, { passive: false })\n }\n },\n\n reset() {\n state.zoomX = 1\n state.zoomY = 1\n state.panX = 0\n state.panY = 0\n onUpdate()\n },\n\n getState() {\n return { ...state }\n },\n\n /**\n * Apply current zoom/pan to scales by adjusting their domains.\n * Call this at the start of each render, after creating scales.\n */\n applyToScales(xScale, yScale, area) {\n if (state.zoomX === 1 && state.zoomY === 1 && state.panX === 0 && state.panY === 0) return\n\n if (cfg.x && state.zoomX !== 1) {\n const [xMin, xMax] = xScale.getRange()\n const fullWidth = xMax - xMin\n const visibleWidth = fullWidth / state.zoomX\n const offset = -state.panX * fullWidth\n xScale.setRange(area.x + offset, area.x + offset + visibleWidth)\n }\n\n if (cfg.y && state.zoomY !== 1) {\n const [yMin, yMax] = yScale.getDomain() as [number, number]\n const fullRange = yMax - yMin\n const visibleRange = fullRange / state.zoomY\n const offset = -state.panY * fullRange\n yScale.setDomain(yMin + offset, yMin + offset + visibleRange)\n }\n },\n\n destroy() {\n if (!el) return\n el.removeEventListener('wheel', onWheel as EventListener)\n el.removeEventListener('pointerdown', onPointerDown as EventListener)\n el.removeEventListener('pointermove', onPointerMove as EventListener)\n el.removeEventListener('pointerup', onPointerUp as EventListener)\n el.removeEventListener('touchstart', onTouchStart as EventListener)\n el.removeEventListener('touchmove', onTouchMove as EventListener)\n el = null\n getArea = null\n },\n }\n}\n","/**\n * Brush selection module.\n *\n * Click-drag to select a data range on the chart area.\n * When pan is also enabled, requires Shift+drag to activate.\n * Emits brush:end event with start/end label indices.\n */\n\nimport type { ChartArea, Scale, EventBus, PreparedData } from '../types'\n\nexport interface BrushConfig {\n /** Fill color of selection rect. Default rgba(59,130,246,0.15). */\n fillColor?: string\n /** Border color of selection rect. Default rgba(59,130,246,0.5). */\n strokeColor?: string\n}\n\nexport interface BrushInstance {\n destroy(): void\n}\n\nexport function createBrush(\n config: BrushConfig,\n bus: EventBus,\n el: HTMLElement | SVGElement,\n getArea: () => ChartArea,\n getXScale: () => Scale,\n getData: () => PreparedData,\n isPanEnabled: boolean,\n): BrushInstance {\n const fillColor = config.fillColor ?? 'rgba(59,130,246,0.15)'\n const strokeColor = config.strokeColor ?? 'rgba(59,130,246,0.5)'\n\n let isBrushing = false\n let startClientX = 0\n let brushRect: HTMLDivElement | null = null\n let parentEl: HTMLElement | null = null\n\n // We need a parent element for absolute positioning\n function getParent(): HTMLElement {\n if (parentEl) return parentEl\n parentEl = el.parentElement as HTMLElement\n if (!parentEl) parentEl = el as unknown as HTMLElement\n parentEl.style.position = 'relative'\n return parentEl\n }\n\n function toLocalX(clientX: number): number {\n const r = el.getBoundingClientRect()\n return clientX - r.left\n }\n\n function onPointerDown(e: PointerEvent): void {\n // If pan is enabled, require Shift for brush\n if (isPanEnabled && !e.shiftKey) return\n // If pan is NOT enabled, any click starts brush\n if (!isPanEnabled && e.shiftKey) return // shift reserved for other uses when no pan\n\n const area = getArea()\n const localX = toLocalX(e.clientX)\n const r = el.getBoundingClientRect()\n const localY = e.clientY - r.top\n\n // Only start if within chart area\n if (localX < area.x || localX > area.x + area.width) return\n if (localY < area.y || localY > area.y + area.height) return\n\n isBrushing = true\n startClientX = e.clientX\n ;(el as HTMLElement).setPointerCapture(e.pointerId)\n\n // Create selection rect\n brushRect = document.createElement('div')\n brushRect.className = 'chartts-brush-rect'\n brushRect.style.cssText = `\n position: absolute;\n top: ${area.y}px;\n height: ${area.height}px;\n left: ${localX}px;\n width: 0px;\n background: ${fillColor};\n border-left: 1px solid ${strokeColor};\n border-right: 1px solid ${strokeColor};\n pointer-events: none;\n z-index: 10;\n `\n getParent().appendChild(brushRect)\n }\n\n function onPointerMove(e: PointerEvent): void {\n if (!isBrushing || !brushRect) return\n\n const area = getArea()\n const startX = Math.max(toLocalX(startClientX), area.x)\n const currentX = Math.min(Math.max(toLocalX(e.clientX), area.x), area.x + area.width)\n\n const left = Math.min(startX, currentX)\n const width = Math.abs(currentX - startX)\n\n brushRect.style.left = `${left}px`\n brushRect.style.width = `${width}px`\n }\n\n function onPointerUp(e: PointerEvent): void {\n if (!isBrushing) return\n isBrushing = false\n ;(el as HTMLElement).releasePointerCapture(e.pointerId)\n\n const area = getArea()\n const xScale = getXScale()\n const data = getData()\n\n const startX = Math.max(toLocalX(startClientX), area.x)\n const endX = Math.min(Math.max(toLocalX(e.clientX), area.x), area.x + area.width)\n\n // Remove rect\n brushRect?.remove()\n brushRect = null\n\n // Minimum drag distance to count as selection (5px)\n if (Math.abs(endX - startX) < 5) return\n\n // Convert pixel positions to data indices\n const leftX = Math.min(startX, endX)\n const rightX = Math.max(startX, endX)\n\n // Find nearest label indices\n let startIdx = 0\n let endIdx = data.labels.length - 1\n let bestStartDist = Infinity\n let bestEndDist = Infinity\n\n for (let i = 0; i < data.labels.length; i++) {\n const pos = xScale.map(data.labels[i]!)\n const distToStart = Math.abs(pos - leftX)\n const distToEnd = Math.abs(pos - rightX)\n if (distToStart < bestStartDist) { bestStartDist = distToStart; startIdx = i }\n if (distToEnd < bestEndDist) { bestEndDist = distToEnd; endIdx = i }\n }\n\n if (startIdx > endIdx) [startIdx, endIdx] = [endIdx, startIdx]\n\n bus.emit('brush:end', {\n startIndex: startIdx,\n endIndex: endIdx,\n startLabel: data.labels[startIdx]!,\n endLabel: data.labels[endIdx]!,\n })\n }\n\n function onKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && isBrushing) {\n isBrushing = false\n brushRect?.remove()\n brushRect = null\n }\n }\n\n // Attach listeners\n el.addEventListener('pointerdown', onPointerDown as EventListener)\n el.addEventListener('pointermove', onPointerMove as EventListener)\n el.addEventListener('pointerup', onPointerUp as EventListener)\n document.addEventListener('keydown', onKeyDown)\n\n return {\n destroy(): void {\n el.removeEventListener('pointerdown', onPointerDown as EventListener)\n el.removeEventListener('pointermove', onPointerMove as EventListener)\n el.removeEventListener('pointerup', onPointerUp as EventListener)\n document.removeEventListener('keydown', onKeyDown)\n brushRect?.remove()\n },\n }\n}\n","import type { RenderNode, RenderContext } from '../types'\n\n/**\n * Debug utilities for Chartts.\n * Attach to a chart to get render tree inspection, event logging, and an overlay panel.\n */\nexport interface DebugPanel {\n attach(container: HTMLElement, svg: SVGElement): void\n update(ctx: RenderContext, nodes: RenderNode[]): void\n destroy(): void\n}\n\nexport function createDebugPanel(): DebugPanel {\n let panel: HTMLDivElement | null = null\n let treeEl: HTMLPreElement | null = null\n let statsEl: HTMLDivElement | null = null\n\n function attach(container: HTMLElement, svg: SVGElement): void {\n panel = document.createElement('div')\n panel.className = 'chartts-debug'\n panel.style.cssText = `\n position: absolute;\n top: 0;\n right: 0;\n width: 320px;\n max-height: 100%;\n overflow-y: auto;\n background: rgba(0,0,0,0.9);\n color: #e5e7eb;\n font-family: \"SF Mono\", \"Fira Code\", monospace;\n font-size: 11px;\n padding: 12px;\n border-left: 1px solid #333;\n z-index: 10000;\n `\n\n // Stats section\n statsEl = document.createElement('div')\n statsEl.style.cssText = 'margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #333;'\n panel.appendChild(statsEl)\n\n // Render tree section\n const treeLabel = document.createElement('div')\n treeLabel.textContent = 'RENDER TREE'\n treeLabel.style.cssText = 'color: #8b5cf6; font-weight: 700; margin-bottom: 8px; font-size: 10px; letter-spacing: 0.05em;'\n panel.appendChild(treeLabel)\n\n treeEl = document.createElement('pre')\n treeEl.style.cssText = 'margin: 0; white-space: pre-wrap; word-break: break-all; line-height: 1.4;'\n panel.appendChild(treeEl)\n\n container.style.position = 'relative'\n container.appendChild(panel)\n\n // Add SVG element outline on hover\n svg.addEventListener('mouseover', (e) => {\n const target = e.target as SVGElement\n if (target !== svg) {\n target.style.outline = '1px solid rgba(139, 92, 246, 0.5)'\n }\n })\n svg.addEventListener('mouseout', (e) => {\n const target = e.target as SVGElement\n target.style.outline = ''\n })\n }\n\n function update(ctx: RenderContext, nodes: RenderNode[]): void {\n if (!statsEl || !treeEl) return\n\n // Stats\n const nodeCount = countNodes(nodes)\n const { data, options, area } = ctx\n statsEl.innerHTML = `\n <div style=\"color:#8b5cf6;font-weight:700;font-size:10px;letter-spacing:0.05em;margin-bottom:8px;\">CHART INFO</div>\n <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:4px;\">\n <span style=\"color:#6b7280;\">Series:</span><span>${data.series.length}</span>\n <span style=\"color:#6b7280;\">Points:</span><span>${data.series[0]?.values.length ?? 0}</span>\n <span style=\"color:#6b7280;\">SVG nodes:</span><span>${nodeCount}</span>\n <span style=\"color:#6b7280;\">Area:</span><span>${Math.round(area.width)}x${Math.round(area.height)}</span>\n <span style=\"color:#6b7280;\">Y range:</span><span>${data.bounds.yMin} — ${data.bounds.yMax}</span>\n <span style=\"color:#6b7280;\">Theme:</span><span>${typeof options.theme === 'string' ? options.theme : 'custom'}</span>\n <span style=\"color:#6b7280;\">Curve:</span><span>${options.curve}</span>\n <span style=\"color:#6b7280;\">Animate:</span><span>${options.animate}</span>\n </div>\n `\n\n // Render tree\n treeEl.innerHTML = renderTreeToString(nodes, 0)\n }\n\n function destroy(): void {\n panel?.remove()\n panel = null\n treeEl = null\n statsEl = null\n }\n\n return { attach, update, destroy }\n}\n\nfunction countNodes(nodes: RenderNode[]): number {\n let count = 0\n for (const node of nodes) {\n count++\n if ('children' in node && Array.isArray(node.children)) {\n count += countNodes(node.children)\n }\n }\n return count\n}\n\nfunction renderTreeToString(nodes: RenderNode[], depth: number): string {\n const indent = ' '.repeat(depth)\n let result = ''\n\n for (const node of nodes) {\n const attrs = 'attrs' in node ? node.attrs : undefined\n const cls = attrs?.class ? ` <span style=\"color:#3b82f6\">.${attrs.class}</span>` : ''\n const type = `<span style=\"color:#10b981\">${node.type}</span>`\n\n if ('children' in node && Array.isArray(node.children)) {\n result += `${indent}${type}${cls} (${node.children.length})\\n`\n result += renderTreeToString(node.children, depth + 1)\n } else if (node.type === 'text') {\n result += `${indent}${type}${cls} \"${(node as { content: string }).content}\"\\n`\n } else if (node.type === 'path') {\n const d = (node as { d: string }).d\n result += `${indent}${type}${cls} d=\"${d.length > 40 ? d.slice(0, 40) + '...' : d}\"\\n`\n } else {\n result += `${indent}${type}${cls}\\n`\n }\n }\n\n return result\n}\n","/**\n * Data decimation algorithms for large datasets.\n *\n * Reduces data point count while preserving visual shape.\n * Sits in the pipeline between raw data and render.\n */\n\nimport type { ChartData, Series } from '../types'\n\nexport interface DecimateOptions {\n /** Decimation algorithm. Default 'lttb'. */\n algorithm?: 'lttb' | 'min-max'\n /** Target number of output points. Default: 2x container pixel width. */\n threshold?: number\n}\n\n/**\n * Decimate chart data to `threshold` points per series.\n * Returns original data if already below threshold.\n */\nexport function decimateData(\n data: ChartData,\n opts: DecimateOptions,\n): ChartData {\n const threshold = opts.threshold ?? 1000\n const algo = opts.algorithm ?? 'lttb'\n\n // Check if any series exceeds threshold\n const needsDecimation = data.series.some(s => s.values.length > threshold)\n if (!needsDecimation) return data\n\n const decimated: Series[] = data.series.map(s => {\n if (s.values.length <= threshold) return s\n\n const values = algo === 'lttb'\n ? lttb(s.values, threshold)\n : minMax(s.values, threshold)\n\n return { ...s, values: values.map(p => p.value) }\n })\n\n // Decimate labels to match\n const primarySeries = data.series[0]\n let labels = data.labels\n if (labels && primarySeries && primarySeries.values.length > threshold) {\n const indices = (decimated[0]!.values.length === threshold)\n ? getDecimatedIndices(primarySeries.values, threshold, algo)\n : undefined\n if (indices) {\n labels = indices.map(i => labels![i]!) as typeof labels\n }\n }\n\n return { labels, series: decimated }\n}\n\n// ---------------------------------------------------------------------------\n// LTTB — Largest Triangle Three Buckets\n// ---------------------------------------------------------------------------\n\ninterface IndexedPoint {\n index: number\n value: number\n}\n\n/**\n * Largest Triangle Three Buckets algorithm.\n * Selects points that maximize the visual triangle area,\n * preserving the shape of the data while reducing point count.\n *\n * Reference: Sveinn Steinarsson, \"Downsampling Time Series for Visual\n * Representation\" (2013)\n */\nfunction lttb(values: number[], threshold: number): IndexedPoint[] {\n const len = values.length\n if (len <= threshold) {\n return values.map((v, i) => ({ index: i, value: v }))\n }\n\n const sampled: IndexedPoint[] = []\n\n // Always keep first point\n sampled.push({ index: 0, value: values[0]! })\n\n // Bucket size (excluding first and last points)\n const bucketSize = (len - 2) / (threshold - 2)\n\n let prevIndex = 0\n\n for (let i = 1; i < threshold - 1; i++) {\n // Current bucket range\n const bucketStart = Math.floor((i - 1) * bucketSize) + 1\n const bucketEnd = Math.min(Math.floor(i * bucketSize) + 1, len - 1)\n\n // Next bucket average (for triangle computation)\n const nextBucketStart = Math.floor(i * bucketSize) + 1\n const nextBucketEnd = Math.min(Math.floor((i + 1) * bucketSize) + 1, len - 1)\n\n let avgX = 0\n let avgY = 0\n let avgCount = 0\n for (let j = nextBucketStart; j < nextBucketEnd; j++) {\n avgX += j\n avgY += values[j]!\n avgCount++\n }\n if (avgCount > 0) {\n avgX /= avgCount\n avgY /= avgCount\n }\n\n // Find point in current bucket that creates largest triangle\n let maxArea = -1\n let bestIndex = bucketStart\n\n const px = prevIndex\n const py = values[prevIndex]!\n\n for (let j = bucketStart; j < bucketEnd; j++) {\n // Triangle area = 0.5 * |x1(y2-y3) + x2(y3-y1) + x3(y1-y2)|\n const area = Math.abs(\n (px - avgX) * (values[j]! - py) -\n (px - j) * (avgY - py),\n ) * 0.5\n\n if (area > maxArea) {\n maxArea = area\n bestIndex = j\n }\n }\n\n sampled.push({ index: bestIndex, value: values[bestIndex]! })\n prevIndex = bestIndex\n }\n\n // Always keep last point\n sampled.push({ index: len - 1, value: values[len - 1]! })\n\n return sampled\n}\n\n// ---------------------------------------------------------------------------\n// Min-Max — preserves peaks and valleys\n// ---------------------------------------------------------------------------\n\n/**\n * Min-Max decimation. Each bucket keeps both the minimum and maximum values,\n * ensuring peaks and valleys are always visible.\n */\nfunction minMax(values: number[], threshold: number): IndexedPoint[] {\n const len = values.length\n if (len <= threshold) {\n return values.map((v, i) => ({ index: i, value: v }))\n }\n\n const sampled: IndexedPoint[] = []\n const bucketSize = len / (threshold / 2)\n\n // Always keep first\n sampled.push({ index: 0, value: values[0]! })\n\n for (let i = 0; i < threshold / 2 - 1; i++) {\n const start = Math.floor(i * bucketSize)\n const end = Math.min(Math.floor((i + 1) * bucketSize), len)\n\n let minVal = Infinity\n let maxVal = -Infinity\n let minIdx = start\n let maxIdx = start\n\n for (let j = start; j < end; j++) {\n const v = values[j]!\n if (v < minVal) { minVal = v; minIdx = j }\n if (v > maxVal) { maxVal = v; maxIdx = j }\n }\n\n // Add in index order so line doesn't cross itself\n if (minIdx < maxIdx) {\n sampled.push({ index: minIdx, value: minVal })\n sampled.push({ index: maxIdx, value: maxVal })\n } else {\n sampled.push({ index: maxIdx, value: maxVal })\n sampled.push({ index: minIdx, value: minVal })\n }\n }\n\n // Always keep last\n sampled.push({ index: len - 1, value: values[len - 1]! })\n\n return sampled\n}\n\n// ---------------------------------------------------------------------------\n// Helper: get decimated indices (for label mapping)\n// ---------------------------------------------------------------------------\n\nfunction getDecimatedIndices(values: number[], threshold: number, algo: string): number[] {\n if (algo === 'lttb') {\n return lttb(values, threshold).map(p => p.index)\n }\n return minMax(values, threshold).map(p => p.index)\n}\n","import type { ChartArea, ResolvedOptions, PreparedData } from '../types'\n\n/** Margins around the chart drawing area */\nexport interface Margins {\n top: number\n right: number\n bottom: number\n left: number\n}\n\n/**\n * Compute the chart drawing area given container dimensions,\n * padding, axis labels, and legend position.\n */\nexport function computeLayout(\n width: number,\n height: number,\n options: ResolvedOptions,\n data: PreparedData,\n): { area: ChartArea; margins: Margins } {\n const [pt, pr, pb, pl] = options.padding\n\n // Base margins from padding\n let top = pt\n let right = pr\n let bottom = pb\n let left = pl\n\n // Reserve space for y-axis labels + ticks\n if (options.yAxis) {\n const maxLabel = estimateYLabelWidth(data, options)\n left += maxLabel + 10 // label width + tick mark + gap\n }\n\n // Reserve space for y-axis label text (rotated)\n if (options.yLabel) {\n left += options.fontSize + 4\n }\n\n // Reserve space for x-axis labels + ticks\n if (options.xAxis) {\n bottom += options.fontSize + 8 // font height + tick mark + gap\n }\n\n // Reserve space for x-axis label text\n if (options.xLabel) {\n bottom += options.fontSize + 4\n }\n\n // Reserve space for legend\n if (options.legend) {\n switch (options.legend) {\n case 'top': top += 20; break\n case 'bottom': bottom += 20; break\n case 'left': left += 80; break\n case 'right': right += 80; break\n }\n }\n\n const area: ChartArea = {\n x: left,\n y: top,\n width: Math.max(0, width - left - right),\n height: Math.max(0, height - top - bottom),\n }\n\n return { area, margins: { top, right, bottom, left } }\n}\n\n/** Estimate the pixel width of the widest y-axis label */\nfunction estimateYLabelWidth(data: PreparedData, options: ResolvedOptions): number {\n const { yMin, yMax } = data.bounds\n const labels = [options.yFormat(yMin), options.yFormat(yMax)]\n const maxLen = Math.max(...labels.map((l) => l.length))\n // Approximate: each character ≈ 0.55em at the given font size\n return maxLen * (options.fontSize * 0.55)\n}\n","/**\n * ResizeObserver wrapper for auto-resizing charts to fit their container.\n */\nexport function observeResize(\n element: HTMLElement,\n callback: (width: number, height: number) => void,\n): () => void {\n if (typeof ResizeObserver === 'undefined') return () => {}\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n const { width, height } = entry.contentRect\n if (width > 0 && height > 0) {\n callback(Math.floor(width), Math.floor(height))\n }\n })\n\n observer.observe(element)\n return () => observer.disconnect()\n}\n","import type { RenderNode, RenderAttrs } from '../types'\n\n/**\n * Render tree node constructors.\n * Charts describe what to draw using these — they never touch the DOM.\n */\n\nexport function group(children: RenderNode[], attrs?: RenderAttrs): RenderNode {\n return { type: 'group', children, attrs }\n}\n\nexport function path(d: string, attrs?: RenderAttrs): RenderNode {\n return { type: 'path', d, attrs }\n}\n\nexport function rect(\n x: number, y: number, width: number, height: number,\n attrs?: RenderAttrs & { rx?: number; ry?: number },\n): RenderNode {\n return { type: 'rect', x, y, width, height, rx: attrs?.rx, ry: attrs?.ry, attrs }\n}\n\nexport function circle(cx: number, cy: number, r: number, attrs?: RenderAttrs): RenderNode {\n return { type: 'circle', cx, cy, r, attrs }\n}\n\nexport function line(\n x1: number, y1: number, x2: number, y2: number,\n attrs?: RenderAttrs,\n): RenderNode {\n return { type: 'line', x1, y1, x2, y2, attrs }\n}\n\nexport function text(\n x: number, y: number, content: string,\n attrs?: RenderAttrs & {\n textAnchor?: 'start' | 'middle' | 'end'\n dominantBaseline?: 'auto' | 'middle' | 'hanging' | 'central'\n fontSize?: number\n fontFamily?: string\n fontWeight?: string | number\n },\n): RenderNode {\n return { type: 'text', x, y, content, attrs }\n}\n\nexport function defs(children: RenderNode[]): RenderNode {\n return { type: 'defs', children }\n}\n\nexport function clipPathDef(id: string, children: RenderNode[]): RenderNode {\n return { type: 'clipPath', id, children }\n}\n\n/**\n * SVG path string builder.\n */\nexport class PathBuilder {\n private cmds: string[] = []\n\n moveTo(x: number, y: number): this {\n this.cmds.push(`M${n(x)},${n(y)}`); return this\n }\n lineTo(x: number, y: number): this {\n this.cmds.push(`L${n(x)},${n(y)}`); return this\n }\n curveTo(cx1: number, cy1: number, cx2: number, cy2: number, x: number, y: number): this {\n this.cmds.push(`C${n(cx1)},${n(cy1)},${n(cx2)},${n(cy2)},${n(x)},${n(y)}`); return this\n }\n quadTo(cx: number, cy: number, x: number, y: number): this {\n this.cmds.push(`Q${n(cx)},${n(cy)},${n(x)},${n(y)}`); return this\n }\n arc(rx: number, ry: number, rot: number, large: boolean, sweep: boolean, x: number, y: number): this {\n this.cmds.push(`A${n(rx)},${n(ry)},${rot},${large?1:0},${sweep?1:0},${n(x)},${n(y)}`); return this\n }\n hTo(x: number): this { this.cmds.push(`H${n(x)}`); return this }\n vTo(y: number): this { this.cmds.push(`V${n(y)}`); return this }\n close(): this { this.cmds.push('Z'); return this }\n build(): string { return this.cmds.join('') }\n reset(): this { this.cmds = []; return this }\n}\n\nfunction n(v: number): string {\n return Number.isInteger(v) ? String(v) : v.toFixed(2)\n}\n","import type { RenderNode, Scale, ChartArea, ResolvedOptions, ThemeConfig } from '../types'\nimport { CSS_PREFIX } from '../constants'\nimport { group, line, text } from '../render/tree'\n\n/**\n * Render x-axis: axis line, tick marks, tick labels.\n * All colors reference CSS custom properties for Tailwind compatibility.\n */\nexport function renderXAxis(\n scale: Scale,\n area: ChartArea,\n options: ResolvedOptions,\n theme: ThemeConfig,\n): RenderNode {\n const nodes: RenderNode[] = []\n const y = area.y + area.height\n\n // Axis line\n if (options.xAxis) {\n nodes.push(line(area.x, y, area.x + area.width, y, {\n class: 'chartts-x-axis',\n stroke: `var(${CSS_PREFIX}-axis)`,\n strokeWidth: theme.axisWidth,\n }))\n }\n\n // Ticks + labels\n const ticks = scale.ticks(options.xTicks || undefined)\n for (const tick of ticks) {\n const x = tick.position\n\n // Skip ticks outside chart area\n if (x < area.x - 1 || x > area.x + area.width + 1) continue\n\n // Tick mark\n nodes.push(line(x, y, x, y + 4, {\n class: 'chartts-x-tick',\n stroke: `var(${CSS_PREFIX}-axis)`,\n strokeWidth: theme.axisWidth,\n }))\n\n // Tick label\n nodes.push(text(x, y + 14, tick.label, {\n class: 'chartts-x-label',\n fill: `var(${CSS_PREFIX}-text-muted)`,\n textAnchor: 'middle',\n fontSize: theme.fontSizeSmall,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n }))\n }\n\n // Axis label\n if (options.xLabel) {\n nodes.push(text(\n area.x + area.width / 2,\n y + 30,\n options.xLabel,\n {\n class: 'chartts-x-axis-label',\n fill: `var(${CSS_PREFIX}-text)`,\n textAnchor: 'middle',\n fontSize: theme.fontSize,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n fontWeight: 500,\n },\n ))\n }\n\n return group(nodes, { class: 'chartts-x-axis-group' })\n}\n\n/**\n * Render y-axis: axis line, tick marks, tick labels.\n */\nexport function renderYAxis(\n scale: Scale,\n area: ChartArea,\n options: ResolvedOptions,\n theme: ThemeConfig,\n): RenderNode {\n const nodes: RenderNode[] = []\n\n // Axis line\n if (options.yAxis) {\n nodes.push(line(area.x, area.y, area.x, area.y + area.height, {\n class: 'chartts-y-axis',\n stroke: `var(${CSS_PREFIX}-axis)`,\n strokeWidth: theme.axisWidth,\n }))\n }\n\n // Ticks + labels\n const ticks = scale.ticks(options.yTicks)\n for (const tick of ticks) {\n const y = tick.position\n\n // Skip ticks outside chart area (with small tolerance)\n if (y < area.y - 1 || y > area.y + area.height + 1) continue\n\n // Tick mark\n nodes.push(line(area.x - 4, y, area.x, y, {\n class: 'chartts-y-tick',\n stroke: `var(${CSS_PREFIX}-axis)`,\n strokeWidth: theme.axisWidth,\n }))\n\n // Tick label\n nodes.push(text(area.x - 7, y, tick.label, {\n class: 'chartts-y-label',\n fill: `var(${CSS_PREFIX}-text-muted)`,\n textAnchor: 'end',\n dominantBaseline: 'middle',\n fontSize: theme.fontSizeSmall,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n }))\n }\n\n // Axis label (rotated)\n if (options.yLabel) {\n nodes.push(text(\n 12,\n area.y + area.height / 2,\n options.yLabel,\n {\n class: 'chartts-y-axis-label',\n fill: `var(${CSS_PREFIX}-text)`,\n textAnchor: 'middle',\n fontSize: theme.fontSize,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n fontWeight: 500,\n transform: `rotate(-90, 12, ${area.y + area.height / 2})`,\n },\n ))\n }\n\n return group(nodes, { class: 'chartts-y-axis-group' })\n}\n\n/**\n * Render grid lines.\n */\nexport function renderGrid(\n xScale: Scale,\n yScale: Scale,\n area: ChartArea,\n options: ResolvedOptions,\n theme: ThemeConfig,\n): RenderNode {\n const nodes: RenderNode[] = []\n\n const dasharray = theme.gridStyle === 'dashed' ? '4,4'\n : theme.gridStyle === 'dotted' ? '2,2' : undefined\n\n // Horizontal grid lines (from y-axis ticks)\n if (options.yGrid) {\n const ticks = yScale.ticks(options.yTicks)\n for (const tick of ticks) {\n // Skip ticks outside chart area or on axis boundaries\n if (tick.position < area.y - 1 || tick.position > area.y + area.height + 1) continue\n if (Math.abs(tick.position - area.y) < 1 || Math.abs(tick.position - (area.y + area.height)) < 1) continue\n\n nodes.push(line(area.x, tick.position, area.x + area.width, tick.position, {\n class: 'chartts-grid-h',\n stroke: `var(${CSS_PREFIX}-grid)`,\n strokeWidth: theme.gridWidth,\n strokeDasharray: dasharray,\n }))\n }\n }\n\n // Vertical grid lines (from x-axis ticks)\n if (options.xGrid) {\n const ticks = xScale.ticks(options.xTicks || undefined)\n for (const tick of ticks) {\n // Skip ticks outside chart area or on axis boundaries\n if (tick.position < area.x - 1 || tick.position > area.x + area.width + 1) continue\n if (Math.abs(tick.position - area.x) < 1 || Math.abs(tick.position - (area.x + area.width)) < 1) continue\n\n nodes.push(line(tick.position, area.y, tick.position, area.y + area.height, {\n class: 'chartts-grid-v',\n stroke: `var(${CSS_PREFIX}-grid)`,\n strokeWidth: theme.gridWidth,\n strokeDasharray: dasharray,\n }))\n }\n }\n\n return group(nodes, { class: 'chartts-grid-group' })\n}\n","import type { RenderNode, PreparedData, ResolvedOptions, ChartArea, ThemeConfig } from '../types'\nimport { CSS_PREFIX } from '../constants'\nimport { group, circle, text } from '../render/tree'\n\n/**\n * Render legend — series names with color indicators.\n * Positioned based on options.legend (top, bottom, left, right).\n */\nexport function renderLegend(\n data: PreparedData,\n area: ChartArea,\n options: ResolvedOptions,\n theme: ThemeConfig,\n): RenderNode | null {\n if (!options.legend || data.series.length <= 1) return null\n\n const items: RenderNode[] = []\n const pos = options.legend\n\n if (pos === 'top' || pos === 'bottom') {\n // Horizontal layout — centered above or below chart area\n const totalWidth = estimateLegendWidth(data, theme)\n let x = area.x + Math.max(0, (area.width - totalWidth) / 2)\n const y = pos === 'top' ? area.y - 10 : area.y + area.height + 32\n\n for (const series of data.series) {\n // Color dot\n items.push(circle(x + 4, y, 3.5, {\n class: 'chartts-legend-dot',\n fill: series.color,\n }))\n\n // Series name\n items.push(text(x + 12, y, series.name, {\n class: 'chartts-legend-text',\n fill: `var(${CSS_PREFIX}-text-muted)`,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n }))\n\n // Advance x position (estimate width from name length)\n x += 12 + series.name.length * (theme.fontSizeSmall * 0.58) + 14\n }\n } else {\n // Vertical layout (left or right)\n const x = pos === 'left' ? 8 : area.x + area.width + 16\n let y = area.y + 4\n\n for (const series of data.series) {\n items.push(circle(x + 4, y + 5, 3.5, {\n class: 'chartts-legend-dot',\n fill: series.color,\n }))\n\n items.push(text(x + 12, y + 5, series.name, {\n class: 'chartts-legend-text',\n fill: `var(${CSS_PREFIX}-text-muted)`,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: `var(${CSS_PREFIX}-font-family)`,\n }))\n\n y += 18\n }\n }\n\n return group(items, {\n class: 'chartts-legend',\n role: 'list',\n ariaLabel: 'Chart legend',\n })\n}\n\nfunction estimateLegendWidth(data: PreparedData, theme: ThemeConfig): number {\n let width = 0\n for (const series of data.series) {\n width += 12 + series.name.length * (theme.fontSizeSmall * 0.58) + 14\n }\n return width\n}\n","/**\n * SVG gradient and filter definitions for premium visual effects.\n *\n * Generated per-chart based on the resolved color palette.\n * Injected into <defs> by both the DOM and string renderers.\n */\n\n/**\n * Extract a hex color from a CSS var() expression.\n * 'var(--color-blue-500, #3b82f6)' → '#3b82f6'\n * '#3b82f6' → '#3b82f6'\n */\nfunction extractHex(css: string): string {\n const match = css.match(/#[0-9a-fA-F]{3,8}/)\n return match ? match[0] : css\n}\n\n/**\n * Parse hex color to {r, g, b}\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } {\n const h = hex.replace('#', '')\n const full = h.length === 3\n ? h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!\n : h\n return {\n r: parseInt(full.substring(0, 2), 16),\n g: parseInt(full.substring(2, 4), 16),\n b: parseInt(full.substring(4, 6), 16),\n }\n}\n\n/**\n * Generate SVG defs string with gradients and filters for chart effects.\n */\nexport function createEffectDefs(colors: string[]): string {\n let svg = ''\n\n for (let i = 0; i < colors.length; i++) {\n const hex = extractHex(colors[i]!)\n const { r, g, b } = hexToRgb(hex)\n const rgba = (a: number) => `rgba(${r},${g},${b},${a})`\n\n // Area fill gradient (vertical: color at top → transparent at bottom)\n svg += `<linearGradient id=\"chartts-area-${i}\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">`\n svg += `<stop offset=\"0%\" stop-color=\"${hex}\" stop-opacity=\"0.35\"/>`\n svg += `<stop offset=\"100%\" stop-color=\"${hex}\" stop-opacity=\"0.02\"/>`\n svg += `</linearGradient>`\n\n // Bar gradient (vertical: lighter at top → color at bottom)\n svg += `<linearGradient id=\"chartts-bar-${i}\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">`\n svg += `<stop offset=\"0%\" stop-color=\"${hex}\" stop-opacity=\"1\"/>`\n svg += `<stop offset=\"100%\" stop-color=\"${hex}\" stop-opacity=\"0.75\"/>`\n svg += `</linearGradient>`\n\n // Radial glow for points/bubbles\n svg += `<radialGradient id=\"chartts-pglow-${i}\">`\n svg += `<stop offset=\"0%\" stop-color=\"${hex}\" stop-opacity=\"0.4\"/>`\n svg += `<stop offset=\"100%\" stop-color=\"${hex}\" stop-opacity=\"0\"/>`\n svg += `</radialGradient>`\n\n // Pie slice radial gradient (center lighter → edge)\n svg += `<radialGradient id=\"chartts-pie-${i}\" cx=\"30%\" cy=\"30%\" r=\"70%\">`\n svg += `<stop offset=\"0%\" stop-color=\"${hex}\" stop-opacity=\"1\"/>`\n svg += `<stop offset=\"100%\" stop-color=\"${rgba(0.85)}\"/>`\n svg += `</radialGradient>`\n }\n\n // Line glow filter\n svg += `<filter id=\"chartts-glow\" filterUnits=\"userSpaceOnUse\">`\n svg += `<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"3.5\" result=\"blur\"/>`\n svg += `<feColorMatrix in=\"blur\" type=\"saturate\" values=\"2\" result=\"saturated\"/>`\n svg += `<feMerge><feMergeNode in=\"saturated\"/><feMergeNode in=\"SourceGraphic\"/></feMerge>`\n svg += `</filter>`\n\n // Drop shadow filter (for tooltips, floating elements)\n svg += `<filter id=\"chartts-shadow\">`\n svg += `<feDropShadow dx=\"0\" dy=\"2\" stdDeviation=\"4\" flood-opacity=\"0.12\"/>`\n svg += `</filter>`\n\n return svg\n}\n","import type { DataPoint, TooltipConfig, ThemeConfig } from '../types'\nimport { CSS_PREFIX } from '../constants'\n\n/**\n * DOM-based tooltip.\n * A real HTML element — style it with CSS, Tailwind, whatever you want.\n */\nexport interface TooltipInstance {\n show(point: DataPoint, color: string, x: number, y: number, container: HTMLElement): void\n hide(): void\n destroy(): void\n}\n\nexport function createTooltip(config: TooltipConfig, theme: ThemeConfig): TooltipInstance {\n let el: HTMLDivElement | null = null\n\n function getOrCreate(): HTMLDivElement {\n if (el) return el\n\n el = document.createElement('div')\n el.className = 'chartts-tooltip'\n el.style.cssText = `\n position: absolute;\n pointer-events: none;\n z-index: 9999;\n padding: 10px 14px;\n border-radius: var(${CSS_PREFIX}-radius, 8px);\n background: var(${CSS_PREFIX}-tooltip-bg, ${theme.tooltipBackground});\n color: var(${CSS_PREFIX}-tooltip-text, ${theme.tooltipText});\n border: 1px solid var(${CSS_PREFIX}-tooltip-border, ${theme.tooltipBorder});\n font-family: var(${CSS_PREFIX}-font-family, ${theme.fontFamily});\n font-size: var(${CSS_PREFIX}-font-size-sm, ${theme.fontSizeSmall}px);\n box-shadow: 0 8px 32px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.08);\n backdrop-filter: blur(12px) saturate(1.5);\n -webkit-backdrop-filter: blur(12px) saturate(1.5);\n transition: opacity 0.15s ease, transform 0.1s ease;\n opacity: 0;\n transform: translateY(4px);\n white-space: nowrap;\n `\n return el\n }\n\n function show(\n point: DataPoint,\n color: string,\n x: number,\n y: number,\n container: HTMLElement,\n ): void {\n const tip = getOrCreate()\n\n // Content\n if (config.render) {\n const result = config.render({ ...point, color })\n if (typeof result === 'string') {\n tip.innerHTML = result\n } else {\n tip.innerHTML = ''\n tip.appendChild(result)\n }\n } else if (config.format) {\n tip.textContent = config.format(point)\n } else {\n tip.innerHTML = `\n <div style=\"display:flex;align-items:center;gap:8px;margin-bottom:4px;\">\n <span style=\"width:8px;height:8px;border-radius:50%;background:${color};display:inline-block;box-shadow:0 0 6px ${color};\"></span>\n <span style=\"font-weight:600;letter-spacing:-0.01em;\">${point.seriesName}</span>\n </div>\n <div style=\"display:flex;justify-content:space-between;align-items:baseline;gap:16px;\">\n <span style=\"color:var(${CSS_PREFIX}-text-muted, #6b7280);font-size:0.9em;\">${point.label}</span>\n <span style=\"font-size:1.15em;font-weight:700;font-variant-numeric:tabular-nums;\">${point.value}</span>\n </div>\n `\n }\n\n // Position\n if (!tip.parentElement) {\n container.style.position = 'relative'\n container.appendChild(tip)\n }\n\n const tipRect = tip.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n\n let left = x - tipRect.width / 2\n let top = y - tipRect.height - 12\n\n // Keep within container bounds\n if (left < 0) left = 0\n if (left + tipRect.width > containerRect.width) left = containerRect.width - tipRect.width\n if (top < 0) top = y + 16\n\n tip.style.left = `${left}px`\n tip.style.top = `${top}px`\n tip.style.opacity = '1'\n tip.style.transform = 'translateY(0)'\n }\n\n function hide(): void {\n if (el) {\n el.style.opacity = '0'\n el.style.transform = 'translateY(4px)'\n }\n }\n\n function destroy(): void {\n el?.remove()\n el = null\n }\n\n return { show, hide, destroy }\n}\n","import type { RenderContext, RenderNode, HitResult, ThemeConfig } from '../types'\nimport { circle } from '../render/tree'\n\n/**\n * Default highlight nodes: glow ring + solid dot at hit.x, hit.y.\n * Used when the chart type doesn't implement getHighlightNodes.\n */\nexport function defaultHighlightNodes(hit: HitResult, ctx: RenderContext): RenderNode[] {\n const color = resolveHighlightColor(ctx.data.series[hit.seriesIndex]?.color, ctx.theme)\n const r = ctx.theme.pointRadius\n\n return [\n // Outer glow\n circle(hit.x, hit.y, r * 3, {\n class: 'chartts-highlight-glow',\n fill: color,\n fillOpacity: 0.2,\n }),\n // Solid dot\n circle(hit.x, hit.y, r + 1, {\n class: 'chartts-highlight-dot',\n fill: color,\n stroke: ctx.theme.background === 'transparent' ? '#fff' : ctx.theme.background,\n strokeWidth: 2,\n }),\n ]\n}\n\n/**\n * Walk a RenderNode tree and dim all series groups except the active one.\n * Returns a new tree (immutable).\n */\nexport function applyDimming(nodes: RenderNode[], hit: HitResult): RenderNode[] {\n return nodes.map(node => dimNode(node, hit.seriesIndex))\n}\n\nfunction dimNode(node: RenderNode, activeSeriesIndex: number): RenderNode {\n if (node.type === 'group') {\n const cls = node.attrs?.class ?? ''\n // Match chartts-series-N pattern\n const seriesMatch = cls.match(/chartts-series-(\\d+)/)\n if (seriesMatch) {\n const idx = parseInt(seriesMatch[1]!, 10)\n if (idx !== activeSeriesIndex) {\n return {\n ...node,\n attrs: { ...node.attrs, opacity: 0.3 },\n children: node.children,\n }\n }\n }\n // Recurse into children\n return {\n ...node,\n children: node.children.map(c => dimNode(c, activeSeriesIndex)),\n }\n }\n return node\n}\n\n/**\n * Extract a usable hex/rgb color from a CSS var string like 'var(--color-blue-500, #3b82f6)'.\n */\nexport function resolveHighlightColor(cssVarString: string | undefined, theme: ThemeConfig): string {\n if (!cssVarString) return theme.colors[0] ?? '#3b82f6'\n // Try to extract fallback from var(--token, #hex)\n const m = cssVarString.match(/,\\s*([^)]+)\\)/)\n if (m) return m[1]!.trim()\n // If it's already a plain color\n if (cssVarString.startsWith('#') || cssVarString.startsWith('rgb')) return cssVarString\n // Fallback\n return theme.colors[0] ?? '#3b82f6'\n}\n","import type {\n ChartTypePlugin, RenderContext, EventBus, DataPoint,\n PreparedData, TooltipConfig, ThemeConfig, CrosshairConfig,\n Renderer, RendererRoot, RenderNode, HitResult,\n} from '../types'\nimport { createTooltip, type TooltipInstance } from '../tooltip/tooltip'\nimport { CSS_PREFIX } from '../constants'\nimport { defaultHighlightNodes, applyDimming } from './highlight'\n\nexport interface CanvasHighlightConfig {\n renderer: Renderer\n root: RendererRoot\n getLastNodes: () => RenderNode[]\n}\n\nexport interface InteractionLayer {\n attach(svg: SVGElement | HTMLCanvasElement, container: HTMLElement): void\n detach(): void\n destroy(): void\n}\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * Interaction layer — handles mouse/touch events on the chart.\n * Provides: hover highlights, tooltips, crosshair (vertical/horizontal/both), click events.\n *\n * For SVG renderer, interaction elements are appended directly to the SVG.\n * For Canvas renderer, a transparent SVG overlay is created on top of the\n * canvas to host crosshair lines, highlight dots, and other visual feedback.\n */\nexport function createInteractionLayer(\n chartType: ChartTypePlugin,\n getContext: () => RenderContext,\n getData: () => PreparedData,\n bus: EventBus,\n tooltipConfig: false | TooltipConfig,\n theme: ThemeConfig,\n onClick?: (point: DataPoint, event: MouseEvent) => void,\n onHover?: (point: DataPoint | null, event: MouseEvent) => void,\n interactionState?: { isPanning: boolean },\n canvasHighlight?: CanvasHighlightConfig,\n): InteractionLayer {\n let targetEl: SVGElement | HTMLCanvasElement | null = null\n let container: HTMLElement | null = null\n let tooltip: TooltipInstance | null = null\n let crosshairVLineEl: SVGLineElement | null = null\n let crosshairHLineEl: SVGLineElement | null = null\n let crosshairTipEl: HTMLDivElement | null = null\n let crosshairYTipEl: HTMLDivElement | null = null\n let crosshairDots: SVGCircleElement[] = []\n let activePoint: { seriesIndex: number; pointIndex: number } | null = null\n let activeCrosshairIndex = -1\n let linkedUnsubs: (() => void)[] = []\n\n // Canvas overlay — a transparent SVG positioned over the canvas\n let overlayEl: SVGSVGElement | null = null\n let isCanvas = false\n\n // Create tooltip if configured\n if (tooltipConfig) {\n tooltip = createTooltip(\n typeof tooltipConfig === 'object' ? tooltipConfig : { enabled: true },\n theme,\n )\n }\n\n /** Get the SVG element where interaction visuals should be drawn */\n function getOverlay(): SVGElement | null {\n if (isCanvas) return overlayEl\n return targetEl as SVGElement | null\n }\n\n /** Sync overlay SVG to match the canvas CSS pixel dimensions exactly */\n function syncOverlay(): void {\n if (!overlayEl || !targetEl) return\n const canvas = targetEl as HTMLCanvasElement\n // CSS pixel width/height = chart coordinate system\n const w = canvas.offsetWidth || canvas.clientWidth || parseInt(canvas.style.width) || 400\n const h = canvas.offsetHeight || canvas.clientHeight || parseInt(canvas.style.height) || 300\n overlayEl.setAttribute('viewBox', `0 0 ${w} ${h}`)\n overlayEl.style.width = `${w}px`\n overlayEl.style.height = `${h}px`\n }\n\n function getCrosshairConfig(): false | CrosshairConfig {\n try {\n return getContext().options.crosshair\n } catch { return false }\n }\n\n // -----------------------------------------------------------------------\n // Crosshair helpers\n // -----------------------------------------------------------------------\n\n function ensureCrosshairVLine(): SVGLineElement {\n if (crosshairVLineEl) return crosshairVLineEl\n crosshairVLineEl = document.createElementNS(SVG_NS, 'line')\n crosshairVLineEl.setAttribute('class', 'chartts-crosshair-line chartts-crosshair-vline')\n crosshairVLineEl.setAttribute('stroke', theme.textMuted)\n crosshairVLineEl.setAttribute('stroke-width', '1')\n crosshairVLineEl.setAttribute('stroke-dasharray', '4,3')\n crosshairVLineEl.style.pointerEvents = 'none'\n crosshairVLineEl.style.opacity = '0'\n crosshairVLineEl.style.transition = 'opacity 0.12s ease'\n return crosshairVLineEl\n }\n\n function ensureCrosshairHLine(): SVGLineElement {\n if (crosshairHLineEl) return crosshairHLineEl\n crosshairHLineEl = document.createElementNS(SVG_NS, 'line')\n crosshairHLineEl.setAttribute('class', 'chartts-crosshair-line chartts-crosshair-hline')\n crosshairHLineEl.setAttribute('stroke', theme.textMuted)\n crosshairHLineEl.setAttribute('stroke-width', '1')\n crosshairHLineEl.setAttribute('stroke-dasharray', '4,3')\n crosshairHLineEl.style.pointerEvents = 'none'\n crosshairHLineEl.style.opacity = '0'\n crosshairHLineEl.style.transition = 'opacity 0.12s ease'\n return crosshairHLineEl\n }\n\n function ensureCrosshairTip(): HTMLDivElement {\n if (crosshairTipEl) return crosshairTipEl\n crosshairTipEl = document.createElement('div')\n crosshairTipEl.className = 'chartts-crosshair-tooltip'\n crosshairTipEl.style.cssText = `\n position: absolute;\n pointer-events: none;\n z-index: 9999;\n padding: 10px 14px;\n border-radius: var(${CSS_PREFIX}-radius, 8px);\n background: var(${CSS_PREFIX}-tooltip-bg, ${theme.tooltipBackground});\n color: var(${CSS_PREFIX}-tooltip-text, ${theme.tooltipText});\n border: 1px solid var(${CSS_PREFIX}-tooltip-border, ${theme.tooltipBorder});\n font-family: var(${CSS_PREFIX}-font-family, ${theme.fontFamily});\n font-size: var(${CSS_PREFIX}-font-size-sm, ${theme.fontSizeSmall}px);\n box-shadow: 0 8px 32px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.08);\n backdrop-filter: blur(12px) saturate(1.5);\n -webkit-backdrop-filter: blur(12px) saturate(1.5);\n transition: opacity 0.15s ease, transform 0.1s ease;\n opacity: 0;\n transform: translateY(4px);\n white-space: nowrap;\n `\n return crosshairTipEl\n }\n\n function ensureCrosshairYTip(): HTMLDivElement {\n if (crosshairYTipEl) return crosshairYTipEl\n crosshairYTipEl = document.createElement('div')\n crosshairYTipEl.className = 'chartts-crosshair-ytip'\n crosshairYTipEl.style.cssText = `\n position: absolute;\n pointer-events: none;\n z-index: 9998;\n padding: 2px 6px;\n border-radius: 3px;\n background: ${theme.textMuted};\n color: ${theme.tooltipBackground};\n font-family: ${theme.fontFamily};\n font-size: ${theme.fontSizeSmall - 1}px;\n font-variant-numeric: tabular-nums;\n opacity: 0;\n transition: opacity 0.12s ease;\n white-space: nowrap;\n `\n return crosshairYTipEl\n }\n\n function clearCrosshairDots(): void {\n for (const d of crosshairDots) d.remove()\n crosshairDots = []\n }\n\n function showCrosshair(pointIndex: number, mouseX: number, mouseY: number, svgY: number): void {\n if (!targetEl || !container) return\n const overlay = getOverlay()\n if (!overlay) return\n\n if (isCanvas) syncOverlay()\n\n const ctx = getContext()\n const data = getData()\n const { area, xScale } = ctx\n const chConfig = getCrosshairConfig()\n if (!chConfig) return\n const mode = chConfig.mode ?? 'vertical'\n\n const label = data.labels[pointIndex]!\n const xPos = xScale.map(label)\n\n // Vertical line\n if (mode === 'vertical' || mode === 'both') {\n const vline = ensureCrosshairVLine()\n vline.setAttribute('x1', String(xPos))\n vline.setAttribute('y1', String(area.y))\n vline.setAttribute('x2', String(xPos))\n vline.setAttribute('y2', String(area.y + area.height))\n vline.style.opacity = '0.6'\n if (!vline.parentElement) overlay.appendChild(vline)\n }\n\n // Horizontal line\n if (mode === 'horizontal' || mode === 'both') {\n const hline = ensureCrosshairHLine()\n hline.setAttribute('x1', String(area.x))\n hline.setAttribute('y1', String(svgY))\n hline.setAttribute('x2', String(area.x + area.width))\n hline.setAttribute('y2', String(svgY))\n hline.style.opacity = '0.6'\n if (!hline.parentElement) overlay.appendChild(hline)\n\n // Y-value label on left axis\n const yVal = ctx.yScale.invert(svgY)\n const yTip = ensureCrosshairYTip()\n yTip.textContent = ctx.options.yFormat(yVal)\n if (!yTip.parentElement) {\n container.style.position = 'relative'\n container.appendChild(yTip)\n }\n // Position at left edge\n yTip.style.left = '0px'\n yTip.style.top = `${mouseY - 10}px`\n yTip.style.opacity = '1'\n }\n\n // Dots on each series at this x\n if (mode === 'vertical' || mode === 'both') {\n clearCrosshairDots()\n for (const series of data.series) {\n const val = series.values[pointIndex]\n if (val == null || isNaN(val)) continue\n const yPos = ctx.yScale.map(val)\n const dot = document.createElementNS(SVG_NS, 'circle')\n dot.setAttribute('cx', String(xPos))\n dot.setAttribute('cy', String(yPos))\n dot.setAttribute('r', '5')\n dot.setAttribute('fill', series.color)\n dot.setAttribute('stroke', theme.tooltipBackground)\n dot.setAttribute('stroke-width', '2')\n dot.style.pointerEvents = 'none'\n dot.style.transition = 'cx 0.1s ease, cy 0.1s ease'\n overlay.appendChild(dot)\n crosshairDots.push(dot)\n }\n }\n\n // Multi-series tooltip\n const tip = ensureCrosshairTip()\n let html = `<div style=\"font-weight:600;margin-bottom:6px;letter-spacing:-0.01em;\">${formatLabel(label)}</div>`\n for (const series of data.series) {\n const val = series.values[pointIndex]\n if (val == null || isNaN(val)) continue\n html += `<div style=\"display:flex;align-items:center;gap:8px;margin-top:3px;\">\n <span style=\"width:8px;height:8px;border-radius:50%;background:${series.color};display:inline-block;box-shadow:0 0 6px ${series.color};flex-shrink:0;\"></span>\n <span style=\"flex:1;color:var(${CSS_PREFIX}-text-muted, #6b7280);\">${series.name}</span>\n <span style=\"font-weight:700;font-variant-numeric:tabular-nums;margin-left:12px;\">${ctx.options.yFormat(val)}</span>\n </div>`\n }\n tip.innerHTML = html\n if (!tip.parentElement) {\n container.style.position = 'relative'\n container.appendChild(tip)\n }\n\n // Position tooltip\n requestAnimationFrame(() => {\n if (!tip.parentElement || !container) return\n const tipRect = tip.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n let left = mouseX + 16\n let top = mouseY - tipRect.height / 2\n if (left + tipRect.width > containerRect.width) left = mouseX - tipRect.width - 16\n if (top < 0) top = 4\n if (top + tipRect.height > containerRect.height) top = containerRect.height - tipRect.height - 4\n tip.style.left = `${left}px`\n tip.style.top = `${top}px`\n tip.style.opacity = '1'\n tip.style.transform = 'translateY(0)'\n })\n\n activeCrosshairIndex = pointIndex\n bus.emit('crosshair:move', { x: xPos, label })\n }\n\n function hideCrosshair(): void {\n if (crosshairVLineEl) crosshairVLineEl.style.opacity = '0'\n if (crosshairHLineEl) crosshairHLineEl.style.opacity = '0'\n if (crosshairTipEl) {\n crosshairTipEl.style.opacity = '0'\n crosshairTipEl.style.transform = 'translateY(4px)'\n }\n if (crosshairYTipEl) {\n crosshairYTipEl.style.opacity = '0'\n }\n clearCrosshairDots()\n activeCrosshairIndex = -1\n bus.emit('crosshair:hide', undefined as never)\n }\n\n function formatLabel(label: string | number | Date): string {\n try { return getContext().options.xFormat(label) } catch { return String(label) }\n }\n\n /** Find nearest label index given an svgX coordinate */\n function nearestLabelIndex(svgX: number): number {\n const data = getData()\n const ctx = getContext()\n let bestIdx = 0\n let bestDist = Infinity\n for (let i = 0; i < data.labels.length; i++) {\n const pos = ctx.xScale.map(data.labels[i]!)\n const dist = Math.abs(svgX - pos)\n if (dist < bestDist) { bestDist = dist; bestIdx = i }\n }\n return bestIdx\n }\n\n // -----------------------------------------------------------------------\n // Event handlers\n // -----------------------------------------------------------------------\n\n function toChartCoords(el: SVGElement | HTMLCanvasElement, clientX: number, clientY: number): { x: number; y: number; svgX: number; svgY: number } {\n const r = el.getBoundingClientRect()\n const x = clientX - r.left\n const y = clientY - r.top\n\n // Canvas: coords are CSS pixels (matching our coordinate system)\n if (el instanceof HTMLCanvasElement) {\n return { x, y, svgX: x, svgY: y }\n }\n // SVG: scale to viewBox coords\n const viewBox = el.getAttribute('viewBox')?.split(' ').map(Number) ?? [0, 0, r.width, r.height]\n const scaleX = viewBox[2]! / r.width\n const scaleY = viewBox[3]! / r.height\n return { x, y, svgX: x * scaleX, svgY: y * scaleY }\n }\n\n function onMouseMove(e: MouseEvent): void {\n if (!targetEl || !container) return\n // Skip tooltip/crosshair updates during active pan drag\n if (interactionState?.isPanning) return\n\n const { x, y, svgX, svgY } = toChartCoords(targetEl, e.clientX, e.clientY)\n\n const ctx = getContext()\n const chConfig = getCrosshairConfig()\n\n // Crosshair mode — snap to nearest label\n if (chConfig) {\n const { area } = ctx\n if (svgX >= area.x && svgX <= area.x + area.width && svgY >= area.y && svgY <= area.y + area.height) {\n const idx = nearestLabelIndex(svgX)\n if (idx !== activeCrosshairIndex) {\n showCrosshair(idx, x, y, svgY)\n } else {\n // Update horizontal line position and reposition tooltip\n if (chConfig.mode === 'horizontal' || chConfig.mode === 'both') {\n if (crosshairHLineEl) {\n crosshairHLineEl.setAttribute('y1', String(svgY))\n crosshairHLineEl.setAttribute('y2', String(svgY))\n }\n if (crosshairYTipEl) {\n const yVal = ctx.yScale.invert(svgY)\n crosshairYTipEl.textContent = ctx.options.yFormat(yVal)\n crosshairYTipEl.style.top = `${y - 10}px`\n }\n }\n if (crosshairTipEl) {\n const tipRect = crosshairTipEl.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n let left = x + 16\n let top = y - tipRect.height / 2\n if (left + tipRect.width > containerRect.width) left = x - tipRect.width - 16\n if (top < 0) top = 4\n if (top + tipRect.height > containerRect.height) top = containerRect.height - tipRect.height - 4\n crosshairTipEl.style.left = `${left}px`\n crosshairTipEl.style.top = `${top}px`\n }\n }\n } else {\n hideCrosshair()\n }\n // In crosshair mode, skip single-point tooltip\n return\n }\n\n // Standard single-point mode\n const hit = chartType.hitTest(ctx, svgX, svgY)\n\n if (hit) {\n const data = getData()\n const series = data.series[hit.seriesIndex]!\n const point: DataPoint = {\n label: data.labels[hit.pointIndex]!,\n value: series.values[hit.pointIndex]!,\n index: hit.pointIndex,\n seriesIndex: hit.seriesIndex,\n seriesName: series.name,\n }\n\n // Update hover highlights\n if (!activePoint || activePoint.seriesIndex !== hit.seriesIndex || activePoint.pointIndex !== hit.pointIndex) {\n clearHighlights()\n highlightPoint(hit)\n activePoint = { seriesIndex: hit.seriesIndex, pointIndex: hit.pointIndex }\n\n bus.emit('point:enter', { point, event: e })\n onHover?.(point, e)\n }\n\n // Show tooltip\n if (tooltip) {\n tooltip.show(point, series.color, x, y, container)\n bus.emit('tooltip:show', { point, x: svgX, y: svgY })\n }\n } else {\n if (activePoint) {\n clearHighlights()\n activePoint = null\n bus.emit('point:leave', { event: e })\n onHover?.(null, e)\n }\n if (tooltip) {\n tooltip.hide()\n bus.emit('tooltip:hide', undefined as never)\n }\n }\n }\n\n function onMouseLeave(e: MouseEvent): void {\n clearHighlights()\n activePoint = null\n tooltip?.hide()\n hideCrosshair()\n bus.emit('point:leave', { event: e })\n onHover?.(null, e)\n }\n\n function onClickHandler(e: MouseEvent): void {\n if (!targetEl || !onClick) return\n\n const { svgX, svgY } = toChartCoords(targetEl, e.clientX, e.clientY)\n\n const ctx = getContext()\n const hit = chartType.hitTest(ctx, svgX, svgY)\n\n if (hit) {\n const data = getData()\n const series = data.series[hit.seriesIndex]!\n const point: DataPoint = {\n label: data.labels[hit.pointIndex]!,\n value: series.values[hit.pointIndex]!,\n index: hit.pointIndex,\n seriesIndex: hit.seriesIndex,\n seriesName: series.name,\n }\n onClick(point, e)\n bus.emit('point:click', { point, event: e })\n }\n }\n\n // -----------------------------------------------------------------------\n // Linked chart crosshair — respond to bus events from linkCharts\n // -----------------------------------------------------------------------\n\n function setupLinkedCrosshair(): void {\n const unsub1 = bus.on('crosshair:move', ((payload: { x: number; label: string | number | Date }) => {\n if (!targetEl || !container) return\n const data = getData()\n const idx = data.labels.findIndex(l => String(l) === String(payload.label))\n if (idx < 0) return\n if (idx === activeCrosshairIndex) return\n // Show crosshair at this index with approximate positioning\n const ctx = getContext()\n const xPos = ctx.xScale.map(data.labels[idx]!)\n const rect = targetEl.getBoundingClientRect()\n showCrosshair(idx, xPos, rect.height / 2, ctx.area.y + ctx.area.height / 2)\n }) as never)\n\n const unsub2 = bus.on('crosshair:hide', (() => {\n hideCrosshair()\n }) as never)\n\n linkedUnsubs.push(unsub1, unsub2)\n }\n\n // -----------------------------------------------------------------------\n // Highlight / dim\n // -----------------------------------------------------------------------\n\n let highlightRafId = 0\n\n function highlightPoint(hit: HitResult): void {\n if (isCanvas && canvasHighlight) {\n // Canvas: re-render with dimmed series + highlight nodes\n if (highlightRafId) return // already scheduled\n highlightRafId = requestAnimationFrame(() => {\n highlightRafId = 0\n const ctx = getContext()\n const baseNodes = canvasHighlight!.getLastNodes()\n const dimmed = applyDimming(baseNodes, hit)\n const highlight = chartType.getHighlightNodes\n ? chartType.getHighlightNodes(ctx, hit)\n : defaultHighlightNodes(hit, ctx)\n canvasHighlight!.renderer.render(canvasHighlight!.root, [...dimmed, ...highlight])\n })\n return\n }\n\n // SVG mode: manipulate DOM elements directly\n const svg = targetEl as SVGElement\n if (!svg) return\n const target = svg.querySelector(\n `[data-series=\"${hit.seriesIndex}\"][data-index=\"${hit.pointIndex}\"]`,\n ) as SVGElement | null\n\n if (target?.classList.contains('chartts-point')) {\n target.style.transition = 'r 0.15s ease, stroke-width 0.15s ease'\n target.setAttribute('r', '6')\n target.setAttribute('stroke-width', '3')\n }\n\n const targetGroup = target?.closest('.chartts-series')\n svg.querySelectorAll('.chartts-series').forEach((el) => {\n if (el !== targetGroup) {\n ;(el as SVGElement).style.opacity = '0.3'\n ;(el as SVGElement).style.transition = 'opacity 0.15s ease'\n }\n })\n }\n\n function clearHighlights(): void {\n if (isCanvas && canvasHighlight) {\n // Cancel pending highlight RAF\n if (highlightRafId) {\n cancelAnimationFrame(highlightRafId)\n highlightRafId = 0\n }\n // Re-render without dimming/highlight\n canvasHighlight.renderer.render(canvasHighlight.root, canvasHighlight.getLastNodes())\n return\n }\n\n const svg = targetEl as SVGElement | null\n if (!svg) return\n\n svg.querySelectorAll('.chartts-point').forEach((p) => {\n const el = p as SVGElement\n el.setAttribute('r', el.getAttribute('data-original-r') || '3.5')\n el.setAttribute('stroke-width', '2')\n })\n\n svg.querySelectorAll('.chartts-series').forEach((el) => {\n ;(el as SVGElement).style.opacity = ''\n })\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n attach(svgEl: SVGElement | HTMLCanvasElement, containerEl: HTMLElement): void {\n targetEl = svgEl\n container = containerEl\n isCanvas = svgEl instanceof HTMLCanvasElement\n\n if (isCanvas) {\n containerEl.style.position = 'relative'\n overlayEl = document.createElementNS(SVG_NS, 'svg') as SVGSVGElement\n const canvas = svgEl as unknown as HTMLCanvasElement\n const w = canvas.offsetWidth || canvas.clientWidth || parseInt(canvas.style.width) || 400\n const h = canvas.offsetHeight || canvas.clientHeight || parseInt(canvas.style.height) || 300\n overlayEl.setAttribute('viewBox', `0 0 ${w} ${h}`)\n overlayEl.style.cssText = `position:absolute;top:0;left:0;width:${w}px;height:${h}px;pointer-events:none;overflow:visible;`\n containerEl.appendChild(overlayEl)\n }\n\n svgEl.style.cursor = 'crosshair'\n const el = svgEl as unknown as HTMLElement\n el.addEventListener('mousemove', onMouseMove as EventListener)\n el.addEventListener('mouseleave', onMouseLeave as EventListener)\n el.addEventListener('click', onClickHandler as EventListener)\n\n // Set up linked chart crosshair listener\n setupLinkedCrosshair()\n },\n\n detach(): void {\n if (!targetEl) return\n const el = targetEl as unknown as HTMLElement\n el.removeEventListener('mousemove', onMouseMove as EventListener)\n el.removeEventListener('mouseleave', onMouseLeave as EventListener)\n el.removeEventListener('click', onClickHandler as EventListener)\n for (const unsub of linkedUnsubs) unsub()\n linkedUnsubs = []\n },\n\n destroy(): void {\n this.detach()\n tooltip?.destroy()\n crosshairVLineEl?.remove()\n crosshairHLineEl?.remove()\n crosshairTipEl?.remove()\n crosshairYTipEl?.remove()\n clearCrosshairDots()\n overlayEl?.remove()\n overlayEl = null\n targetEl = null\n container = null\n },\n }\n}\n","import type { RenderNode, ThemeConfig } from '../types'\nimport { group, rect, text } from './tree'\n\n/**\n * Render an \"empty data\" placeholder inside the chart area.\n */\nexport function renderEmptyState(\n width: number,\n height: number,\n theme: ThemeConfig,\n message = 'No data to display',\n): RenderNode[] {\n const cx = width / 2\n const cy = height / 2\n\n return [group([\n // Empty chart icon — simple bar chart outline\n ...emptyBars(cx, cy - 16, theme),\n // Message\n text(cx, cy + 28, message, {\n class: 'chartts-state-text',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'middle',\n fontSize: theme.fontSize,\n fontFamily: theme.fontFamily,\n }),\n ], { class: 'chartts-state chartts-state-empty' })]\n}\n\n/**\n * Render a loading skeleton with animated shimmer bars.\n */\nexport function renderLoadingState(\n width: number,\n height: number,\n theme: ThemeConfig,\n): RenderNode[] {\n const barCount = 5\n const padding = width * 0.15\n const barAreaW = width - padding * 2\n const barW = barAreaW / barCount * 0.6\n const gap = barAreaW / barCount * 0.4\n const maxH = height * 0.6\n const baseY = height * 0.8\n\n const bars: RenderNode[] = []\n const heights = [0.6, 0.85, 0.45, 0.95, 0.7]\n\n for (let i = 0; i < barCount; i++) {\n const x = padding + i * (barW + gap)\n const h = maxH * heights[i]!\n const y = baseY - h\n\n bars.push(rect(x, y, barW, h, {\n class: 'chartts-skeleton-bar',\n fill: theme.gridColor,\n rx: 3,\n ry: 3,\n opacity: 0.6,\n }))\n }\n\n // Baseline\n bars.push(rect(padding, baseY, barAreaW, 1, {\n fill: theme.axisColor,\n opacity: 0.4,\n }))\n\n return [group(bars, { class: 'chartts-state chartts-state-loading' })]\n}\n\n/**\n * Render an error state with message.\n */\nexport function renderErrorState(\n width: number,\n height: number,\n theme: ThemeConfig,\n message = 'Failed to render chart',\n): RenderNode[] {\n const cx = width / 2\n const cy = height / 2\n\n return [group([\n // Error icon — circle with exclamation\n ...errorIcon(cx, cy - 18, theme),\n // Message\n text(cx, cy + 24, message, {\n class: 'chartts-state-text',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'middle',\n fontSize: theme.fontSize,\n fontFamily: theme.fontFamily,\n }),\n ], { class: 'chartts-state chartts-state-error' })]\n}\n\n/** Small bar chart icon for empty state */\nfunction emptyBars(cx: number, cy: number, theme: ThemeConfig): RenderNode[] {\n const barW = 6\n const gap = 4\n const heights = [14, 22, 10, 18]\n const totalW = heights.length * barW + (heights.length - 1) * gap\n const startX = cx - totalW / 2\n\n return heights.map((h, i) =>\n rect(startX + i * (barW + gap), cy - h / 2, barW, h, {\n fill: theme.gridColor,\n rx: 1,\n ry: 1,\n }),\n )\n}\n\n/** Circle with \"!\" for error state */\nfunction errorIcon(cx: number, cy: number, theme: ThemeConfig): RenderNode[] {\n return [\n // Circle outline\n rect(cx - 14, cy - 14, 28, 28, {\n fill: 'none',\n stroke: theme.textMuted,\n strokeWidth: 1.5,\n rx: 14,\n ry: 14,\n opacity: 0.6,\n }),\n // Exclamation line\n rect(cx - 1, cy - 7, 2, 10, {\n fill: theme.textMuted,\n opacity: 0.6,\n }),\n // Exclamation dot\n rect(cx - 1, cy + 5, 2, 2, {\n fill: theme.textMuted,\n opacity: 0.6,\n }),\n ]\n}\n","import type {\n ChartData, ChartOptions, ChartInstance, ChartTypePlugin,\n RenderNode, RenderContext, EventBus, PreparedData, Renderer, RendererRoot,\n} from '../types'\nimport { resolveOptions, NO_AXES_TYPES, BAND_SCALE_TYPES } from '../constants'\nimport { resolveTheme, applyTheme, watchScheme } from '../theme/engine'\nimport { createEventBus } from '../events/bus'\nimport { createSVGRenderer } from '../render/svg'\nimport { createCanvasRenderer } from '../render/canvas'\nimport { createWebGLRenderer } from '../render/webgl'\nimport { computeLayout } from '../layout/compute'\nimport { observeResize } from '../layout/responsive'\nimport { renderXAxis, renderYAxis, renderGrid } from '../axis/axis'\nimport { renderLegend } from '../legend/legend'\nimport { createLinearScale } from '../scales/linear'\nimport { createCategoricalScale } from '../scales/categorical'\nimport { group, defs, clipPathDef, rect } from '../render/tree'\nimport { createEffectDefs } from '../render/effects'\nimport { createInteractionLayer } from '../interaction/interaction'\nimport { createZoomPan, type ZoomPanInstance } from '../interaction/zoom-pan'\nimport { createBrush, type BrushInstance } from '../interaction/brush'\nimport { createDebugPanel, type DebugPanel } from '../debug/debug'\nimport { renderEmptyState, renderLoadingState, renderErrorState } from '../render/states'\nimport { decimateData } from '../data/decimate'\n\n/** Extended options for createChart (includes debug flag) */\ninterface CreateChartOptions extends ChartOptions {\n debug?: boolean\n}\n\n/**\n * Create a chart instance.\n * This is the core factory — all convenience functions (Line, Bar) call this.\n */\nexport function createChart(\n target: string | HTMLElement,\n chartType: ChartTypePlugin,\n data: ChartData,\n options: CreateChartOptions = {},\n): ChartInstance {\n const container = typeof target === 'string'\n ? document.querySelector<HTMLElement>(target)\n : target\n\n if (!container) {\n throw new Error(`[chartts] Target element not found: ${target}`)\n }\n\n // State\n let currentData = data\n let currentOptions = resolveOptions(options, data.series.length)\n let currentTheme = resolveTheme(currentOptions.theme)\n let width = currentOptions.width || container.clientWidth || 400\n let height = currentOptions.height || container.clientHeight || 300\n let lastCtx: RenderContext | null = null\n let lastPrepared: PreparedData | null = null\n let chartState: 'ready' | 'loading' | 'error' | 'empty' = 'ready'\n let stateMessage: string | undefined\n let lastRenderedNodes: RenderNode[] = []\n\n // Systems — resolve renderer\n let resolvedRenderer = currentOptions.renderer\n if (resolvedRenderer === 'auto') {\n const totalPoints = data.series.reduce((sum, s) => sum + s.values.length, 0)\n resolvedRenderer = totalPoints > 100_000 ? 'webgl' : totalPoints > 5_000 ? 'canvas' : 'svg'\n }\n const useCanvas = resolvedRenderer === 'canvas' || resolvedRenderer === 'webgl'\n const bus: EventBus = createEventBus()\n const renderer: Renderer = resolvedRenderer === 'webgl'\n ? createWebGLRenderer(currentTheme)\n : resolvedRenderer === 'canvas'\n ? createCanvasRenderer(() => currentTheme)\n : createSVGRenderer()\n const root: RendererRoot = renderer.createRoot(container, width, height, {\n class: `chartts ${currentOptions.className}`.trim(),\n role: 'img',\n ariaLabel: currentOptions.ariaLabel,\n })\n\n if (!useCanvas) {\n applyTheme(root.element, currentTheme)\n } else {\n // Canvas mode: container needs relative positioning for overlay, and background\n container.style.position = 'relative'\n container.style.background = currentTheme.background\n }\n\n // Shared interaction state — coordinates between zoom-pan and interaction layer\n const interactionState = { isPanning: false }\n\n // Interaction layer — attaches to SVG; for Canvas, attaches to the canvas element\n const interaction = createInteractionLayer(\n chartType,\n () => lastCtx!,\n () => lastPrepared!,\n bus,\n currentOptions.tooltip,\n currentTheme,\n currentOptions.onClick,\n currentOptions.onHover,\n interactionState,\n useCanvas ? { renderer, root, getLastNodes: () => lastRenderedNodes } : undefined,\n )\n if (useCanvas) {\n interaction.attach(root.element as unknown as SVGElement, container)\n } else {\n interaction.attach(root.element as SVGElement, container)\n }\n\n // Zoom & Pan\n let zoomPan: ZoomPanInstance | null = null\n if (currentOptions.zoom || currentOptions.pan) {\n // Geo/radial charts need 2D zoom; axis-based charts only zoom x\n const needs2DZoom = NO_AXES_TYPES.has(chartType.type)\n zoomPan = createZoomPan(\n {\n x: true,\n y: needs2DZoom,\n wheel: currentOptions.zoom,\n drag: currentOptions.pan,\n pinch: currentOptions.zoom,\n },\n () => {\n render()\n const state = zoomPan!.getState()\n bus.emit('zoom:change', state)\n },\n interactionState,\n )\n zoomPan.attach(\n root.element as HTMLElement | SVGElement,\n () => lastCtx!.area,\n () => ({ xScale: lastCtx!.xScale, yScale: lastCtx!.yScale }),\n )\n }\n\n // Brush selection\n let brush: BrushInstance | null = null\n if (currentOptions.brush) {\n brush = createBrush(\n {},\n bus,\n root.element as HTMLElement | SVGElement,\n () => lastCtx!.area,\n () => lastCtx!.xScale,\n () => lastPrepared!,\n !!currentOptions.pan,\n )\n }\n\n // Debug panel\n let debug: DebugPanel | null = null\n if (options.debug) {\n debug = createDebugPanel()\n debug.attach(container, root.element as SVGElement)\n }\n\n // Auto-resize\n const stopResize = currentOptions.width && currentOptions.height\n ? () => {}\n : observeResize(container, (w, h) => {\n width = w\n height = h\n render()\n bus.emit('resize', { width: w, height: h })\n })\n\n // Theme watch\n const stopThemeWatch = currentOptions.theme === 'auto'\n ? watchScheme(() => {\n currentTheme = resolveTheme('auto')\n if (useCanvas) {\n container.style.background = currentTheme.background\n } else {\n applyTheme(root.element, currentTheme)\n }\n render()\n })\n : () => {}\n\n // Initial render\n render()\n // After first paint, mark root so subsequent renders skip entry animations.\n // Must defer so the browser paints the first frame with animations running;\n // adding synchronously would kill animations before they start.\n requestAnimationFrame(() => {\n root.element.classList.add('chartts-skip-anim')\n })\n\n // -----------------------------------------------------------------------\n function render(): void {\n // Canvas: resize canvas element; SVG: update viewBox\n if (useCanvas) {\n const canvas = root.element as HTMLCanvasElement\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.round(width * dpr)\n canvas.height = Math.round(height * dpr)\n canvas.style.width = `${width}px`\n canvas.style.height = `${height}px`\n const ctx2d = canvas.getContext('2d')!\n ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n } else {\n root.element.setAttribute('viewBox', `0 0 ${width} ${height}`)\n }\n\n // Render state overlays (loading / error / empty)\n if (chartState === 'loading') {\n renderer.render(root, renderLoadingState(width, height, currentTheme))\n return\n }\n if (chartState === 'error') {\n renderer.render(root, renderErrorState(width, height, currentTheme, stateMessage))\n return\n }\n\n const isEmpty = !currentData.series.length ||\n currentData.series.every(s => s.values.length === 0)\n if (chartState === 'empty' || isEmpty) {\n renderer.render(root, renderEmptyState(width, height, currentTheme, stateMessage))\n return\n }\n\n // Decimate large datasets before preparing\n const decimateOpt = (options as Record<string, unknown>).decimate\n const dataForRender = decimateOpt\n ? decimateData(currentData, typeof decimateOpt === 'object' ? decimateOpt : { threshold: Math.max(width * 2, 500) })\n : currentData\n\n const prepared = chartType.prepareData(dataForRender, currentOptions)\n lastPrepared = prepared\n\n // Chart types that suppress axes/grid don't need axis margins\n const suppressAxes = NO_AXES_TYPES.has(chartType.type)\n const layoutOpts = suppressAxes\n ? { ...currentOptions, xAxis: false, yAxis: false, xLabel: '', yLabel: '', legend: false as const, padding: [4, 4, 4, 4] as [number, number, number, number] }\n : currentOptions\n const { area } = computeLayout(width, height, layoutOpts, prepared)\n\n // Use band mode for bar-like charts so bars don't overflow the chart area\n const useBand = BAND_SCALE_TYPES.has(chartType.type)\n const xScale = createCategoricalScale({\n categories: prepared.labels,\n range: [area.x, area.x + area.width],\n format: currentOptions.xFormat,\n band: useBand,\n })\n\n const yScale = createLinearScale({\n domain: [prepared.bounds.yMin, prepared.bounds.yMax],\n range: [area.y + area.height, area.y],\n nice: true,\n format: currentOptions.yFormat,\n })\n\n // Apply zoom/pan state to scales\n if (zoomPan) {\n zoomPan.applyToScales(xScale, yScale, area)\n }\n\n const ctx: RenderContext = {\n data: prepared,\n options: currentOptions,\n area,\n xScale,\n yScale,\n theme: currentTheme,\n zoomPan: zoomPan ? zoomPan.getState() : undefined,\n }\n lastCtx = ctx\n\n const clipId = 'chartts-clip'\n const nodes: RenderNode[] = []\n\n // Clip rect to prevent chart content from overflowing\n nodes.push(defs([\n clipPathDef(clipId, [rect(area.x, area.y, area.width, area.height)]),\n ]))\n\n if (!suppressAxes) {\n nodes.push(renderGrid(xScale, yScale, area, currentOptions, currentTheme))\n nodes.push(renderXAxis(xScale, area, currentOptions, currentTheme))\n nodes.push(renderYAxis(yScale, area, currentOptions, currentTheme))\n }\n\n const chartNodes = chartType.render(ctx)\n nodes.push(group(chartNodes, { class: 'chartts-content', clipPath: clipId }))\n\n if (!suppressAxes) {\n const legend = renderLegend(prepared, area, currentOptions, currentTheme)\n if (legend) nodes.push(legend)\n }\n\n lastRenderedNodes = nodes\n renderer.render(root, nodes)\n\n // SVG-only: inject effect gradient/filter defs\n if (!useCanvas) {\n const NS = 'http://www.w3.org/2000/svg'\n let fxDefs = root.element.querySelector('defs.chartts-fx') as SVGElement\n if (!fxDefs) {\n fxDefs = document.createElementNS(NS, 'defs')\n fxDefs.classList.add('chartts-fx')\n root.element.insertBefore(fxDefs, root.element.firstChild)\n }\n fxDefs.innerHTML = createEffectDefs(currentOptions.colors)\n }\n\n // Update debug panel\n debug?.update(ctx, nodes)\n }\n // -----------------------------------------------------------------------\n\n const instance: ChartInstance = {\n setData(newData: ChartData): void {\n const prev = currentData\n currentData = newData\n currentOptions = resolveOptions(options, newData.series.length)\n chartState = 'ready'\n stateMessage = undefined\n render()\n bus.emit('data:change', { previous: prev, current: newData })\n },\n\n setOptions(newOpts: Partial<ChartOptions>): void {\n Object.assign(options, newOpts)\n currentOptions = resolveOptions(options, currentData.series.length)\n currentTheme = resolveTheme(currentOptions.theme)\n applyTheme(root.element, currentTheme)\n render()\n },\n\n getData() { return currentData },\n getOptions() { return currentOptions },\n\n setLoading(loading = true): void {\n chartState = loading ? 'loading' : 'ready'\n stateMessage = undefined\n render()\n },\n\n setError(message?: string): void {\n chartState = 'error'\n stateMessage = message\n render()\n },\n\n setEmpty(message?: string): void {\n chartState = 'empty'\n stateMessage = message\n render()\n },\n\n toSVG(): string {\n if (useCanvas) throw new Error('[chartts] toSVG() is not available with canvas renderer')\n return root.element.outerHTML\n },\n\n async toPNG(opts?: { scale?: number }): Promise<Blob> {\n // Canvas renderer: export directly from the canvas\n if (useCanvas) {\n const canvas = root.element as HTMLCanvasElement\n return new Promise((resolve, reject) => {\n canvas.toBlob((b) => b ? resolve(b) : reject(new Error('PNG export failed')), 'image/png')\n })\n }\n\n // SVG renderer: rasterize via Image\n const scale = opts?.scale ?? 2\n const canvas = document.createElement('canvas')\n canvas.width = width * scale\n canvas.height = height * scale\n const canvasCtx = canvas.getContext('2d')!\n const svgStr = this.toSVG()\n const blob = new Blob([svgStr], { type: 'image/svg+xml;charset=utf-8' })\n const url = URL.createObjectURL(blob)\n const img = new Image()\n img.width = width * scale\n img.height = height * scale\n\n return new Promise((resolve, reject) => {\n img.onload = () => {\n canvasCtx.drawImage(img, 0, 0, width * scale, height * scale)\n URL.revokeObjectURL(url)\n canvas.toBlob((b) => b ? resolve(b) : reject(new Error('PNG export failed')), 'image/png')\n }\n img.onerror = reject\n img.src = url\n })\n },\n\n async toClipboard(): Promise<void> {\n const blob = await this.toPNG()\n await navigator.clipboard.write([\n new ClipboardItem({ 'image/png': blob }),\n ])\n },\n\n on(event, handler) {\n return bus.on(event as never, handler as never)\n },\n\n resize(w: number, h: number): void {\n width = w\n height = h\n render()\n },\n\n resetZoom(): void {\n if (zoomPan) {\n zoomPan.reset()\n bus.emit('zoom:reset', undefined as never)\n }\n },\n\n destroy(): void {\n stopResize()\n stopThemeWatch()\n interaction.destroy()\n zoomPan?.destroy()\n brush?.destroy()\n debug?.destroy()\n bus.emit('destroy', undefined as never)\n bus.destroy()\n renderer.destroy(root)\n },\n\n get element(): SVGElement | HTMLCanvasElement {\n return root.element as SVGElement | HTMLCanvasElement\n },\n\n get _bus(): EventBus {\n return bus\n },\n }\n\n return instance\n}\n","import type {\n ChartData, ChartOptions, ChartTypePlugin,\n RenderNode, RenderContext, RenderAttrs,\n} from '../types'\nimport { CHART_CSS } from '../styles/chart'\nimport { createEffectDefs } from './effects'\nimport { resolveOptions, NO_AXES_TYPES, BAND_SCALE_TYPES } from '../constants'\nimport { resolveTheme } from '../theme/engine'\nimport { computeLayout } from '../layout/compute'\nimport { renderXAxis, renderYAxis, renderGrid } from '../axis/axis'\nimport { renderLegend } from '../legend/legend'\nimport { createLinearScale } from '../scales/linear'\nimport { createCategoricalScale } from '../scales/categorical'\nimport { group, defs, clipPathDef, rect } from './tree'\n\n/**\n * Render a chart to an SVG string. No DOM required — works in Node.js / SSR.\n *\n * @example\n * ```ts\n * import { renderToString, lineChartType } from '@chartts/core'\n *\n * const svg = renderToString(lineChartType, {\n * labels: ['Jan', 'Feb', 'Mar'],\n * series: [{ name: 'Sales', values: [10, 20, 15] }],\n * }, { width: 600, height: 400 })\n *\n * // svg is a full <svg>...</svg> string\n * ```\n */\nexport function renderToString(\n chartType: ChartTypePlugin,\n data: ChartData,\n options: ChartOptions & { width?: number; height?: number } = {},\n): string {\n const width = options.width ?? 600\n const height = options.height ?? 400\n const resolved = resolveOptions({ ...options, width, height }, data.series.length)\n const theme = resolveTheme(resolved.theme)\n const prepared = chartType.prepareData(data, resolved)\n\n // Chart types that suppress axes don't need axis margins\n const suppressAxes = NO_AXES_TYPES.has(chartType.type)\n const layoutOpts = suppressAxes\n ? { ...resolved, xAxis: false, yAxis: false, xLabel: '', yLabel: '', legend: false as const, padding: [4, 4, 4, 4] as [number, number, number, number] }\n : resolved\n const { area } = computeLayout(width, height, layoutOpts, prepared)\n\n const useBand = BAND_SCALE_TYPES.has(chartType.type)\n const xScale = createCategoricalScale({\n categories: prepared.labels,\n range: [area.x, area.x + area.width],\n format: resolved.xFormat,\n band: useBand,\n })\n\n const yScale = createLinearScale({\n domain: [prepared.bounds.yMin, prepared.bounds.yMax],\n range: [area.y + area.height, area.y],\n nice: true,\n format: resolved.yFormat,\n })\n\n const ctx: RenderContext = { data: prepared, options: resolved, area, xScale, yScale, theme }\n\n const clipId = 'chartts-clip'\n const nodes: RenderNode[] = []\n\n nodes.push(defs([\n clipPathDef(clipId, [rect(area.x, area.y, area.width, area.height)]),\n ]))\n if (!suppressAxes) {\n nodes.push(renderGrid(xScale, yScale, area, resolved, theme))\n nodes.push(renderXAxis(xScale, area, resolved, theme))\n nodes.push(renderYAxis(yScale, area, resolved, theme))\n }\n\n const chartNodes = chartType.render(ctx)\n nodes.push(group(chartNodes, { class: 'chartts-content', clipPath: clipId }))\n\n if (!suppressAxes) {\n const legend = renderLegend(prepared, area, resolved, theme)\n if (legend) nodes.push(legend)\n }\n\n const childrenStr = nodes.map(nodeToString).join('')\n const styleStr = `<style>${CHART_CSS}</style>`\n const fxDefsStr = `<defs class=\"chartts-fx\">${createEffectDefs(resolved.colors)}</defs>`\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-label=\"${escapeAttr(resolved.ariaLabel)}\" class=\"chartts\">${styleStr}${fxDefsStr}${childrenStr}</svg>`\n}\n\n// ---------------------------------------------------------------------------\n// Node serialization\n// ---------------------------------------------------------------------------\n\nfunction nodeToString(node: RenderNode): string {\n switch (node.type) {\n case 'group': {\n const attrs = renderAttrs(node.attrs)\n const children = node.children.map(nodeToString).join('')\n return `<g${attrs}>${children}</g>`\n }\n\n case 'path': {\n const attrs = renderAttrs(node.attrs)\n const fill = node.attrs?.fill ? '' : ' fill=\"none\"'\n return `<path d=\"${escapeAttr(node.d)}\"${fill}${attrs}/>`\n }\n\n case 'rect': {\n const attrs = renderAttrs(node.attrs)\n const rx = node.rx != null ? ` rx=\"${node.rx}\"` : ''\n const ry = node.ry != null ? ` ry=\"${node.ry}\"` : ''\n return `<rect x=\"${node.x}\" y=\"${node.y}\" width=\"${node.width}\" height=\"${node.height}\"${rx}${ry}${attrs}/>`\n }\n\n case 'circle': {\n const attrs = renderAttrs(node.attrs)\n return `<circle cx=\"${node.cx}\" cy=\"${node.cy}\" r=\"${node.r}\"${attrs}/>`\n }\n\n case 'line': {\n const attrs = renderAttrs(node.attrs)\n return `<line x1=\"${node.x1}\" y1=\"${node.y1}\" x2=\"${node.x2}\" y2=\"${node.y2}\"${attrs}/>`\n }\n\n case 'text': {\n const a = node.attrs\n let attrs = renderAttrs(a)\n if (a) {\n if ('textAnchor' in a && a.textAnchor) attrs += ` text-anchor=\"${a.textAnchor}\"`\n if ('dominantBaseline' in a && a.dominantBaseline) attrs += ` dominant-baseline=\"${a.dominantBaseline}\"`\n if ('fontSize' in a && a.fontSize) attrs += ` font-size=\"${a.fontSize}\"`\n if ('fontFamily' in a && a.fontFamily) attrs += ` font-family=\"${escapeAttr(a.fontFamily as string)}\"`\n if ('fontWeight' in a && a.fontWeight) attrs += ` font-weight=\"${a.fontWeight}\"`\n }\n return `<text x=\"${node.x}\" y=\"${node.y}\"${attrs}>${escapeXml(node.content)}</text>`\n }\n\n case 'clipPath': {\n const children = node.children.map(nodeToString).join('')\n return `<clipPath id=\"${escapeAttr(node.id)}\">${children}</clipPath>`\n }\n\n case 'defs': {\n const children = node.children.map(nodeToString).join('')\n return `<defs>${children}</defs>`\n }\n }\n}\n\nconst ATTR_MAP: Record<string, string> = {\n class: 'class',\n style: 'style',\n stroke: 'stroke',\n strokeWidth: 'stroke-width',\n strokeDasharray: 'stroke-dasharray',\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n opacity: 'opacity',\n transform: 'transform',\n role: 'role',\n ariaLabel: 'aria-label',\n tabindex: 'tabindex',\n}\n\nconst SKIP_KEYS = new Set([\n 'textAnchor', 'dominantBaseline', 'fontSize', 'fontFamily', 'fontWeight', 'rx', 'ry',\n])\n\nfunction renderAttrs(attrs?: RenderAttrs): string {\n if (!attrs) return ''\n let result = ''\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value == null) continue\n if (SKIP_KEYS.has(key)) continue\n\n if (key === 'clipPath') {\n result += ` clip-path=\"url(#${escapeAttr(String(value))})\"`\n } else if (key.startsWith('data-')) {\n result += ` ${key}=\"${escapeAttr(String(value))}\"`\n } else if (ATTR_MAP[key]) {\n result += ` ${ATTR_MAP[key]}=\"${escapeAttr(String(value))}\"`\n }\n }\n\n return result\n}\n\nfunction escapeAttr(s: string): string {\n return s.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>')\n}\n\nfunction escapeXml(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n","import type { ChartData } from '../types'\n\nexport class CharttsError extends Error {\n constructor(message: string) {\n super(`[chartts] ${message}`)\n this.name = 'CharttsError'\n }\n}\n\nexport function validateData(data: ChartData): void {\n if (!data) {\n throw new CharttsError('No data provided. Pass { series: [{ name, values }] }')\n }\n\n if (!Array.isArray(data.series) || data.series.length === 0) {\n throw new CharttsError('data.series must be a non-empty array.')\n }\n\n const len = data.series[0]!.values.length\n\n for (let i = 0; i < data.series.length; i++) {\n const s = data.series[i]!\n\n if (!s.name || typeof s.name !== 'string') {\n throw new CharttsError(`series[${i}].name must be a non-empty string.`)\n }\n\n if (!Array.isArray(s.values)) {\n throw new CharttsError(`series[${i}] (\"${s.name}\").values must be an array.`)\n }\n\n if (s.values.length !== len) {\n throw new CharttsError(\n `Series length mismatch: \"${data.series[0]!.name}\" has ${len} values ` +\n `but \"${s.name}\" has ${s.values.length}. All series must have equal length.`,\n )\n }\n\n for (let j = 0; j < s.values.length; j++) {\n const v = s.values[j]\n // Allow NaN (used for missing data / indicator warmup periods)\n if (typeof v !== 'number' || (!Number.isFinite(v) && !Number.isNaN(v))) {\n throw new CharttsError(\n `series[${i}] (\"${s.name}\").values[${j}] must be a finite number (or NaN for missing data). ` +\n `Got: ${JSON.stringify(v)}`,\n )\n }\n }\n }\n\n if (data.labels && data.labels.length > 0 && data.labels.length !== len) {\n throw new CharttsError(\n `labels has ${data.labels.length} entries but series have ${len} values. They must match.`,\n )\n }\n}\n","import type { ChartData, PreparedData, PreparedSeries, DataBounds, ResolvedOptions } from '../types'\nimport { validateData } from './validate'\n\n/**\n * Validate, normalize, and compute bounds for chart data.\n * This is the single entry point for data preparation.\n */\nexport function prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n validateData(data)\n\n const count = data.series[0]!.values.length\n const labels = data.labels ?? Array.from({ length: count }, (_, i) => i)\n\n const series: PreparedSeries[] = data.series.map((s, i) => ({\n name: s.name,\n values: s.values,\n color: s.color ?? options.colors[i % options.colors.length]!,\n style: s.style ?? 'solid',\n fill: s.fill ?? false,\n fillOpacity: s.fillOpacity ?? 0.15,\n showPoints: s.showPoints ?? true,\n index: i,\n }))\n\n const bounds = computeBounds(series, options)\n\n return { labels, series, bounds }\n}\n\nfunction computeBounds(series: PreparedSeries[], options: ResolvedOptions): DataBounds {\n let yMin = Infinity\n let yMax = -Infinity\n\n for (const s of series) {\n for (const v of s.values) {\n if (isNaN(v)) continue // skip NaN (missing data / indicator warmup)\n if (v < yMin) yMin = v\n if (v > yMax) yMax = v\n }\n }\n\n // Handle edge case: all values identical\n if (yMin === yMax) {\n yMin = yMin === 0 ? 0 : yMin - Math.abs(yMin) * 0.1\n yMax = yMax === 0 ? 1 : yMax + Math.abs(yMax) * 0.1\n }\n\n // Apply forced bounds\n if (options.yMin !== undefined) yMin = options.yMin\n if (options.yMax !== undefined) yMax = options.yMax\n\n const count = series[0]?.values.length ?? 0\n\n return {\n xMin: 0,\n xMax: Math.max(0, count - 1),\n yMin,\n yMax,\n }\n}\n"]}
|