@chartts/core 0.1.3 → 0.1.4
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-XKERO5K2.js → chunk-24557PYN.js} +3 -3
- package/dist/{chunk-XKERO5K2.js.map → chunk-24557PYN.js.map} +1 -1
- package/dist/{chunk-5YNIOIKK.js → chunk-2BUIZDOB.js} +3 -3
- package/dist/{chunk-5YNIOIKK.js.map → chunk-2BUIZDOB.js.map} +1 -1
- package/dist/{chunk-EHKHXQ46.cjs → chunk-2IMUTDTD.cjs} +10 -10
- package/dist/{chunk-EHKHXQ46.cjs.map → chunk-2IMUTDTD.cjs.map} +1 -1
- package/dist/{chunk-7ZPHLIFP.cjs → chunk-2IWLOBSF.cjs} +6 -6
- package/dist/{chunk-7ZPHLIFP.cjs.map → chunk-2IWLOBSF.cjs.map} +1 -1
- package/dist/{chunk-F5AOBHQY.js → chunk-2JYK52HV.js} +4 -4
- package/dist/{chunk-F5AOBHQY.js.map → chunk-2JYK52HV.js.map} +1 -1
- package/dist/{chunk-WVQVGQJO.cjs → chunk-2QRCHYTZ.cjs} +7 -7
- package/dist/{chunk-WVQVGQJO.cjs.map → chunk-2QRCHYTZ.cjs.map} +1 -1
- package/dist/{chunk-XWCY67K5.js → chunk-34DQGCPP.js} +4 -4
- package/dist/{chunk-XWCY67K5.js.map → chunk-34DQGCPP.js.map} +1 -1
- package/dist/{chunk-5J26EN5I.js → chunk-3JB4JBBK.js} +4 -4
- package/dist/{chunk-5J26EN5I.js.map → chunk-3JB4JBBK.js.map} +1 -1
- package/dist/{chunk-EHNX3MG3.cjs → chunk-3NHH6C4K.cjs} +13 -13
- package/dist/{chunk-EHNX3MG3.cjs.map → chunk-3NHH6C4K.cjs.map} +1 -1
- package/dist/{chunk-ECB3UPTC.cjs → chunk-3SVNEKXE.cjs} +11 -11
- package/dist/{chunk-ECB3UPTC.cjs.map → chunk-3SVNEKXE.cjs.map} +1 -1
- package/dist/{chunk-BYB3LQAT.cjs → chunk-4D6PVH2C.cjs} +9 -9
- package/dist/{chunk-BYB3LQAT.cjs.map → chunk-4D6PVH2C.cjs.map} +1 -1
- package/dist/{chunk-NG7DRWWT.cjs → chunk-4MNVJVK3.cjs} +6 -6
- package/dist/{chunk-NG7DRWWT.cjs.map → chunk-4MNVJVK3.cjs.map} +1 -1
- package/dist/{chunk-RQJRVKAH.js → chunk-4QRND2V5.js} +3 -3
- package/dist/{chunk-RQJRVKAH.js.map → chunk-4QRND2V5.js.map} +1 -1
- package/dist/{chunk-NGKUI7XE.cjs → chunk-55ZTXQQQ.cjs} +12 -12
- package/dist/{chunk-NGKUI7XE.cjs.map → chunk-55ZTXQQQ.cjs.map} +1 -1
- package/dist/{chunk-2MWA7H6J.js → chunk-56BN43J4.js} +5 -5
- package/dist/{chunk-2MWA7H6J.js.map → chunk-56BN43J4.js.map} +1 -1
- package/dist/{chunk-RJIPFWW7.js → chunk-5E7FXDBM.js} +4 -4
- package/dist/{chunk-RJIPFWW7.js.map → chunk-5E7FXDBM.js.map} +1 -1
- package/dist/{chunk-ILCWDAKD.js → chunk-5HZEDCJG.js} +3 -3
- package/dist/{chunk-ILCWDAKD.js.map → chunk-5HZEDCJG.js.map} +1 -1
- package/dist/{chunk-DKXW2FQC.cjs → chunk-5QT67VYJ.cjs} +10 -10
- package/dist/{chunk-DKXW2FQC.cjs.map → chunk-5QT67VYJ.cjs.map} +1 -1
- package/dist/{chunk-XE5ZYFGM.js → chunk-5QVUBGM7.js} +4 -4
- package/dist/{chunk-XE5ZYFGM.js.map → chunk-5QVUBGM7.js.map} +1 -1
- package/dist/{chunk-DR5MQC3W.js → chunk-62DBXI4N.js} +4 -4
- package/dist/{chunk-DR5MQC3W.js.map → chunk-62DBXI4N.js.map} +1 -1
- package/dist/{chunk-HMB2RIEE.js → chunk-6QMV75NT.js} +4 -4
- package/dist/{chunk-HMB2RIEE.js.map → chunk-6QMV75NT.js.map} +1 -1
- package/dist/{chunk-OUN3MWRQ.cjs → chunk-754Z4OR6.cjs} +10 -10
- package/dist/{chunk-OUN3MWRQ.cjs.map → chunk-754Z4OR6.cjs.map} +1 -1
- package/dist/{chunk-3SOKHPAO.js → chunk-7GLCJPV5.js} +4 -4
- package/dist/{chunk-3SOKHPAO.js.map → chunk-7GLCJPV5.js.map} +1 -1
- package/dist/{chunk-PQCHNZHM.cjs → chunk-7PHOSSLJ.cjs} +9 -9
- package/dist/{chunk-PQCHNZHM.cjs.map → chunk-7PHOSSLJ.cjs.map} +1 -1
- package/dist/{chunk-VBEZS3Q4.cjs → chunk-A5G32G2R.cjs} +9 -9
- package/dist/{chunk-VBEZS3Q4.cjs.map → chunk-A5G32G2R.cjs.map} +1 -1
- package/dist/{chunk-DX4FBN3I.js → chunk-AEQXFDL7.js} +14 -9
- package/dist/chunk-AEQXFDL7.js.map +1 -0
- package/dist/{chunk-RHTVKBRC.cjs → chunk-ATMSGQCW.cjs} +9 -9
- package/dist/{chunk-RHTVKBRC.cjs.map → chunk-ATMSGQCW.cjs.map} +1 -1
- package/dist/{chunk-2ITF366P.js → chunk-BFBVJ6MU.js} +3 -3
- package/dist/{chunk-2ITF366P.js.map → chunk-BFBVJ6MU.js.map} +1 -1
- package/dist/{chunk-E43H3A3G.cjs → chunk-BGGESAAG.cjs} +7 -7
- package/dist/{chunk-E43H3A3G.cjs.map → chunk-BGGESAAG.cjs.map} +1 -1
- package/dist/{chunk-R6ZDSXN7.cjs → chunk-CA42BCSM.cjs} +8 -8
- package/dist/{chunk-R6ZDSXN7.cjs.map → chunk-CA42BCSM.cjs.map} +1 -1
- package/dist/{chunk-FV7R2LLD.js → chunk-CU5ZXVZQ.js} +4 -4
- package/dist/{chunk-FV7R2LLD.js.map → chunk-CU5ZXVZQ.js.map} +1 -1
- package/dist/{chunk-JNQ4NL3R.cjs → chunk-CUIPBYMG.cjs} +8 -8
- package/dist/{chunk-JNQ4NL3R.cjs.map → chunk-CUIPBYMG.cjs.map} +1 -1
- package/dist/{chunk-CCMLOCTH.js → chunk-CWZADOJ6.js} +3 -3
- package/dist/{chunk-CCMLOCTH.js.map → chunk-CWZADOJ6.js.map} +1 -1
- package/dist/{chunk-FZIBM3G5.cjs → chunk-D5QUAWF3.cjs} +10 -10
- package/dist/{chunk-FZIBM3G5.cjs.map → chunk-D5QUAWF3.cjs.map} +1 -1
- package/dist/{chunk-YZQROIJY.js → chunk-DAAU5H24.js} +3 -3
- package/dist/{chunk-YZQROIJY.js.map → chunk-DAAU5H24.js.map} +1 -1
- package/dist/{chunk-GAWIUMAK.cjs → chunk-DT4GG5BF.cjs} +7 -7
- package/dist/{chunk-GAWIUMAK.cjs.map → chunk-DT4GG5BF.cjs.map} +1 -1
- package/dist/{chunk-4L62MAZA.js → chunk-DX77WSIB.js} +5 -5
- package/dist/{chunk-4L62MAZA.js.map → chunk-DX77WSIB.js.map} +1 -1
- package/dist/{chunk-4ORSJM2I.js → chunk-EPUWA3ZW.js} +4 -4
- package/dist/{chunk-4ORSJM2I.js.map → chunk-EPUWA3ZW.js.map} +1 -1
- package/dist/{chunk-ZTUKOCJN.cjs → chunk-ESJMEDLY.cjs} +4 -4
- package/dist/{chunk-ZTUKOCJN.cjs.map → chunk-ESJMEDLY.cjs.map} +1 -1
- package/dist/{chunk-6JNW43SE.js → chunk-EWVXMQRW.js} +5 -5
- package/dist/{chunk-6JNW43SE.js.map → chunk-EWVXMQRW.js.map} +1 -1
- package/dist/{chunk-LIY7MYRG.js → chunk-FGBIJ6PL.js} +4 -4
- package/dist/{chunk-LIY7MYRG.js.map → chunk-FGBIJ6PL.js.map} +1 -1
- package/dist/{chunk-OFEROCC5.cjs → chunk-FGHSUT6X.cjs} +6 -6
- package/dist/{chunk-OFEROCC5.cjs.map → chunk-FGHSUT6X.cjs.map} +1 -1
- package/dist/{chunk-QKJUAMRK.cjs → chunk-FVLVTY5D.cjs} +6 -6
- package/dist/{chunk-QKJUAMRK.cjs.map → chunk-FVLVTY5D.cjs.map} +1 -1
- package/dist/{chunk-YX6RW6ZW.cjs → chunk-GBL4R3GH.cjs} +6 -6
- package/dist/{chunk-YX6RW6ZW.cjs.map → chunk-GBL4R3GH.cjs.map} +1 -1
- package/dist/{chunk-SXVMEC6N.cjs → chunk-GRXHW5S3.cjs} +12 -12
- package/dist/{chunk-SXVMEC6N.cjs.map → chunk-GRXHW5S3.cjs.map} +1 -1
- package/dist/{chunk-K5TPJVOK.js → chunk-HCIBBUV5.js} +3 -3
- package/dist/{chunk-K5TPJVOK.js.map → chunk-HCIBBUV5.js.map} +1 -1
- package/dist/{chunk-HFWO37RY.cjs → chunk-HCK2VUWD.cjs} +8 -8
- package/dist/{chunk-HFWO37RY.cjs.map → chunk-HCK2VUWD.cjs.map} +1 -1
- package/dist/{chunk-FSDI3NJV.js → chunk-IDZTDJLH.js} +3 -3
- package/dist/{chunk-FSDI3NJV.js.map → chunk-IDZTDJLH.js.map} +1 -1
- package/dist/{chunk-FDNJNVKA.cjs → chunk-IF6RQ53Q.cjs} +9 -9
- package/dist/{chunk-FDNJNVKA.cjs.map → chunk-IF6RQ53Q.cjs.map} +1 -1
- package/dist/{chunk-PVPTFMJJ.js → chunk-IOV77VHP.js} +4 -4
- package/dist/{chunk-PVPTFMJJ.js.map → chunk-IOV77VHP.js.map} +1 -1
- package/dist/{chunk-UMIJYYF3.cjs → chunk-JVVGQLJQ.cjs} +14 -9
- package/dist/chunk-JVVGQLJQ.cjs.map +1 -0
- package/dist/{chunk-MY4KMVJ5.cjs → chunk-JYVRX3BX.cjs} +8 -8
- package/dist/{chunk-MY4KMVJ5.cjs.map → chunk-JYVRX3BX.cjs.map} +1 -1
- package/dist/{chunk-ZY7ETQD6.js → chunk-KHG3G2ZX.js} +3 -3
- package/dist/{chunk-ZY7ETQD6.js.map → chunk-KHG3G2ZX.js.map} +1 -1
- package/dist/{chunk-ASNAQ35U.js → chunk-KNMEXOKJ.js} +4 -4
- package/dist/{chunk-ASNAQ35U.js.map → chunk-KNMEXOKJ.js.map} +1 -1
- package/dist/{chunk-WYIIWTIR.cjs → chunk-KWSVJRXX.cjs} +4 -4
- package/dist/{chunk-WYIIWTIR.cjs.map → chunk-KWSVJRXX.cjs.map} +1 -1
- package/dist/{chunk-OAL5RS2X.cjs → chunk-LARNENXE.cjs} +10 -10
- package/dist/{chunk-OAL5RS2X.cjs.map → chunk-LARNENXE.cjs.map} +1 -1
- package/dist/{chunk-MYXLKVJE.js → chunk-LRHMLNPW.js} +12 -4
- package/dist/chunk-LRHMLNPW.js.map +1 -0
- package/dist/{chunk-66BHM3UN.cjs → chunk-LXYNL7BI.cjs} +10 -10
- package/dist/{chunk-66BHM3UN.cjs.map → chunk-LXYNL7BI.cjs.map} +1 -1
- package/dist/{chunk-V45C74EB.js → chunk-MEERXUZS.js} +4 -4
- package/dist/{chunk-V45C74EB.js.map → chunk-MEERXUZS.js.map} +1 -1
- package/dist/{chunk-YJHB2GHQ.js → chunk-MJY25P44.js} +3 -3
- package/dist/{chunk-YJHB2GHQ.js.map → chunk-MJY25P44.js.map} +1 -1
- package/dist/{chunk-6UWYKNFN.cjs → chunk-MSCRIA2U.cjs} +12 -12
- package/dist/{chunk-6UWYKNFN.cjs.map → chunk-MSCRIA2U.cjs.map} +1 -1
- package/dist/{chunk-UZH6PVHD.js → chunk-N35UAFEU.js} +4 -4
- package/dist/{chunk-UZH6PVHD.js.map → chunk-N35UAFEU.js.map} +1 -1
- package/dist/{chunk-6E6ZDWZD.cjs → chunk-NE2W2MF3.cjs} +10 -10
- package/dist/{chunk-6E6ZDWZD.cjs.map → chunk-NE2W2MF3.cjs.map} +1 -1
- package/dist/{chunk-7PNCJ4OQ.js → chunk-NQ7Y6ZKH.js} +3 -3
- package/dist/{chunk-7PNCJ4OQ.js.map → chunk-NQ7Y6ZKH.js.map} +1 -1
- package/dist/{chunk-LK2A3HBT.js → chunk-NRULNA5F.js} +4 -4
- package/dist/{chunk-LK2A3HBT.js.map → chunk-NRULNA5F.js.map} +1 -1
- package/dist/{chunk-47EP245Y.cjs → chunk-OEGSDOJ2.cjs} +7 -7
- package/dist/{chunk-47EP245Y.cjs.map → chunk-OEGSDOJ2.cjs.map} +1 -1
- package/dist/{chunk-ZFSFOD5W.cjs → chunk-OMAW52LY.cjs} +6 -6
- package/dist/{chunk-ZFSFOD5W.cjs.map → chunk-OMAW52LY.cjs.map} +1 -1
- package/dist/{chunk-YOLF5DYU.js → chunk-OMSHGBV3.js} +4 -4
- package/dist/{chunk-YOLF5DYU.js.map → chunk-OMSHGBV3.js.map} +1 -1
- package/dist/{chunk-4H2LGLGI.cjs → chunk-OTXHJHXU.cjs} +11 -11
- package/dist/{chunk-4H2LGLGI.cjs.map → chunk-OTXHJHXU.cjs.map} +1 -1
- package/dist/{chunk-DRIJNFWP.cjs → chunk-PCAYYCLY.cjs} +10 -10
- package/dist/{chunk-DRIJNFWP.cjs.map → chunk-PCAYYCLY.cjs.map} +1 -1
- package/dist/{chunk-QERWC7U6.js → chunk-PKXW45G4.js} +3 -3
- package/dist/{chunk-QERWC7U6.js.map → chunk-PKXW45G4.js.map} +1 -1
- package/dist/{chunk-YDQDZWZ7.cjs → chunk-QEPMEEZC.cjs} +6 -6
- package/dist/{chunk-YDQDZWZ7.cjs.map → chunk-QEPMEEZC.cjs.map} +1 -1
- package/dist/{chunk-G6R6MSRF.cjs → chunk-QPHUAF3R.cjs} +8 -8
- package/dist/{chunk-G6R6MSRF.cjs.map → chunk-QPHUAF3R.cjs.map} +1 -1
- package/dist/{chunk-RFEKSP62.js → chunk-QPHWRD25.js} +3 -3
- package/dist/{chunk-RFEKSP62.js.map → chunk-QPHWRD25.js.map} +1 -1
- package/dist/{chunk-XN6YS55F.cjs → chunk-QYI7ZV3B.cjs} +30 -22
- package/dist/chunk-QYI7ZV3B.cjs.map +1 -0
- package/dist/{chunk-3V64BDKG.cjs → chunk-R2W3RJFW.cjs} +13 -13
- package/dist/{chunk-3V64BDKG.cjs.map → chunk-R2W3RJFW.cjs.map} +1 -1
- package/dist/{chunk-46ZZTP5B.js → chunk-SGZUUUXU.js} +4 -4
- package/dist/{chunk-46ZZTP5B.js.map → chunk-SGZUUUXU.js.map} +1 -1
- package/dist/{chunk-MPQECPE3.js → chunk-T7SCCACB.js} +3 -3
- package/dist/{chunk-MPQECPE3.js.map → chunk-T7SCCACB.js.map} +1 -1
- package/dist/{chunk-GPSNBZPX.js → chunk-TC3H6ZED.js} +4 -4
- package/dist/{chunk-GPSNBZPX.js.map → chunk-TC3H6ZED.js.map} +1 -1
- package/dist/{chunk-AG7VY6MJ.cjs → chunk-TEZNWW3R.cjs} +8 -8
- package/dist/{chunk-AG7VY6MJ.cjs.map → chunk-TEZNWW3R.cjs.map} +1 -1
- package/dist/{chunk-KTCP23W6.js → chunk-THHZMRFU.js} +3 -3
- package/dist/{chunk-KTCP23W6.js.map → chunk-THHZMRFU.js.map} +1 -1
- package/dist/{chunk-RWQH5EO5.cjs → chunk-TLHQ6JCK.cjs} +11 -11
- package/dist/{chunk-RWQH5EO5.cjs.map → chunk-TLHQ6JCK.cjs.map} +1 -1
- package/dist/{chunk-CDS2NXGT.cjs → chunk-V5Q6UNUK.cjs} +4 -4
- package/dist/{chunk-CDS2NXGT.cjs.map → chunk-V5Q6UNUK.cjs.map} +1 -1
- package/dist/{chunk-BT5H3WMI.js → chunk-VBMLJUBE.js} +4 -4
- package/dist/{chunk-BT5H3WMI.js.map → chunk-VBMLJUBE.js.map} +1 -1
- package/dist/{chunk-UFMPALRH.js → chunk-VGJD4F4H.js} +3 -3
- package/dist/{chunk-UFMPALRH.js.map → chunk-VGJD4F4H.js.map} +1 -1
- package/dist/{chunk-RN7NNB6I.js → chunk-VJXUBN7J.js} +3 -3
- package/dist/{chunk-RN7NNB6I.js.map → chunk-VJXUBN7J.js.map} +1 -1
- package/dist/{chunk-TVDQNLGJ.js → chunk-VUHNBLFA.js} +3 -3
- package/dist/{chunk-TVDQNLGJ.js.map → chunk-VUHNBLFA.js.map} +1 -1
- package/dist/{chunk-OAIMES5S.cjs → chunk-W476ER4X.cjs} +17 -17
- package/dist/{chunk-OAIMES5S.cjs.map → chunk-W476ER4X.cjs.map} +1 -1
- package/dist/{chunk-4XVJYNOT.js → chunk-WZCES5M6.js} +4 -4
- package/dist/{chunk-4XVJYNOT.js.map → chunk-WZCES5M6.js.map} +1 -1
- package/dist/{chunk-2EZ2TVYT.cjs → chunk-Y6CVUI6A.cjs} +13 -13
- package/dist/{chunk-2EZ2TVYT.cjs.map → chunk-Y6CVUI6A.cjs.map} +1 -1
- package/dist/{chunk-4WQUX2B4.cjs → chunk-YCL43UQM.cjs} +12 -12
- package/dist/{chunk-4WQUX2B4.cjs.map → chunk-YCL43UQM.cjs.map} +1 -1
- package/dist/{chunk-XWN43PZF.cjs → chunk-YZXRD6K6.cjs} +7 -7
- package/dist/{chunk-XWN43PZF.cjs.map → chunk-YZXRD6K6.cjs.map} +1 -1
- package/dist/{chunk-IRUIWMH6.js → chunk-ZFGLBJYC.js} +3 -3
- package/dist/{chunk-IRUIWMH6.js.map → chunk-ZFGLBJYC.js.map} +1 -1
- package/dist/{chunk-6EGHZDZI.cjs → chunk-ZNKVOTPB.cjs} +15 -15
- package/dist/{chunk-6EGHZDZI.cjs.map → chunk-ZNKVOTPB.cjs.map} +1 -1
- package/dist/{chunk-WJP6CRML.js → chunk-ZOEN3ARN.js} +3 -3
- package/dist/{chunk-WJP6CRML.js.map → chunk-ZOEN3ARN.js.map} +1 -1
- package/dist/{chunk-TWSWD4PU.js → chunk-ZYXRRVR6.js} +3 -3
- package/dist/{chunk-TWSWD4PU.js.map → chunk-ZYXRRVR6.js.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.cjs +10 -10
- 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 +180 -180
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +92 -92
- 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/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/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/volume.cjs +9 -9
- package/dist/volume.js +4 -4
- package/dist/waterfall.cjs +9 -9
- package/dist/waterfall.js +4 -4
- 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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getBandwidth } from './chunk-E6PR75X7.js';
|
|
2
|
-
import { line, circle, group, prepareData } from './chunk-
|
|
2
|
+
import { line, circle, group, prepareData } from './chunk-AEQXFDL7.js';
|
|
3
3
|
|
|
4
4
|
// src/charts/lollipop/lollipop-type.ts
|
|
5
5
|
var lollipopChartType = {
|
|
@@ -90,5 +90,5 @@ var lollipopChartType = {
|
|
|
90
90
|
};
|
|
91
91
|
|
|
92
92
|
export { lollipopChartType };
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
93
|
+
//# sourceMappingURL=chunk-QPHWRD25.js.map
|
|
94
|
+
//# sourceMappingURL=chunk-QPHWRD25.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/lollipop/lollipop-type.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/charts/lollipop/lollipop-type.ts"],"names":[],"mappings":"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","file":"chunk-QPHWRD25.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, line, circle } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\n/**\n * Lollipop chart — stem line + circle at end.\n *\n * A modern, cleaner alternative to bar charts.\n * Vertical stems from baseline to value with a prominent circle dot.\n */\nexport const lollipopChartType: ChartTypePlugin = {\n type: 'lollipop',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const prepared = prepareData(data, options)\n if (options.yMin === undefined && prepared.bounds.yMin > 0) {\n prepared.bounds.yMin = 0\n }\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, options, xScale, yScale } = ctx\n const nodes: RenderNode[] = []\n\n const seriesCount = data.series.length\n const pointCount = data.series[0]?.values.length ?? 0\n if (pointCount === 0) return nodes\n\n const bw = getBandwidth(xScale)\n const groupWidth = bw * 0.8\n const stemGap = groupWidth / seriesCount\n const dotR = Math.min(8, stemGap * 0.4)\n const baselineY = yScale.map(0)\n\n for (const series of data.series) {\n const seriesNodes: RenderNode[] = []\n\n for (let i = 0; i < series.values.length; i++) {\n const cx = xScale.map(i) + (series.index - (seriesCount - 1) / 2) * stemGap\n const vy = yScale.map(series.values[i]!)\n const color = options.colors[series.index % options.colors.length]!\n\n // Stem line — rounded cap, slightly thicker\n seriesNodes.push(line(cx, baselineY, cx, vy, {\n class: 'chartts-lollipop-stem',\n stroke: color,\n strokeWidth: 2.5,\n strokeLinecap: 'round',\n strokeOpacity: 0.6,\n }))\n\n // Ambient glow behind dot\n seriesNodes.push(circle(cx, vy, dotR * 2, {\n class: 'chartts-lollipop-glow',\n fill: color,\n fillOpacity: 0.12,\n }))\n\n // Dot — bigger, with theme-aware stroke\n seriesNodes.push(circle(cx, vy, dotR, {\n class: 'chartts-lollipop-dot',\n fill: color,\n stroke: `var(--chartts-bg, #fff)`,\n strokeWidth: 2.5,\n 'data-series': series.index,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${series.values[i]}`,\n }))\n }\n\n nodes.push(group(seriesNodes, {\n class: `chartts-series chartts-series-${series.index}`,\n 'data-series-name': series.name,\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, xScale, yScale } = ctx\n const seriesCount = data.series.length\n const pointCount = data.series[0]?.values.length ?? 0\n if (pointCount === 0) return null\n\n const bw = getBandwidth(xScale)\n const groupWidth = bw * 0.8\n const stemGap = groupWidth / seriesCount\n\n let best: HitResult | null = null\n let bestDist = 20 // tolerance\n\n for (const series of data.series) {\n for (let i = 0; i < series.values.length; i++) {\n const cx = xScale.map(i) + (series.index - (seriesCount - 1) / 2) * stemGap\n const vy = yScale.map(series.values[i]!)\n const dx = mx - cx\n const dy = my - vy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n if (dist < bestDist) {\n bestDist = dist\n best = { seriesIndex: series.index, pointIndex: i, distance: dist, x: cx, y: vy }\n }\n }\n }\n\n return best\n },\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkV5Q6UNUK_cjs = require('./chunk-V5Q6UNUK.cjs');
|
|
4
|
+
var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
|
|
5
5
|
|
|
6
6
|
// src/charts/graph/parse.ts
|
|
7
7
|
function parseGraphData(data, options) {
|
|
@@ -192,19 +192,19 @@ function renderNodeShape(node, color, theme) {
|
|
|
192
192
|
switch (node.shape) {
|
|
193
193
|
case "circle": {
|
|
194
194
|
const r = Math.max(w, h) / 2;
|
|
195
|
-
shapeNode =
|
|
195
|
+
shapeNode = chunkJVVGQLJQ_cjs.circle(cx, cy, r, { ...baseAttrs });
|
|
196
196
|
break;
|
|
197
197
|
}
|
|
198
198
|
case "diamond": {
|
|
199
|
-
const pb = new
|
|
199
|
+
const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
200
200
|
pb.moveTo(cx, cy - h / 2).lineTo(cx + w / 2, cy).lineTo(cx, cy + h / 2).lineTo(cx - w / 2, cy).close();
|
|
201
|
-
shapeNode =
|
|
201
|
+
shapeNode = chunkJVVGQLJQ_cjs.path(pb.build(), { ...baseAttrs });
|
|
202
202
|
break;
|
|
203
203
|
}
|
|
204
204
|
case "hexagon": {
|
|
205
205
|
const rx = w / 2;
|
|
206
206
|
const ry = h / 2;
|
|
207
|
-
const pb = new
|
|
207
|
+
const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
208
208
|
for (let i = 0; i < 6; i++) {
|
|
209
209
|
const angle = Math.PI / 180 * (i * 60);
|
|
210
210
|
const px = cx + rx * Math.cos(angle);
|
|
@@ -213,11 +213,11 @@ function renderNodeShape(node, color, theme) {
|
|
|
213
213
|
else pb.lineTo(px, py);
|
|
214
214
|
}
|
|
215
215
|
pb.close();
|
|
216
|
-
shapeNode =
|
|
216
|
+
shapeNode = chunkJVVGQLJQ_cjs.path(pb.build(), { ...baseAttrs });
|
|
217
217
|
break;
|
|
218
218
|
}
|
|
219
219
|
case "stadium": {
|
|
220
|
-
shapeNode =
|
|
220
|
+
shapeNode = chunkJVVGQLJQ_cjs.rect(cx - w / 2, cy - h / 2, w, h, {
|
|
221
221
|
...baseAttrs,
|
|
222
222
|
rx: h / 2
|
|
223
223
|
});
|
|
@@ -225,14 +225,14 @@ function renderNodeShape(node, color, theme) {
|
|
|
225
225
|
}
|
|
226
226
|
// 'rect' is the default
|
|
227
227
|
default: {
|
|
228
|
-
shapeNode =
|
|
228
|
+
shapeNode = chunkJVVGQLJQ_cjs.rect(cx - w / 2, cy - h / 2, w, h, {
|
|
229
229
|
...baseAttrs,
|
|
230
230
|
rx: 8
|
|
231
231
|
});
|
|
232
232
|
break;
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
-
const labelNode =
|
|
235
|
+
const labelNode = chunkJVVGQLJQ_cjs.text(cx, cy, node.label, {
|
|
236
236
|
class: "chartts-graph-label",
|
|
237
237
|
fill: "#fff",
|
|
238
238
|
textAnchor: "middle",
|
|
@@ -343,9 +343,9 @@ function renderArrowhead(tipX, tipY, angle, size, color) {
|
|
|
343
343
|
const leftY = baseY + perpY;
|
|
344
344
|
const rightX = baseX - perpX;
|
|
345
345
|
const rightY = baseY - perpY;
|
|
346
|
-
const pb = new
|
|
346
|
+
const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
347
347
|
pb.moveTo(tipX, tipY).lineTo(leftX, leftY).lineTo(rightX, rightY).close();
|
|
348
|
-
return
|
|
348
|
+
return chunkJVVGQLJQ_cjs.path(pb.build(), {
|
|
349
349
|
fill: color,
|
|
350
350
|
class: "chartts-graph-arrow"
|
|
351
351
|
});
|
|
@@ -373,7 +373,7 @@ function renderEdges(nodes, edges, options, theme) {
|
|
|
373
373
|
let labelX = (start.x + end.x) / 2;
|
|
374
374
|
let labelY = (start.y + end.y) / 2;
|
|
375
375
|
if (options.edgeStyle === "straight" || options.edgeStyle === void 0) {
|
|
376
|
-
result.push(
|
|
376
|
+
result.push(chunkJVVGQLJQ_cjs.line(start.x, start.y, end.x, end.y, edgeAttrs));
|
|
377
377
|
} else {
|
|
378
378
|
const pairKey = Math.min(edge.source, edge.target) + ":" + Math.max(edge.source, edge.target);
|
|
379
379
|
const idx = pairIndex.get(pairKey) ?? 0;
|
|
@@ -385,9 +385,9 @@ function renderEdges(nodes, edges, options, theme) {
|
|
|
385
385
|
const perpAngle = angle + Math.PI / 2;
|
|
386
386
|
const cx = mx + Math.cos(perpAngle) * offset * sign;
|
|
387
387
|
const cy = my + Math.sin(perpAngle) * offset * sign;
|
|
388
|
-
const pb = new
|
|
388
|
+
const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
389
389
|
pb.moveTo(start.x, start.y).quadTo(cx, cy, end.x, end.y);
|
|
390
|
-
result.push(
|
|
390
|
+
result.push(chunkJVVGQLJQ_cjs.path(pb.build(), edgeAttrs));
|
|
391
391
|
arrowAngle = Math.atan2(end.y - cy, end.x - cx);
|
|
392
392
|
labelX = 0.25 * start.x + 0.5 * cx + 0.25 * end.x;
|
|
393
393
|
labelY = 0.25 * start.y + 0.5 * cy + 0.25 * end.y;
|
|
@@ -404,13 +404,13 @@ function renderEdges(nodes, edges, options, theme) {
|
|
|
404
404
|
const ph = theme.fontSizeSmall - 1 + 6;
|
|
405
405
|
const bgFill = theme.background === "transparent" ? "#fff" : theme.background;
|
|
406
406
|
result.push(
|
|
407
|
-
|
|
407
|
+
chunkJVVGQLJQ_cjs.rect(lx - pw / 2, ly - ph / 2, pw, ph, {
|
|
408
408
|
fill: bgFill,
|
|
409
409
|
rx: 3
|
|
410
410
|
})
|
|
411
411
|
);
|
|
412
412
|
result.push(
|
|
413
|
-
|
|
413
|
+
chunkJVVGQLJQ_cjs.text(lx, ly, edge.label, {
|
|
414
414
|
fill: theme.textMuted,
|
|
415
415
|
textAnchor: "middle",
|
|
416
416
|
dominantBaseline: "central",
|
|
@@ -780,7 +780,15 @@ var graphChartType = {
|
|
|
780
780
|
return { x: "categorical", y: "linear" };
|
|
781
781
|
},
|
|
782
782
|
prepareData(data, options) {
|
|
783
|
-
|
|
783
|
+
const opts = options;
|
|
784
|
+
if ((opts.nodes || opts.edges) && (!data.series.length || data.series.every((s) => s.values.length === 0))) {
|
|
785
|
+
return {
|
|
786
|
+
series: [],
|
|
787
|
+
labels: [],
|
|
788
|
+
bounds: { xMin: 0, xMax: 1, yMin: 0, yMax: 1 }
|
|
789
|
+
};
|
|
790
|
+
}
|
|
791
|
+
return chunkV5Q6UNUK_cjs.prepareNoAxes(data, options);
|
|
784
792
|
},
|
|
785
793
|
render(ctx) {
|
|
786
794
|
const { data, area, theme, options } = ctx;
|
|
@@ -796,12 +804,12 @@ var graphChartType = {
|
|
|
796
804
|
runLayout(graphNodes, graphEdges, graphOpts, area);
|
|
797
805
|
const edgeNodes = renderEdges(graphNodes, graphEdges, graphOpts, theme);
|
|
798
806
|
if (edgeNodes.length > 0) {
|
|
799
|
-
result.push(
|
|
807
|
+
result.push(chunkJVVGQLJQ_cjs.group(edgeNodes, { class: "chartts-graph-edges" }));
|
|
800
808
|
}
|
|
801
809
|
for (const node of graphNodes) {
|
|
802
810
|
const color = node.color ?? options.colors[node.index % options.colors.length];
|
|
803
811
|
const shapeNodes = renderNodeShape(node, color, theme);
|
|
804
|
-
result.push(
|
|
812
|
+
result.push(chunkJVVGQLJQ_cjs.group(shapeNodes, {
|
|
805
813
|
class: `chartts-series chartts-series-${node.index}`,
|
|
806
814
|
"data-series-name": node.label
|
|
807
815
|
}));
|
|
@@ -887,5 +895,5 @@ function shapeDistance(node, mx, my) {
|
|
|
887
895
|
}
|
|
888
896
|
|
|
889
897
|
exports.graphChartType = graphChartType;
|
|
890
|
-
//# sourceMappingURL=chunk-
|
|
891
|
-
//# sourceMappingURL=chunk-
|
|
898
|
+
//# sourceMappingURL=chunk-QYI7ZV3B.cjs.map
|
|
899
|
+
//# sourceMappingURL=chunk-QYI7ZV3B.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/graph/parse.ts","../src/charts/graph/text-measure.ts","../src/charts/graph/shapes.ts","../src/charts/graph/edges.ts","../src/charts/graph/layout-force.ts","../src/charts/graph/layout-hierarchy.ts","../src/charts/graph/layout-circular.ts","../src/charts/graph/graph-type.ts"],"names":["circle","PathBuilder","path","rect","text","line","group","prepareNoAxes"],"mappings":"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","file":"chunk-QYI7ZV3B.cjs","sourcesContent":["import type { PreparedData, ResolvedOptions } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions, NodeShape } from './types'\n\n/**\n * Parse graph data from three possible input formats into internal\n * GraphNode[] and GraphEdge[] arrays.\n *\n * Auto-detection order:\n * 1. Rich format — options contain `.nodes` or `.edges`\n * 2. Arrow notation — any series name contains `→` or `->`\n * 3. Adjacency matrix — fallback\n */\nexport function parseGraphData(\n data: PreparedData,\n options: ResolvedOptions,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const opts = options as unknown as GraphOptions\n const defaultShape: NodeShape = opts.nodeShape ?? 'rect'\n\n // --- 1. Rich format ---\n if (opts.nodes || opts.edges) {\n return parseRichFormat(data, opts, defaultShape)\n }\n\n // --- 2. Arrow notation ---\n const hasArrow = data.series.some(\n (s) => s.name.includes('→') || s.name.includes('->'),\n )\n if (hasArrow) {\n return parseArrowNotation(data, defaultShape)\n }\n\n // --- 3. Adjacency matrix ---\n return parseAdjacencyMatrix(data, defaultShape)\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction makeNode(\n id: string,\n label: string,\n index: number,\n value: number,\n shape: NodeShape,\n color: string | null,\n pin: { x: number; y: number } | null,\n): GraphNode {\n return {\n id,\n label,\n index,\n value,\n shape,\n color,\n pin,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0,\n width: 0,\n height: 0,\n }\n}\n\nfunction makeEdge(\n source: number,\n target: number,\n weight: number,\n label: string | null,\n style: 'solid' | 'dashed' | 'dotted',\n color: string | null,\n): GraphEdge {\n return { source, target, weight, label, style, color }\n}\n\n// ---------------------------------------------------------------------------\n// Rich format\n// ---------------------------------------------------------------------------\n\nfunction parseRichFormat(\n _data: PreparedData,\n opts: GraphOptions,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const idToIndex = new Map<string, number>()\n\n // Create nodes from opts.nodes\n if (opts.nodes) {\n for (const nodeDef of opts.nodes) {\n const idx = graphNodes.length\n idToIndex.set(nodeDef.id, idx)\n graphNodes.push(\n makeNode(\n nodeDef.id,\n nodeDef.label ?? nodeDef.id,\n idx,\n 1,\n nodeDef.shape ?? defaultShape,\n nodeDef.color ?? null,\n nodeDef.pin ?? null,\n ),\n )\n }\n }\n\n const graphEdges: GraphEdge[] = []\n\n if (opts.edges) {\n for (const edgeDef of opts.edges) {\n // Auto-create source node if not declared\n if (!idToIndex.has(edgeDef.source)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.source, idx)\n graphNodes.push(\n makeNode(edgeDef.source, edgeDef.source, idx, 1, defaultShape, null, null),\n )\n }\n\n // Auto-create target node if not declared\n if (!idToIndex.has(edgeDef.target)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.target, idx)\n graphNodes.push(\n makeNode(edgeDef.target, edgeDef.target, idx, 1, defaultShape, null, null),\n )\n }\n\n const srcIdx = idToIndex.get(edgeDef.source)!\n const tgtIdx = idToIndex.get(edgeDef.target)!\n\n graphEdges.push(\n makeEdge(\n srcIdx,\n tgtIdx,\n edgeDef.weight ?? 1,\n edgeDef.label ?? null,\n edgeDef.style ?? 'solid',\n edgeDef.color ?? null,\n ),\n )\n }\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Arrow notation\n// ---------------------------------------------------------------------------\n\nconst ARROW_RE = /\\s*(?:→|->)\\s*/\n\nfunction parseArrowNotation(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const nameToIndex = new Map<string, number>()\n const graphEdges: GraphEdge[] = []\n\n function getOrCreateNode(name: string): number {\n let idx = nameToIndex.get(name)\n if (idx !== undefined) return idx\n idx = graphNodes.length\n nameToIndex.set(name, idx)\n graphNodes.push(makeNode(name, name, idx, 0, defaultShape, null, null))\n return idx\n }\n\n for (const series of data.series) {\n const parts = series.name.split(ARROW_RE)\n if (parts.length < 2) continue\n\n const srcName = parts[0]!\n const tgtName = parts[1]!\n const weight = series.values[0] ?? 1\n\n const srcIdx = getOrCreateNode(srcName)\n const tgtIdx = getOrCreateNode(tgtName)\n\n // Accumulate value from edge weights\n graphNodes[srcIdx]!.value += weight\n graphNodes[tgtIdx]!.value += weight\n\n graphEdges.push(makeEdge(srcIdx, tgtIdx, weight, null, 'solid', null))\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Adjacency matrix\n// ---------------------------------------------------------------------------\n\nfunction parseAdjacencyMatrix(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n\n // Create nodes from labels\n for (let i = 0; i < data.labels.length; i++) {\n const name = String(data.labels[i])\n const value = Math.abs(data.series[0]?.values[i] ?? 1)\n graphNodes.push(makeNode(name, name, i, value, defaultShape, null, null))\n }\n\n const graphEdges: GraphEdge[] = []\n\n // If series count > 1 and matches label count, treat as adjacency matrix\n if (data.series.length > 1 && data.series.length === data.labels.length) {\n for (let i = 0; i < data.series.length; i++) {\n const row = data.series[i]!\n for (let j = 0; j < row.values.length; j++) {\n const weight = row.values[j] ?? 0\n if (weight > 0) {\n graphEdges.push(makeEdge(i, j, weight, null, 'solid', null))\n }\n }\n }\n }\n\n return { graphNodes, graphEdges }\n}\n","import type { NodeShape } from './types'\n\nconst CHAR_WIDTH_RATIO = 0.6\nconst PADDING_H = 16\nconst PADDING_V = 10\n\n/**\n * Heuristic text measurement (no DOM access).\n * Returns the bounding box needed for the node shape to contain the label.\n */\nexport function measureNodeSize(\n label: string,\n fontSize: number,\n shape: NodeShape,\n): { width: number; height: number } {\n const charWidth = fontSize * CHAR_WIDTH_RATIO\n const textWidth = label.length * charWidth\n const textHeight = fontSize * 1.2\n\n let w = textWidth + PADDING_H * 2\n let h = textHeight + PADDING_V * 2\n\n // Enforce minimums\n w = Math.max(w, 40)\n h = Math.max(h, 28)\n\n switch (shape) {\n case 'circle': {\n // Circle must contain the text bbox\n const d = Math.sqrt(w * w + h * h)\n return { width: d, height: d }\n }\n case 'diamond': {\n // Diamond needs ~1.4x bbox dimensions\n return { width: w * 1.45, height: h * 1.45 }\n }\n case 'hexagon': {\n // Hexagon needs slightly wider to contain text\n return { width: w * 1.25, height: h * 1.15 }\n }\n case 'stadium':\n case 'rect':\n default:\n return { width: w, height: h }\n }\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode } from './types'\nimport { path, rect, circle, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n// ---------------------------------------------------------------------------\n// renderNodeShape — returns [shape, label] RenderNodes for a graph node\n// ---------------------------------------------------------------------------\n\nexport function renderNodeShape(\n node: GraphNode,\n color: string,\n theme: ThemeConfig,\n): RenderNode[] {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n\n const baseAttrs = {\n class: 'chartts-graph-node',\n fill: color,\n fillOpacity: 0.85,\n stroke: color,\n strokeWidth: 1.5,\n 'data-series': node.index,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${node.label}: ${node.value}`,\n } as const\n\n let shapeNode: RenderNode\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n shapeNode = circle(cx, cy, r, { ...baseAttrs })\n break\n }\n\n case 'diamond': {\n const pb = new PathBuilder()\n pb.moveTo(cx, cy - h / 2)\n .lineTo(cx + w / 2, cy)\n .lineTo(cx, cy + h / 2)\n .lineTo(cx - w / 2, cy)\n .close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'hexagon': {\n const rx = w / 2\n const ry = h / 2\n const pb = new PathBuilder()\n // flat-top hexagon: vertices at 0°, 60°, 120°, 180°, 240°, 300°\n for (let i = 0; i < 6; i++) {\n const angle = (Math.PI / 180) * (i * 60)\n const px = cx + rx * Math.cos(angle)\n const py = cy + ry * Math.sin(angle)\n if (i === 0) pb.moveTo(px, py)\n else pb.lineTo(px, py)\n }\n pb.close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'stadium': {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: h / 2,\n })\n break\n }\n\n // 'rect' is the default\n default: {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: 8,\n })\n break\n }\n }\n\n const labelNode = text(cx, cy, node.label, {\n class: 'chartts-graph-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n })\n\n return [shapeNode, labelNode]\n}\n\n// ---------------------------------------------------------------------------\n// clipToNodeBoundary — find the point on a shape boundary at given angle\n// ---------------------------------------------------------------------------\n\n/** Small outward padding so edges don't touch the shape directly. */\nconst PAD = 3\n\nexport function clipToNodeBoundary(\n node: GraphNode,\n angle: number,\n): { x: number; y: number } {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n const cos = Math.cos(angle)\n const sin = Math.sin(angle)\n\n let bx: number\n let by: number\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n bx = cx + r * cos\n by = cy + r * sin\n break\n }\n\n case 'diamond': {\n // Diamond has 4 edges. The half-extents along x/y are w/2 and h/2.\n // For a diamond with vertices at (0,-h/2), (w/2,0), (0,h/2), (-w/2,0)\n // the boundary along direction (cos,sin) can be found via the Minkowski\n // support function. For a rhombus the implicit equation is\n // |x|/(w/2) + |y|/(h/2) = 1\n // so the ray t*(cos,sin) hits the boundary at\n // t = 1 / (|cos|/(w/2) + |sin|/(h/2))\n const hw = w / 2\n const hh = h / 2\n const t = 1 / (Math.abs(cos) / hw + Math.abs(sin) / hh)\n bx = cx + t * cos\n by = cy + t * sin\n break\n }\n\n case 'hexagon': {\n // Flat-top hexagon with rx = w/2, ry = h/2.\n // Vertices at angles 0°,60°,120°,180°,240°,300°.\n // Find which edge segment the ray intersects and compute intersection.\n const rx = w / 2\n const ry = h / 2\n const pt = hexBoundary(cx, cy, rx, ry, angle, cos, sin)\n bx = pt.x\n by = pt.y\n break\n }\n\n // rect and stadium share the same rectangular bounding box logic\n default: {\n const hw = w / 2\n const hh = h / 2\n const cornerAngle = Math.atan2(hh, hw)\n // Normalize angle into [0, 2π)\n let a = ((angle % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)\n\n if (a < cornerAngle || a >= 2 * Math.PI - cornerAngle) {\n // hits right edge\n const t = hw / Math.abs(cos)\n bx = cx + hw\n by = cy + t * sin\n } else if (a < Math.PI - cornerAngle) {\n // hits bottom edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy + hh\n } else if (a < Math.PI + cornerAngle) {\n // hits left edge\n const t = hw / Math.abs(cos)\n bx = cx - hw\n by = cy + t * sin\n } else {\n // hits top edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy - hh\n }\n break\n }\n }\n\n // Apply outward padding\n bx += PAD * cos\n by += PAD * sin\n\n return { x: bx, y: by }\n}\n\n// ---------------------------------------------------------------------------\n// Hexagon boundary helper\n// ---------------------------------------------------------------------------\n\nfunction hexBoundary(\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n _angle: number,\n cos: number,\n sin: number,\n): { x: number; y: number } {\n // Compute the 6 vertices of the flat-top hexagon\n const verts: Array<{ x: number; y: number }> = []\n for (let i = 0; i < 6; i++) {\n const a = (Math.PI / 180) * (i * 60)\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) })\n }\n\n // Ray from center: P(t) = (cx + t*cos, cy + t*sin), t > 0\n // Test intersection with each of the 6 edges\n let bestT = Infinity\n let bestPt = { x: cx + rx * cos, y: cy + ry * sin } // fallback\n\n for (let i = 0; i < 6; i++) {\n const v0 = verts[i]!\n const v1 = verts[(i + 1) % 6]!\n\n // Edge: Q(s) = v0 + s*(v1 - v0), s in [0,1]\n // Solve: (cx + t*cos, cy + t*sin) = (v0.x + s*dx, v0.y + s*dy)\n const dx = v1.x - v0.x\n const dy = v1.y - v0.y\n\n const denom = cos * dy - sin * dx\n if (Math.abs(denom) < 1e-12) continue // parallel\n\n const t = ((v0.x - cx) * dy - (v0.y - cy) * dx) / denom\n const s = cos !== 0\n ? ((cx + t * cos) - v0.x) / dx\n : ((cy + t * sin) - v0.y) / dy\n\n if (t > 1e-6 && s >= -1e-6 && s <= 1 + 1e-6 && t < bestT) {\n bestT = t\n bestPt = { x: cx + t * cos, y: cy + t * sin }\n }\n }\n\n return bestPt\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions } from './types'\nimport { path, rect, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { clipToNodeBoundary } from './shapes'\n\n// ---------------------------------------------------------------------------\n// Arrowhead helper\n// ---------------------------------------------------------------------------\n\nfunction renderArrowhead(\n tipX: number,\n tipY: number,\n angle: number,\n size: number,\n color: string,\n): RenderNode {\n const cosA = Math.cos(angle)\n const sinA = Math.sin(angle)\n\n // Base center (back from the tip along the edge direction)\n const baseX = tipX - cosA * size\n const baseY = tipY - sinA * size\n\n // Perpendicular offset\n const perpX = -sinA * size * 0.4\n const perpY = cosA * size * 0.4\n\n const leftX = baseX + perpX\n const leftY = baseY + perpY\n const rightX = baseX - perpX\n const rightY = baseY - perpY\n\n const pb = new PathBuilder()\n pb.moveTo(tipX, tipY)\n .lineTo(leftX, leftY)\n .lineTo(rightX, rightY)\n .close()\n\n return path(pb.build(), {\n fill: color,\n class: 'chartts-graph-arrow',\n })\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function renderEdges(\n nodes: GraphNode[],\n edges: GraphEdge[],\n options: GraphOptions,\n theme: ThemeConfig,\n): RenderNode[] {\n const result: RenderNode[] = []\n\n // Build a map of (source,target) pair counts so we can alternate curve\n // direction for multi-edges between the same pair.\n const pairIndex = new Map<string, number>()\n\n for (const edge of edges) {\n const src = nodes[edge.source]\n const tgt = nodes[edge.target]\n if (!src || !tgt) continue\n\n // --- 1. Connection points ------------------------------------------\n const angle = Math.atan2(tgt.y - src.y, tgt.x - src.x)\n const start = clipToNodeBoundary(src, angle)\n const end = clipToNodeBoundary(tgt, angle + Math.PI)\n\n // Edge attrs shared between straight / curved\n const edgeColor = edge.color ?? theme.gridColor\n const edgeAttrs = {\n class: 'chartts-graph-edge',\n stroke: edgeColor,\n strokeWidth: Math.max(1, Math.min(3, edge.weight * 0.5)),\n strokeDasharray:\n edge.style === 'dashed'\n ? '8,4'\n : edge.style === 'dotted'\n ? '2,4'\n : undefined,\n opacity: 0.6,\n fill: 'none',\n }\n\n // --- 2. Edge path ---------------------------------------------------\n let arrowAngle = angle // angle at the target end for the arrowhead\n let labelX = (start.x + end.x) / 2\n let labelY = (start.y + end.y) / 2\n\n if (options.edgeStyle === 'straight' || options.edgeStyle === undefined) {\n // Default: straight line\n result.push(line(start.x, start.y, end.x, end.y, edgeAttrs))\n } else {\n // Curved: quadratic bezier\n const pairKey =\n Math.min(edge.source, edge.target) +\n ':' +\n Math.max(edge.source, edge.target)\n const idx = pairIndex.get(pairKey) ?? 0\n pairIndex.set(pairKey, idx + 1)\n\n // Alternate direction: even indices go one way, odd the other\n const sign = idx % 2 === 0 ? 1 : -1\n\n const offset = Math.max(edge.weight * 8, 15)\n\n const mx = (start.x + end.x) / 2\n const my = (start.y + end.y) / 2\n\n // Perpendicular direction to the edge\n const perpAngle = angle + Math.PI / 2\n const cx = mx + Math.cos(perpAngle) * offset * sign\n const cy = my + Math.sin(perpAngle) * offset * sign\n\n const pb = new PathBuilder()\n pb.moveTo(start.x, start.y).quadTo(cx, cy, end.x, end.y)\n\n result.push(path(pb.build(), edgeAttrs))\n\n // For curved edges the arrow should follow the last segment direction\n // (from control point to end point)\n arrowAngle = Math.atan2(end.y - cy, end.x - cx)\n\n // Label at the midpoint of the quadratic bezier: Q(0.5) = 0.25*P0 + 0.5*CP + 0.25*P1\n labelX = 0.25 * start.x + 0.5 * cx + 0.25 * end.x\n labelY = 0.25 * start.y + 0.5 * cy + 0.25 * end.y\n }\n\n // --- 3. Arrowhead ---------------------------------------------------\n if (options.arrows !== false) {\n const arrowSize = 8\n result.push(renderArrowhead(end.x, end.y, arrowAngle, arrowSize, edgeColor))\n }\n\n // --- 4. Edge label --------------------------------------------------\n if (edge.label != null) {\n const lx = labelX\n const ly = labelY\n\n // Estimate label dimensions for background rect\n const charWidth = (theme.fontSizeSmall - 1) * 0.6\n const pw = edge.label.length * charWidth + 8\n const ph = (theme.fontSizeSmall - 1) + 6\n\n const bgFill =\n theme.background === 'transparent' ? '#fff' : theme.background\n\n result.push(\n rect(lx - pw / 2, ly - ph / 2, pw, ph, {\n fill: bgFill,\n rx: 3,\n }),\n )\n\n result.push(\n text(lx, ly, edge.label, {\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall - 1,\n fontFamily: theme.fontFamily,\n }),\n )\n }\n }\n\n return result\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Improved force-directed layout (Fruchterman-Reingold style).\n *\n * Features over the old layout:\n * - Node-size-aware repulsion (prevents shape overlap)\n * - Pin support (pinned nodes keep position, still repel)\n * - Velocity damping (0.8x per iteration)\n * - Layout caching for warm-start during drag\n */\n\nexport interface ForceLayoutOpts {\n iterations: number\n area: { x: number; y: number; width: number; height: number }\n}\n\n/** Module-scoped layout cache for warm-start (drag reflows). */\nconst layoutCache = new Map<string, Array<{ x: number; y: number }>>()\n\n/** Build a cache key from node IDs + edge connectivity. */\nfunction cacheKey(nodes: GraphNode[], edges: GraphEdge[]): string {\n const nk = nodes.map(n => n.id).join(',')\n const ek = edges.map(e => `${e.source}-${e.target}`).join(',')\n return nk + '|' + ek\n}\n\nexport function forceLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: ForceLayoutOpts,\n): void {\n const { area, iterations } = opts\n const n = nodes.length\n if (n === 0) return\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Try warm-start from cache\n const key = cacheKey(nodes, edges)\n const cached = layoutCache.get(key)\n\n if (cached && cached.length === n) {\n for (let i = 0; i < n; i++) {\n const node = nodes[i]!\n if (!node.pin) {\n node.x = cached[i]!.x\n node.y = cached[i]!.y\n }\n }\n } else {\n // Initialize positions: pinned nodes get their pin, others in a circle\n for (let i = 0; i < n; i++) {\n const node = nodes[i]!\n if (node.pin) {\n // Pin coordinates are 0-1 normalized — map to area\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n } else {\n const angle = (2 * Math.PI * i) / n\n const r = Math.min(area.width, area.height) * 0.3\n node.x = cx + r * Math.cos(angle)\n node.y = cy + r * Math.sin(angle)\n }\n node.vx = 0\n node.vy = 0\n }\n }\n\n const k = Math.sqrt((area.width * area.height) / Math.max(n, 1))\n const repulsion = k * k\n\n for (let iter = 0; iter < iterations; iter++) {\n const temp = 0.1 * (1 - iter / iterations) * Math.min(area.width, area.height) * 0.5\n\n // Reset velocities\n for (const node of nodes) {\n node.vx = 0\n node.vy = 0\n }\n\n // Repulsion between all pairs (node-size-aware)\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const ni = nodes[i]!\n const nj = nodes[j]!\n const dx = ni.x - nj.x\n const dy = ni.y - nj.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n\n // Extra repulsion for overlapping shapes\n const minDist = (Math.max(ni.width, ni.height) + Math.max(nj.width, nj.height)) / 2\n const effectiveDist = Math.max(dist - minDist * 0.6, 1)\n\n const force = repulsion / (effectiveDist * effectiveDist)\n const fx = (dx / dist) * force\n const fy = (dy / dist) * force\n\n ni.vx += fx\n ni.vy += fy\n nj.vx -= fx\n nj.vy -= fy\n }\n }\n\n // Attraction along edges\n for (const edge of edges) {\n const src = nodes[edge.source]!\n const tgt = nodes[edge.target]!\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n const force = (dist * dist) / k\n const fx = (dx / dist) * force * 0.1\n const fy = (dy / dist) * force * 0.1\n\n src.vx += fx\n src.vy += fy\n tgt.vx -= fx\n tgt.vy -= fy\n }\n\n // Gravity toward center\n for (const node of nodes) {\n const dx = cx - node.x\n const dy = cy - node.y\n node.vx += dx * 0.01\n node.vy += dy * 0.01\n }\n\n // Apply velocities with temperature damping\n for (const node of nodes) {\n // Pinned nodes don't move\n if (node.pin) continue\n\n // Damping\n node.vx *= 0.8\n node.vy *= 0.8\n\n const speed = Math.sqrt(node.vx * node.vx + node.vy * node.vy)\n if (speed > 0) {\n const capped = Math.min(speed, temp)\n node.x += (node.vx / speed) * capped\n node.y += (node.vy / speed) * capped\n }\n\n // Constrain to area with margin for node size\n const mx = Math.max(20, node.width / 2 + 5)\n const my = Math.max(20, node.height / 2 + 5)\n node.x = Math.max(area.x + mx, Math.min(area.x + area.width - mx, node.x))\n node.y = Math.max(area.y + my, Math.min(area.y + area.height - my, node.y))\n }\n }\n\n // Store in cache for warm-start\n layoutCache.set(key, nodes.map(nd => ({ x: nd.x, y: nd.y })))\n}\n\n/** Clear the layout cache (call when data changes). */\nexport function clearForceCache(): void {\n layoutCache.clear()\n}\n","import type { GraphNode, GraphEdge, LayoutDirection } from './types'\n\n/**\n * Hierarchical layout — simplified Sugiyama algorithm.\n *\n * Steps:\n * 1. Layer assignment (longest-path from roots)\n * 2. Ordering (barycenter heuristic, 3 passes)\n * 3. Coordinate assignment (even distribution per layer)\n * 4. Direction mapping (TB / BT / LR / RL)\n *\n * Cycles are handled by detecting back-edges and temporarily reversing them\n * during layout, then restoring original direction.\n */\n\nexport interface HierarchyLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n direction: LayoutDirection\n}\n\nexport function hierarchyLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: HierarchyLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area, direction } = opts\n\n // Build adjacency lists\n const outgoing = new Array<number[]>(n)\n const incoming = new Array<number[]>(n)\n for (let i = 0; i < n; i++) {\n outgoing[i] = []\n incoming[i] = []\n }\n\n // Detect and break cycles via DFS\n const edgesCopy = edges.map(e => ({ ...e }))\n breakCycles(edgesCopy, n, outgoing, incoming)\n\n // 1. Layer assignment (longest path from roots)\n const layers = assignLayers(n, outgoing, incoming)\n\n // 2. Ordering within layers (barycenter heuristic)\n const layerGroups = groupByLayer(layers, n)\n orderLayers(layerGroups, outgoing, incoming, 3)\n\n // 3. Coordinate assignment\n const isHorizontal = direction === 'LR' || direction === 'RL'\n const maxLayer = Math.max(...layers, 0)\n\n const availW = area.width\n const availH = area.height\n\n // Layer spacing\n const layerCount = maxLayer + 1\n const layerGap = isHorizontal\n ? availW / (layerCount + 1)\n : availH / (layerCount + 1)\n\n for (let layer = 0; layer <= maxLayer; layer++) {\n const group = layerGroups[layer] ?? []\n if (group.length === 0) continue\n\n const nodeGap = isHorizontal\n ? availH / (group.length + 1)\n : availW / (group.length + 1)\n\n for (let pos = 0; pos < group.length; pos++) {\n const node = nodes[group[pos]!]!\n\n // Pinned nodes override layout\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n continue\n }\n\n let layerCoord = area.x + layerGap * (layer + 1)\n let posCoord = area.y + nodeGap * (pos + 1)\n\n if (isHorizontal) {\n // layerCoord = x, posCoord = y\n // already correct\n } else {\n // layerCoord = y, posCoord = x\n const tmp = layerCoord\n layerCoord = posCoord\n posCoord = tmp\n }\n\n // Direction flipping\n switch (direction) {\n case 'TB':\n node.x = layerCoord\n node.y = posCoord\n break\n case 'BT':\n node.x = layerCoord\n node.y = area.y + area.height - (posCoord - area.y)\n break\n case 'LR':\n node.x = layerCoord\n node.y = posCoord\n break\n case 'RL':\n node.x = area.x + area.width - (layerCoord - area.x)\n node.y = posCoord\n break\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cycle breaking via DFS\n// ---------------------------------------------------------------------------\n\nfunction breakCycles(\n edges: GraphEdge[],\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): void {\n // Build adjacency from edges\n for (const e of edges) {\n outgoing[e.source]!.push(e.target)\n incoming[e.target]!.push(e.source)\n }\n\n // DFS-based cycle detection — reverse back-edges\n const WHITE = 0, GRAY = 1, BLACK = 2\n const color = new Array<number>(n).fill(WHITE)\n\n function dfs(u: number): void {\n color[u] = GRAY\n const out = outgoing[u]!\n for (let i = 0; i < out.length; i++) {\n const v = out[i]!\n if (color[v] === GRAY) {\n // Back-edge: reverse it in the edges list\n // Find the edge u → v and reverse it\n for (const e of edges) {\n if (e.source === u && e.target === v) {\n e.source = v\n e.target = u\n break\n }\n }\n // Update adjacency\n out.splice(i, 1)\n i--\n outgoing[v]!.push(u)\n incoming[u]!.push(v)\n const idx = incoming[v]!.indexOf(u)\n if (idx >= 0) incoming[v]!.splice(idx, 1)\n } else if (color[v] === WHITE) {\n dfs(v)\n }\n }\n color[u] = BLACK\n }\n\n for (let i = 0; i < n; i++) {\n if (color[i] === WHITE) dfs(i)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Layer assignment (longest path from roots)\n// ---------------------------------------------------------------------------\n\nfunction assignLayers(\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): number[] {\n const layers = new Array<number>(n).fill(-1)\n\n // Roots = nodes with no incoming edges\n const roots: number[] = []\n for (let i = 0; i < n; i++) {\n if (incoming[i]!.length === 0) roots.push(i)\n }\n\n // If no roots (all cycles broken), pick node 0\n if (roots.length === 0 && n > 0) roots.push(0)\n\n // BFS from roots\n const queue: number[] = []\n for (const r of roots) {\n layers[r] = 0\n queue.push(r)\n }\n\n let qi = 0\n while (qi < queue.length) {\n const u = queue[qi++]!\n for (const v of outgoing[u]!) {\n const newLayer = layers[u]! + 1\n if (layers[v]! < newLayer) {\n layers[v] = newLayer\n queue.push(v)\n }\n }\n }\n\n // Any unassigned nodes get layer 0\n for (let i = 0; i < n; i++) {\n if (layers[i]! < 0) layers[i] = 0\n }\n\n return layers\n}\n\n// ---------------------------------------------------------------------------\n// Group nodes by layer\n// ---------------------------------------------------------------------------\n\nfunction groupByLayer(layers: number[], n: number): number[][] {\n const maxLayer = Math.max(...layers, 0)\n const groups: number[][] = new Array(maxLayer + 1)\n for (let i = 0; i <= maxLayer; i++) groups[i] = []\n\n for (let i = 0; i < n; i++) {\n groups[layers[i]!]!.push(i)\n }\n return groups\n}\n\n// ---------------------------------------------------------------------------\n// Barycenter ordering\n// ---------------------------------------------------------------------------\n\nfunction orderLayers(\n layerGroups: number[][],\n outgoing: number[][],\n incoming: number[][],\n passes: number,\n): void {\n for (let pass = 0; pass < passes; pass++) {\n // Forward pass: order each layer based on positions of predecessors\n for (let l = 1; l < layerGroups.length; l++) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const prevLayer = layerGroups[l - 1]!\n for (let i = 0; i < prevLayer.length; i++) posMap.set(prevLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, incoming, posMap)\n const bb = barycenter(b, incoming, posMap)\n return ba - bb\n })\n }\n\n // Backward pass: order each layer based on positions of successors\n for (let l = layerGroups.length - 2; l >= 0; l--) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const nextLayer = layerGroups[l + 1]!\n for (let i = 0; i < nextLayer.length; i++) posMap.set(nextLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, outgoing, posMap)\n const bb = barycenter(b, outgoing, posMap)\n return ba - bb\n })\n }\n }\n}\n\nfunction barycenter(\n nodeIdx: number,\n adj: number[][],\n posMap: Map<number, number>,\n): number {\n const neighbors = adj[nodeIdx]!\n if (neighbors.length === 0) return 0\n\n let sum = 0\n let count = 0\n for (const nb of neighbors) {\n const pos = posMap.get(nb)\n if (pos !== undefined) {\n sum += pos\n count++\n }\n }\n return count > 0 ? sum / count : 0\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Circular layout — nodes arranged equally around a circle.\n *\n * Features:\n * - Connectivity-based ordering to reduce edge crossings\n * - Pin support: pinned nodes keep their position, others fill gaps\n */\n\nexport interface CircularLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n}\n\nexport function circularLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: CircularLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area } = opts\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Leave room for node shapes\n const maxNodeSize = Math.max(\n ...nodes.map(nd => Math.max(nd.width, nd.height)),\n 40,\n )\n const radius = Math.min(area.width, area.height) / 2 - maxNodeSize / 2 - 10\n\n // Order nodes to reduce crossings (BFS from most-connected node)\n const order = connectivityOrder(nodes, edges)\n\n // Count unpinned nodes to distribute them evenly\n const unpinned: number[] = []\n for (const idx of order) {\n if (!nodes[idx]!.pin) unpinned.push(idx)\n }\n\n const angleStep = (2 * Math.PI) / Math.max(unpinned.length, 1)\n const startAngle = -Math.PI / 2 // 12 o'clock\n\n for (let i = 0; i < unpinned.length; i++) {\n const node = nodes[unpinned[i]!]!\n const angle = startAngle + angleStep * i\n node.x = cx + radius * Math.cos(angle)\n node.y = cy + radius * Math.sin(angle)\n }\n\n // Apply pinned positions\n for (const node of nodes) {\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Connectivity-based ordering (BFS from most-connected node)\n// ---------------------------------------------------------------------------\n\nfunction connectivityOrder(nodes: GraphNode[], edges: GraphEdge[]): number[] {\n const n = nodes.length\n if (n === 0) return []\n\n // Build adjacency list\n const adj = new Array<number[]>(n)\n for (let i = 0; i < n; i++) adj[i] = []\n\n for (const e of edges) {\n adj[e.source]!.push(e.target)\n adj[e.target]!.push(e.source)\n }\n\n // Find most-connected node as BFS start\n let startNode = 0\n let maxDeg = 0\n for (let i = 0; i < n; i++) {\n if (adj[i]!.length > maxDeg) {\n maxDeg = adj[i]!.length\n startNode = i\n }\n }\n\n // BFS\n const visited = new Set<number>()\n const order: number[] = []\n const queue: number[] = [startNode]\n visited.add(startNode)\n\n while (queue.length > 0) {\n const u = queue.shift()!\n order.push(u)\n\n // Sort neighbors by degree (descending) for better ordering\n const neighbors = adj[u]!.filter(v => !visited.has(v))\n neighbors.sort((a, b) => adj[b]!.length - adj[a]!.length)\n\n for (const v of neighbors) {\n if (!visited.has(v)) {\n visited.add(v)\n queue.push(v)\n }\n }\n }\n\n // Add any disconnected nodes\n for (let i = 0; i < n; i++) {\n if (!visited.has(i)) order.push(i)\n }\n\n return order\n}\n","import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group } from '../../render/tree'\nimport type { GraphNode, GraphEdge, GraphOptions, GraphLayout } from './types'\nimport { parseGraphData } from './parse'\nimport { measureNodeSize } from './text-measure'\nimport { renderNodeShape } from './shapes'\nimport { renderEdges } from './edges'\nimport { forceLayout } from './layout-force'\nimport { hierarchyLayout } from './layout-hierarchy'\nimport { circularLayout } from './layout-circular'\n\n/**\n * Graph / Network chart — rich node-link diagram.\n *\n * Supports:\n * - 5 node shapes (rect, circle, diamond, hexagon, stadium)\n * - 3 layouts (force, hierarchical, circular)\n * - Edge arrows, labels, and dash styles\n * - Pin support (data-driven + interactive via enableGraphDrag)\n * - 3 data formats: rich, arrow-notation, adjacency matrix\n */\nexport const graphChartType: ChartTypePlugin = {\n type: 'graph',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const opts = options as unknown as GraphOptions\n // Rich format: data lives in options.nodes/edges, not series\n if ((opts.nodes || opts.edges) && (!data.series.length || data.series.every(s => s.values.length === 0))) {\n return {\n series: [],\n labels: [],\n bounds: { xMin: 0, xMax: 1, yMin: 0, yMax: 1 },\n }\n }\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n const result: RenderNode[] = []\n\n // 1. Parse data into nodes + edges\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return result\n\n // 2. Measure text for each node to compute width/height\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n\n // 3. Layout\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n // 4. Render edges first (behind nodes)\n const edgeNodes = renderEdges(graphNodes, graphEdges, graphOpts, theme)\n if (edgeNodes.length > 0) {\n result.push(group(edgeNodes, { class: 'chartts-graph-edges' }))\n }\n\n // 5. Render node shapes\n for (const node of graphNodes) {\n const color = node.color ?? options.colors[node.index % options.colors.length]!\n const shapeNodes = renderNodeShape(node, color, theme)\n\n result.push(group(shapeNodes, {\n class: `chartts-series chartts-series-${node.index}`,\n 'data-series-name': node.label,\n }))\n }\n\n return result\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return null\n\n // Measure + layout (same as render)\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n // Shape-aware hit testing\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (const node of graphNodes) {\n const dist = shapeDistance(node, mx, my)\n if (dist < bestDist && dist < 8) {\n bestDist = dist\n best = { seriesIndex: node.index, pointIndex: 0, distance: dist, x: node.x, y: node.y }\n }\n }\n\n return best\n },\n}\n\n// ---------------------------------------------------------------------------\n// Layout dispatcher\n// ---------------------------------------------------------------------------\n\nfunction runLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: GraphOptions,\n area: { x: number; y: number; width: number; height: number },\n): void {\n const layout: GraphLayout = opts.layout ?? 'force'\n\n switch (layout) {\n case 'hierarchical':\n hierarchyLayout(nodes, edges, {\n area,\n direction: opts.direction ?? 'TB',\n })\n break\n\n case 'circular':\n circularLayout(nodes, edges, { area })\n break\n\n case 'force':\n default:\n forceLayout(nodes, edges, {\n area,\n iterations: opts.iterations ?? 120,\n })\n break\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shape-aware distance (0 = inside shape, >0 = outside)\n// ---------------------------------------------------------------------------\n\nfunction shapeDistance(node: GraphNode, mx: number, my: number): number {\n const dx = mx - node.x\n const dy = my - node.y\n const absDx = Math.abs(dx)\n const absDy = Math.abs(dy)\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(node.width, node.height) / 2\n const dist = Math.sqrt(dx * dx + dy * dy)\n return Math.max(0, dist - r)\n }\n\n case 'diamond': {\n const hw = node.width / 2\n const hh = node.height / 2\n // Diamond implicit: |x|/hw + |y|/hh <= 1\n const d = absDx / hw + absDy / hh\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (d - 1)\n }\n\n case 'hexagon': {\n const rx = node.width / 2\n const ry = node.height / 2\n // Simplified: check if inside bounding ellipse\n const d = (dx * dx) / (rx * rx) + (dy * dy) / (ry * ry)\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (Math.sqrt(d) - 1)\n }\n\n // rect, stadium\n default: {\n const hw = node.width / 2\n const hh = node.height / 2\n const ox = Math.max(0, absDx - hw)\n const oy = Math.max(0, absDy - hh)\n return Math.sqrt(ox * ox + oy * oy)\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
|
|
4
4
|
|
|
5
5
|
// src/charts/baseline/baseline-type.ts
|
|
6
6
|
var baselineChartType = {
|
|
@@ -11,7 +11,7 @@ var baselineChartType = {
|
|
|
11
11
|
prepareData(data, options) {
|
|
12
12
|
const opts = options;
|
|
13
13
|
const bv = opts.baseline ?? 0;
|
|
14
|
-
const prepared =
|
|
14
|
+
const prepared = chunkJVVGQLJQ_cjs.prepareData(data, options);
|
|
15
15
|
if (bv < prepared.bounds.yMin) prepared.bounds.yMin = bv;
|
|
16
16
|
if (bv > prepared.bounds.yMax) prepared.bounds.yMax = bv;
|
|
17
17
|
return prepared;
|
|
@@ -40,7 +40,7 @@ var baselineChartType = {
|
|
|
40
40
|
const points = validPoints.map((p) => ({ x: p.x, y: p.y }));
|
|
41
41
|
const posFill = buildClippedArea(points, baseY, "above");
|
|
42
42
|
if (posFill) {
|
|
43
|
-
seriesNodes.push(
|
|
43
|
+
seriesNodes.push(chunkJVVGQLJQ_cjs.path(posFill, {
|
|
44
44
|
class: "chartts-baseline-pos",
|
|
45
45
|
fill: posColor,
|
|
46
46
|
fillOpacity: fillOp,
|
|
@@ -49,21 +49,21 @@ var baselineChartType = {
|
|
|
49
49
|
}
|
|
50
50
|
const negFill = buildClippedArea(points, baseY, "below");
|
|
51
51
|
if (negFill) {
|
|
52
|
-
seriesNodes.push(
|
|
52
|
+
seriesNodes.push(chunkJVVGQLJQ_cjs.path(negFill, {
|
|
53
53
|
class: "chartts-baseline-neg",
|
|
54
54
|
fill: negColor,
|
|
55
55
|
fillOpacity: fillOp,
|
|
56
56
|
"data-series": series.index
|
|
57
57
|
}));
|
|
58
58
|
}
|
|
59
|
-
const linePath = new
|
|
59
|
+
const linePath = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
60
60
|
if (points.length > 0) {
|
|
61
61
|
linePath.moveTo(points[0].x, points[0].y);
|
|
62
62
|
for (let i = 1; i < points.length; i++) {
|
|
63
63
|
linePath.lineTo(points[i].x, points[i].y);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
seriesNodes.push(
|
|
66
|
+
seriesNodes.push(chunkJVVGQLJQ_cjs.path(linePath.build(), {
|
|
67
67
|
class: "chartts-baseline-line",
|
|
68
68
|
stroke: series.color,
|
|
69
69
|
strokeWidth: theme.lineWidth,
|
|
@@ -72,10 +72,10 @@ var baselineChartType = {
|
|
|
72
72
|
if (showPoints) {
|
|
73
73
|
for (const vp of validPoints) {
|
|
74
74
|
const color = vp.val >= bv ? posColor : negColor;
|
|
75
|
-
seriesNodes.push(
|
|
75
|
+
seriesNodes.push(chunkJVVGQLJQ_cjs.circle(vp.x, vp.y, theme.pointRadius, {
|
|
76
76
|
class: "chartts-point",
|
|
77
77
|
fill: color,
|
|
78
|
-
stroke: `var(${
|
|
78
|
+
stroke: `var(${chunkJVVGQLJQ_cjs.CSS_PREFIX}-bg, #fff)`,
|
|
79
79
|
strokeWidth: 2,
|
|
80
80
|
"data-series": series.index,
|
|
81
81
|
"data-index": vp.idx,
|
|
@@ -85,13 +85,13 @@ var baselineChartType = {
|
|
|
85
85
|
}));
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
nodes.push(
|
|
88
|
+
nodes.push(chunkJVVGQLJQ_cjs.group(seriesNodes, {
|
|
89
89
|
class: `chartts-series chartts-series-${series.index}`,
|
|
90
90
|
"data-series-name": series.name
|
|
91
91
|
}));
|
|
92
92
|
}
|
|
93
93
|
if (showBaseline) {
|
|
94
|
-
nodes.push(
|
|
94
|
+
nodes.push(chunkJVVGQLJQ_cjs.line(area.x, baseY, area.x + area.width, baseY, {
|
|
95
95
|
class: "chartts-baseline-ref",
|
|
96
96
|
stroke: theme.textMuted,
|
|
97
97
|
strokeWidth: 1,
|
|
@@ -147,7 +147,7 @@ function buildClippedArea(points, baseY, side) {
|
|
|
147
147
|
}
|
|
148
148
|
if (current.length >= 2) segments.push(current);
|
|
149
149
|
if (segments.length === 0) return null;
|
|
150
|
-
const pb = new
|
|
150
|
+
const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
|
|
151
151
|
for (const seg of segments) {
|
|
152
152
|
pb.moveTo(seg[0].x, seg[0].y);
|
|
153
153
|
for (let i = 1; i < seg.length; i++) {
|
|
@@ -161,5 +161,5 @@ function buildClippedArea(points, baseY, side) {
|
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
exports.baselineChartType = baselineChartType;
|
|
164
|
-
//# sourceMappingURL=chunk-
|
|
165
|
-
//# sourceMappingURL=chunk-
|
|
164
|
+
//# sourceMappingURL=chunk-R2W3RJFW.cjs.map
|
|
165
|
+
//# sourceMappingURL=chunk-R2W3RJFW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/baseline/baseline-type.ts"],"names":["prepareData","path","PathBuilder","circle","CSS_PREFIX","group","line"],"mappings":"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","file":"chunk-3V64BDKG.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { CSS_PREFIX } from '../../constants'\nimport { prepareData } from '../../data/prepare'\nimport { group, path, circle, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\nexport interface BaselineOptions {\n /** Reference value for positive/negative split. Default 0. */\n baseline?: number\n /** Color for values above baseline. Default green. */\n positiveColor?: string\n /** Color for values below baseline. Default red. */\n negativeColor?: string\n /** Fill opacity for shaded areas. Default 0.15. */\n fillOpacity?: number\n /** Show the baseline reference line. Default true. */\n showBaseline?: boolean\n /** Show data points. Default true. */\n showPoints?: boolean\n}\n\n/**\n * Baseline chart — line with positive/negative shading.\n *\n * Values above the baseline are shaded green, below shaded red.\n * Used for: performance vs benchmark, P&L, temperature anomalies.\n */\nexport const baselineChartType: ChartTypePlugin = {\n type: 'baseline',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const opts = options as unknown as BaselineOptions\n const bv = opts.baseline ?? 0\n const prepared = prepareData(data, options)\n // Ensure baseline value is visible in the scale\n if (bv < prepared.bounds.yMin) prepared.bounds.yMin = bv\n if (bv > prepared.bounds.yMax) prepared.bounds.yMax = bv\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, xScale, yScale, area, options, theme } = ctx\n const nodes: RenderNode[] = []\n\n const opts = options as unknown as BaselineOptions\n const bv = opts.baseline ?? 0\n const posColor = opts.positiveColor ?? 'var(--color-emerald-500, #10b981)'\n const negColor = opts.negativeColor ?? 'var(--color-red-500, #ef4444)'\n const fillOp = opts.fillOpacity ?? 0.15\n const showBaseline = opts.showBaseline ?? true\n const showPoints = opts.showPoints ?? true\n\n const baseY = yScale.map(bv)\n\n for (const series of data.series) {\n const seriesNodes: RenderNode[] = []\n const values = series.values\n if (values.length === 0) continue\n\n // Filter out NaN for path building — only use valid data points\n const validPoints: { x: number; y: number; idx: number; val: number }[] = []\n for (let i = 0; i < values.length; i++) {\n if (!isNaN(values[i]!)) {\n validPoints.push({ x: xScale.map(i), y: yScale.map(values[i]!), idx: i, val: values[i]! })\n }\n }\n const points = validPoints.map(p => ({ x: p.x, y: p.y }))\n\n // Positive fill (above baseline, clipped at baseline)\n const posFill = buildClippedArea(points, baseY, 'above')\n if (posFill) {\n seriesNodes.push(path(posFill, {\n class: 'chartts-baseline-pos',\n fill: posColor,\n fillOpacity: fillOp,\n 'data-series': series.index,\n }))\n }\n\n // Negative fill (below baseline, clipped at baseline)\n const negFill = buildClippedArea(points, baseY, 'below')\n if (negFill) {\n seriesNodes.push(path(negFill, {\n class: 'chartts-baseline-neg',\n fill: negColor,\n fillOpacity: fillOp,\n 'data-series': series.index,\n }))\n }\n\n // Main line (using valid points only)\n const linePath = new PathBuilder()\n if (points.length > 0) {\n linePath.moveTo(points[0]!.x, points[0]!.y)\n for (let i = 1; i < points.length; i++) {\n linePath.lineTo(points[i]!.x, points[i]!.y)\n }\n }\n seriesNodes.push(path(linePath.build(), {\n class: 'chartts-baseline-line',\n stroke: series.color,\n strokeWidth: theme.lineWidth,\n 'data-series': series.index,\n }))\n\n // Data points (only for valid points)\n if (showPoints) {\n for (const vp of validPoints) {\n const color = vp.val >= bv ? posColor : negColor\n seriesNodes.push(circle(vp.x, vp.y, theme.pointRadius, {\n class: 'chartts-point',\n fill: color,\n stroke: `var(${CSS_PREFIX}-bg, #fff)`,\n strokeWidth: 2,\n 'data-series': series.index,\n 'data-index': vp.idx,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${vp.val} (${vp.val >= bv ? '+' : ''}${(vp.val - bv).toFixed(1)})`,\n }))\n }\n }\n\n nodes.push(group(seriesNodes, {\n class: `chartts-series chartts-series-${series.index}`,\n 'data-series-name': series.name,\n }))\n }\n\n // Baseline reference line\n if (showBaseline) {\n nodes.push(line(area.x, baseY, area.x + area.width, baseY, {\n class: 'chartts-baseline-ref',\n stroke: theme.textMuted,\n strokeWidth: 1,\n strokeDasharray: '6,4',\n opacity: 0.5,\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, xScale, yScale } = ctx\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (const series of data.series) {\n for (let i = 0; i < series.values.length; i++) {\n if (isNaN(series.values[i]!)) continue\n const x = xScale.map(i)\n const y = yScale.map(series.values[i]!)\n const dist = Math.sqrt((mx - x) ** 2 + (my - y) ** 2)\n if (dist < bestDist) {\n bestDist = dist\n best = { seriesIndex: series.index, pointIndex: i, distance: dist, x, y }\n }\n }\n }\n\n return best && best.distance < 30 ? best : null\n },\n}\n\n/**\n * Build a filled area path clipped to one side of the baseline.\n * Interpolates intersection points where the line crosses the baseline.\n */\nfunction buildClippedArea(\n points: { x: number; y: number }[],\n baseY: number,\n side: 'above' | 'below',\n): string | null {\n if (points.length < 2) return null\n\n // Collect segments that are on the desired side\n const segments: { x: number; y: number }[][] = []\n let current: { x: number; y: number }[] = []\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i]!\n const onSide = side === 'above' ? p.y <= baseY : p.y >= baseY\n\n if (i > 0) {\n const prev = points[i - 1]!\n const prevOnSide = side === 'above' ? prev.y <= baseY : prev.y >= baseY\n\n // Crossing detected — compute intersection\n if (onSide !== prevOnSide) {\n const t = (baseY - prev.y) / (p.y - prev.y)\n const ix = prev.x + t * (p.x - prev.x)\n const cross = { x: ix, y: baseY }\n\n if (prevOnSide) {\n // Was on side, now leaving — close current segment\n current.push(cross)\n if (current.length >= 2) segments.push(current)\n current = []\n } else {\n // Was off side, now entering — start new segment\n current = [cross]\n }\n }\n }\n\n if (onSide) current.push(p)\n }\n if (current.length >= 2) segments.push(current)\n if (segments.length === 0) return null\n\n // Build SVG path for all segments\n const pb = new PathBuilder()\n for (const seg of segments) {\n pb.moveTo(seg[0]!.x, seg[0]!.y)\n for (let i = 1; i < seg.length; i++) {\n pb.lineTo(seg[i]!.x, seg[i]!.y)\n }\n // Close down/up to baseline\n pb.lineTo(seg[seg.length - 1]!.x, baseY)\n pb.lineTo(seg[0]!.x, baseY)\n pb.close()\n }\n\n return pb.build()\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/baseline/baseline-type.ts"],"names":["prepareData","path","PathBuilder","circle","CSS_PREFIX","group","line"],"mappings":"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","file":"chunk-R2W3RJFW.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { CSS_PREFIX } from '../../constants'\nimport { prepareData } from '../../data/prepare'\nimport { group, path, circle, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\nexport interface BaselineOptions {\n /** Reference value for positive/negative split. Default 0. */\n baseline?: number\n /** Color for values above baseline. Default green. */\n positiveColor?: string\n /** Color for values below baseline. Default red. */\n negativeColor?: string\n /** Fill opacity for shaded areas. Default 0.15. */\n fillOpacity?: number\n /** Show the baseline reference line. Default true. */\n showBaseline?: boolean\n /** Show data points. Default true. */\n showPoints?: boolean\n}\n\n/**\n * Baseline chart — line with positive/negative shading.\n *\n * Values above the baseline are shaded green, below shaded red.\n * Used for: performance vs benchmark, P&L, temperature anomalies.\n */\nexport const baselineChartType: ChartTypePlugin = {\n type: 'baseline',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const opts = options as unknown as BaselineOptions\n const bv = opts.baseline ?? 0\n const prepared = prepareData(data, options)\n // Ensure baseline value is visible in the scale\n if (bv < prepared.bounds.yMin) prepared.bounds.yMin = bv\n if (bv > prepared.bounds.yMax) prepared.bounds.yMax = bv\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, xScale, yScale, area, options, theme } = ctx\n const nodes: RenderNode[] = []\n\n const opts = options as unknown as BaselineOptions\n const bv = opts.baseline ?? 0\n const posColor = opts.positiveColor ?? 'var(--color-emerald-500, #10b981)'\n const negColor = opts.negativeColor ?? 'var(--color-red-500, #ef4444)'\n const fillOp = opts.fillOpacity ?? 0.15\n const showBaseline = opts.showBaseline ?? true\n const showPoints = opts.showPoints ?? true\n\n const baseY = yScale.map(bv)\n\n for (const series of data.series) {\n const seriesNodes: RenderNode[] = []\n const values = series.values\n if (values.length === 0) continue\n\n // Filter out NaN for path building — only use valid data points\n const validPoints: { x: number; y: number; idx: number; val: number }[] = []\n for (let i = 0; i < values.length; i++) {\n if (!isNaN(values[i]!)) {\n validPoints.push({ x: xScale.map(i), y: yScale.map(values[i]!), idx: i, val: values[i]! })\n }\n }\n const points = validPoints.map(p => ({ x: p.x, y: p.y }))\n\n // Positive fill (above baseline, clipped at baseline)\n const posFill = buildClippedArea(points, baseY, 'above')\n if (posFill) {\n seriesNodes.push(path(posFill, {\n class: 'chartts-baseline-pos',\n fill: posColor,\n fillOpacity: fillOp,\n 'data-series': series.index,\n }))\n }\n\n // Negative fill (below baseline, clipped at baseline)\n const negFill = buildClippedArea(points, baseY, 'below')\n if (negFill) {\n seriesNodes.push(path(negFill, {\n class: 'chartts-baseline-neg',\n fill: negColor,\n fillOpacity: fillOp,\n 'data-series': series.index,\n }))\n }\n\n // Main line (using valid points only)\n const linePath = new PathBuilder()\n if (points.length > 0) {\n linePath.moveTo(points[0]!.x, points[0]!.y)\n for (let i = 1; i < points.length; i++) {\n linePath.lineTo(points[i]!.x, points[i]!.y)\n }\n }\n seriesNodes.push(path(linePath.build(), {\n class: 'chartts-baseline-line',\n stroke: series.color,\n strokeWidth: theme.lineWidth,\n 'data-series': series.index,\n }))\n\n // Data points (only for valid points)\n if (showPoints) {\n for (const vp of validPoints) {\n const color = vp.val >= bv ? posColor : negColor\n seriesNodes.push(circle(vp.x, vp.y, theme.pointRadius, {\n class: 'chartts-point',\n fill: color,\n stroke: `var(${CSS_PREFIX}-bg, #fff)`,\n strokeWidth: 2,\n 'data-series': series.index,\n 'data-index': vp.idx,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${vp.val} (${vp.val >= bv ? '+' : ''}${(vp.val - bv).toFixed(1)})`,\n }))\n }\n }\n\n nodes.push(group(seriesNodes, {\n class: `chartts-series chartts-series-${series.index}`,\n 'data-series-name': series.name,\n }))\n }\n\n // Baseline reference line\n if (showBaseline) {\n nodes.push(line(area.x, baseY, area.x + area.width, baseY, {\n class: 'chartts-baseline-ref',\n stroke: theme.textMuted,\n strokeWidth: 1,\n strokeDasharray: '6,4',\n opacity: 0.5,\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, xScale, yScale } = ctx\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (const series of data.series) {\n for (let i = 0; i < series.values.length; i++) {\n if (isNaN(series.values[i]!)) continue\n const x = xScale.map(i)\n const y = yScale.map(series.values[i]!)\n const dist = Math.sqrt((mx - x) ** 2 + (my - y) ** 2)\n if (dist < bestDist) {\n bestDist = dist\n best = { seriesIndex: series.index, pointIndex: i, distance: dist, x, y }\n }\n }\n }\n\n return best && best.distance < 30 ? best : null\n },\n}\n\n/**\n * Build a filled area path clipped to one side of the baseline.\n * Interpolates intersection points where the line crosses the baseline.\n */\nfunction buildClippedArea(\n points: { x: number; y: number }[],\n baseY: number,\n side: 'above' | 'below',\n): string | null {\n if (points.length < 2) return null\n\n // Collect segments that are on the desired side\n const segments: { x: number; y: number }[][] = []\n let current: { x: number; y: number }[] = []\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i]!\n const onSide = side === 'above' ? p.y <= baseY : p.y >= baseY\n\n if (i > 0) {\n const prev = points[i - 1]!\n const prevOnSide = side === 'above' ? prev.y <= baseY : prev.y >= baseY\n\n // Crossing detected — compute intersection\n if (onSide !== prevOnSide) {\n const t = (baseY - prev.y) / (p.y - prev.y)\n const ix = prev.x + t * (p.x - prev.x)\n const cross = { x: ix, y: baseY }\n\n if (prevOnSide) {\n // Was on side, now leaving — close current segment\n current.push(cross)\n if (current.length >= 2) segments.push(current)\n current = []\n } else {\n // Was off side, now entering — start new segment\n current = [cross]\n }\n }\n }\n\n if (onSide) current.push(p)\n }\n if (current.length >= 2) segments.push(current)\n if (segments.length === 0) return null\n\n // Build SVG path for all segments\n const pb = new PathBuilder()\n for (const seg of segments) {\n pb.moveTo(seg[0]!.x, seg[0]!.y)\n for (let i = 1; i < seg.length; i++) {\n pb.lineTo(seg[i]!.x, seg[i]!.y)\n }\n // Close down/up to baseline\n pb.lineTo(seg[seg.length - 1]!.x, baseY)\n pb.lineTo(seg[0]!.x, baseY)\n pb.close()\n }\n\n return pb.build()\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { prepareNoAxes } from './chunk-
|
|
2
|
-
import { text, rect, line, group } from './chunk-
|
|
1
|
+
import { prepareNoAxes } from './chunk-T7SCCACB.js';
|
|
2
|
+
import { text, rect, line, group } from './chunk-AEQXFDL7.js';
|
|
3
3
|
|
|
4
4
|
// src/charts/bullet/bullet-type.ts
|
|
5
5
|
var bulletChartType = {
|
|
@@ -108,5 +108,5 @@ var bulletChartType = {
|
|
|
108
108
|
};
|
|
109
109
|
|
|
110
110
|
export { bulletChartType };
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-SGZUUUXU.js.map
|
|
112
|
+
//# sourceMappingURL=chunk-SGZUUUXU.js.map
|