@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.
Files changed (291) hide show
  1. package/dist/area.cjs +10 -10
  2. package/dist/area.js +5 -5
  3. package/dist/bar.cjs +9 -9
  4. package/dist/bar.js +4 -4
  5. package/dist/baseline.cjs +9 -9
  6. package/dist/baseline.js +4 -4
  7. package/dist/boxplot.cjs +9 -9
  8. package/dist/boxplot.js +4 -4
  9. package/dist/bubble.cjs +9 -9
  10. package/dist/bubble.js +4 -4
  11. package/dist/bullet.cjs +10 -10
  12. package/dist/bullet.js +5 -5
  13. package/dist/calendar.cjs +10 -10
  14. package/dist/calendar.js +5 -5
  15. package/dist/candlestick.cjs +9 -9
  16. package/dist/candlestick.js +4 -4
  17. package/dist/chord.cjs +10 -10
  18. package/dist/chord.js +5 -5
  19. package/dist/{chunk-XKERO5K2.js → chunk-24557PYN.js} +3 -3
  20. package/dist/{chunk-XKERO5K2.js.map → chunk-24557PYN.js.map} +1 -1
  21. package/dist/{chunk-5YNIOIKK.js → chunk-2BUIZDOB.js} +3 -3
  22. package/dist/{chunk-5YNIOIKK.js.map → chunk-2BUIZDOB.js.map} +1 -1
  23. package/dist/{chunk-EHKHXQ46.cjs → chunk-2IMUTDTD.cjs} +10 -10
  24. package/dist/{chunk-EHKHXQ46.cjs.map → chunk-2IMUTDTD.cjs.map} +1 -1
  25. package/dist/{chunk-7ZPHLIFP.cjs → chunk-2IWLOBSF.cjs} +6 -6
  26. package/dist/{chunk-7ZPHLIFP.cjs.map → chunk-2IWLOBSF.cjs.map} +1 -1
  27. package/dist/{chunk-F5AOBHQY.js → chunk-2JYK52HV.js} +4 -4
  28. package/dist/{chunk-F5AOBHQY.js.map → chunk-2JYK52HV.js.map} +1 -1
  29. package/dist/{chunk-WVQVGQJO.cjs → chunk-2QRCHYTZ.cjs} +7 -7
  30. package/dist/{chunk-WVQVGQJO.cjs.map → chunk-2QRCHYTZ.cjs.map} +1 -1
  31. package/dist/{chunk-XWCY67K5.js → chunk-34DQGCPP.js} +4 -4
  32. package/dist/{chunk-XWCY67K5.js.map → chunk-34DQGCPP.js.map} +1 -1
  33. package/dist/{chunk-5J26EN5I.js → chunk-3JB4JBBK.js} +4 -4
  34. package/dist/{chunk-5J26EN5I.js.map → chunk-3JB4JBBK.js.map} +1 -1
  35. package/dist/{chunk-EHNX3MG3.cjs → chunk-3NHH6C4K.cjs} +13 -13
  36. package/dist/{chunk-EHNX3MG3.cjs.map → chunk-3NHH6C4K.cjs.map} +1 -1
  37. package/dist/{chunk-ECB3UPTC.cjs → chunk-3SVNEKXE.cjs} +11 -11
  38. package/dist/{chunk-ECB3UPTC.cjs.map → chunk-3SVNEKXE.cjs.map} +1 -1
  39. package/dist/{chunk-BYB3LQAT.cjs → chunk-4D6PVH2C.cjs} +9 -9
  40. package/dist/{chunk-BYB3LQAT.cjs.map → chunk-4D6PVH2C.cjs.map} +1 -1
  41. package/dist/{chunk-NG7DRWWT.cjs → chunk-4MNVJVK3.cjs} +6 -6
  42. package/dist/{chunk-NG7DRWWT.cjs.map → chunk-4MNVJVK3.cjs.map} +1 -1
  43. package/dist/{chunk-RQJRVKAH.js → chunk-4QRND2V5.js} +3 -3
  44. package/dist/{chunk-RQJRVKAH.js.map → chunk-4QRND2V5.js.map} +1 -1
  45. package/dist/{chunk-NGKUI7XE.cjs → chunk-55ZTXQQQ.cjs} +12 -12
  46. package/dist/{chunk-NGKUI7XE.cjs.map → chunk-55ZTXQQQ.cjs.map} +1 -1
  47. package/dist/{chunk-2MWA7H6J.js → chunk-56BN43J4.js} +5 -5
  48. package/dist/{chunk-2MWA7H6J.js.map → chunk-56BN43J4.js.map} +1 -1
  49. package/dist/{chunk-RJIPFWW7.js → chunk-5E7FXDBM.js} +4 -4
  50. package/dist/{chunk-RJIPFWW7.js.map → chunk-5E7FXDBM.js.map} +1 -1
  51. package/dist/{chunk-ILCWDAKD.js → chunk-5HZEDCJG.js} +3 -3
  52. package/dist/{chunk-ILCWDAKD.js.map → chunk-5HZEDCJG.js.map} +1 -1
  53. package/dist/{chunk-DKXW2FQC.cjs → chunk-5QT67VYJ.cjs} +10 -10
  54. package/dist/{chunk-DKXW2FQC.cjs.map → chunk-5QT67VYJ.cjs.map} +1 -1
  55. package/dist/{chunk-XE5ZYFGM.js → chunk-5QVUBGM7.js} +4 -4
  56. package/dist/{chunk-XE5ZYFGM.js.map → chunk-5QVUBGM7.js.map} +1 -1
  57. package/dist/{chunk-DR5MQC3W.js → chunk-62DBXI4N.js} +4 -4
  58. package/dist/{chunk-DR5MQC3W.js.map → chunk-62DBXI4N.js.map} +1 -1
  59. package/dist/{chunk-HMB2RIEE.js → chunk-6QMV75NT.js} +4 -4
  60. package/dist/{chunk-HMB2RIEE.js.map → chunk-6QMV75NT.js.map} +1 -1
  61. package/dist/{chunk-OUN3MWRQ.cjs → chunk-754Z4OR6.cjs} +10 -10
  62. package/dist/{chunk-OUN3MWRQ.cjs.map → chunk-754Z4OR6.cjs.map} +1 -1
  63. package/dist/{chunk-3SOKHPAO.js → chunk-7GLCJPV5.js} +4 -4
  64. package/dist/{chunk-3SOKHPAO.js.map → chunk-7GLCJPV5.js.map} +1 -1
  65. package/dist/{chunk-PQCHNZHM.cjs → chunk-7PHOSSLJ.cjs} +9 -9
  66. package/dist/{chunk-PQCHNZHM.cjs.map → chunk-7PHOSSLJ.cjs.map} +1 -1
  67. package/dist/{chunk-VBEZS3Q4.cjs → chunk-A5G32G2R.cjs} +9 -9
  68. package/dist/{chunk-VBEZS3Q4.cjs.map → chunk-A5G32G2R.cjs.map} +1 -1
  69. package/dist/{chunk-DX4FBN3I.js → chunk-AEQXFDL7.js} +14 -9
  70. package/dist/chunk-AEQXFDL7.js.map +1 -0
  71. package/dist/{chunk-RHTVKBRC.cjs → chunk-ATMSGQCW.cjs} +9 -9
  72. package/dist/{chunk-RHTVKBRC.cjs.map → chunk-ATMSGQCW.cjs.map} +1 -1
  73. package/dist/{chunk-2ITF366P.js → chunk-BFBVJ6MU.js} +3 -3
  74. package/dist/{chunk-2ITF366P.js.map → chunk-BFBVJ6MU.js.map} +1 -1
  75. package/dist/{chunk-E43H3A3G.cjs → chunk-BGGESAAG.cjs} +7 -7
  76. package/dist/{chunk-E43H3A3G.cjs.map → chunk-BGGESAAG.cjs.map} +1 -1
  77. package/dist/{chunk-R6ZDSXN7.cjs → chunk-CA42BCSM.cjs} +8 -8
  78. package/dist/{chunk-R6ZDSXN7.cjs.map → chunk-CA42BCSM.cjs.map} +1 -1
  79. package/dist/{chunk-FV7R2LLD.js → chunk-CU5ZXVZQ.js} +4 -4
  80. package/dist/{chunk-FV7R2LLD.js.map → chunk-CU5ZXVZQ.js.map} +1 -1
  81. package/dist/{chunk-JNQ4NL3R.cjs → chunk-CUIPBYMG.cjs} +8 -8
  82. package/dist/{chunk-JNQ4NL3R.cjs.map → chunk-CUIPBYMG.cjs.map} +1 -1
  83. package/dist/{chunk-CCMLOCTH.js → chunk-CWZADOJ6.js} +3 -3
  84. package/dist/{chunk-CCMLOCTH.js.map → chunk-CWZADOJ6.js.map} +1 -1
  85. package/dist/{chunk-FZIBM3G5.cjs → chunk-D5QUAWF3.cjs} +10 -10
  86. package/dist/{chunk-FZIBM3G5.cjs.map → chunk-D5QUAWF3.cjs.map} +1 -1
  87. package/dist/{chunk-YZQROIJY.js → chunk-DAAU5H24.js} +3 -3
  88. package/dist/{chunk-YZQROIJY.js.map → chunk-DAAU5H24.js.map} +1 -1
  89. package/dist/{chunk-GAWIUMAK.cjs → chunk-DT4GG5BF.cjs} +7 -7
  90. package/dist/{chunk-GAWIUMAK.cjs.map → chunk-DT4GG5BF.cjs.map} +1 -1
  91. package/dist/{chunk-4L62MAZA.js → chunk-DX77WSIB.js} +5 -5
  92. package/dist/{chunk-4L62MAZA.js.map → chunk-DX77WSIB.js.map} +1 -1
  93. package/dist/{chunk-4ORSJM2I.js → chunk-EPUWA3ZW.js} +4 -4
  94. package/dist/{chunk-4ORSJM2I.js.map → chunk-EPUWA3ZW.js.map} +1 -1
  95. package/dist/{chunk-ZTUKOCJN.cjs → chunk-ESJMEDLY.cjs} +4 -4
  96. package/dist/{chunk-ZTUKOCJN.cjs.map → chunk-ESJMEDLY.cjs.map} +1 -1
  97. package/dist/{chunk-6JNW43SE.js → chunk-EWVXMQRW.js} +5 -5
  98. package/dist/{chunk-6JNW43SE.js.map → chunk-EWVXMQRW.js.map} +1 -1
  99. package/dist/{chunk-LIY7MYRG.js → chunk-FGBIJ6PL.js} +4 -4
  100. package/dist/{chunk-LIY7MYRG.js.map → chunk-FGBIJ6PL.js.map} +1 -1
  101. package/dist/{chunk-OFEROCC5.cjs → chunk-FGHSUT6X.cjs} +6 -6
  102. package/dist/{chunk-OFEROCC5.cjs.map → chunk-FGHSUT6X.cjs.map} +1 -1
  103. package/dist/{chunk-QKJUAMRK.cjs → chunk-FVLVTY5D.cjs} +6 -6
  104. package/dist/{chunk-QKJUAMRK.cjs.map → chunk-FVLVTY5D.cjs.map} +1 -1
  105. package/dist/{chunk-YX6RW6ZW.cjs → chunk-GBL4R3GH.cjs} +6 -6
  106. package/dist/{chunk-YX6RW6ZW.cjs.map → chunk-GBL4R3GH.cjs.map} +1 -1
  107. package/dist/{chunk-SXVMEC6N.cjs → chunk-GRXHW5S3.cjs} +12 -12
  108. package/dist/{chunk-SXVMEC6N.cjs.map → chunk-GRXHW5S3.cjs.map} +1 -1
  109. package/dist/{chunk-K5TPJVOK.js → chunk-HCIBBUV5.js} +3 -3
  110. package/dist/{chunk-K5TPJVOK.js.map → chunk-HCIBBUV5.js.map} +1 -1
  111. package/dist/{chunk-HFWO37RY.cjs → chunk-HCK2VUWD.cjs} +8 -8
  112. package/dist/{chunk-HFWO37RY.cjs.map → chunk-HCK2VUWD.cjs.map} +1 -1
  113. package/dist/{chunk-FSDI3NJV.js → chunk-IDZTDJLH.js} +3 -3
  114. package/dist/{chunk-FSDI3NJV.js.map → chunk-IDZTDJLH.js.map} +1 -1
  115. package/dist/{chunk-FDNJNVKA.cjs → chunk-IF6RQ53Q.cjs} +9 -9
  116. package/dist/{chunk-FDNJNVKA.cjs.map → chunk-IF6RQ53Q.cjs.map} +1 -1
  117. package/dist/{chunk-PVPTFMJJ.js → chunk-IOV77VHP.js} +4 -4
  118. package/dist/{chunk-PVPTFMJJ.js.map → chunk-IOV77VHP.js.map} +1 -1
  119. package/dist/{chunk-UMIJYYF3.cjs → chunk-JVVGQLJQ.cjs} +14 -9
  120. package/dist/chunk-JVVGQLJQ.cjs.map +1 -0
  121. package/dist/{chunk-MY4KMVJ5.cjs → chunk-JYVRX3BX.cjs} +8 -8
  122. package/dist/{chunk-MY4KMVJ5.cjs.map → chunk-JYVRX3BX.cjs.map} +1 -1
  123. package/dist/{chunk-ZY7ETQD6.js → chunk-KHG3G2ZX.js} +3 -3
  124. package/dist/{chunk-ZY7ETQD6.js.map → chunk-KHG3G2ZX.js.map} +1 -1
  125. package/dist/{chunk-ASNAQ35U.js → chunk-KNMEXOKJ.js} +4 -4
  126. package/dist/{chunk-ASNAQ35U.js.map → chunk-KNMEXOKJ.js.map} +1 -1
  127. package/dist/{chunk-WYIIWTIR.cjs → chunk-KWSVJRXX.cjs} +4 -4
  128. package/dist/{chunk-WYIIWTIR.cjs.map → chunk-KWSVJRXX.cjs.map} +1 -1
  129. package/dist/{chunk-OAL5RS2X.cjs → chunk-LARNENXE.cjs} +10 -10
  130. package/dist/{chunk-OAL5RS2X.cjs.map → chunk-LARNENXE.cjs.map} +1 -1
  131. package/dist/{chunk-MYXLKVJE.js → chunk-LRHMLNPW.js} +12 -4
  132. package/dist/chunk-LRHMLNPW.js.map +1 -0
  133. package/dist/{chunk-66BHM3UN.cjs → chunk-LXYNL7BI.cjs} +10 -10
  134. package/dist/{chunk-66BHM3UN.cjs.map → chunk-LXYNL7BI.cjs.map} +1 -1
  135. package/dist/{chunk-V45C74EB.js → chunk-MEERXUZS.js} +4 -4
  136. package/dist/{chunk-V45C74EB.js.map → chunk-MEERXUZS.js.map} +1 -1
  137. package/dist/{chunk-YJHB2GHQ.js → chunk-MJY25P44.js} +3 -3
  138. package/dist/{chunk-YJHB2GHQ.js.map → chunk-MJY25P44.js.map} +1 -1
  139. package/dist/{chunk-6UWYKNFN.cjs → chunk-MSCRIA2U.cjs} +12 -12
  140. package/dist/{chunk-6UWYKNFN.cjs.map → chunk-MSCRIA2U.cjs.map} +1 -1
  141. package/dist/{chunk-UZH6PVHD.js → chunk-N35UAFEU.js} +4 -4
  142. package/dist/{chunk-UZH6PVHD.js.map → chunk-N35UAFEU.js.map} +1 -1
  143. package/dist/{chunk-6E6ZDWZD.cjs → chunk-NE2W2MF3.cjs} +10 -10
  144. package/dist/{chunk-6E6ZDWZD.cjs.map → chunk-NE2W2MF3.cjs.map} +1 -1
  145. package/dist/{chunk-7PNCJ4OQ.js → chunk-NQ7Y6ZKH.js} +3 -3
  146. package/dist/{chunk-7PNCJ4OQ.js.map → chunk-NQ7Y6ZKH.js.map} +1 -1
  147. package/dist/{chunk-LK2A3HBT.js → chunk-NRULNA5F.js} +4 -4
  148. package/dist/{chunk-LK2A3HBT.js.map → chunk-NRULNA5F.js.map} +1 -1
  149. package/dist/{chunk-47EP245Y.cjs → chunk-OEGSDOJ2.cjs} +7 -7
  150. package/dist/{chunk-47EP245Y.cjs.map → chunk-OEGSDOJ2.cjs.map} +1 -1
  151. package/dist/{chunk-ZFSFOD5W.cjs → chunk-OMAW52LY.cjs} +6 -6
  152. package/dist/{chunk-ZFSFOD5W.cjs.map → chunk-OMAW52LY.cjs.map} +1 -1
  153. package/dist/{chunk-YOLF5DYU.js → chunk-OMSHGBV3.js} +4 -4
  154. package/dist/{chunk-YOLF5DYU.js.map → chunk-OMSHGBV3.js.map} +1 -1
  155. package/dist/{chunk-4H2LGLGI.cjs → chunk-OTXHJHXU.cjs} +11 -11
  156. package/dist/{chunk-4H2LGLGI.cjs.map → chunk-OTXHJHXU.cjs.map} +1 -1
  157. package/dist/{chunk-DRIJNFWP.cjs → chunk-PCAYYCLY.cjs} +10 -10
  158. package/dist/{chunk-DRIJNFWP.cjs.map → chunk-PCAYYCLY.cjs.map} +1 -1
  159. package/dist/{chunk-QERWC7U6.js → chunk-PKXW45G4.js} +3 -3
  160. package/dist/{chunk-QERWC7U6.js.map → chunk-PKXW45G4.js.map} +1 -1
  161. package/dist/{chunk-YDQDZWZ7.cjs → chunk-QEPMEEZC.cjs} +6 -6
  162. package/dist/{chunk-YDQDZWZ7.cjs.map → chunk-QEPMEEZC.cjs.map} +1 -1
  163. package/dist/{chunk-G6R6MSRF.cjs → chunk-QPHUAF3R.cjs} +8 -8
  164. package/dist/{chunk-G6R6MSRF.cjs.map → chunk-QPHUAF3R.cjs.map} +1 -1
  165. package/dist/{chunk-RFEKSP62.js → chunk-QPHWRD25.js} +3 -3
  166. package/dist/{chunk-RFEKSP62.js.map → chunk-QPHWRD25.js.map} +1 -1
  167. package/dist/{chunk-XN6YS55F.cjs → chunk-QYI7ZV3B.cjs} +30 -22
  168. package/dist/chunk-QYI7ZV3B.cjs.map +1 -0
  169. package/dist/{chunk-3V64BDKG.cjs → chunk-R2W3RJFW.cjs} +13 -13
  170. package/dist/{chunk-3V64BDKG.cjs.map → chunk-R2W3RJFW.cjs.map} +1 -1
  171. package/dist/{chunk-46ZZTP5B.js → chunk-SGZUUUXU.js} +4 -4
  172. package/dist/{chunk-46ZZTP5B.js.map → chunk-SGZUUUXU.js.map} +1 -1
  173. package/dist/{chunk-MPQECPE3.js → chunk-T7SCCACB.js} +3 -3
  174. package/dist/{chunk-MPQECPE3.js.map → chunk-T7SCCACB.js.map} +1 -1
  175. package/dist/{chunk-GPSNBZPX.js → chunk-TC3H6ZED.js} +4 -4
  176. package/dist/{chunk-GPSNBZPX.js.map → chunk-TC3H6ZED.js.map} +1 -1
  177. package/dist/{chunk-AG7VY6MJ.cjs → chunk-TEZNWW3R.cjs} +8 -8
  178. package/dist/{chunk-AG7VY6MJ.cjs.map → chunk-TEZNWW3R.cjs.map} +1 -1
  179. package/dist/{chunk-KTCP23W6.js → chunk-THHZMRFU.js} +3 -3
  180. package/dist/{chunk-KTCP23W6.js.map → chunk-THHZMRFU.js.map} +1 -1
  181. package/dist/{chunk-RWQH5EO5.cjs → chunk-TLHQ6JCK.cjs} +11 -11
  182. package/dist/{chunk-RWQH5EO5.cjs.map → chunk-TLHQ6JCK.cjs.map} +1 -1
  183. package/dist/{chunk-CDS2NXGT.cjs → chunk-V5Q6UNUK.cjs} +4 -4
  184. package/dist/{chunk-CDS2NXGT.cjs.map → chunk-V5Q6UNUK.cjs.map} +1 -1
  185. package/dist/{chunk-BT5H3WMI.js → chunk-VBMLJUBE.js} +4 -4
  186. package/dist/{chunk-BT5H3WMI.js.map → chunk-VBMLJUBE.js.map} +1 -1
  187. package/dist/{chunk-UFMPALRH.js → chunk-VGJD4F4H.js} +3 -3
  188. package/dist/{chunk-UFMPALRH.js.map → chunk-VGJD4F4H.js.map} +1 -1
  189. package/dist/{chunk-RN7NNB6I.js → chunk-VJXUBN7J.js} +3 -3
  190. package/dist/{chunk-RN7NNB6I.js.map → chunk-VJXUBN7J.js.map} +1 -1
  191. package/dist/{chunk-TVDQNLGJ.js → chunk-VUHNBLFA.js} +3 -3
  192. package/dist/{chunk-TVDQNLGJ.js.map → chunk-VUHNBLFA.js.map} +1 -1
  193. package/dist/{chunk-OAIMES5S.cjs → chunk-W476ER4X.cjs} +17 -17
  194. package/dist/{chunk-OAIMES5S.cjs.map → chunk-W476ER4X.cjs.map} +1 -1
  195. package/dist/{chunk-4XVJYNOT.js → chunk-WZCES5M6.js} +4 -4
  196. package/dist/{chunk-4XVJYNOT.js.map → chunk-WZCES5M6.js.map} +1 -1
  197. package/dist/{chunk-2EZ2TVYT.cjs → chunk-Y6CVUI6A.cjs} +13 -13
  198. package/dist/{chunk-2EZ2TVYT.cjs.map → chunk-Y6CVUI6A.cjs.map} +1 -1
  199. package/dist/{chunk-4WQUX2B4.cjs → chunk-YCL43UQM.cjs} +12 -12
  200. package/dist/{chunk-4WQUX2B4.cjs.map → chunk-YCL43UQM.cjs.map} +1 -1
  201. package/dist/{chunk-XWN43PZF.cjs → chunk-YZXRD6K6.cjs} +7 -7
  202. package/dist/{chunk-XWN43PZF.cjs.map → chunk-YZXRD6K6.cjs.map} +1 -1
  203. package/dist/{chunk-IRUIWMH6.js → chunk-ZFGLBJYC.js} +3 -3
  204. package/dist/{chunk-IRUIWMH6.js.map → chunk-ZFGLBJYC.js.map} +1 -1
  205. package/dist/{chunk-6EGHZDZI.cjs → chunk-ZNKVOTPB.cjs} +15 -15
  206. package/dist/{chunk-6EGHZDZI.cjs.map → chunk-ZNKVOTPB.cjs.map} +1 -1
  207. package/dist/{chunk-WJP6CRML.js → chunk-ZOEN3ARN.js} +3 -3
  208. package/dist/{chunk-WJP6CRML.js.map → chunk-ZOEN3ARN.js.map} +1 -1
  209. package/dist/{chunk-TWSWD4PU.js → chunk-ZYXRRVR6.js} +3 -3
  210. package/dist/{chunk-TWSWD4PU.js.map → chunk-ZYXRRVR6.js.map} +1 -1
  211. package/dist/combo.cjs +9 -9
  212. package/dist/combo.js +4 -4
  213. package/dist/custom.cjs +10 -10
  214. package/dist/custom.js +5 -5
  215. package/dist/donut.cjs +11 -11
  216. package/dist/donut.js +6 -6
  217. package/dist/dumbbell.cjs +10 -10
  218. package/dist/dumbbell.js +5 -5
  219. package/dist/funnel.cjs +10 -10
  220. package/dist/funnel.js +5 -5
  221. package/dist/gauge.cjs +10 -10
  222. package/dist/gauge.js +5 -5
  223. package/dist/geo.cjs +12 -12
  224. package/dist/geo.js +5 -5
  225. package/dist/graph.cjs +10 -10
  226. package/dist/graph.js +5 -5
  227. package/dist/heatmap.cjs +10 -10
  228. package/dist/heatmap.js +5 -5
  229. package/dist/histogram.cjs +9 -9
  230. package/dist/histogram.js +4 -4
  231. package/dist/horizontal-bar.cjs +9 -9
  232. package/dist/horizontal-bar.js +4 -4
  233. package/dist/index.cjs +180 -180
  234. package/dist/index.d.cts +4 -0
  235. package/dist/index.d.ts +4 -0
  236. package/dist/index.js +92 -92
  237. package/dist/kagi.cjs +10 -10
  238. package/dist/kagi.js +5 -5
  239. package/dist/line.cjs +9 -9
  240. package/dist/line.js +4 -4
  241. package/dist/lines.cjs +10 -10
  242. package/dist/lines.js +5 -5
  243. package/dist/lollipop.cjs +9 -9
  244. package/dist/lollipop.js +4 -4
  245. package/dist/matrix.cjs +10 -10
  246. package/dist/matrix.js +5 -5
  247. package/dist/ohlc.cjs +9 -9
  248. package/dist/ohlc.js +4 -4
  249. package/dist/parallel.cjs +10 -10
  250. package/dist/parallel.js +5 -5
  251. package/dist/pictorialbar.cjs +10 -10
  252. package/dist/pictorialbar.js +5 -5
  253. package/dist/pie.cjs +11 -11
  254. package/dist/pie.js +6 -6
  255. package/dist/polar.cjs +11 -11
  256. package/dist/polar.js +6 -6
  257. package/dist/radar.cjs +10 -10
  258. package/dist/radar.js +5 -5
  259. package/dist/radialbar.cjs +10 -10
  260. package/dist/radialbar.js +5 -5
  261. package/dist/range.cjs +9 -9
  262. package/dist/range.js +4 -4
  263. package/dist/renko.cjs +10 -10
  264. package/dist/renko.js +5 -5
  265. package/dist/sankey.cjs +10 -10
  266. package/dist/sankey.js +5 -5
  267. package/dist/scatter.cjs +9 -9
  268. package/dist/scatter.js +4 -4
  269. package/dist/sparkline.cjs +9 -9
  270. package/dist/sparkline.js +4 -4
  271. package/dist/stacked-bar.cjs +9 -9
  272. package/dist/stacked-bar.js +4 -4
  273. package/dist/step.cjs +10 -10
  274. package/dist/step.js +5 -5
  275. package/dist/sunburst.cjs +11 -11
  276. package/dist/sunburst.js +6 -6
  277. package/dist/themeriver.cjs +10 -10
  278. package/dist/themeriver.js +5 -5
  279. package/dist/tree.cjs +10 -10
  280. package/dist/tree.js +5 -5
  281. package/dist/treemap.cjs +10 -10
  282. package/dist/treemap.js +5 -5
  283. package/dist/volume.cjs +9 -9
  284. package/dist/volume.js +4 -4
  285. package/dist/waterfall.cjs +9 -9
  286. package/dist/waterfall.js +4 -4
  287. package/package.json +1 -1
  288. package/dist/chunk-DX4FBN3I.js.map +0 -1
  289. package/dist/chunk-MYXLKVJE.js.map +0 -1
  290. package/dist/chunk-UMIJYYF3.cjs.map +0 -1
  291. package/dist/chunk-XN6YS55F.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/bar/horizontal-bar-type.ts"],"names":[],"mappings":"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","file":"chunk-FSDI3NJV.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect, path, text } from '../../render/tree'\nimport { formatNum } from '../../utils/format'\nimport { createHorizontalMapper } from '../../utils/scale'\n\n/**\n * Horizontal bar chart — bars grow left-to-right.\n *\n * Uses the xScale for categories (mapped to y positions) and yScale for values\n * (mapped to x positions), but transposes the rendering.\n */\nexport const horizontalBarChartType: ChartTypePlugin = {\n type: 'horizontal-bar',\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, {\n ...options,\n xAxis: false,\n yAxis: false,\n xGrid: false,\n yGrid: false,\n legend: false,\n })\n if (options.yMin === undefined && prepared.bounds.yMin > 0) {\n prepared.bounds.yMin = 0\n }\n if (options.yMax === undefined && prepared.bounds.yMax < 0) {\n prepared.bounds.yMax = 0\n }\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, options, yScale, theme } = 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 // Reserve space for category labels on the left\n const labelWidth = Math.min(70, area.width * 0.2)\n const chartX = area.x + labelWidth\n const chartW = area.width - labelWidth\n\n // In horizontal mode:\n // - Y axis becomes categories\n // - X axis becomes value axis (use yScale for values mapped to x positions)\n const categoryHeight = area.height / pointCount\n const barGap = options.barGap\n const groupHeight = categoryHeight * (1 - barGap)\n const barHeight = groupHeight / seriesCount\n const groupOffset = -groupHeight / 2\n\n const valueToX = createHorizontalMapper(yScale, area, chartX, chartW)\n const zeroX = valueToX(0)\n\n // Category labels on the left\n for (let i = 0; i < pointCount; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n nodes.push(text(area.x + labelWidth - 6, catCenter, String(data.labels[i] ?? ''), {\n class: 'chartts-hbar-label',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n for (const series of data.series) {\n const barNodes: RenderNode[] = []\n\n for (let i = 0; i < series.values.length; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n const barY = catCenter + groupOffset + series.index * barHeight\n const vx = valueToX(series.values[i]!)\n\n const x = Math.min(vx, zeroX)\n const w = Math.abs(vx - zeroX)\n const isPositive = series.values[i]! >= 0\n\n const barFill = `url(#chartts-bar-${series.index})`\n const r = Math.min(options.barRadius, barHeight / 2, w / 2)\n\n if (r > 0 && w > r * 2) {\n // Rounded right end for positive, left end for negative\n const d = isPositive\n ? `M${formatNum(x)},${formatNum(barY)}H${formatNum(x + w - r)}Q${formatNum(x + w)},${formatNum(barY)},${formatNum(x + w)},${formatNum(barY + r)}V${formatNum(barY + barHeight - r)}Q${formatNum(x + w)},${formatNum(barY + barHeight)},${formatNum(x + w - r)},${formatNum(barY + barHeight)}H${formatNum(x)}Z`\n : `M${formatNum(x + w)},${formatNum(barY)}H${formatNum(x + r)}Q${formatNum(x)},${formatNum(barY)},${formatNum(x)},${formatNum(barY + r)}V${formatNum(barY + barHeight - r)}Q${formatNum(x)},${formatNum(barY + barHeight)},${formatNum(x + r)},${formatNum(barY + barHeight)}H${formatNum(x + w)}Z`\n\n barNodes.push(path(d, {\n class: 'chartts-bar chartts-bar-horizontal',\n fill: barFill,\n 'data-series': series.index,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${series.values[i]}`,\n }))\n } else {\n barNodes.push(rect(x, barY, w, barHeight, {\n class: 'chartts-bar chartts-bar-horizontal',\n fill: barFill,\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\n nodes.push(group(barNodes, {\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, area, options, 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 labelWidth = Math.min(70, area.width * 0.2)\n const chartX = area.x + labelWidth\n const chartW = area.width - labelWidth\n const categoryHeight = area.height / pointCount\n const groupHeight = categoryHeight * (1 - options.barGap)\n const barHeight = groupHeight / seriesCount\n const groupOffset = -groupHeight / 2\n\n const valueToX = createHorizontalMapper(yScale, area, chartX, chartW)\n const zeroX = valueToX(0)\n\n for (const series of data.series) {\n for (let i = 0; i < series.values.length; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n const barY = catCenter + groupOffset + series.index * barHeight\n const vx = valueToX(series.values[i]!)\n const x = Math.min(vx, zeroX)\n const w = Math.abs(vx - zeroX)\n\n if (mx >= x - 2 && mx <= x + w + 2 && my >= barY - 2 && my <= barY + barHeight + 2) {\n return { seriesIndex: series.index, pointIndex: i, distance: 0, x: vx, y: catCenter }\n }\n }\n }\n\n return null\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/bar/horizontal-bar-type.ts"],"names":[],"mappings":"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","file":"chunk-IDZTDJLH.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect, path, text } from '../../render/tree'\nimport { formatNum } from '../../utils/format'\nimport { createHorizontalMapper } from '../../utils/scale'\n\n/**\n * Horizontal bar chart — bars grow left-to-right.\n *\n * Uses the xScale for categories (mapped to y positions) and yScale for values\n * (mapped to x positions), but transposes the rendering.\n */\nexport const horizontalBarChartType: ChartTypePlugin = {\n type: 'horizontal-bar',\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, {\n ...options,\n xAxis: false,\n yAxis: false,\n xGrid: false,\n yGrid: false,\n legend: false,\n })\n if (options.yMin === undefined && prepared.bounds.yMin > 0) {\n prepared.bounds.yMin = 0\n }\n if (options.yMax === undefined && prepared.bounds.yMax < 0) {\n prepared.bounds.yMax = 0\n }\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, options, yScale, theme } = 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 // Reserve space for category labels on the left\n const labelWidth = Math.min(70, area.width * 0.2)\n const chartX = area.x + labelWidth\n const chartW = area.width - labelWidth\n\n // In horizontal mode:\n // - Y axis becomes categories\n // - X axis becomes value axis (use yScale for values mapped to x positions)\n const categoryHeight = area.height / pointCount\n const barGap = options.barGap\n const groupHeight = categoryHeight * (1 - barGap)\n const barHeight = groupHeight / seriesCount\n const groupOffset = -groupHeight / 2\n\n const valueToX = createHorizontalMapper(yScale, area, chartX, chartW)\n const zeroX = valueToX(0)\n\n // Category labels on the left\n for (let i = 0; i < pointCount; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n nodes.push(text(area.x + labelWidth - 6, catCenter, String(data.labels[i] ?? ''), {\n class: 'chartts-hbar-label',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n for (const series of data.series) {\n const barNodes: RenderNode[] = []\n\n for (let i = 0; i < series.values.length; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n const barY = catCenter + groupOffset + series.index * barHeight\n const vx = valueToX(series.values[i]!)\n\n const x = Math.min(vx, zeroX)\n const w = Math.abs(vx - zeroX)\n const isPositive = series.values[i]! >= 0\n\n const barFill = `url(#chartts-bar-${series.index})`\n const r = Math.min(options.barRadius, barHeight / 2, w / 2)\n\n if (r > 0 && w > r * 2) {\n // Rounded right end for positive, left end for negative\n const d = isPositive\n ? `M${formatNum(x)},${formatNum(barY)}H${formatNum(x + w - r)}Q${formatNum(x + w)},${formatNum(barY)},${formatNum(x + w)},${formatNum(barY + r)}V${formatNum(barY + barHeight - r)}Q${formatNum(x + w)},${formatNum(barY + barHeight)},${formatNum(x + w - r)},${formatNum(barY + barHeight)}H${formatNum(x)}Z`\n : `M${formatNum(x + w)},${formatNum(barY)}H${formatNum(x + r)}Q${formatNum(x)},${formatNum(barY)},${formatNum(x)},${formatNum(barY + r)}V${formatNum(barY + barHeight - r)}Q${formatNum(x)},${formatNum(barY + barHeight)},${formatNum(x + r)},${formatNum(barY + barHeight)}H${formatNum(x + w)}Z`\n\n barNodes.push(path(d, {\n class: 'chartts-bar chartts-bar-horizontal',\n fill: barFill,\n 'data-series': series.index,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${series.values[i]}`,\n }))\n } else {\n barNodes.push(rect(x, barY, w, barHeight, {\n class: 'chartts-bar chartts-bar-horizontal',\n fill: barFill,\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\n nodes.push(group(barNodes, {\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, area, options, 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 labelWidth = Math.min(70, area.width * 0.2)\n const chartX = area.x + labelWidth\n const chartW = area.width - labelWidth\n const categoryHeight = area.height / pointCount\n const groupHeight = categoryHeight * (1 - options.barGap)\n const barHeight = groupHeight / seriesCount\n const groupOffset = -groupHeight / 2\n\n const valueToX = createHorizontalMapper(yScale, area, chartX, chartW)\n const zeroX = valueToX(0)\n\n for (const series of data.series) {\n for (let i = 0; i < series.values.length; i++) {\n const catCenter = area.y + categoryHeight * (i + 0.5)\n const barY = catCenter + groupOffset + series.index * barHeight\n const vx = valueToX(series.values[i]!)\n const x = Math.min(vx, zeroX)\n const w = Math.abs(vx - zeroX)\n\n if (mx >= x - 2 && mx <= x + w + 2 && my >= barY - 2 && my <= barY + barHeight + 2) {\n return { seriesIndex: series.index, pointIndex: i, distance: 0, x: vx, y: catCenter }\n }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkCDS2NXGT_cjs = require('./chunk-CDS2NXGT.cjs');
