@chartts/core 0.1.4 → 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-62DBXI4N.js → chunk-2VHG2N75.js} +4 -4
- package/dist/{chunk-62DBXI4N.js.map → chunk-2VHG2N75.js.map} +1 -1
- package/dist/{chunk-VJXUBN7J.js → chunk-2X7UIG3G.js} +3 -3
- package/dist/{chunk-VJXUBN7J.js.map → chunk-2X7UIG3G.js.map} +1 -1
- package/dist/{chunk-ESJMEDLY.cjs → chunk-35XUPEAD.cjs} +4 -4
- package/dist/{chunk-ESJMEDLY.cjs.map → chunk-35XUPEAD.cjs.map} +1 -1
- package/dist/{chunk-Y6CVUI6A.cjs → chunk-3HBRAGJA.cjs} +13 -13
- package/dist/{chunk-Y6CVUI6A.cjs.map → chunk-3HBRAGJA.cjs.map} +1 -1
- package/dist/{chunk-ZOEN3ARN.js → chunk-45Y77XDM.js} +3 -3
- package/dist/{chunk-ZOEN3ARN.js.map → chunk-45Y77XDM.js.map} +1 -1
- package/dist/{chunk-PCAYYCLY.cjs → chunk-47R2QUID.cjs} +10 -10
- package/dist/{chunk-PCAYYCLY.cjs.map → chunk-47R2QUID.cjs.map} +1 -1
- package/dist/{chunk-IF6RQ53Q.cjs → chunk-4C5IV57Z.cjs} +9 -9
- package/dist/{chunk-IF6RQ53Q.cjs.map → chunk-4C5IV57Z.cjs.map} +1 -1
- package/dist/{chunk-2BUIZDOB.js → chunk-4EV5UN6V.js} +3 -3
- package/dist/{chunk-2BUIZDOB.js.map → chunk-4EV5UN6V.js.map} +1 -1
- package/dist/{chunk-THHZMRFU.js → chunk-5JDHVXPE.js} +3 -3
- package/dist/{chunk-THHZMRFU.js.map → chunk-5JDHVXPE.js.map} +1 -1
- package/dist/{chunk-PKXW45G4.js → chunk-5VI5F5XA.js} +3 -3
- package/dist/{chunk-PKXW45G4.js.map → chunk-5VI5F5XA.js.map} +1 -1
- package/dist/{chunk-TEZNWW3R.cjs → chunk-64B7FGFP.cjs} +8 -8
- package/dist/{chunk-TEZNWW3R.cjs.map → chunk-64B7FGFP.cjs.map} +1 -1
- package/dist/{chunk-5HZEDCJG.js → chunk-66GE7TI3.js} +3 -3
- package/dist/{chunk-5HZEDCJG.js.map → chunk-66GE7TI3.js.map} +1 -1
- package/dist/{chunk-CWZADOJ6.js → chunk-6H34P4AG.js} +3 -3
- package/dist/{chunk-CWZADOJ6.js.map → chunk-6H34P4AG.js.map} +1 -1
- package/dist/{chunk-BGGESAAG.cjs → chunk-6KNS32OH.cjs} +7 -7
- package/dist/{chunk-BGGESAAG.cjs.map → chunk-6KNS32OH.cjs.map} +1 -1
- package/dist/{chunk-GBL4R3GH.cjs → chunk-6S2NCXNP.cjs} +6 -6
- package/dist/{chunk-GBL4R3GH.cjs.map → chunk-6S2NCXNP.cjs.map} +1 -1
- package/dist/{chunk-FVLVTY5D.cjs → chunk-6XD3VSAM.cjs} +6 -6
- package/dist/{chunk-FVLVTY5D.cjs.map → chunk-6XD3VSAM.cjs.map} +1 -1
- package/dist/{chunk-KWSVJRXX.cjs → chunk-6XWZSV6M.cjs} +4 -4
- package/dist/{chunk-KWSVJRXX.cjs.map → chunk-6XWZSV6M.cjs.map} +1 -1
- package/dist/{chunk-N35UAFEU.js → chunk-7FUQMZGT.js} +4 -4
- package/dist/{chunk-N35UAFEU.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-A5G32G2R.cjs → chunk-7XOK2HLV.cjs} +9 -9
- package/dist/{chunk-A5G32G2R.cjs.map → chunk-7XOK2HLV.cjs.map} +1 -1
- package/dist/{chunk-SGZUUUXU.js → chunk-ACN4JCSF.js} +4 -4
- package/dist/{chunk-SGZUUUXU.js.map → chunk-ACN4JCSF.js.map} +1 -1
- package/dist/{chunk-3NHH6C4K.cjs → chunk-AOZ47DTE.cjs} +13 -13
- package/dist/{chunk-3NHH6C4K.cjs.map → chunk-AOZ47DTE.cjs.map} +1 -1
- package/dist/{chunk-WZCES5M6.js → chunk-AYEXPYFE.js} +4 -4
- package/dist/{chunk-WZCES5M6.js.map → chunk-AYEXPYFE.js.map} +1 -1
- package/dist/{chunk-D5QUAWF3.cjs → chunk-BPXEQPZU.cjs} +10 -10
- package/dist/{chunk-D5QUAWF3.cjs.map → chunk-BPXEQPZU.cjs.map} +1 -1
- package/dist/{chunk-YZXRD6K6.cjs → chunk-BQUMYOBP.cjs} +7 -7
- package/dist/{chunk-YZXRD6K6.cjs.map → chunk-BQUMYOBP.cjs.map} +1 -1
- package/dist/{chunk-FGHSUT6X.cjs → chunk-CG4KMZRU.cjs} +6 -6
- package/dist/{chunk-FGHSUT6X.cjs.map → chunk-CG4KMZRU.cjs.map} +1 -1
- package/dist/{chunk-BFBVJ6MU.js → chunk-CLBVCWJG.js} +3 -3
- package/dist/{chunk-BFBVJ6MU.js.map → chunk-CLBVCWJG.js.map} +1 -1
- package/dist/{chunk-754Z4OR6.cjs → chunk-CVKWXLXW.cjs} +10 -10
- package/dist/{chunk-754Z4OR6.cjs.map → chunk-CVKWXLXW.cjs.map} +1 -1
- package/dist/{chunk-5E7FXDBM.js → chunk-D4RP2H6A.js} +4 -4
- package/dist/{chunk-5E7FXDBM.js.map → chunk-D4RP2H6A.js.map} +1 -1
- package/dist/{chunk-HCIBBUV5.js → chunk-DMBUUJGU.js} +3 -3
- package/dist/{chunk-HCIBBUV5.js.map → chunk-DMBUUJGU.js.map} +1 -1
- package/dist/{chunk-EWVXMQRW.js → chunk-DQAFYVCX.js} +5 -5
- package/dist/{chunk-EWVXMQRW.js.map → chunk-DQAFYVCX.js.map} +1 -1
- package/dist/{chunk-ATMSGQCW.cjs → chunk-EXA5HCX7.cjs} +9 -9
- package/dist/{chunk-ATMSGQCW.cjs.map → chunk-EXA5HCX7.cjs.map} +1 -1
- package/dist/{chunk-TLHQ6JCK.cjs → chunk-F3TVVAYG.cjs} +11 -11
- package/dist/{chunk-TLHQ6JCK.cjs.map → chunk-F3TVVAYG.cjs.map} +1 -1
- package/dist/{chunk-HCK2VUWD.cjs → chunk-FCDKWHIV.cjs} +8 -8
- package/dist/{chunk-HCK2VUWD.cjs.map → chunk-FCDKWHIV.cjs.map} +1 -1
- package/dist/{chunk-IDZTDJLH.js → chunk-FWKYNE3A.js} +3 -3
- package/dist/{chunk-IDZTDJLH.js.map → chunk-FWKYNE3A.js.map} +1 -1
- package/dist/{chunk-6QMV75NT.js → chunk-GAXX6YK5.js} +4 -4
- package/dist/{chunk-6QMV75NT.js.map → chunk-GAXX6YK5.js.map} +1 -1
- package/dist/{chunk-OMAW52LY.cjs → chunk-H2DHSBPO.cjs} +6 -6
- package/dist/{chunk-OMAW52LY.cjs.map → chunk-H2DHSBPO.cjs.map} +1 -1
- package/dist/{chunk-DX77WSIB.js → chunk-I7HB3FBC.js} +5 -5
- package/dist/{chunk-DX77WSIB.js.map → chunk-I7HB3FBC.js.map} +1 -1
- package/dist/{chunk-MJY25P44.js → chunk-IGIAGPC5.js} +3 -3
- package/dist/{chunk-MJY25P44.js.map → chunk-IGIAGPC5.js.map} +1 -1
- package/dist/{chunk-4QRND2V5.js → chunk-ILD5ZZHH.js} +3 -3
- package/dist/{chunk-4QRND2V5.js.map → chunk-ILD5ZZHH.js.map} +1 -1
- package/dist/{chunk-CU5ZXVZQ.js → chunk-IN7SCXMD.js} +4 -4
- package/dist/{chunk-CU5ZXVZQ.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-7GLCJPV5.js → chunk-J6A72I5K.js} +4 -4
- package/dist/{chunk-7GLCJPV5.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-KNMEXOKJ.js → chunk-K7NVM76W.js} +4 -4
- package/dist/{chunk-KNMEXOKJ.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-OMSHGBV3.js → chunk-KRLKDJPM.js} +4 -4
- package/dist/{chunk-OMSHGBV3.js.map → chunk-KRLKDJPM.js.map} +1 -1
- package/dist/{chunk-ZNKVOTPB.cjs → chunk-KSCMLSUI.cjs} +15 -15
- package/dist/{chunk-ZNKVOTPB.cjs.map → chunk-KSCMLSUI.cjs.map} +1 -1
- package/dist/{chunk-OTXHJHXU.cjs → chunk-KT4LY42Y.cjs} +11 -11
- package/dist/{chunk-OTXHJHXU.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-56BN43J4.js → chunk-KXJOIVL5.js} +5 -5
- package/dist/{chunk-56BN43J4.js.map → chunk-KXJOIVL5.js.map} +1 -1
- package/dist/{chunk-EPUWA3ZW.js → chunk-LFV46XLH.js} +4 -4
- package/dist/{chunk-EPUWA3ZW.js.map → chunk-LFV46XLH.js.map} +1 -1
- package/dist/{chunk-T7SCCACB.js → chunk-LKSKGQX7.js} +3 -3
- package/dist/{chunk-T7SCCACB.js.map → chunk-LKSKGQX7.js.map} +1 -1
- package/dist/{chunk-LARNENXE.cjs → chunk-LQ26WSLH.cjs} +10 -10
- package/dist/{chunk-LARNENXE.cjs.map → chunk-LQ26WSLH.cjs.map} +1 -1
- package/dist/{chunk-NRULNA5F.js → chunk-LROB73B4.js} +4 -4
- package/dist/{chunk-NRULNA5F.js.map → chunk-LROB73B4.js.map} +1 -1
- package/dist/{chunk-34DQGCPP.js → chunk-LXBBM6IF.js} +4 -4
- package/dist/{chunk-34DQGCPP.js.map → chunk-LXBBM6IF.js.map} +1 -1
- package/dist/{chunk-QPHWRD25.js → chunk-MCORUYWB.js} +3 -3
- package/dist/{chunk-QPHWRD25.js.map → chunk-MCORUYWB.js.map} +1 -1
- package/dist/{chunk-2JYK52HV.js → chunk-MJFCMUIY.js} +4 -4
- package/dist/{chunk-2JYK52HV.js.map → chunk-MJFCMUIY.js.map} +1 -1
- package/dist/{chunk-7PHOSSLJ.cjs → chunk-NHSPO4BN.cjs} +9 -9
- package/dist/{chunk-7PHOSSLJ.cjs.map → chunk-NHSPO4BN.cjs.map} +1 -1
- package/dist/{chunk-5QT67VYJ.cjs → chunk-NR5NQ6TV.cjs} +10 -10
- package/dist/{chunk-5QT67VYJ.cjs.map → chunk-NR5NQ6TV.cjs.map} +1 -1
- package/dist/{chunk-DT4GG5BF.cjs → chunk-NRMQMPUE.cjs} +7 -7
- package/dist/{chunk-DT4GG5BF.cjs.map → chunk-NRMQMPUE.cjs.map} +1 -1
- package/dist/{chunk-FGBIJ6PL.js → chunk-NW4JBVY2.js} +4 -4
- package/dist/{chunk-FGBIJ6PL.js.map → chunk-NW4JBVY2.js.map} +1 -1
- package/dist/{chunk-2QRCHYTZ.cjs → chunk-OLY33H6E.cjs} +7 -7
- package/dist/{chunk-2QRCHYTZ.cjs.map → chunk-OLY33H6E.cjs.map} +1 -1
- package/dist/{chunk-2IWLOBSF.cjs → chunk-OUQ63IJQ.cjs} +6 -6
- package/dist/{chunk-2IWLOBSF.cjs.map → chunk-OUQ63IJQ.cjs.map} +1 -1
- package/dist/{chunk-VUHNBLFA.js → chunk-PHFBF5ON.js} +3 -3
- package/dist/{chunk-VUHNBLFA.js.map → chunk-PHFBF5ON.js.map} +1 -1
- package/dist/{chunk-4MNVJVK3.cjs → chunk-PL3M46GS.cjs} +6 -6
- package/dist/{chunk-4MNVJVK3.cjs.map → chunk-PL3M46GS.cjs.map} +1 -1
- package/dist/{chunk-JYVRX3BX.cjs → chunk-PNHDHEBQ.cjs} +8 -8
- package/dist/{chunk-JYVRX3BX.cjs.map → chunk-PNHDHEBQ.cjs.map} +1 -1
- package/dist/{chunk-QYI7ZV3B.cjs → chunk-PX7MLSIH.cjs} +369 -124
- package/dist/chunk-PX7MLSIH.cjs.map +1 -0
- package/dist/{chunk-YCL43UQM.cjs → chunk-QCEC2KBW.cjs} +12 -12
- package/dist/{chunk-YCL43UQM.cjs.map → chunk-QCEC2KBW.cjs.map} +1 -1
- package/dist/{chunk-ZFGLBJYC.js → chunk-QRVTY6UU.js} +3 -3
- package/dist/{chunk-ZFGLBJYC.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-QPHUAF3R.cjs → chunk-QVQKYVD2.cjs} +8 -8
- package/dist/{chunk-QPHUAF3R.cjs.map → chunk-QVQKYVD2.cjs.map} +1 -1
- package/dist/{chunk-CUIPBYMG.cjs → chunk-RIJPMRKC.cjs} +8 -8
- package/dist/{chunk-CUIPBYMG.cjs.map → chunk-RIJPMRKC.cjs.map} +1 -1
- package/dist/{chunk-5QVUBGM7.js → chunk-RKX7GKOU.js} +4 -4
- package/dist/{chunk-5QVUBGM7.js.map → chunk-RKX7GKOU.js.map} +1 -1
- package/dist/{chunk-3SVNEKXE.cjs → chunk-ROUFAI5M.cjs} +11 -11
- package/dist/{chunk-3SVNEKXE.cjs.map → chunk-ROUFAI5M.cjs.map} +1 -1
- package/dist/{chunk-55ZTXQQQ.cjs → chunk-S52RCLDQ.cjs} +12 -12
- package/dist/{chunk-55ZTXQQQ.cjs.map → chunk-S52RCLDQ.cjs.map} +1 -1
- package/dist/{chunk-GRXHW5S3.cjs → chunk-SEOHPUXV.cjs} +12 -12
- package/dist/{chunk-GRXHW5S3.cjs.map → chunk-SEOHPUXV.cjs.map} +1 -1
- package/dist/{chunk-KHG3G2ZX.js → chunk-SI4VJK4A.js} +3 -3
- package/dist/{chunk-KHG3G2ZX.js.map → chunk-SI4VJK4A.js.map} +1 -1
- package/dist/{chunk-VGJD4F4H.js → chunk-SUB5WML4.js} +3 -3
- package/dist/{chunk-VGJD4F4H.js.map → chunk-SUB5WML4.js.map} +1 -1
- package/dist/{chunk-CA42BCSM.cjs → chunk-T5NDUMLD.cjs} +8 -8
- package/dist/{chunk-CA42BCSM.cjs.map → chunk-T5NDUMLD.cjs.map} +1 -1
- package/dist/{chunk-QEPMEEZC.cjs → chunk-TKHYY3B5.cjs} +6 -6
- package/dist/{chunk-QEPMEEZC.cjs.map → chunk-TKHYY3B5.cjs.map} +1 -1
- package/dist/{chunk-LXYNL7BI.cjs → chunk-TMQ2V5B2.cjs} +10 -10
- package/dist/{chunk-LXYNL7BI.cjs.map → chunk-TMQ2V5B2.cjs.map} +1 -1
- package/dist/{chunk-R2W3RJFW.cjs → chunk-TNIMRV3N.cjs} +13 -13
- package/dist/{chunk-R2W3RJFW.cjs.map → chunk-TNIMRV3N.cjs.map} +1 -1
- package/dist/{chunk-NQ7Y6ZKH.js → chunk-TUPPYHUR.js} +3 -3
- package/dist/{chunk-NQ7Y6ZKH.js.map → chunk-TUPPYHUR.js.map} +1 -1
- package/dist/{chunk-MSCRIA2U.cjs → chunk-U456ET3M.cjs} +12 -12
- package/dist/{chunk-MSCRIA2U.cjs.map → chunk-U456ET3M.cjs.map} +1 -1
- package/dist/{chunk-NE2W2MF3.cjs → chunk-UMS2MPYC.cjs} +10 -10
- package/dist/{chunk-NE2W2MF3.cjs.map → chunk-UMS2MPYC.cjs.map} +1 -1
- package/dist/{chunk-DAAU5H24.js → chunk-UNQBXGX5.js} +3 -3
- package/dist/{chunk-DAAU5H24.js.map → chunk-UNQBXGX5.js.map} +1 -1
- package/dist/{chunk-VBMLJUBE.js → chunk-V3AENTZB.js} +4 -4
- package/dist/{chunk-VBMLJUBE.js.map → chunk-V3AENTZB.js.map} +1 -1
- package/dist/{chunk-3JB4JBBK.js → chunk-V5LLTYOY.js} +4 -4
- package/dist/{chunk-3JB4JBBK.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-MEERXUZS.js → chunk-VJT5UA7J.js} +4 -4
- package/dist/{chunk-MEERXUZS.js.map → chunk-VJT5UA7J.js.map} +1 -1
- package/dist/{chunk-JVVGQLJQ.cjs → chunk-W626EAS5.cjs} +100 -6
- package/dist/chunk-W626EAS5.cjs.map +1 -0
- package/dist/{chunk-IOV77VHP.js → chunk-WHGNA44O.js} +4 -4
- package/dist/{chunk-IOV77VHP.js.map → chunk-WHGNA44O.js.map} +1 -1
- package/dist/{chunk-ZYXRRVR6.js → chunk-WIA4MDRX.js} +3 -3
- package/dist/{chunk-ZYXRRVR6.js.map → chunk-WIA4MDRX.js.map} +1 -1
- package/dist/{chunk-OEGSDOJ2.cjs → chunk-WOYVHVXC.cjs} +7 -7
- package/dist/{chunk-OEGSDOJ2.cjs.map → chunk-WOYVHVXC.cjs.map} +1 -1
- package/dist/{chunk-V5Q6UNUK.cjs → chunk-X5SG6MFS.cjs} +4 -4
- package/dist/{chunk-V5Q6UNUK.cjs.map → chunk-X5SG6MFS.cjs.map} +1 -1
- package/dist/{chunk-LRHMLNPW.js → chunk-XB5K7OYD.js} +353 -108
- package/dist/chunk-XB5K7OYD.js.map +1 -0
- package/dist/{chunk-AEQXFDL7.js → chunk-XIVC32HU.js} +100 -6
- package/dist/chunk-XIVC32HU.js.map +1 -0
- package/dist/{chunk-TC3H6ZED.js → chunk-XQ7BTVV3.js} +4 -4
- package/dist/{chunk-TC3H6ZED.js.map → chunk-XQ7BTVV3.js.map} +1 -1
- package/dist/{chunk-4D6PVH2C.cjs → chunk-YMOQGTGJ.cjs} +9 -9
- package/dist/{chunk-4D6PVH2C.cjs.map → chunk-YMOQGTGJ.cjs.map} +1 -1
- package/dist/{chunk-2IMUTDTD.cjs → chunk-YOK3JGW5.cjs} +10 -10
- package/dist/{chunk-2IMUTDTD.cjs.map → chunk-YOK3JGW5.cjs.map} +1 -1
- package/dist/{chunk-24557PYN.js → chunk-YUIHMAHA.js} +3 -3
- package/dist/{chunk-24557PYN.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-W476ER4X.cjs → chunk-ZCLW4B5S.cjs} +17 -17
- package/dist/{chunk-W476ER4X.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 +12 -2
- package/dist/index.d.ts +12 -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-AEQXFDL7.js.map +0 -1
- package/dist/chunk-JVVGQLJQ.cjs.map +0 -1
- package/dist/chunk-LRHMLNPW.js.map +0 -1
- package/dist/chunk-QYI7ZV3B.cjs.map +0 -1
- package/dist/graph-type-Bg04GFeS.d.ts +0 -15
- package/dist/graph-type-DF-vww8T.d.cts +0 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkX5SG6MFS_cjs = require('./chunk-X5SG6MFS.cjs');
|
|
4
|
+
var chunkW626EAS5_cjs = require('./chunk-W626EAS5.cjs');
|
|
5
5
|
|
|
6
6
|
// src/charts/custom/custom-type.ts
|
|
7
7
|
var customChartType = {
|
|
@@ -11,7 +11,7 @@ var customChartType = {
|
|
|
11
11
|
return cOpts?.scaleTypes ?? { x: "categorical", y: "linear" };
|
|
12
12
|
},
|
|
13
13
|
prepareData(data, options) {
|
|
14
|
-
return
|
|
14
|
+
return chunkX5SG6MFS_cjs.prepareNoAxes(data, options);
|
|
15
15
|
},
|
|
16
16
|
render(ctx) {
|
|
17
17
|
const cOpts = ctx.options;
|
|
@@ -20,7 +20,7 @@ var customChartType = {
|
|
|
20
20
|
}
|
|
21
21
|
const { area, theme } = ctx;
|
|
22
22
|
return [
|
|
23
|
-
|
|
23
|
+
chunkW626EAS5_cjs.text(
|
|
24
24
|
area.x + area.width / 2,
|
|
25
25
|
area.y + area.height / 2,
|
|
26
26
|
"Custom chart \u2014 provide renderFn in options",
|
|
@@ -48,5 +48,5 @@ var customChartType = {
|
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
exports.customChartType = customChartType;
|
|
51
|
-
//# sourceMappingURL=chunk-
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
51
|
+
//# sourceMappingURL=chunk-6S2NCXNP.cjs.map
|
|
52
|
+
//# sourceMappingURL=chunk-6S2NCXNP.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/custom/custom-type.ts"],"names":["prepareNoAxes","text"],"mappings":";;;;;;AAwBO,IAAM,eAAA,GAAmC;AAAA,EAC9C,IAAA,EAAM,QAAA;AAAA,EAEN,aAAA,CAAc,OAAmB,OAAA,EAA2D;AAC1F,IAAA,MAAM,KAAA,GAAQ,OAAA;AACd,IAAA,OAAO,OAAO,UAAA,IAAc,EAAE,CAAA,EAAG,aAAA,EAAe,GAAG,QAAA,EAAS;AAAA,EAC9D,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,OAAOA,+BAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EACpC,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAElB,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,OAAO,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,IAC3B;AAGA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,GAAA;AACxB,IAAA,OAAO;AAAA,MACLC,sBAAA;AAAA,QACE,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,QACtB,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,QACvB,iDAAA;AAAA,QACA;AAAA,UACE,KAAA,EAAO,4BAAA;AAAA,UACP,MAAM,KAAA,CAAM,SAAA;AAAA,UACZ,UAAA,EAAY,QAAA;AAAA,UACZ,gBAAA,EAAkB,SAAA;AAAA,UAClB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,YAAY,KAAA,CAAM;AAAA;AACpB;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAClB,IAAA,IAAI,MAAM,SAAA,EAAW;AACnB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,CAAU,GAAA,EAAK,IAAI,EAAE,CAAA;AAC1C,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,CAAA,KAAM,MAAA,SAAkB,CAAA,GAAI,EAAA;AACjD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,CAAA,KAAM,MAAA,SAAkB,CAAA,GAAI,EAAA;AACjD,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/charts/custom/custom-type.ts"],"names":["prepareNoAxes","text"],"mappings":";;;;;;AAwBO,IAAM,eAAA,GAAmC;AAAA,EAC9C,IAAA,EAAM,QAAA;AAAA,EAEN,aAAA,CAAc,OAAmB,OAAA,EAA2D;AAC1F,IAAA,MAAM,KAAA,GAAQ,OAAA;AACd,IAAA,OAAO,OAAO,UAAA,IAAc,EAAE,CAAA,EAAG,aAAA,EAAe,GAAG,QAAA,EAAS;AAAA,EAC9D,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,OAAOA,+BAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EACpC,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAElB,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,OAAO,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,IAC3B;AAGA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,GAAA;AACxB,IAAA,OAAO;AAAA,MACLC,sBAAA;AAAA,QACE,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,QACtB,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,QACvB,iDAAA;AAAA,QACA;AAAA,UACE,KAAA,EAAO,4BAAA;AAAA,UACP,MAAM,KAAA,CAAM,SAAA;AAAA,UACZ,UAAA,EAAY,QAAA;AAAA,UACZ,gBAAA,EAAkB,SAAA;AAAA,UAClB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,YAAY,KAAA,CAAM;AAAA;AACpB;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAClB,IAAA,IAAI,MAAM,SAAA,EAAW;AACnB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,CAAU,GAAA,EAAK,IAAI,EAAE,CAAA;AAC1C,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,CAAA,KAAM,MAAA,SAAkB,CAAA,GAAI,EAAA;AACjD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,CAAA,KAAM,MAAA,SAAkB,CAAA,GAAI,EAAA;AACjD,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-6S2NCXNP.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { text } from '../../render/tree'\n\n/**\n * Custom chart — meta chart type that delegates rendering to a user function.\n *\n * Options:\n * - renderFn: (ctx: RenderContext) => RenderNode[]\n * - hitTestFn: (ctx: RenderContext, mx: number, my: number) => HitResult | null\n * - scaleTypes: { x: ScaleType; y: ScaleType } (default categorical/linear)\n *\n * If no renderFn is provided, renders a placeholder message.\n */\n\nexport interface CustomChartOptions {\n renderFn?: (ctx: RenderContext) => RenderNode[]\n hitTestFn?: (ctx: RenderContext, mx: number, my: number) => HitResult | null\n scaleTypes?: { x: ScaleType; y: ScaleType }\n}\n\nexport const customChartType: ChartTypePlugin = {\n type: 'custom',\n\n getScaleTypes(_data?: ChartData, options?: ResolvedOptions): { x: ScaleType; y: ScaleType } {\n const cOpts = options as unknown as CustomChartOptions | undefined\n return cOpts?.scaleTypes ?? { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const cOpts = ctx.options as unknown as CustomChartOptions\n\n if (cOpts.renderFn) {\n return cOpts.renderFn(ctx)\n }\n\n // Placeholder when no render function is provided\n const { area, theme } = ctx\n return [\n text(\n area.x + area.width / 2,\n area.y + area.height / 2,\n 'Custom chart — provide renderFn in options',\n {\n class: 'chartts-custom-placeholder',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSize,\n fontFamily: theme.fontFamily,\n },\n ),\n ]\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const cOpts = ctx.options as unknown as CustomChartOptions\n if (cOpts.hitTestFn) {\n const result = cOpts.hitTestFn(ctx, mx, my)\n if (result && result.x === undefined) result.x = mx\n if (result && result.y === undefined) result.y = my\n return result\n }\n return null\n },\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkAOZ47DTE_cjs = require('./chunk-AOZ47DTE.cjs');
|
|
4
4
|
|
|
5
5
|
// src/charts/step/step-type.ts
|
|
6
6
|
var stepChartType = {
|
|
@@ -9,20 +9,20 @@ var stepChartType = {
|
|
|
9
9
|
return { x: "categorical", y: "linear" };
|
|
10
10
|
},
|
|
11
11
|
prepareData(data, options) {
|
|
12
|
-
return
|
|
12
|
+
return chunkAOZ47DTE_cjs.lineChartType.prepareData(data, options);
|
|
13
13
|
},
|
|
14
14
|
render(ctx) {
|
|
15
15
|
const stepCtx = {
|
|
16
16
|
...ctx,
|
|
17
17
|
options: { ...ctx.options, curve: "step" }
|
|
18
18
|
};
|
|
19
|
-
return
|
|
19
|
+
return chunkAOZ47DTE_cjs.lineChartType.render(stepCtx);
|
|
20
20
|
},
|
|
21
21
|
hitTest(ctx, mx, my) {
|
|
22
|
-
return
|
|
22
|
+
return chunkAOZ47DTE_cjs.lineChartType.hitTest(ctx, mx, my);
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
exports.stepChartType = stepChartType;
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-6XD3VSAM.cjs.map
|
|
28
|
+
//# sourceMappingURL=chunk-6XD3VSAM.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/step/step-type.ts"],"names":["lineChartType"],"mappings":";;;;;AAYO,IAAM,aAAA,GAAiC;AAAA,EAC5C,IAAA,EAAM,MAAA;AAAA,EAEN,aAAA,GAAgD;AAC9C,IAAA,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,QAAA,EAAS;AAAA,EACzC,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,OAAOA,+BAAA,CAAc,WAAA,CAAY,IAAA,EAAM,OAAO,CAAA;AAAA,EAChD,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AAEvC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,GAAA;AAAA,MACH,SAAS,EAAE,GAAG,GAAA,CAAI,OAAA,EAAS,OAAO,MAAA;AAAgB,KACpD;AACA,IAAA,OAAOA,+BAAA,CAAc,OAAO,OAAO,CAAA;AAAA,EACrC,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,OAAOA,+BAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAAA,EAC1C;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/charts/step/step-type.ts"],"names":["lineChartType"],"mappings":";;;;;AAYO,IAAM,aAAA,GAAiC;AAAA,EAC5C,IAAA,EAAM,MAAA;AAAA,EAEN,aAAA,GAAgD;AAC9C,IAAA,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,QAAA,EAAS;AAAA,EACzC,CAAA;AAAA,EAEA,WAAA,CAAY,MAAiB,OAAA,EAAwC;AACnE,IAAA,OAAOA,+BAAA,CAAc,WAAA,CAAY,IAAA,EAAM,OAAO,CAAA;AAAA,EAChD,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AAEvC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,GAAA;AAAA,MACH,SAAS,EAAE,GAAG,GAAA,CAAI,OAAA,EAAS,OAAO,MAAA;AAAgB,KACpD;AACA,IAAA,OAAOA,+BAAA,CAAc,OAAO,OAAO,CAAA;AAAA,EACrC,CAAA;AAAA,EAEA,OAAA,CAAQ,GAAA,EAAoB,EAAA,EAAY,EAAA,EAA8B;AACpE,IAAA,OAAOA,+BAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAAA,EAC1C;AACF","file":"chunk-6XD3VSAM.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { lineChartType } from '../line/line-type'\n\n/**\n * Step chart — line chart with stair-step interpolation.\n *\n * Delegates entirely to lineChartType after forcing curve:'step'.\n * Used for: interest rates, order books, discrete pricing tiers.\n */\nexport const stepChartType: ChartTypePlugin = {\n type: 'step',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return lineChartType.prepareData(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n // Force step interpolation\n const stepCtx = {\n ...ctx,\n options: { ...ctx.options, curve: 'step' as const },\n }\n return lineChartType.render(stepCtx)\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n return lineChartType.hitTest(ctx, mx, my)\n },\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkW626EAS5_cjs = require('./chunk-W626EAS5.cjs');
|
|
4
4
|
|
|
5
5
|
// src/utils/slice-path.ts
|
|
6
6
|
function roundedSlicePath(cx, cy, outerR, innerR, outerStart, outerEnd, innerStart, innerEnd, cornerRadius) {
|
|
7
|
-
const pb = new
|
|
7
|
+
const pb = new chunkW626EAS5_cjs.PathBuilder();
|
|
8
8
|
const outerSliceAngle = outerEnd - outerStart;
|
|
9
9
|
const innerSliceAngle = innerEnd - innerStart;
|
|
10
10
|
const radialThickness = outerR - innerR;
|
|
@@ -124,5 +124,5 @@ function roundedSlicePath(cx, cy, outerR, innerR, outerStart, outerEnd, innerSta
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
exports.roundedSlicePath = roundedSlicePath;
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
128
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-6XWZSV6M.cjs.map
|
|
128
|
+
//# sourceMappingURL=chunk-6XWZSV6M.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/slice-path.ts"],"names":["PathBuilder"],"mappings":"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","file":"chunk-KWSVJRXX.cjs","sourcesContent":["import { PathBuilder } from '../render/tree'\n\n/**\n * Build a rounded annular sector (pie/donut slice) SVG path string.\n *\n * Supports different angular offsets at inner vs outer radius for uniform\n * pixel-width gaps between slices.\n *\n * @param cx - Center x\n * @param cy - Center y\n * @param outerR - Outer radius\n * @param innerR - Inner radius (0 for full pie, >0 for donut)\n * @param outerStart - Start angle on outer arc (radians)\n * @param outerEnd - End angle on outer arc (radians)\n * @param innerStart - Start angle on inner arc (radians)\n * @param innerEnd - End angle on inner arc (radians)\n * @param cornerRadius - Corner rounding radius in px\n */\nexport function roundedSlicePath(\n cx: number, cy: number,\n outerR: number, innerR: number,\n outerStart: number, outerEnd: number,\n innerStart: number, innerEnd: number,\n cornerRadius: number,\n): string {\n const pb = new PathBuilder()\n const outerSliceAngle = outerEnd - outerStart\n const innerSliceAngle = innerEnd - innerStart\n const radialThickness = outerR - innerR\n const outerArcLen = outerSliceAngle * outerR\n const innerArcLen = innerSliceAngle * innerR\n\n // Separate corner radii for outer and inner edges.\n // Inner corners need aggressive clamping — when innerR is small, the angular\n // span of a corner becomes huge relative to the slice, causing path distortion.\n const outerCr = Math.min(\n cornerRadius,\n radialThickness / 2,\n outerArcLen / 4,\n )\n // Skip inner rounding entirely when inner radius is too small (<20px)\n // — the angular span of any rounding would dominate the inner edge.\n const innerCr = innerR >= 20\n ? Math.min(\n cornerRadius,\n radialThickness / 2,\n innerArcLen / 4,\n innerR * 0.25,\n )\n : 0\n\n if (outerCr < 0.5 && innerCr < 0.5) {\n // No rounding — standard path with per-radius angles\n const x1o = cx + outerR * Math.cos(outerStart)\n const y1o = cy + outerR * Math.sin(outerStart)\n const x2o = cx + outerR * Math.cos(outerEnd)\n const y2o = cy + outerR * Math.sin(outerEnd)\n const x1i = cx + innerR * Math.cos(innerEnd)\n const y1i = cy + innerR * Math.sin(innerEnd)\n const x2i = cx + innerR * Math.cos(innerStart)\n const y2i = cy + innerR * Math.sin(innerStart)\n\n pb.moveTo(x1o, y1o)\n pb.arc(outerR, outerR, 0, outerSliceAngle > Math.PI, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n if (innerR > 0) {\n pb.arc(innerR, innerR, 0, innerSliceAngle > Math.PI, false, x2i, y2i)\n }\n pb.close()\n return pb.build()\n }\n\n // Angular offsets for rounding on each arc (separate for outer/inner)\n const outerCrAngle = outerCr / outerR\n const innerCrAngle = innerR > 0 && innerCr > 0.5 ? innerCr / innerR : 0\n\n // Outer arc inset by corner angles\n const oa1 = outerStart + outerCrAngle\n const oa2 = outerEnd - outerCrAngle\n // Inner arc inset by corner angles (reverse direction)\n const ia1 = innerEnd - innerCrAngle\n const ia2 = innerStart + innerCrAngle\n\n // -- Corner 1: outer-start (start radial meets outer arc) --\n pb.moveTo(\n cx + (outerR - outerCr) * Math.cos(outerStart),\n cy + (outerR - outerCr) * Math.sin(outerStart),\n )\n if (outerCr >= 0.5) {\n pb.quadTo(\n cx + outerR * Math.cos(outerStart),\n cy + outerR * Math.sin(outerStart),\n cx + outerR * Math.cos(oa1),\n cy + outerR * Math.sin(oa1),\n )\n }\n\n // -- Outer arc from oa1 to oa2 --\n if (oa2 > oa1) {\n pb.arc(outerR, outerR, 0, (oa2 - oa1) > Math.PI, true,\n cx + outerR * Math.cos(oa2),\n cy + outerR * Math.sin(oa2),\n )\n }\n\n // -- Corner 2: outer-end (outer arc meets end radial) --\n if (outerCr >= 0.5) {\n pb.quadTo(\n cx + outerR * Math.cos(outerEnd),\n cy + outerR * Math.sin(outerEnd),\n cx + (outerR - outerCr) * Math.cos(outerEnd),\n cy + (outerR - outerCr) * Math.sin(outerEnd),\n )\n }\n\n // -- Inner edge --\n if (innerCr >= 0.5 && innerR > 0) {\n // Line down to inner-end corner\n pb.lineTo(\n cx + (innerR + innerCr) * Math.cos(innerEnd),\n cy + (innerR + innerCr) * Math.sin(innerEnd),\n )\n\n // Corner 3: inner-end (end radial meets inner arc)\n pb.quadTo(\n cx + innerR * Math.cos(innerEnd),\n cy + innerR * Math.sin(innerEnd),\n cx + innerR * Math.cos(ia1),\n cy + innerR * Math.sin(ia1),\n )\n\n // Inner arc from ia1 to ia2 (reverse)\n if (ia1 > ia2) {\n pb.arc(innerR, innerR, 0, (ia1 - ia2) > Math.PI, false,\n cx + innerR * Math.cos(ia2),\n cy + innerR * Math.sin(ia2),\n )\n }\n\n // Corner 4: inner-start (inner arc meets start radial)\n pb.quadTo(\n cx + innerR * Math.cos(innerStart),\n cy + innerR * Math.sin(innerStart),\n cx + (innerR + innerCr) * Math.cos(innerStart),\n cy + (innerR + innerCr) * Math.sin(innerStart),\n )\n } else if (innerR > 0) {\n // No inner rounding — sharp inner corners\n pb.lineTo(\n cx + innerR * Math.cos(innerEnd),\n cy + innerR * Math.sin(innerEnd),\n )\n pb.arc(innerR, innerR, 0, innerSliceAngle > Math.PI, false,\n cx + innerR * Math.cos(innerStart),\n cy + innerR * Math.sin(innerStart),\n )\n }\n\n pb.close()\n return pb.build()\n}\n\n/**\n * Compute angular offsets for a uniform pixel gap at different radii.\n * Returns the padded start/end angles for both outer and inner arcs.\n */\nexport function uniformGapAngles(\n startAngle: number, endAngle: number,\n outerR: number, innerR: number,\n gapPx: number,\n): { outerStart: number; outerEnd: number; innerStart: number; innerEnd: number } {\n const halfGap = gapPx / 2\n const outerPad = halfGap / outerR\n const innerPad = innerR > 0 ? halfGap / innerR : 0\n return {\n outerStart: startAngle + outerPad,\n outerEnd: endAngle - outerPad,\n innerStart: startAngle + innerPad,\n innerEnd: endAngle - innerPad,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/slice-path.ts"],"names":["PathBuilder"],"mappings":"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","file":"chunk-6XWZSV6M.cjs","sourcesContent":["import { PathBuilder } from '../render/tree'\n\n/**\n * Build a rounded annular sector (pie/donut slice) SVG path string.\n *\n * Supports different angular offsets at inner vs outer radius for uniform\n * pixel-width gaps between slices.\n *\n * @param cx - Center x\n * @param cy - Center y\n * @param outerR - Outer radius\n * @param innerR - Inner radius (0 for full pie, >0 for donut)\n * @param outerStart - Start angle on outer arc (radians)\n * @param outerEnd - End angle on outer arc (radians)\n * @param innerStart - Start angle on inner arc (radians)\n * @param innerEnd - End angle on inner arc (radians)\n * @param cornerRadius - Corner rounding radius in px\n */\nexport function roundedSlicePath(\n cx: number, cy: number,\n outerR: number, innerR: number,\n outerStart: number, outerEnd: number,\n innerStart: number, innerEnd: number,\n cornerRadius: number,\n): string {\n const pb = new PathBuilder()\n const outerSliceAngle = outerEnd - outerStart\n const innerSliceAngle = innerEnd - innerStart\n const radialThickness = outerR - innerR\n const outerArcLen = outerSliceAngle * outerR\n const innerArcLen = innerSliceAngle * innerR\n\n // Separate corner radii for outer and inner edges.\n // Inner corners need aggressive clamping — when innerR is small, the angular\n // span of a corner becomes huge relative to the slice, causing path distortion.\n const outerCr = Math.min(\n cornerRadius,\n radialThickness / 2,\n outerArcLen / 4,\n )\n // Skip inner rounding entirely when inner radius is too small (<20px)\n // — the angular span of any rounding would dominate the inner edge.\n const innerCr = innerR >= 20\n ? Math.min(\n cornerRadius,\n radialThickness / 2,\n innerArcLen / 4,\n innerR * 0.25,\n )\n : 0\n\n if (outerCr < 0.5 && innerCr < 0.5) {\n // No rounding — standard path with per-radius angles\n const x1o = cx + outerR * Math.cos(outerStart)\n const y1o = cy + outerR * Math.sin(outerStart)\n const x2o = cx + outerR * Math.cos(outerEnd)\n const y2o = cy + outerR * Math.sin(outerEnd)\n const x1i = cx + innerR * Math.cos(innerEnd)\n const y1i = cy + innerR * Math.sin(innerEnd)\n const x2i = cx + innerR * Math.cos(innerStart)\n const y2i = cy + innerR * Math.sin(innerStart)\n\n pb.moveTo(x1o, y1o)\n pb.arc(outerR, outerR, 0, outerSliceAngle > Math.PI, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n if (innerR > 0) {\n pb.arc(innerR, innerR, 0, innerSliceAngle > Math.PI, false, x2i, y2i)\n }\n pb.close()\n return pb.build()\n }\n\n // Angular offsets for rounding on each arc (separate for outer/inner)\n const outerCrAngle = outerCr / outerR\n const innerCrAngle = innerR > 0 && innerCr > 0.5 ? innerCr / innerR : 0\n\n // Outer arc inset by corner angles\n const oa1 = outerStart + outerCrAngle\n const oa2 = outerEnd - outerCrAngle\n // Inner arc inset by corner angles (reverse direction)\n const ia1 = innerEnd - innerCrAngle\n const ia2 = innerStart + innerCrAngle\n\n // -- Corner 1: outer-start (start radial meets outer arc) --\n pb.moveTo(\n cx + (outerR - outerCr) * Math.cos(outerStart),\n cy + (outerR - outerCr) * Math.sin(outerStart),\n )\n if (outerCr >= 0.5) {\n pb.quadTo(\n cx + outerR * Math.cos(outerStart),\n cy + outerR * Math.sin(outerStart),\n cx + outerR * Math.cos(oa1),\n cy + outerR * Math.sin(oa1),\n )\n }\n\n // -- Outer arc from oa1 to oa2 --\n if (oa2 > oa1) {\n pb.arc(outerR, outerR, 0, (oa2 - oa1) > Math.PI, true,\n cx + outerR * Math.cos(oa2),\n cy + outerR * Math.sin(oa2),\n )\n }\n\n // -- Corner 2: outer-end (outer arc meets end radial) --\n if (outerCr >= 0.5) {\n pb.quadTo(\n cx + outerR * Math.cos(outerEnd),\n cy + outerR * Math.sin(outerEnd),\n cx + (outerR - outerCr) * Math.cos(outerEnd),\n cy + (outerR - outerCr) * Math.sin(outerEnd),\n )\n }\n\n // -- Inner edge --\n if (innerCr >= 0.5 && innerR > 0) {\n // Line down to inner-end corner\n pb.lineTo(\n cx + (innerR + innerCr) * Math.cos(innerEnd),\n cy + (innerR + innerCr) * Math.sin(innerEnd),\n )\n\n // Corner 3: inner-end (end radial meets inner arc)\n pb.quadTo(\n cx + innerR * Math.cos(innerEnd),\n cy + innerR * Math.sin(innerEnd),\n cx + innerR * Math.cos(ia1),\n cy + innerR * Math.sin(ia1),\n )\n\n // Inner arc from ia1 to ia2 (reverse)\n if (ia1 > ia2) {\n pb.arc(innerR, innerR, 0, (ia1 - ia2) > Math.PI, false,\n cx + innerR * Math.cos(ia2),\n cy + innerR * Math.sin(ia2),\n )\n }\n\n // Corner 4: inner-start (inner arc meets start radial)\n pb.quadTo(\n cx + innerR * Math.cos(innerStart),\n cy + innerR * Math.sin(innerStart),\n cx + (innerR + innerCr) * Math.cos(innerStart),\n cy + (innerR + innerCr) * Math.sin(innerStart),\n )\n } else if (innerR > 0) {\n // No inner rounding — sharp inner corners\n pb.lineTo(\n cx + innerR * Math.cos(innerEnd),\n cy + innerR * Math.sin(innerEnd),\n )\n pb.arc(innerR, innerR, 0, innerSliceAngle > Math.PI, false,\n cx + innerR * Math.cos(innerStart),\n cy + innerR * Math.sin(innerStart),\n )\n }\n\n pb.close()\n return pb.build()\n}\n\n/**\n * Compute angular offsets for a uniform pixel gap at different radii.\n * Returns the padded start/end angles for both outer and inner arcs.\n */\nexport function uniformGapAngles(\n startAngle: number, endAngle: number,\n outerR: number, innerR: number,\n gapPx: number,\n): { outerStart: number; outerEnd: number; innerStart: number; innerEnd: number } {\n const halfGap = gapPx / 2\n const outerPad = halfGap / outerR\n const innerPad = innerR > 0 ? halfGap / innerR : 0\n return {\n outerStart: startAngle + outerPad,\n outerEnd: endAngle - outerPad,\n innerStart: startAngle + innerPad,\n innerEnd: endAngle - innerPad,\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { prepareNoAxes } from './chunk-
|
|
2
|
-
import { PathBuilder, path, text } from './chunk-
|
|
1
|
+
import { prepareNoAxes } from './chunk-LKSKGQX7.js';
|
|
2
|
+
import { PathBuilder, path, text } from './chunk-XIVC32HU.js';
|
|
3
3
|
|
|
4
4
|
// src/charts/themeriver/themeriver-type.ts
|
|
5
5
|
var themeRiverChartType = {
|
|
@@ -163,5 +163,5 @@ var themeRiverChartType = {
|
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
export { themeRiverChartType };
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
167
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-7FUQMZGT.js.map
|
|
167
|
+
//# sourceMappingURL=chunk-7FUQMZGT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/themeriver/themeriver-type.ts"],"names":[],"mappings":"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","file":"chunk-N35UAFEU.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * ThemeRiver / StreamGraph chart — stacked area chart with a center baseline.\n *\n * Data convention:\n * - labels: time points (x-axis categories)\n * - series[i]: a stream layer. values[j] = thickness at time j\n *\n * The streams are stacked symmetrically around the horizontal center,\n * creating an organic river-like visualization.\n */\n\nexport const themeRiverChartType: ChartTypePlugin = {\n type: 'themeriver',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const nodes: RenderNode[] = []\n\n const timeCount = data.labels.length\n if (timeCount < 2 || data.series.length === 0) return nodes\n\n const seriesCount = data.series.length\n\n // Compute stacked values\n const stacks: number[][] = []\n for (let t = 0; t < timeCount; t++) {\n const column: number[] = []\n for (let si = 0; si < seriesCount; si++) {\n column.push(Math.abs(data.series[si]!.values[t] ?? 0))\n }\n stacks.push(column)\n }\n\n // Compute baseline offsets (wiggle / silhouette centering)\n const baselines: number[] = []\n for (let t = 0; t < timeCount; t++) {\n const total = stacks[t]!.reduce((s, v) => s + v, 0)\n baselines.push(-total / 2) // Center around 0\n }\n\n // Find global min/max for y-scale\n let yMin = Infinity\n let yMax = -Infinity\n for (let t = 0; t < timeCount; t++) {\n let cumulative = baselines[t]!\n if (cumulative < yMin) yMin = cumulative\n for (let si = 0; si < seriesCount; si++) {\n cumulative += stacks[t]![si]!\n }\n if (cumulative > yMax) yMax = cumulative\n }\n if (yMin === yMax) { yMin -= 1; yMax += 1 }\n\n const xStep = area.width / Math.max(timeCount - 1, 1)\n const mapX = (t: number) => area.x + t * xStep\n const mapY = (val: number) => {\n const frac = (val - yMin) / (yMax - yMin)\n return area.y + area.height - frac * area.height\n }\n\n // Render each series as a stream band\n for (let si = 0; si < seriesCount; si++) {\n const series = data.series[si]!\n const color = series.color ?? options.colors[si % options.colors.length]!\n\n // Compute top and bottom edges for this series\n const tops: { x: number; y: number }[] = []\n const bottoms: { x: number; y: number }[] = []\n\n for (let t = 0; t < timeCount; t++) {\n let cumBottom = baselines[t]!\n for (let s = 0; s < si; s++) {\n cumBottom += stacks[t]![s]!\n }\n const cumTop = cumBottom + stacks[t]![si]!\n\n tops.push({ x: mapX(t), y: mapY(cumTop) })\n bottoms.push({ x: mapX(t), y: mapY(cumBottom) })\n }\n\n // Build smooth path: top edge forward, bottom edge backward\n const pb = new PathBuilder()\n\n // Top edge (left to right)\n pb.moveTo(tops[0]!.x, tops[0]!.y)\n for (let t = 1; t < timeCount; t++) {\n const prev = tops[t - 1]!\n const curr = tops[t]!\n const cpx = (prev.x + curr.x) / 2\n pb.curveTo(cpx, prev.y, cpx, curr.y, curr.x, curr.y)\n }\n\n // Bottom edge (right to left)\n pb.lineTo(bottoms[timeCount - 1]!.x, bottoms[timeCount - 1]!.y)\n for (let t = timeCount - 2; t >= 0; t--) {\n const prev = bottoms[t + 1]!\n const curr = bottoms[t]!\n const cpx = (prev.x + curr.x) / 2\n pb.curveTo(cpx, prev.y, cpx, curr.y, curr.x, curr.y)\n }\n\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-themeriver-stream',\n fill: color,\n fillOpacity: 0.75,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': si,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}`,\n }))\n\n // Label at the widest point\n let maxWidth = 0\n let maxT = 0\n for (let t = 0; t < timeCount; t++) {\n const width = Math.abs(tops[t]!.y - bottoms[t]!.y)\n if (width > maxWidth) {\n maxWidth = width\n maxT = t\n }\n }\n\n if (maxWidth > 16) {\n const midY = (tops[maxT]!.y + bottoms[maxT]!.y) / 2\n const fontSize = Math.min(theme.fontSizeSmall, maxWidth * 0.4)\n nodes.push(text(tops[maxT]!.x, midY, series.name, {\n class: 'chartts-themeriver-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const timeCount = data.labels.length\n if (timeCount < 2 || data.series.length === 0) return null\n\n const seriesCount = data.series.length\n const xStep = area.width / Math.max(timeCount - 1, 1)\n\n // Find closest time index\n const t = Math.round((mx - area.x) / xStep)\n if (t < 0 || t >= timeCount) return null\n\n // Compute stacks at this time\n const column: number[] = []\n for (let si = 0; si < seriesCount; si++) {\n column.push(Math.abs(data.series[si]!.values[t] ?? 0))\n }\n const total = column.reduce((s, v) => s + v, 0)\n const baseline = -total / 2\n\n // Find global scale\n let yMin = Infinity\n let yMax = -Infinity\n for (let tt = 0; tt < timeCount; tt++) {\n let cum = 0\n for (let si = 0; si < seriesCount; si++) {\n cum += Math.abs(data.series[si]!.values[tt] ?? 0)\n }\n const bl = -cum / 2\n if (bl < yMin) yMin = bl\n if (bl + cum > yMax) yMax = bl + cum\n }\n if (yMin === yMax) { yMin -= 1; yMax += 1 }\n\n const mapY = (val: number) => {\n const frac = (val - yMin) / (yMax - yMin)\n return area.y + area.height - frac * area.height\n }\n\n // Check which stream the y coordinate falls in\n let cumBottom = baseline\n for (let si = 0; si < seriesCount; si++) {\n const cumTop = cumBottom + column[si]!\n const topY = mapY(cumTop)\n const bottomY = mapY(cumBottom)\n\n if (my >= topY && my <= bottomY) {\n return { seriesIndex: si, pointIndex: t, distance: 0, x: area.x + t * xStep, y: mapY((cumBottom + cumTop) / 2) }\n }\n cumBottom = cumTop\n }\n\n return null\n },\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/themeriver/themeriver-type.ts"],"names":[],"mappings":"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","file":"chunk-7FUQMZGT.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * ThemeRiver / StreamGraph chart — stacked area chart with a center baseline.\n *\n * Data convention:\n * - labels: time points (x-axis categories)\n * - series[i]: a stream layer. values[j] = thickness at time j\n *\n * The streams are stacked symmetrically around the horizontal center,\n * creating an organic river-like visualization.\n */\n\nexport const themeRiverChartType: ChartTypePlugin = {\n type: 'themeriver',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const nodes: RenderNode[] = []\n\n const timeCount = data.labels.length\n if (timeCount < 2 || data.series.length === 0) return nodes\n\n const seriesCount = data.series.length\n\n // Compute stacked values\n const stacks: number[][] = []\n for (let t = 0; t < timeCount; t++) {\n const column: number[] = []\n for (let si = 0; si < seriesCount; si++) {\n column.push(Math.abs(data.series[si]!.values[t] ?? 0))\n }\n stacks.push(column)\n }\n\n // Compute baseline offsets (wiggle / silhouette centering)\n const baselines: number[] = []\n for (let t = 0; t < timeCount; t++) {\n const total = stacks[t]!.reduce((s, v) => s + v, 0)\n baselines.push(-total / 2) // Center around 0\n }\n\n // Find global min/max for y-scale\n let yMin = Infinity\n let yMax = -Infinity\n for (let t = 0; t < timeCount; t++) {\n let cumulative = baselines[t]!\n if (cumulative < yMin) yMin = cumulative\n for (let si = 0; si < seriesCount; si++) {\n cumulative += stacks[t]![si]!\n }\n if (cumulative > yMax) yMax = cumulative\n }\n if (yMin === yMax) { yMin -= 1; yMax += 1 }\n\n const xStep = area.width / Math.max(timeCount - 1, 1)\n const mapX = (t: number) => area.x + t * xStep\n const mapY = (val: number) => {\n const frac = (val - yMin) / (yMax - yMin)\n return area.y + area.height - frac * area.height\n }\n\n // Render each series as a stream band\n for (let si = 0; si < seriesCount; si++) {\n const series = data.series[si]!\n const color = series.color ?? options.colors[si % options.colors.length]!\n\n // Compute top and bottom edges for this series\n const tops: { x: number; y: number }[] = []\n const bottoms: { x: number; y: number }[] = []\n\n for (let t = 0; t < timeCount; t++) {\n let cumBottom = baselines[t]!\n for (let s = 0; s < si; s++) {\n cumBottom += stacks[t]![s]!\n }\n const cumTop = cumBottom + stacks[t]![si]!\n\n tops.push({ x: mapX(t), y: mapY(cumTop) })\n bottoms.push({ x: mapX(t), y: mapY(cumBottom) })\n }\n\n // Build smooth path: top edge forward, bottom edge backward\n const pb = new PathBuilder()\n\n // Top edge (left to right)\n pb.moveTo(tops[0]!.x, tops[0]!.y)\n for (let t = 1; t < timeCount; t++) {\n const prev = tops[t - 1]!\n const curr = tops[t]!\n const cpx = (prev.x + curr.x) / 2\n pb.curveTo(cpx, prev.y, cpx, curr.y, curr.x, curr.y)\n }\n\n // Bottom edge (right to left)\n pb.lineTo(bottoms[timeCount - 1]!.x, bottoms[timeCount - 1]!.y)\n for (let t = timeCount - 2; t >= 0; t--) {\n const prev = bottoms[t + 1]!\n const curr = bottoms[t]!\n const cpx = (prev.x + curr.x) / 2\n pb.curveTo(cpx, prev.y, cpx, curr.y, curr.x, curr.y)\n }\n\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-themeriver-stream',\n fill: color,\n fillOpacity: 0.75,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': si,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}`,\n }))\n\n // Label at the widest point\n let maxWidth = 0\n let maxT = 0\n for (let t = 0; t < timeCount; t++) {\n const width = Math.abs(tops[t]!.y - bottoms[t]!.y)\n if (width > maxWidth) {\n maxWidth = width\n maxT = t\n }\n }\n\n if (maxWidth > 16) {\n const midY = (tops[maxT]!.y + bottoms[maxT]!.y) / 2\n const fontSize = Math.min(theme.fontSizeSmall, maxWidth * 0.4)\n nodes.push(text(tops[maxT]!.x, midY, series.name, {\n class: 'chartts-themeriver-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const timeCount = data.labels.length\n if (timeCount < 2 || data.series.length === 0) return null\n\n const seriesCount = data.series.length\n const xStep = area.width / Math.max(timeCount - 1, 1)\n\n // Find closest time index\n const t = Math.round((mx - area.x) / xStep)\n if (t < 0 || t >= timeCount) return null\n\n // Compute stacks at this time\n const column: number[] = []\n for (let si = 0; si < seriesCount; si++) {\n column.push(Math.abs(data.series[si]!.values[t] ?? 0))\n }\n const total = column.reduce((s, v) => s + v, 0)\n const baseline = -total / 2\n\n // Find global scale\n let yMin = Infinity\n let yMax = -Infinity\n for (let tt = 0; tt < timeCount; tt++) {\n let cum = 0\n for (let si = 0; si < seriesCount; si++) {\n cum += Math.abs(data.series[si]!.values[tt] ?? 0)\n }\n const bl = -cum / 2\n if (bl < yMin) yMin = bl\n if (bl + cum > yMax) yMax = bl + cum\n }\n if (yMin === yMax) { yMin -= 1; yMax += 1 }\n\n const mapY = (val: number) => {\n const frac = (val - yMin) / (yMax - yMin)\n return area.y + area.height - frac * area.height\n }\n\n // Check which stream the y coordinate falls in\n let cumBottom = baseline\n for (let si = 0; si < seriesCount; si++) {\n const cumTop = cumBottom + column[si]!\n const topY = mapY(cumTop)\n const bottomY = mapY(cumBottom)\n\n if (my >= topY && my <= bottomY) {\n return { seriesIndex: si, pointIndex: t, distance: 0, x: area.x + t * xStep, y: mapY((cumBottom + cumTop) / 2) }\n }\n cumBottom = cumTop\n }\n\n return null\n },\n}\n"]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkNHGKZMD7_cjs = require('./chunk-NHGKZMD7.cjs');
|
|
4
|
+
var chunkW626EAS5_cjs = require('./chunk-W626EAS5.cjs');
|
|
5
|
+
|
|
6
|
+
// src/charts/violin/violin-type.ts
|
|
7
|
+
var violinChartType = {
|
|
8
|
+
type: "violin",
|
|
9
|
+
getScaleTypes() {
|
|
10
|
+
return { x: "categorical", y: "linear" };
|
|
11
|
+
},
|
|
12
|
+
prepareData(data, options) {
|
|
13
|
+
const labelCount = data.labels?.length ?? 0;
|
|
14
|
+
const valLen = data.series[0]?.values.length ?? 0;
|
|
15
|
+
const syntheticData = { ...data };
|
|
16
|
+
if (labelCount > 0 && valLen > labelCount) {
|
|
17
|
+
const padded = (data.labels ?? []).map(String);
|
|
18
|
+
while (padded.length < valLen) padded.push("");
|
|
19
|
+
syntheticData.labels = padded;
|
|
20
|
+
}
|
|
21
|
+
const prepared = chunkW626EAS5_cjs.prepareData(syntheticData, options);
|
|
22
|
+
if (data.labels && data.labels.length < valLen) {
|
|
23
|
+
prepared.labels = [...data.labels];
|
|
24
|
+
}
|
|
25
|
+
return prepared;
|
|
26
|
+
},
|
|
27
|
+
render(ctx) {
|
|
28
|
+
const { data, options, xScale, yScale } = ctx;
|
|
29
|
+
const nodes = [];
|
|
30
|
+
const seriesCount = data.series.length;
|
|
31
|
+
if (seriesCount === 0) return nodes;
|
|
32
|
+
const vOpts = options;
|
|
33
|
+
const widthRatio = vOpts.violinWidth ?? 0.7;
|
|
34
|
+
const showBox = vOpts.showBox !== false;
|
|
35
|
+
const bw = chunkNHGKZMD7_cjs.getBandwidth(xScale);
|
|
36
|
+
const halfW = bw * widthRatio / 2;
|
|
37
|
+
for (let i = 0; i < data.labels.length; i++) {
|
|
38
|
+
let vals;
|
|
39
|
+
if (data.series.length === 5 && data.series[0].values.length === data.labels.length) {
|
|
40
|
+
vals = [
|
|
41
|
+
data.series[0].values[i],
|
|
42
|
+
data.series[1].values[i],
|
|
43
|
+
data.series[2].values[i],
|
|
44
|
+
data.series[3].values[i],
|
|
45
|
+
data.series[4].values[i]
|
|
46
|
+
];
|
|
47
|
+
} else if (data.series.length === 1) {
|
|
48
|
+
const s = data.series[0];
|
|
49
|
+
if (s.values.length >= (i + 1) * 5) {
|
|
50
|
+
vals = s.values.slice(i * 5, i * 5 + 5);
|
|
51
|
+
} else continue;
|
|
52
|
+
} else if (data.series.length > i && data.series[i].values.length >= 5) {
|
|
53
|
+
vals = data.series[i].values.slice(0, 5);
|
|
54
|
+
} else continue;
|
|
55
|
+
const [vMin, q1, median, q3, vMax] = vals;
|
|
56
|
+
const cx = xScale.map(i);
|
|
57
|
+
const color = options.colors[i % options.colors.length];
|
|
58
|
+
const seriesIdx = Math.min(i, data.series.length - 1);
|
|
59
|
+
const steps = 32;
|
|
60
|
+
const range = vMax - vMin || 1;
|
|
61
|
+
const densities = [];
|
|
62
|
+
let maxDensity = 0;
|
|
63
|
+
for (let s = 0; s <= steps; s++) {
|
|
64
|
+
const v = vMin + s / steps * range;
|
|
65
|
+
const dQ1 = gaussianKernel(v, q1, range * 0.15);
|
|
66
|
+
const dMed = gaussianKernel(v, median, range * 0.12);
|
|
67
|
+
const dQ3 = gaussianKernel(v, q3, range * 0.15);
|
|
68
|
+
const dMin = gaussianKernel(v, vMin, range * 0.08);
|
|
69
|
+
const dMax = gaussianKernel(v, vMax, range * 0.08);
|
|
70
|
+
const density = dMin * 0.3 + dQ1 * 1 + dMed * 1.5 + dQ3 * 1 + dMax * 0.3;
|
|
71
|
+
densities.push(density);
|
|
72
|
+
if (density > maxDensity) maxDensity = density;
|
|
73
|
+
}
|
|
74
|
+
if (maxDensity === 0) continue;
|
|
75
|
+
const rightPoints = [];
|
|
76
|
+
const leftPoints = [];
|
|
77
|
+
for (let s = 0; s <= steps; s++) {
|
|
78
|
+
const v = vMin + s / steps * range;
|
|
79
|
+
const py = yScale.map(v);
|
|
80
|
+
const w = densities[s] / maxDensity * halfW;
|
|
81
|
+
if (s === 0) rightPoints.push(`M ${cx + w} ${py}`);
|
|
82
|
+
else rightPoints.push(`L ${cx + w} ${py}`);
|
|
83
|
+
leftPoints.unshift(`L ${cx - w} ${py}`);
|
|
84
|
+
}
|
|
85
|
+
const d = rightPoints.join(" ") + " " + leftPoints.join(" ") + " Z";
|
|
86
|
+
const violinNodes = [];
|
|
87
|
+
violinNodes.push(chunkW626EAS5_cjs.path(d, {
|
|
88
|
+
class: "chartts-violin-shape",
|
|
89
|
+
fill: color,
|
|
90
|
+
fillOpacity: 0.3,
|
|
91
|
+
stroke: color,
|
|
92
|
+
strokeWidth: 1.5,
|
|
93
|
+
style: `--chartts-i:${i}`,
|
|
94
|
+
"data-series": seriesIdx,
|
|
95
|
+
"data-index": i,
|
|
96
|
+
tabindex: 0,
|
|
97
|
+
role: "img",
|
|
98
|
+
ariaLabel: `${data.labels[i]}: min=${vMin}, Q1=${q1}, median=${median}, Q3=${q3}, max=${vMax}`
|
|
99
|
+
}));
|
|
100
|
+
if (showBox) {
|
|
101
|
+
const yQ1 = yScale.map(q1);
|
|
102
|
+
const yQ3 = yScale.map(q3);
|
|
103
|
+
const boxTop = Math.min(yQ1, yQ3);
|
|
104
|
+
const boxH = Math.abs(yQ3 - yQ1);
|
|
105
|
+
const boxW = halfW * 0.3;
|
|
106
|
+
violinNodes.push(chunkW626EAS5_cjs.rect(cx - boxW, boxTop, boxW * 2, boxH, {
|
|
107
|
+
class: "chartts-violin-box",
|
|
108
|
+
fill: color,
|
|
109
|
+
fillOpacity: 0.5,
|
|
110
|
+
stroke: color,
|
|
111
|
+
strokeWidth: 1,
|
|
112
|
+
rx: 2
|
|
113
|
+
}));
|
|
114
|
+
const yMed = yScale.map(median);
|
|
115
|
+
violinNodes.push(chunkW626EAS5_cjs.line(cx - boxW, yMed, cx + boxW, yMed, {
|
|
116
|
+
class: "chartts-violin-median",
|
|
117
|
+
stroke: "#fff",
|
|
118
|
+
strokeWidth: 2
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
nodes.push(chunkW626EAS5_cjs.group(violinNodes, {
|
|
122
|
+
class: `chartts-series chartts-series-${i}`,
|
|
123
|
+
"data-series-name": String(data.labels[i])
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
return nodes;
|
|
127
|
+
},
|
|
128
|
+
hitTest(ctx, mx, my) {
|
|
129
|
+
const { data, xScale, yScale, options } = ctx;
|
|
130
|
+
if (data.labels.length === 0) return null;
|
|
131
|
+
const vOpts = options;
|
|
132
|
+
const widthRatio = vOpts.violinWidth ?? 0.7;
|
|
133
|
+
const bw = chunkNHGKZMD7_cjs.getBandwidth(xScale);
|
|
134
|
+
const halfW = bw * widthRatio / 2;
|
|
135
|
+
for (let i = 0; i < data.labels.length; i++) {
|
|
136
|
+
let vals;
|
|
137
|
+
if (data.series.length === 5 && data.series[0].values.length === data.labels.length) {
|
|
138
|
+
vals = [
|
|
139
|
+
data.series[0].values[i],
|
|
140
|
+
data.series[1].values[i],
|
|
141
|
+
data.series[2].values[i],
|
|
142
|
+
data.series[3].values[i],
|
|
143
|
+
data.series[4].values[i]
|
|
144
|
+
];
|
|
145
|
+
} else if (data.series.length === 1) {
|
|
146
|
+
const s = data.series[0];
|
|
147
|
+
if (s.values.length >= (i + 1) * 5) vals = s.values.slice(i * 5, i * 5 + 5);
|
|
148
|
+
else continue;
|
|
149
|
+
} else if (data.series.length > i && data.series[i].values.length >= 5) {
|
|
150
|
+
vals = data.series[i].values.slice(0, 5);
|
|
151
|
+
} else continue;
|
|
152
|
+
const cx = xScale.map(i);
|
|
153
|
+
const yMin = yScale.map(vals[0]);
|
|
154
|
+
const yMax = yScale.map(vals[4]);
|
|
155
|
+
const top = Math.min(yMin, yMax);
|
|
156
|
+
const bottom = Math.max(yMin, yMax);
|
|
157
|
+
if (mx >= cx - halfW - 4 && mx <= cx + halfW + 4 && my >= top - 4 && my <= bottom + 4) {
|
|
158
|
+
const seriesIdx = Math.min(i, data.series.length - 1);
|
|
159
|
+
return { seriesIndex: seriesIdx, pointIndex: i, distance: 0, x: cx, y: yScale.map(vals[2]) };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
function gaussianKernel(x, mu, sigma) {
|
|
166
|
+
const z = (x - mu) / sigma;
|
|
167
|
+
return Math.exp(-0.5 * z * z);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
exports.violinChartType = violinChartType;
|
|
171
|
+
//# sourceMappingURL=chunk-7LZVSOZR.cjs.map
|
|
172
|
+
//# sourceMappingURL=chunk-7LZVSOZR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/violin/violin-type.ts"],"names":["prepareData","getBandwidth","path","rect","line","group"],"mappings":"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","file":"chunk-7LZVSOZR.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, path, line, rect } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\n/**\n * Violin chart — shows the full distribution shape for each category.\n *\n * Data format: same as boxplot — single series with N*5 values per label:\n * [min, Q1, median, Q3, max] repeated per category.\n *\n * Additionally accepts raw sample values via options.violin.samples\n * for true KDE computation. Falls back to a smooth approximation\n * from the 5-number summary when samples aren't provided.\n */\nexport interface ViolinOptions {\n /** KDE bandwidth (smoothing). Default 0.3 of data range. */\n bandwidth?: number\n /** Show inner box + median line. Default true. */\n showBox?: boolean\n /** Width ratio relative to band. Default 0.7. */\n violinWidth?: number\n}\n\nexport const violinChartType: ChartTypePlugin = {\n type: 'violin',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const labelCount = data.labels?.length ?? 0\n const valLen = data.series[0]?.values.length ?? 0\n const syntheticData = { ...data }\n if (labelCount > 0 && valLen > labelCount) {\n const padded: string[] = (data.labels ?? []).map(String)\n while (padded.length < valLen) padded.push('')\n syntheticData.labels = padded\n }\n const prepared = prepareData(syntheticData, options)\n if (data.labels && data.labels.length < valLen) {\n prepared.labels = [...data.labels]\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 if (seriesCount === 0) return nodes\n\n const vOpts = options as unknown as ViolinOptions\n const widthRatio = vOpts.violinWidth ?? 0.7\n const showBox = vOpts.showBox !== false\n\n const bw = getBandwidth(xScale)\n const halfW = (bw * widthRatio) / 2\n\n for (let i = 0; i < data.labels.length; i++) {\n let vals: number[]\n if (data.series.length === 5 && data.series[0]!.values.length === data.labels.length) {\n // Boxplot format: 5 series (Min, Q1, Median, Q3, Max), each with one value per label\n vals = [\n data.series[0]!.values[i]!,\n data.series[1]!.values[i]!,\n data.series[2]!.values[i]!,\n data.series[3]!.values[i]!,\n data.series[4]!.values[i]!,\n ]\n } else if (data.series.length === 1) {\n const s = data.series[0]!\n if (s.values.length >= (i + 1) * 5) {\n vals = s.values.slice(i * 5, i * 5 + 5)\n } else continue\n } else if (data.series.length > i && data.series[i]!.values.length >= 5) {\n vals = data.series[i]!.values.slice(0, 5)\n } else continue\n\n const [vMin, q1, median, q3, vMax] = vals as [number, number, number, number, number]\n const cx = xScale.map(i)\n const color = options.colors[i % options.colors.length]!\n const seriesIdx = Math.min(i, data.series.length - 1)\n\n // Generate KDE-like density profile from 5-number summary\n const steps = 32\n const range = vMax - vMin || 1\n const densities: number[] = []\n let maxDensity = 0\n\n for (let s = 0; s <= steps; s++) {\n const v = vMin + (s / steps) * range\n // Approximate density using a smooth curve peaked at the median\n // with mass concentrated between Q1 and Q3\n const dQ1 = gaussianKernel(v, q1, range * 0.15)\n const dMed = gaussianKernel(v, median, range * 0.12)\n const dQ3 = gaussianKernel(v, q3, range * 0.15)\n const dMin = gaussianKernel(v, vMin, range * 0.08)\n const dMax = gaussianKernel(v, vMax, range * 0.08)\n const density = dMin * 0.3 + dQ1 * 1.0 + dMed * 1.5 + dQ3 * 1.0 + dMax * 0.3\n densities.push(density)\n if (density > maxDensity) maxDensity = density\n }\n\n if (maxDensity === 0) continue\n\n // Build mirrored violin path\n const rightPoints: string[] = []\n const leftPoints: string[] = []\n\n for (let s = 0; s <= steps; s++) {\n const v = vMin + (s / steps) * range\n const py = yScale.map(v)\n const w = (densities[s]! / maxDensity) * halfW\n\n if (s === 0) rightPoints.push(`M ${cx + w} ${py}`)\n else rightPoints.push(`L ${cx + w} ${py}`)\n\n leftPoints.unshift(`L ${cx - w} ${py}`)\n }\n\n const d = rightPoints.join(' ') + ' ' + leftPoints.join(' ') + ' Z'\n\n const violinNodes: RenderNode[] = []\n\n violinNodes.push(path(d, {\n class: 'chartts-violin-shape',\n fill: color,\n fillOpacity: 0.3,\n stroke: color,\n strokeWidth: 1.5,\n style: `--chartts-i:${i}`,\n 'data-series': seriesIdx,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i]}: min=${vMin}, Q1=${q1}, median=${median}, Q3=${q3}, max=${vMax}`,\n }))\n\n if (showBox) {\n // Inner IQR box\n const yQ1 = yScale.map(q1)\n const yQ3 = yScale.map(q3)\n const boxTop = Math.min(yQ1, yQ3)\n const boxH = Math.abs(yQ3 - yQ1)\n const boxW = halfW * 0.3\n\n violinNodes.push(rect(cx - boxW, boxTop, boxW * 2, boxH, {\n class: 'chartts-violin-box',\n fill: color,\n fillOpacity: 0.5,\n stroke: color,\n strokeWidth: 1,\n rx: 2,\n }))\n\n // Median line\n const yMed = yScale.map(median)\n violinNodes.push(line(cx - boxW, yMed, cx + boxW, yMed, {\n class: 'chartts-violin-median',\n stroke: '#fff',\n strokeWidth: 2,\n }))\n }\n\n nodes.push(group(violinNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i]),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, xScale, yScale, options } = ctx\n if (data.labels.length === 0) return null\n\n const vOpts = options as unknown as ViolinOptions\n const widthRatio = vOpts.violinWidth ?? 0.7\n const bw = getBandwidth(xScale)\n const halfW = (bw * widthRatio) / 2\n\n for (let i = 0; i < data.labels.length; i++) {\n let vals: number[]\n if (data.series.length === 5 && data.series[0]!.values.length === data.labels.length) {\n vals = [\n data.series[0]!.values[i]!,\n data.series[1]!.values[i]!,\n data.series[2]!.values[i]!,\n data.series[3]!.values[i]!,\n data.series[4]!.values[i]!,\n ]\n } else if (data.series.length === 1) {\n const s = data.series[0]!\n if (s.values.length >= (i + 1) * 5) vals = s.values.slice(i * 5, i * 5 + 5)\n else continue\n } else if (data.series.length > i && data.series[i]!.values.length >= 5) {\n vals = data.series[i]!.values.slice(0, 5)\n } else continue\n\n const cx = xScale.map(i)\n const yMin = yScale.map(vals[0]!)\n const yMax = yScale.map(vals[4]!)\n const top = Math.min(yMin, yMax)\n const bottom = Math.max(yMin, yMax)\n\n if (mx >= cx - halfW - 4 && mx <= cx + halfW + 4 &&\n my >= top - 4 && my <= bottom + 4) {\n const seriesIdx = Math.min(i, data.series.length - 1)\n return { seriesIndex: seriesIdx, pointIndex: i, distance: 0, x: cx, y: yScale.map(vals[2]!) }\n }\n }\n\n return null\n },\n}\n\nfunction gaussianKernel(x: number, mu: number, sigma: number): number {\n const z = (x - mu) / sigma\n return Math.exp(-0.5 * z * z)\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkX5SG6MFS_cjs = require('./chunk-X5SG6MFS.cjs');
|
|
4
|
+
var chunkW626EAS5_cjs = require('./chunk-W626EAS5.cjs');
|
|
5
5
|
|
|
6
6
|
// src/charts/pictorialbar/pictorialbar-type.ts
|
|
7
7
|
var SYMBOL_PATHS = {
|
|
@@ -17,7 +17,7 @@ var pictorialBarChartType = {
|
|
|
17
17
|
return { x: "categorical", y: "linear" };
|
|
18
18
|
},
|
|
19
19
|
prepareData(data, options) {
|
|
20
|
-
return
|
|
20
|
+
return chunkX5SG6MFS_cjs.prepareNoAxes(data, options);
|
|
21
21
|
},
|
|
22
22
|
render(ctx) {
|
|
23
23
|
const { data, area, theme, options } = ctx;
|
|
@@ -66,7 +66,7 @@ var pictorialBarChartType = {
|
|
|
66
66
|
});
|
|
67
67
|
} else {
|
|
68
68
|
const symbolPath = SYMBOL_PATHS[symbolShape] ?? SYMBOL_PATHS.circle;
|
|
69
|
-
barNodes.push(
|
|
69
|
+
barNodes.push(chunkW626EAS5_cjs.path(symbolPath, {
|
|
70
70
|
class: "chartts-pictorialbar-symbol",
|
|
71
71
|
fill: color,
|
|
72
72
|
fillOpacity: 0.85,
|
|
@@ -78,7 +78,7 @@ var pictorialBarChartType = {
|
|
|
78
78
|
}
|
|
79
79
|
if (showValues) {
|
|
80
80
|
const topY = area.y + area.height - 20 - (symbolCount - 1) * symbolStep - symbolSize;
|
|
81
|
-
barNodes.push(
|
|
81
|
+
barNodes.push(chunkW626EAS5_cjs.text(cx, topY - 8, String(values[i]), {
|
|
82
82
|
class: "chartts-pictorialbar-value",
|
|
83
83
|
fill: theme.textColor,
|
|
84
84
|
textAnchor: "middle",
|
|
@@ -88,7 +88,7 @@ var pictorialBarChartType = {
|
|
|
88
88
|
fontWeight: 600
|
|
89
89
|
}));
|
|
90
90
|
}
|
|
91
|
-
barNodes.push(
|
|
91
|
+
barNodes.push(chunkW626EAS5_cjs.text(cx, area.y + area.height - 4, String(data.labels[i] ?? `Cat ${i + 1}`), {
|
|
92
92
|
class: "chartts-pictorialbar-label",
|
|
93
93
|
fill: theme.textMuted,
|
|
94
94
|
textAnchor: "middle",
|
|
@@ -96,7 +96,7 @@ var pictorialBarChartType = {
|
|
|
96
96
|
fontSize: theme.fontSizeSmall,
|
|
97
97
|
fontFamily: theme.fontFamily
|
|
98
98
|
}));
|
|
99
|
-
nodes.push(
|
|
99
|
+
nodes.push(chunkW626EAS5_cjs.group(barNodes, {
|
|
100
100
|
class: `chartts-series chartts-series-${i}`,
|
|
101
101
|
"data-series-name": String(data.labels[i] ?? `Cat ${i + 1}`)
|
|
102
102
|
}));
|
|
@@ -128,5 +128,5 @@ var pictorialBarChartType = {
|
|
|
128
128
|
};
|
|
129
129
|
|
|
130
130
|
exports.pictorialBarChartType = pictorialBarChartType;
|
|
131
|
-
//# sourceMappingURL=chunk-
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
131
|
+
//# sourceMappingURL=chunk-7XOK2HLV.cjs.map
|
|
132
|
+
//# sourceMappingURL=chunk-7XOK2HLV.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/pictorialbar/pictorialbar-type.ts"],"names":["prepareNoAxes","path","text","group"],"mappings":"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","file":"chunk-A5G32G2R.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\n\n/**\n * PictorialBar chart — bar chart where bars are filled with repeated symbols.\n *\n * Data convention:\n * - labels: category names\n * - series[0].values: bar values\n *\n * The bars are made of stacked symbols (circles, diamonds, or custom shapes)\n * creating a pictograph/isotype visualization.\n */\n\nexport interface PictorialBarOptions {\n /** Symbol shape. Default 'circle'. */\n symbol?: 'circle' | 'diamond' | 'square' | 'triangle' | 'star'\n /** Symbol size in px. Default 12. */\n symbolSize?: number\n /** Gap between symbols. Default 2. */\n symbolGap?: number\n /** Show value labels. Default true. */\n showValues?: boolean\n}\n\n// SVG path data for symbols (centered at 0,0, size 1x1)\nconst SYMBOL_PATHS: Record<string, string> = {\n circle: 'M0.5,0A0.5,0.5,0,1,1,-0.5,0A0.5,0.5,0,1,1,0.5,0Z',\n diamond: 'M0,-0.5L0.5,0L0,0.5L-0.5,0Z',\n square: 'M-0.4,-0.4L0.4,-0.4L0.4,0.4L-0.4,0.4Z',\n triangle: 'M0,-0.5L0.5,0.4L-0.5,0.4Z',\n star: 'M0,-0.5L0.15,-0.15L0.5,-0.15L0.22,0.07L0.31,0.45L0,0.22L-0.31,0.45L-0.22,0.07L-0.5,-0.15L-0.15,-0.15Z',\n}\n\nexport const pictorialBarChartType: ChartTypePlugin = {\n type: 'pictorialbar',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const nodes: RenderNode[] = []\n\n const series = data.series[0]\n if (!series || series.values.length === 0) return nodes\n\n const pOpts = options as unknown as PictorialBarOptions\n const symbolShape = pOpts.symbol ?? 'circle'\n const symbolSize = pOpts.symbolSize ?? 14\n const symbolGap = pOpts.symbolGap ?? 2\n const showValues = pOpts.showValues ?? true\n\n const values = series.values\n const maxVal = Math.max(...values.map(Math.abs))\n if (maxVal === 0) return nodes\n\n const barCount = values.length\n const barGap = 16\n const barWidth = Math.min(\n (area.width - barGap * (barCount + 1)) / barCount,\n symbolSize * 3,\n )\n const totalWidth = barCount * barWidth + (barCount - 1) * barGap\n const startX = area.x + (area.width - totalWidth) / 2\n\n const symbolStep = symbolSize + symbolGap\n const maxSymbols = Math.floor((area.height - 30) / symbolStep)\n\n for (let i = 0; i < barCount; i++) {\n const val = Math.abs(values[i]!)\n const symbolCount = Math.max(1, Math.round((val / maxVal) * maxSymbols))\n const color = options.colors[i % options.colors.length]!\n const cx = startX + i * (barWidth + barGap) + barWidth / 2\n const barNodes: RenderNode[] = []\n\n for (let s = 0; s < symbolCount; s++) {\n const sy = area.y + area.height - 20 - s * symbolStep - symbolSize / 2\n\n if (symbolShape === 'circle') {\n barNodes.push({\n type: 'circle',\n cx,\n cy: sy,\n r: symbolSize / 2,\n attrs: {\n class: 'chartts-pictorialbar-symbol',\n fill: color,\n fillOpacity: 0.85,\n 'data-series': 0,\n 'data-index': i,\n },\n })\n } else {\n // Use path-based symbols\n const symbolPath = SYMBOL_PATHS[symbolShape] ?? SYMBOL_PATHS.circle!\n barNodes.push(path(symbolPath, {\n class: 'chartts-pictorialbar-symbol',\n fill: color,\n fillOpacity: 0.85,\n transform: `translate(${cx},${sy}) scale(${symbolSize})`,\n 'data-series': 0,\n 'data-index': i,\n }))\n }\n }\n\n // Value label above bar\n if (showValues) {\n const topY = area.y + area.height - 20 - (symbolCount - 1) * symbolStep - symbolSize\n barNodes.push(text(cx, topY - 8, String(values[i]!), {\n class: 'chartts-pictorialbar-value',\n fill: theme.textColor,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n // Category label below\n barNodes.push(text(cx, area.y + area.height - 4, String(data.labels[i] ?? `Cat ${i + 1}`), {\n class: 'chartts-pictorialbar-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(barNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Cat ${i + 1}`),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, _my: number): HitResult | null {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const pOpts = ctx.options as unknown as PictorialBarOptions\n const symbolSize = pOpts.symbolSize ?? 14\n\n const barCount = series.values.length\n const barGap = 16\n const barWidth = Math.min(\n (area.width - barGap * (barCount + 1)) / barCount,\n symbolSize * 3,\n )\n const totalWidth = barCount * barWidth + (barCount - 1) * barGap\n const startX = area.x + (area.width - totalWidth) / 2\n\n for (let i = 0; i < barCount; i++) {\n const cx = startX + i * (barWidth + barGap) + barWidth / 2\n if (Math.abs(mx - cx) < barWidth / 2 + 5) {\n return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx), x: cx, y: area.y + area.height / 2 }\n }\n }\n\n return null\n },\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/pictorialbar/pictorialbar-type.ts"],"names":["prepareNoAxes","path","text","group"],"mappings":"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","file":"chunk-7XOK2HLV.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\n\n/**\n * PictorialBar chart — bar chart where bars are filled with repeated symbols.\n *\n * Data convention:\n * - labels: category names\n * - series[0].values: bar values\n *\n * The bars are made of stacked symbols (circles, diamonds, or custom shapes)\n * creating a pictograph/isotype visualization.\n */\n\nexport interface PictorialBarOptions {\n /** Symbol shape. Default 'circle'. */\n symbol?: 'circle' | 'diamond' | 'square' | 'triangle' | 'star'\n /** Symbol size in px. Default 12. */\n symbolSize?: number\n /** Gap between symbols. Default 2. */\n symbolGap?: number\n /** Show value labels. Default true. */\n showValues?: boolean\n}\n\n// SVG path data for symbols (centered at 0,0, size 1x1)\nconst SYMBOL_PATHS: Record<string, string> = {\n circle: 'M0.5,0A0.5,0.5,0,1,1,-0.5,0A0.5,0.5,0,1,1,0.5,0Z',\n diamond: 'M0,-0.5L0.5,0L0,0.5L-0.5,0Z',\n square: 'M-0.4,-0.4L0.4,-0.4L0.4,0.4L-0.4,0.4Z',\n triangle: 'M0,-0.5L0.5,0.4L-0.5,0.4Z',\n star: 'M0,-0.5L0.15,-0.15L0.5,-0.15L0.22,0.07L0.31,0.45L0,0.22L-0.31,0.45L-0.22,0.07L-0.5,-0.15L-0.15,-0.15Z',\n}\n\nexport const pictorialBarChartType: ChartTypePlugin = {\n type: 'pictorialbar',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const nodes: RenderNode[] = []\n\n const series = data.series[0]\n if (!series || series.values.length === 0) return nodes\n\n const pOpts = options as unknown as PictorialBarOptions\n const symbolShape = pOpts.symbol ?? 'circle'\n const symbolSize = pOpts.symbolSize ?? 14\n const symbolGap = pOpts.symbolGap ?? 2\n const showValues = pOpts.showValues ?? true\n\n const values = series.values\n const maxVal = Math.max(...values.map(Math.abs))\n if (maxVal === 0) return nodes\n\n const barCount = values.length\n const barGap = 16\n const barWidth = Math.min(\n (area.width - barGap * (barCount + 1)) / barCount,\n symbolSize * 3,\n )\n const totalWidth = barCount * barWidth + (barCount - 1) * barGap\n const startX = area.x + (area.width - totalWidth) / 2\n\n const symbolStep = symbolSize + symbolGap\n const maxSymbols = Math.floor((area.height - 30) / symbolStep)\n\n for (let i = 0; i < barCount; i++) {\n const val = Math.abs(values[i]!)\n const symbolCount = Math.max(1, Math.round((val / maxVal) * maxSymbols))\n const color = options.colors[i % options.colors.length]!\n const cx = startX + i * (barWidth + barGap) + barWidth / 2\n const barNodes: RenderNode[] = []\n\n for (let s = 0; s < symbolCount; s++) {\n const sy = area.y + area.height - 20 - s * symbolStep - symbolSize / 2\n\n if (symbolShape === 'circle') {\n barNodes.push({\n type: 'circle',\n cx,\n cy: sy,\n r: symbolSize / 2,\n attrs: {\n class: 'chartts-pictorialbar-symbol',\n fill: color,\n fillOpacity: 0.85,\n 'data-series': 0,\n 'data-index': i,\n },\n })\n } else {\n // Use path-based symbols\n const symbolPath = SYMBOL_PATHS[symbolShape] ?? SYMBOL_PATHS.circle!\n barNodes.push(path(symbolPath, {\n class: 'chartts-pictorialbar-symbol',\n fill: color,\n fillOpacity: 0.85,\n transform: `translate(${cx},${sy}) scale(${symbolSize})`,\n 'data-series': 0,\n 'data-index': i,\n }))\n }\n }\n\n // Value label above bar\n if (showValues) {\n const topY = area.y + area.height - 20 - (symbolCount - 1) * symbolStep - symbolSize\n barNodes.push(text(cx, topY - 8, String(values[i]!), {\n class: 'chartts-pictorialbar-value',\n fill: theme.textColor,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n // Category label below\n barNodes.push(text(cx, area.y + area.height - 4, String(data.labels[i] ?? `Cat ${i + 1}`), {\n class: 'chartts-pictorialbar-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(barNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Cat ${i + 1}`),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, _my: number): HitResult | null {\n const { data, area } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const pOpts = ctx.options as unknown as PictorialBarOptions\n const symbolSize = pOpts.symbolSize ?? 14\n\n const barCount = series.values.length\n const barGap = 16\n const barWidth = Math.min(\n (area.width - barGap * (barCount + 1)) / barCount,\n symbolSize * 3,\n )\n const totalWidth = barCount * barWidth + (barCount - 1) * barGap\n const startX = area.x + (area.width - totalWidth) / 2\n\n for (let i = 0; i < barCount; i++) {\n const cx = startX + i * (barWidth + barGap) + barWidth / 2\n if (Math.abs(mx - cx) < barWidth / 2 + 5) {\n return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx), x: cx, y: area.y + area.height / 2 }\n }\n }\n\n return null\n },\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { prepareNoAxes } from './chunk-
|
|
2
|
-
import { text, rect, line, group } from './chunk-
|
|
1
|
+
import { prepareNoAxes } from './chunk-LKSKGQX7.js';
|
|
2
|
+
import { text, rect, line, group } from './chunk-XIVC32HU.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-ACN4JCSF.js.map
|
|
112
|
+
//# sourceMappingURL=chunk-ACN4JCSF.js.map
|