4
- var chunkUMIJYYF3_cjs = require('./chunk-UMIJYYF3.cjs');
3
+ var chunkV5Q6UNUK_cjs = require('./chunk-V5Q6UNUK.cjs');
4
+ var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
5
5
 
6
6
  // src/charts/funnel/funnel-type.ts
7
7
  var funnelChartType = {
@@ -10,7 +10,7 @@ var funnelChartType = {
10
10
  return { x: "categorical", y: "linear" };
11
11
  },
12
12
  prepareData(data, options) {
13
- return chunkCDS2NXGT_cjs.prepareNoAxes(data, options);
13
+ return chunkV5Q6UNUK_cjs.prepareNoAxes(data, options);
14
14
  },
15
15
  render(ctx) {
16
16
  const { data, area, theme, options } = ctx;
@@ -35,7 +35,7 @@ var funnelChartType = {
35
35
  const bottomWidth = nextVal / maxVal * area.width;
36
36
  const y = area.y + i * (stepHeight + stepGap);
37
37
  const color = options.colors[i % options.colors.length];
38
- const pb = new chunkUMIJYYF3_cjs.PathBuilder();
38
+ const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
39
39
  pb.moveTo(centerX - topWidth / 2, y);
40
40
  pb.lineTo(centerX + topWidth / 2, y);
41
41
  pb.lineTo(centerX + bottomWidth / 2, y + stepHeight);
@@ -43,7 +43,7 @@ var funnelChartType = {
43
43
  pb.close();
44
44
  const stepNodes = [];
45
45
  const colorIndex = i % options.colors.length;
46
- stepNodes.push(chunkUMIJYYF3_cjs.path(pb.build(), {
46
+ stepNodes.push(chunkJVVGQLJQ_cjs.path(pb.build(), {
47
47
  class: "chartts-funnel-step",
48
48
  fill: `url(#chartts-bar-${colorIndex})`,
49
49
  stroke: color,
@@ -59,7 +59,7 @@ var funnelChartType = {
59
59
  const label = String(data.labels[i] ?? `Step ${i + 1}`);
60
60
  const pct = maxVal > 0 ? Math.round(val / maxVal * 100) : 0;
61
61
  const labelStr = showValues ? `${label}: ${values[i]} (${pct}%)` : `${label} (${pct}%)`;
62
- stepNodes.push(chunkUMIJYYF3_cjs.text(centerX, textY, labelStr, {
62
+ stepNodes.push(chunkJVVGQLJQ_cjs.text(centerX, textY, labelStr, {
63
63
  class: "chartts-funnel-label",
64
64
  fill: "#fff",
65
65
  textAnchor: "middle",
@@ -69,7 +69,7 @@ var funnelChartType = {
69
69
  fontWeight: 600
70
70
  }));
71
71
  }
72
- nodes.push(chunkUMIJYYF3_cjs.group(stepNodes, {
72
+ nodes.push(chunkJVVGQLJQ_cjs.group(stepNodes, {
73
73
  class: `chartts-series chartts-series-${i}`,
74
74
  "data-series-name": String(data.labels[i] ?? `Step ${i + 1}`)
75
75
  }));
@@ -96,5 +96,5 @@ var funnelChartType = {
96
96
  };
97
97
 
98
98
  exports.funnelChartType = funnelChartType;
99
- //# sourceMappingURL=chunk-FDNJNVKA.cjs.map
100
- //# sourceMappingURL=chunk-FDNJNVKA.cjs.map
99
+ //# sourceMappingURL=chunk-IF6RQ53Q.cjs.map
100
+ //# sourceMappingURL=chunk-IF6RQ53Q.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/funnel/funnel-type.ts"],"names":["prepareNoAxes","PathBuilder","path","text","group"],"mappings":"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","file":"chunk-FDNJNVKA.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\nexport interface FunnelOptions {\n /** Gap between steps in px. Default 2. */\n stepGap?: number\n /** Show percentage labels. Default true. */\n showLabels?: boolean\n /** Show value labels. Default true. */\n showValues?: boolean\n}\n\n/**\n * Funnel chart — tapered horizontal bars representing conversion steps.\n * Uses the first series. Values should be descending (largest to smallest).\n */\nexport const funnelChartType: ChartTypePlugin = {\n type: 'funnel',\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 fOpts = options as unknown as FunnelOptions\n const stepGap = fOpts.stepGap ?? 4\n const showLabels = fOpts.showLabels ?? true\n const showValues = fOpts.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 stepCount = values.length\n const totalGap = stepGap * (stepCount - 1)\n const stepHeight = (area.height - totalGap) / stepCount\n const centerX = area.x + area.width / 2\n\n for (let i = 0; i < stepCount; i++) {\n const val = Math.abs(values[i]!)\n const nextVal = i < stepCount - 1 ? Math.abs(values[i + 1]!) : val * 0.7\n\n const topWidth = (val / maxVal) * area.width\n const bottomWidth = (nextVal / maxVal) * area.width\n const y = area.y + i * (stepHeight + stepGap)\n\n const color = options.colors[i % options.colors.length]!\n\n // Trapezoid path\n const pb = new PathBuilder()\n pb.moveTo(centerX - topWidth / 2, y)\n pb.lineTo(centerX + topWidth / 2, y)\n pb.lineTo(centerX + bottomWidth / 2, y + stepHeight)\n pb.lineTo(centerX - bottomWidth / 2, y + stepHeight)\n pb.close()\n\n const stepNodes: RenderNode[] = []\n\n const colorIndex = i % options.colors.length\n stepNodes.push(path(pb.build(), {\n class: 'chartts-funnel-step',\n fill: `url(#chartts-bar-${colorIndex})`,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Step ${i + 1}`}: ${values[i]}`,\n }))\n\n // Label text\n const textY = y + stepHeight / 2\n if (showLabels) {\n const label = String(data.labels[i] ?? `Step ${i + 1}`)\n const pct = maxVal > 0 ? Math.round((val / maxVal) * 100) : 0\n\n const labelStr = showValues\n ? `${label}: ${values[i]} (${pct}%)`\n : `${label} (${pct}%)`\n\n stepNodes.push(text(centerX, textY, labelStr, {\n class: 'chartts-funnel-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n nodes.push(group(stepNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Step ${i + 1}`),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, _mx: number, my: number): HitResult | null {\n const { data, area, options } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const fOpts = options as unknown as FunnelOptions\n const stepGap = fOpts.stepGap ?? 2\n const stepCount = series.values.length\n const totalGap = stepGap * (stepCount - 1)\n const stepHeight = (area.height - totalGap) / stepCount\n\n for (let i = 0; i < stepCount; i++) {\n const y = area.y + i * (stepHeight + stepGap)\n if (my >= y && my <= y + stepHeight) {\n return { seriesIndex: 0, pointIndex: i, distance: 0, x: area.x + area.width / 2, y: y + stepHeight / 2 }\n }\n }\n\n return null\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/funnel/funnel-type.ts"],"names":["prepareNoAxes","PathBuilder","path","text","group"],"mappings":"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","file":"chunk-IF6RQ53Q.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\nexport interface FunnelOptions {\n /** Gap between steps in px. Default 2. */\n stepGap?: number\n /** Show percentage labels. Default true. */\n showLabels?: boolean\n /** Show value labels. Default true. */\n showValues?: boolean\n}\n\n/**\n * Funnel chart — tapered horizontal bars representing conversion steps.\n * Uses the first series. Values should be descending (largest to smallest).\n */\nexport const funnelChartType: ChartTypePlugin = {\n type: 'funnel',\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 fOpts = options as unknown as FunnelOptions\n const stepGap = fOpts.stepGap ?? 4\n const showLabels = fOpts.showLabels ?? true\n const showValues = fOpts.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 stepCount = values.length\n const totalGap = stepGap * (stepCount - 1)\n const stepHeight = (area.height - totalGap) / stepCount\n const centerX = area.x + area.width / 2\n\n for (let i = 0; i < stepCount; i++) {\n const val = Math.abs(values[i]!)\n const nextVal = i < stepCount - 1 ? Math.abs(values[i + 1]!) : val * 0.7\n\n const topWidth = (val / maxVal) * area.width\n const bottomWidth = (nextVal / maxVal) * area.width\n const y = area.y + i * (stepHeight + stepGap)\n\n const color = options.colors[i % options.colors.length]!\n\n // Trapezoid path\n const pb = new PathBuilder()\n pb.moveTo(centerX - topWidth / 2, y)\n pb.lineTo(centerX + topWidth / 2, y)\n pb.lineTo(centerX + bottomWidth / 2, y + stepHeight)\n pb.lineTo(centerX - bottomWidth / 2, y + stepHeight)\n pb.close()\n\n const stepNodes: RenderNode[] = []\n\n const colorIndex = i % options.colors.length\n stepNodes.push(path(pb.build(), {\n class: 'chartts-funnel-step',\n fill: `url(#chartts-bar-${colorIndex})`,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Step ${i + 1}`}: ${values[i]}`,\n }))\n\n // Label text\n const textY = y + stepHeight / 2\n if (showLabels) {\n const label = String(data.labels[i] ?? `Step ${i + 1}`)\n const pct = maxVal > 0 ? Math.round((val / maxVal) * 100) : 0\n\n const labelStr = showValues\n ? `${label}: ${values[i]} (${pct}%)`\n : `${label} (${pct}%)`\n\n stepNodes.push(text(centerX, textY, labelStr, {\n class: 'chartts-funnel-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n nodes.push(group(stepNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Step ${i + 1}`),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, _mx: number, my: number): HitResult | null {\n const { data, area, options } = ctx\n const series = data.series[0]\n if (!series || series.values.length === 0) return null\n\n const fOpts = options as unknown as FunnelOptions\n const stepGap = fOpts.stepGap ?? 2\n const stepCount = series.values.length\n const totalGap = stepGap * (stepCount - 1)\n const stepHeight = (area.height - totalGap) / stepCount\n\n for (let i = 0; i < stepCount; i++) {\n const y = area.y + i * (stepHeight + stepGap)\n if (my >= y && my <= y + stepHeight) {\n return { seriesIndex: 0, pointIndex: i, distance: 0, x: area.x + area.width / 2, y: y + stepHeight / 2 }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-MPQECPE3.js';
2
- import { PathBuilder, path, text, circle, group } from './chunk-DX4FBN3I.js';
1
+ import { prepareNoAxes } from './chunk-T7SCCACB.js';
2
+ import { PathBuilder, path, text, circle, group } from './chunk-AEQXFDL7.js';
3
3
 
4
4
  // src/charts/radar/radar-type.ts
5
5
  var radarChartType = {
@@ -154,5 +154,5 @@ var radarChartType = {
154
154
  };
155
155
 
156
156
  export { radarChartType };
157
- //# sourceMappingURL=chunk-PVPTFMJJ.js.map
158
- //# sourceMappingURL=chunk-PVPTFMJJ.js.map
157
+ //# sourceMappingURL=chunk-IOV77VHP.js.map
158
+ //# sourceMappingURL=chunk-IOV77VHP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/radar/radar-type.ts"],"names":[],"mappings":"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","file":"chunk-PVPTFMJJ.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, circle, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Radar / Spider chart — plots multi-dimensional data on radial axes.\n * Each category becomes an axis radiating from center.\n */\nexport const radarChartType: ChartTypePlugin = {\n type: 'radar',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme } = ctx\n const nodes: RenderNode[] = []\n\n const labelCount = data.labels.length\n if (labelCount < 3) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const radius = Math.min(area.width, area.height) / 2 - 24\n\n // Find the max value across all series for scaling\n let maxVal = 0\n for (const series of data.series) {\n for (const v of series.values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n }\n if (maxVal === 0) maxVal = 1\n\n const angleStep = (Math.PI * 2) / labelCount\n const startAngle = -Math.PI / 2 // start from top\n\n // Draw grid rings (3 levels)\n const gridLevels = 3\n for (let level = 1; level <= gridLevels; level++) {\n const r = (radius * level) / gridLevels\n const pb = new PathBuilder()\n for (let i = 0; i <= labelCount; i++) {\n const angle = startAngle + (i % labelCount) * angleStep\n const x = cx + r * Math.cos(angle)\n const y = cy + r * Math.sin(angle)\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n nodes.push(path(pb.build(), {\n class: 'chartts-radar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fillOpacity: 0,\n fill: 'none',\n }))\n }\n\n // Draw axis lines from center to each vertex\n for (let i = 0; i < labelCount; i++) {\n const angle = startAngle + i * angleStep\n const x = cx + radius * Math.cos(angle)\n const y = cy + radius * Math.sin(angle)\n\n nodes.push({\n type: 'line',\n x1: cx,\n y1: cy,\n x2: x,\n y2: y,\n attrs: {\n class: 'chartts-radar-axis',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n },\n })\n\n // Label at vertex\n const labelR = radius + 14\n const lx = cx + labelR * Math.cos(angle)\n const ly = cy + labelR * Math.sin(angle)\n const anchor = Math.abs(Math.cos(angle)) < 0.01 ? 'middle' as const\n : Math.cos(angle) > 0 ? 'start' as const : 'end' as const\n\n nodes.push(text(lx, ly, String(data.labels[i]!), {\n class: 'chartts-radar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Draw series polygons\n for (const series of data.series) {\n const pb = new PathBuilder()\n const points: { x: number; y: number }[] = []\n\n for (let i = 0; i < labelCount; i++) {\n const val = series.values[i] ?? 0\n const r = (Math.abs(val) / maxVal) * radius\n const angle = startAngle + i * angleStep\n const x = cx + r * Math.cos(angle)\n const y = cy + r * Math.sin(angle)\n points.push({ x, y })\n\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n pb.close()\n\n const seriesNodes: RenderNode[] = []\n\n // Fill\n seriesNodes.push(path(pb.build(), {\n class: 'chartts-radar-area',\n fill: series.color,\n fillOpacity: 0.2,\n stroke: series.color,\n strokeWidth: theme.lineWidth,\n 'data-series': series.index,\n }))\n\n // Points\n for (let i = 0; i < points.length; i++) {\n seriesNodes.push(circle(points[i]!.x, points[i]!.y, theme.pointRadius, {\n class: 'chartts-radar-point',\n fill: series.color,\n 'data-series': series.index,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name} ${data.labels[i]}: ${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, area } = ctx\n const labelCount = data.labels.length\n if (labelCount < 3) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const radius = Math.min(area.width, area.height) / 2 - 24\n const angleStep = (Math.PI * 2) / labelCount\n const startAngle = -Math.PI / 2\n\n let maxVal = 0\n for (const series of data.series) {\n for (const v of series.values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n }\n if (maxVal === 0) return null\n\n let best: HitResult | null = null\n let bestDist = Infinity\n const hitRadius = 15\n\n for (const series of data.series) {\n for (let i = 0; i < labelCount; i++) {\n const val = series.values[i] ?? 0\n const r = (Math.abs(val) / maxVal) * radius\n const angle = startAngle + i * angleStep\n const px = cx + r * Math.cos(angle)\n const py = cy + r * Math.sin(angle)\n const dist = Math.sqrt((mx - px) ** 2 + (my - py) ** 2)\n if (dist < bestDist && dist < hitRadius) {\n bestDist = dist\n best = { seriesIndex: series.index, pointIndex: i, distance: dist, x: px, y: py }\n }\n }\n }\n\n return best\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/radar/radar-type.ts"],"names":[],"mappings":"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","file":"chunk-IOV77VHP.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, path, circle, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Radar / Spider chart — plots multi-dimensional data on radial axes.\n * Each category becomes an axis radiating from center.\n */\nexport const radarChartType: ChartTypePlugin = {\n type: 'radar',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme } = ctx\n const nodes: RenderNode[] = []\n\n const labelCount = data.labels.length\n if (labelCount < 3) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const radius = Math.min(area.width, area.height) / 2 - 24\n\n // Find the max value across all series for scaling\n let maxVal = 0\n for (const series of data.series) {\n for (const v of series.values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n }\n if (maxVal === 0) maxVal = 1\n\n const angleStep = (Math.PI * 2) / labelCount\n const startAngle = -Math.PI / 2 // start from top\n\n // Draw grid rings (3 levels)\n const gridLevels = 3\n for (let level = 1; level <= gridLevels; level++) {\n const r = (radius * level) / gridLevels\n const pb = new PathBuilder()\n for (let i = 0; i <= labelCount; i++) {\n const angle = startAngle + (i % labelCount) * angleStep\n const x = cx + r * Math.cos(angle)\n const y = cy + r * Math.sin(angle)\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n nodes.push(path(pb.build(), {\n class: 'chartts-radar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fillOpacity: 0,\n fill: 'none',\n }))\n }\n\n // Draw axis lines from center to each vertex\n for (let i = 0; i < labelCount; i++) {\n const angle = startAngle + i * angleStep\n const x = cx + radius * Math.cos(angle)\n const y = cy + radius * Math.sin(angle)\n\n nodes.push({\n type: 'line',\n x1: cx,\n y1: cy,\n x2: x,\n y2: y,\n attrs: {\n class: 'chartts-radar-axis',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n },\n })\n\n // Label at vertex\n const labelR = radius + 14\n const lx = cx + labelR * Math.cos(angle)\n const ly = cy + labelR * Math.sin(angle)\n const anchor = Math.abs(Math.cos(angle)) < 0.01 ? 'middle' as const\n : Math.cos(angle) > 0 ? 'start' as const : 'end' as const\n\n nodes.push(text(lx, ly, String(data.labels[i]!), {\n class: 'chartts-radar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Draw series polygons\n for (const series of data.series) {\n const pb = new PathBuilder()\n const points: { x: number; y: number }[] = []\n\n for (let i = 0; i < labelCount; i++) {\n const val = series.values[i] ?? 0\n const r = (Math.abs(val) / maxVal) * radius\n const angle = startAngle + i * angleStep\n const x = cx + r * Math.cos(angle)\n const y = cy + r * Math.sin(angle)\n points.push({ x, y })\n\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n pb.close()\n\n const seriesNodes: RenderNode[] = []\n\n // Fill\n seriesNodes.push(path(pb.build(), {\n class: 'chartts-radar-area',\n fill: series.color,\n fillOpacity: 0.2,\n stroke: series.color,\n strokeWidth: theme.lineWidth,\n 'data-series': series.index,\n }))\n\n // Points\n for (let i = 0; i < points.length; i++) {\n seriesNodes.push(circle(points[i]!.x, points[i]!.y, theme.pointRadius, {\n class: 'chartts-radar-point',\n fill: series.color,\n 'data-series': series.index,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name} ${data.labels[i]}: ${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, area } = ctx\n const labelCount = data.labels.length\n if (labelCount < 3) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const radius = Math.min(area.width, area.height) / 2 - 24\n const angleStep = (Math.PI * 2) / labelCount\n const startAngle = -Math.PI / 2\n\n let maxVal = 0\n for (const series of data.series) {\n for (const v of series.values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n }\n if (maxVal === 0) return null\n\n let best: HitResult | null = null\n let bestDist = Infinity\n const hitRadius = 15\n\n for (const series of data.series) {\n for (let i = 0; i < labelCount; i++) {\n const val = series.values[i] ?? 0\n const r = (Math.abs(val) / maxVal) * radius\n const angle = startAngle + i * angleStep\n const px = cx + r * Math.cos(angle)\n const py = cy + r * Math.sin(angle)\n const dist = Math.sqrt((mx - px) ** 2 + (my - py) ** 2)\n if (dist < bestDist && dist < hitRadius) {\n bestDist = dist\n best = { seriesIndex: series.index, pointIndex: i, distance: dist, x: px, y: py }\n }\n }\n }\n\n return best\n },\n}\n"]}
@@ -2883,7 +2883,8 @@ function createZoomPan(config, onUpdate, interactionState) {
2883
2883
  drag: config.drag ?? true,
2884
2884
  pinch: config.pinch ?? true,
2885
2885
  minZoom: config.minZoom ?? 1,
2886
- maxZoom: config.maxZoom ?? 20
2886
+ maxZoom: config.maxZoom ?? 20,
2887
+ normalizedPan: config.normalizedPan ?? true
2887
2888
  };
2888
2889
  const state = {
2889
2890
  zoomX: 1,
@@ -2942,10 +2943,10 @@ function createZoomPan(config, onUpdate, interactionState) {
2942
2943
  const dx = e.clientX - dragStartX;
2943
2944
  const dy = e.clientY - dragStartY;
2944
2945
  if (cfg.x) {
2945
- state.panX = dragStartPanX + dx / (area.width * state.zoomX);
2946
+ state.panX = dragStartPanX + dx / (cfg.normalizedPan ? area.width * state.zoomX : area.width);
2946
2947
  }
2947
2948
  if (cfg.y) {
2948
- state.panY = dragStartPanY + dy / (area.height * state.zoomY);
2949
+ state.panY = dragStartPanY + dy / (cfg.normalizedPan ? area.height * state.zoomY : area.height);
2949
2950
  }
2950
2951
  clampPan();
2951
2952
  onUpdate();
@@ -2994,9 +2995,11 @@ function createZoomPan(config, onUpdate, interactionState) {
2994
2995
  }
2995
2996
  function clampPan() {
2996
2997
  const halfVisX = (1 - 1 / state.zoomX) / 2;
2997
- state.panX = clamp(state.panX, -halfVisX, halfVisX);
2998
+ const limitX = cfg.normalizedPan ? halfVisX : state.zoomX - 1;
2999
+ state.panX = clamp(state.panX, -limitX, limitX);
2998
3000
  const halfVisY = (1 - 1 / state.zoomY) / 2;
2999
- state.panY = clamp(state.panY, -halfVisY, halfVisY);
3001
+ const limitY = cfg.normalizedPan ? halfVisY : state.zoomY - 1;
3002
+ state.panY = clamp(state.panY, -limitY, limitY);
3000
3003
  }
3001
3004
  function pinchDistance(e) {
3002
3005
  const dx = e.touches[0].clientX - e.touches[1].clientX;
@@ -4542,7 +4545,8 @@ function createChart(target, chartType, data, options = {}) {
4542
4545
  y: needs2DZoom,
4543
4546
  wheel: currentOptions.zoom,
4544
4547
  drag: currentOptions.pan,
4545
- pinch: currentOptions.zoom
4548
+ pinch: currentOptions.zoom,
4549
+ normalizedPan: !needs2DZoom
4546
4550
  },
4547
4551
  () => {
4548
4552
  render();
@@ -4616,7 +4620,8 @@ function createChart(target, chartType, data, options = {}) {
4616
4620
  renderer.render(root, renderErrorState(width, height, currentTheme, stateMessage));
4617
4621
  return;
4618
4622
  }
4619
- const isEmpty = !currentData.series.length || currentData.series.every((s) => s.values.length === 0);
4623
+ const hasRichGraphData = chartType.type === "graph" && (options.nodes || options.edges);
4624
+ const isEmpty = !hasRichGraphData && (!currentData.series.length || currentData.series.every((s) => s.values.length === 0));
4620
4625
  if (chartState === "empty" || isEmpty) {
4621
4626
  renderer.render(root, renderEmptyState(width, height, currentTheme, stateMessage));
4622
4627
  return;
@@ -5053,5 +5058,5 @@ exports.rect = rect;
5053
5058
  exports.renderToString = renderToString;
5054
5059
  exports.resolveTheme = resolveTheme;
5055
5060
  exports.text = text;
5056
- //# sourceMappingURL=chunk-UMIJYYF3.cjs.map
5057
- //# sourceMappingURL=chunk-UMIJYYF3.cjs.map
5061
+ //# sourceMappingURL=chunk-JVVGQLJQ.cjs.map
5062
+ //# sourceMappingURL=chunk-JVVGQLJQ.cjs.map