@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/polar/polar-type.ts"],"names":[],"mappings":"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","file":"chunk-6JNW43SE.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, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\n/**\n * Polar / Radial bar chart (Nightingale rose diagram).\n *\n * Each category is a wedge whose radius is proportional to its value.\n * Uses the first series' values as wedge sizes.\n * Wedges have uniform pixel gaps, rounded corners, and a small inner radius.\n */\nexport const polarChartType: ChartTypePlugin = {\n type: 'polar',\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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) maxVal = 1\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n const gapPx = 4\n const halfGap = gapPx / 2\n const cornerRadius = 5\n\n // Draw concentric grid rings\n const ringCount = 3\n for (let r = 1; r <= ringCount; r++) {\n const ringR = (maxOuterR * r) / ringCount\n const pb = new PathBuilder()\n pb.moveTo(cx + ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx - ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx + ringR, cy)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-polar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fill: 'none',\n opacity: 0.3,\n }))\n }\n\n // Draw wedges\n for (let i = 0; i < count; i++) {\n const value = Math.abs(values[i]!)\n const wedgeR = (value / maxVal) * maxOuterR\n const startAngle = -Math.PI / 2 + i * angleStep\n const endAngle = -Math.PI / 2 + (i + 1) * angleStep\n const sliceAngle = endAngle - startAngle\n\n if (wedgeR < innerR + 2) continue\n\n // Uniform pixel gap: different angular offsets at different radii\n const outerPadAngle = halfGap / wedgeR\n const innerPadAngle = innerR > 0 ? halfGap / innerR : 0\n\n if (sliceAngle < outerPadAngle * 2 + 0.01) continue\n\n const colorIndex = i % options.colors.length\n const color = options.colors[colorIndex]!\n\n const d = roundedSlicePath(\n cx, cy, wedgeR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + innerPadAngle, endAngle - innerPadAngle,\n cornerRadius,\n )\n\n const wedgeNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-polar-wedge',\n fill: color,\n fillOpacity: 0.75,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Item ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label at the outer edge\n const midAngle = (startAngle + endAngle) / 2\n const labelR = maxOuterR + 10\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? 'middle' as const\n : Math.cos(midAngle) > 0 ? 'start' as const : 'end' as const\n\n wedgeNodes.push(text(lx, ly, String(data.labels[i] ?? ''), {\n class: 'chartts-polar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(wedgeNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Item ${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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > maxOuterR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const offset = angle + Math.PI / 2\n const normalizedAngle = offset < 0 ? offset + Math.PI * 2 : offset\n const idx = Math.floor(normalizedAngle / angleStep)\n\n if (idx >= 0 && idx < count) {\n const wedgeR = (Math.abs(values[idx]!) / maxVal) * maxOuterR\n if (dist <= wedgeR && dist >= innerR) {\n const midAngle = -Math.PI / 2 + (idx + 0.5) * angleStep\n const midR = (innerR + wedgeR) / 2\n return { seriesIndex: 0, pointIndex: idx, distance: dist, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n }\n\n return null\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/polar/polar-type.ts"],"names":[],"mappings":"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","file":"chunk-EWVXMQRW.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, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\n/**\n * Polar / Radial bar chart (Nightingale rose diagram).\n *\n * Each category is a wedge whose radius is proportional to its value.\n * Uses the first series' values as wedge sizes.\n * Wedges have uniform pixel gaps, rounded corners, and a small inner radius.\n */\nexport const polarChartType: ChartTypePlugin = {\n type: 'polar',\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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) maxVal = 1\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n const gapPx = 4\n const halfGap = gapPx / 2\n const cornerRadius = 5\n\n // Draw concentric grid rings\n const ringCount = 3\n for (let r = 1; r <= ringCount; r++) {\n const ringR = (maxOuterR * r) / ringCount\n const pb = new PathBuilder()\n pb.moveTo(cx + ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx - ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx + ringR, cy)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-polar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fill: 'none',\n opacity: 0.3,\n }))\n }\n\n // Draw wedges\n for (let i = 0; i < count; i++) {\n const value = Math.abs(values[i]!)\n const wedgeR = (value / maxVal) * maxOuterR\n const startAngle = -Math.PI / 2 + i * angleStep\n const endAngle = -Math.PI / 2 + (i + 1) * angleStep\n const sliceAngle = endAngle - startAngle\n\n if (wedgeR < innerR + 2) continue\n\n // Uniform pixel gap: different angular offsets at different radii\n const outerPadAngle = halfGap / wedgeR\n const innerPadAngle = innerR > 0 ? halfGap / innerR : 0\n\n if (sliceAngle < outerPadAngle * 2 + 0.01) continue\n\n const colorIndex = i % options.colors.length\n const color = options.colors[colorIndex]!\n\n const d = roundedSlicePath(\n cx, cy, wedgeR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + innerPadAngle, endAngle - innerPadAngle,\n cornerRadius,\n )\n\n const wedgeNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-polar-wedge',\n fill: color,\n fillOpacity: 0.75,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Item ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label at the outer edge\n const midAngle = (startAngle + endAngle) / 2\n const labelR = maxOuterR + 10\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? 'middle' as const\n : Math.cos(midAngle) > 0 ? 'start' as const : 'end' as const\n\n wedgeNodes.push(text(lx, ly, String(data.labels[i] ?? ''), {\n class: 'chartts-polar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(wedgeNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Item ${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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > maxOuterR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const offset = angle + Math.PI / 2\n const normalizedAngle = offset < 0 ? offset + Math.PI * 2 : offset\n const idx = Math.floor(normalizedAngle / angleStep)\n\n if (idx >= 0 && idx < count) {\n const wedgeR = (Math.abs(values[idx]!) / maxVal) * maxOuterR\n if (dist <= wedgeR && dist >= innerR) {\n const midAngle = -Math.PI / 2 + (idx + 0.5) * angleStep\n const midR = (innerR + wedgeR) / 2\n return { seriesIndex: 0, pointIndex: idx, distance: dist, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-MPQECPE3.js';
2
- import { rect, text, group } from './chunk-DX4FBN3I.js';
1
+ import { prepareNoAxes } from './chunk-T7SCCACB.js';
2
+ import { rect, text, group } from './chunk-AEQXFDL7.js';
3
3
 
4
4
  // src/charts/heatmap/heatmap-type.ts
5
5
  var heatmapChartType = {
@@ -145,5 +145,5 @@ function interpolateColor(baseColor, t) {
145
145
  }
146
146
 
147
147
  export { heatmapChartType };
148
- //# sourceMappingURL=chunk-LIY7MYRG.js.map
149
- //# sourceMappingURL=chunk-LIY7MYRG.js.map
148
+ //# sourceMappingURL=chunk-FGBIJ6PL.js.map
149
+ //# sourceMappingURL=chunk-FGBIJ6PL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/heatmap/heatmap-type.ts"],"names":[],"mappings":"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","file":"chunk-LIY7MYRG.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, rect, text } from '../../render/tree'\n\n/**\n * Heatmap chart — displays a matrix of colored cells.\n *\n * Data format: each series is a row, each value is a cell.\n * Labels are column headers, series names are row headers.\n * Cell color intensity is proportional to value.\n */\nexport const heatmapChartType: ChartTypePlugin = {\n type: 'heatmap',\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 rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return nodes\n\n // Find min/max values for color interpolation\n let vMin = Infinity\n let vMax = -Infinity\n for (const s of data.series) {\n for (const v of s.values) {\n if (v < vMin) vMin = v\n if (v > vMax) vMax = v\n }\n }\n if (vMin === vMax) vMax = vMin + 1\n\n // Layout: leave space for labels\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n const gap = 1.5\n\n // Column labels (top)\n for (let c = 0; c < colCount; c++) {\n const x = gridX + cellW * (c + 0.5)\n nodes.push(text(x, area.y + labelH * 0.5, String(data.labels[c]!), {\n class: 'chartts-heatmap-col-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: Math.min(theme.fontSizeSmall, cellW * 0.35),\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Row labels (left) + cells\n for (let r = 0; r < rowCount; r++) {\n const series = data.series[r]!\n const ry = gridY + cellH * r\n\n // Row label\n nodes.push(text(area.x + labelW - 4, ry + cellH / 2, series.name, {\n class: 'chartts-heatmap-row-label',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: Math.min(theme.fontSizeSmall, cellH * 0.45),\n fontFamily: theme.fontFamily,\n }))\n\n const cellNodes: RenderNode[] = []\n\n for (let c = 0; c < colCount; c++) {\n const value = series.values[c] ?? 0\n const t = (value - vMin) / (vMax - vMin)\n const color = interpolateColor(options.colors[0]!, t)\n\n cellNodes.push(rect(\n gridX + cellW * c + gap / 2,\n ry + gap / 2,\n cellW - gap,\n cellH - gap,\n {\n class: 'chartts-heatmap-cell',\n fill: color,\n rx: 4,\n ry: 2,\n 'data-series': r,\n 'data-index': c,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}, ${data.labels[c]}: ${value}`,\n },\n ))\n }\n\n nodes.push(group(cellNodes, {\n class: `chartts-series chartts-series-${r}`,\n 'data-series-name': series.name,\n }))\n }\n\n return nodes\n },\n\n getHighlightNodes(ctx: RenderContext, hit: HitResult): RenderNode[] {\n const { data, area, options } = ctx\n const rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return []\n\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n\n const col = hit.pointIndex\n const row = hit.seriesIndex\n const color = options.colors[0] ?? '#3b82f6'\n\n return [\n rect(gridX + cellW * col, gridY + cellH * row, cellW, cellH, {\n class: 'chartts-highlight-cell',\n fill: 'none',\n stroke: color,\n strokeWidth: 2,\n }),\n ]\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return null\n\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n\n if (mx < gridX || mx > gridX + gridW || my < gridY || my > gridY + gridH) return null\n\n const col = Math.floor((mx - gridX) / cellW)\n const row = Math.floor((my - gridY) / cellH)\n\n if (row >= 0 && row < rowCount && col >= 0 && col < colCount) {\n return { seriesIndex: row, pointIndex: col, distance: 0, x: gridX + col * cellW + cellW / 2, y: gridY + row * cellH + cellH / 2 }\n }\n\n return null\n },\n}\n\n/** Interpolate from transparent to the given color based on t (0..1) */\nfunction interpolateColor(baseColor: string, t: number): string {\n // Extract hex fallback from var(--color-xxx, #hex) format\n const hexMatch = baseColor.match(/#([0-9a-fA-F]{6})/)\n if (!hexMatch) return `rgba(59, 130, 246, ${(0.1 + t * 0.9).toFixed(2)})`\n\n const hex = hexMatch[1]!\n const r = parseInt(hex.slice(0, 2), 16)\n const g = parseInt(hex.slice(2, 4), 16)\n const b = parseInt(hex.slice(4, 6), 16)\n\n const opacity = 0.1 + t * 0.9\n return `rgba(${r}, ${g}, ${b}, ${opacity.toFixed(2)})`\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/heatmap/heatmap-type.ts"],"names":[],"mappings":"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","file":"chunk-FGBIJ6PL.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, rect, text } from '../../render/tree'\n\n/**\n * Heatmap chart — displays a matrix of colored cells.\n *\n * Data format: each series is a row, each value is a cell.\n * Labels are column headers, series names are row headers.\n * Cell color intensity is proportional to value.\n */\nexport const heatmapChartType: ChartTypePlugin = {\n type: 'heatmap',\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 rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return nodes\n\n // Find min/max values for color interpolation\n let vMin = Infinity\n let vMax = -Infinity\n for (const s of data.series) {\n for (const v of s.values) {\n if (v < vMin) vMin = v\n if (v > vMax) vMax = v\n }\n }\n if (vMin === vMax) vMax = vMin + 1\n\n // Layout: leave space for labels\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n const gap = 1.5\n\n // Column labels (top)\n for (let c = 0; c < colCount; c++) {\n const x = gridX + cellW * (c + 0.5)\n nodes.push(text(x, area.y + labelH * 0.5, String(data.labels[c]!), {\n class: 'chartts-heatmap-col-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: Math.min(theme.fontSizeSmall, cellW * 0.35),\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Row labels (left) + cells\n for (let r = 0; r < rowCount; r++) {\n const series = data.series[r]!\n const ry = gridY + cellH * r\n\n // Row label\n nodes.push(text(area.x + labelW - 4, ry + cellH / 2, series.name, {\n class: 'chartts-heatmap-row-label',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: Math.min(theme.fontSizeSmall, cellH * 0.45),\n fontFamily: theme.fontFamily,\n }))\n\n const cellNodes: RenderNode[] = []\n\n for (let c = 0; c < colCount; c++) {\n const value = series.values[c] ?? 0\n const t = (value - vMin) / (vMax - vMin)\n const color = interpolateColor(options.colors[0]!, t)\n\n cellNodes.push(rect(\n gridX + cellW * c + gap / 2,\n ry + gap / 2,\n cellW - gap,\n cellH - gap,\n {\n class: 'chartts-heatmap-cell',\n fill: color,\n rx: 4,\n ry: 2,\n 'data-series': r,\n 'data-index': c,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}, ${data.labels[c]}: ${value}`,\n },\n ))\n }\n\n nodes.push(group(cellNodes, {\n class: `chartts-series chartts-series-${r}`,\n 'data-series-name': series.name,\n }))\n }\n\n return nodes\n },\n\n getHighlightNodes(ctx: RenderContext, hit: HitResult): RenderNode[] {\n const { data, area, options } = ctx\n const rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return []\n\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n\n const col = hit.pointIndex\n const row = hit.seriesIndex\n const color = options.colors[0] ?? '#3b82f6'\n\n return [\n rect(gridX + cellW * col, gridY + cellH * row, cellW, cellH, {\n class: 'chartts-highlight-cell',\n fill: 'none',\n stroke: color,\n strokeWidth: 2,\n }),\n ]\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area } = ctx\n const rowCount = data.series.length\n const colCount = data.labels.length\n if (rowCount === 0 || colCount === 0) return null\n\n const labelW = Math.min(60, area.width * 0.15)\n const labelH = Math.min(24, area.height * 0.1)\n const gridX = area.x + labelW\n const gridY = area.y + labelH\n const gridW = area.width - labelW\n const gridH = area.height - labelH\n const cellW = gridW / colCount\n const cellH = gridH / rowCount\n\n if (mx < gridX || mx > gridX + gridW || my < gridY || my > gridY + gridH) return null\n\n const col = Math.floor((mx - gridX) / cellW)\n const row = Math.floor((my - gridY) / cellH)\n\n if (row >= 0 && row < rowCount && col >= 0 && col < colCount) {\n return { seriesIndex: row, pointIndex: col, distance: 0, x: gridX + col * cellW + cellW / 2, y: gridY + row * cellH + cellH / 2 }\n }\n\n return null\n },\n}\n\n/** Interpolate from transparent to the given color based on t (0..1) */\nfunction interpolateColor(baseColor: string, t: number): string {\n // Extract hex fallback from var(--color-xxx, #hex) format\n const hexMatch = baseColor.match(/#([0-9a-fA-F]{6})/)\n if (!hexMatch) return `rgba(59, 130, 246, ${(0.1 + t * 0.9).toFixed(2)})`\n\n const hex = hexMatch[1]!\n const r = parseInt(hex.slice(0, 2), 16)\n const g = parseInt(hex.slice(2, 4), 16)\n const b = parseInt(hex.slice(4, 6), 16)\n\n const opacity = 0.1 + t * 0.9\n return `rgba(${r}, ${g}, ${b}, ${opacity.toFixed(2)})`\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkEHNX3MG3_cjs = require('./chunk-EHNX3MG3.cjs');
3
+ var chunk3NHH6C4K_cjs = require('./chunk-3NHH6C4K.cjs');
4
4
 
5
5
  // src/charts/area/area-type.ts
6
6
  var areaChartType = {
@@ -17,16 +17,16 @@ var areaChartType = {
17
17
  fillOpacity: s.fillOpacity ?? 0.25
18
18
  }))
19
19
  };
20
- return chunkEHNX3MG3_cjs.lineChartType.prepareData(filled, options);
20
+ return chunk3NHH6C4K_cjs.lineChartType.prepareData(filled, options);
21
21
  },
22
22
  render(ctx) {
23
- return chunkEHNX3MG3_cjs.lineChartType.render(ctx);
23
+ return chunk3NHH6C4K_cjs.lineChartType.render(ctx);
24
24
  },
25
25
  hitTest(ctx, mx, my) {
26
- return chunkEHNX3MG3_cjs.lineChartType.hitTest(ctx, mx, my);
26
+ return chunk3NHH6C4K_cjs.lineChartType.hitTest(ctx, mx, my);
27
27
  }
28
28
  };
29
29
 
30
30
  exports.areaChartType = areaChartType;
31
- //# sourceMappingURL=chunk-OFEROCC5.cjs.map
32
- //# sourceMappingURL=chunk-OFEROCC5.cjs.map
31
+ //# sourceMappingURL=chunk-FGHSUT6X.cjs.map
32
+ //# sourceMappingURL=chunk-FGHSUT6X.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/area/area-type.ts"],"names":["lineChartType"],"mappings":";;;;;AAUO,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;AAEnE,IAAA,MAAM,MAAA,GAAoB;AAAA,MACxB,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,QAC5B,GAAG,CAAA;AAAA,QACH,IAAA,EAAM,EAAE,IAAA,IAAQ,IAAA;AAAA,QAChB,WAAA,EAAa,EAAE,WAAA,IAAe;AAAA,OAChC,CAAE;AAAA,KACJ;AACA,IAAA,OAAOA,+BAAA,CAAc,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAAA,EAClD,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,OAAOA,+BAAA,CAAc,OAAO,GAAG,CAAA;AAAA,EACjC,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-OFEROCC5.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 * Area chart — line chart with fill enabled on all series by default.\n * Delegates entirely to lineChartType after forcing fill:true.\n */\nexport const areaChartType: ChartTypePlugin = {\n type: 'area',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n // Force fill on all series\n const filled: ChartData = {\n ...data,\n series: data.series.map(s => ({\n ...s,\n fill: s.fill ?? true,\n fillOpacity: s.fillOpacity ?? 0.25,\n })),\n }\n return lineChartType.prepareData(filled, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n return lineChartType.render(ctx)\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n return lineChartType.hitTest(ctx, mx, my)\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/area/area-type.ts"],"names":["lineChartType"],"mappings":";;;;;AAUO,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;AAEnE,IAAA,MAAM,MAAA,GAAoB;AAAA,MACxB,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,QAC5B,GAAG,CAAA;AAAA,QACH,IAAA,EAAM,EAAE,IAAA,IAAQ,IAAA;AAAA,QAChB,WAAA,EAAa,EAAE,WAAA,IAAe;AAAA,OAChC,CAAE;AAAA,KACJ;AACA,IAAA,OAAOA,+BAAA,CAAc,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAAA,EAClD,CAAA;AAAA,EAEA,OAAO,GAAA,EAAkC;AACvC,IAAA,OAAOA,+BAAA,CAAc,OAAO,GAAG,CAAA;AAAA,EACjC,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-FGHSUT6X.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 * Area chart — line chart with fill enabled on all series by default.\n * Delegates entirely to lineChartType after forcing fill:true.\n */\nexport const areaChartType: ChartTypePlugin = {\n type: 'area',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n // Force fill on all series\n const filled: ChartData = {\n ...data,\n series: data.series.map(s => ({\n ...s,\n fill: s.fill ?? true,\n fillOpacity: s.fillOpacity ?? 0.25,\n })),\n }\n return lineChartType.prepareData(filled, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n return lineChartType.render(ctx)\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n return lineChartType.hitTest(ctx, mx, my)\n },\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkEHNX3MG3_cjs = require('./chunk-EHNX3MG3.cjs');
3
+ var chunk3NHH6C4K_cjs = require('./chunk-3NHH6C4K.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 chunkEHNX3MG3_cjs.lineChartType.prepareData(data, options);
12
+ return chunk3NHH6C4K_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 chunkEHNX3MG3_cjs.lineChartType.render(stepCtx);
19
+ return chunk3NHH6C4K_cjs.lineChartType.render(stepCtx);
20
20
  },
21
21
  hitTest(ctx, mx, my) {
22
- return chunkEHNX3MG3_cjs.lineChartType.hitTest(ctx, mx, my);
22
+ return chunk3NHH6C4K_cjs.lineChartType.hitTest(ctx, mx, my);
23
23
  }
24
24
  };
25
25
 
26
26
  exports.stepChartType = stepChartType;
27
- //# sourceMappingURL=chunk-QKJUAMRK.cjs.map
28
- //# sourceMappingURL=chunk-QKJUAMRK.cjs.map
27
+ //# sourceMappingURL=chunk-FVLVTY5D.cjs.map
28
+ //# sourceMappingURL=chunk-FVLVTY5D.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-QKJUAMRK.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
+ {"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-FVLVTY5D.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,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/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 chunkCDS2NXGT_cjs.prepareNoAxes(data, options);
14
+ return chunkV5Q6UNUK_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
- chunkUMIJYYF3_cjs.text(
23
+ chunkJVVGQLJQ_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-YX6RW6ZW.cjs.map
52
- //# sourceMappingURL=chunk-YX6RW6ZW.cjs.map
51
+ //# sourceMappingURL=chunk-GBL4R3GH.cjs.map
52
+ //# sourceMappingURL=chunk-GBL4R3GH.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-YX6RW6ZW.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
+ {"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-GBL4R3GH.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,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkWYIIWTIR_cjs = require('./chunk-WYIIWTIR.cjs');
4
- var chunkCDS2NXGT_cjs = require('./chunk-CDS2NXGT.cjs');
5
- var chunkUMIJYYF3_cjs = require('./chunk-UMIJYYF3.cjs');
3
+ var chunkKWSVJRXX_cjs = require('./chunk-KWSVJRXX.cjs');
4
+ var chunkV5Q6UNUK_cjs = require('./chunk-V5Q6UNUK.cjs');
5
+ var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
6
6
 
7
7
  // src/charts/polar/polar-type.ts
8
8
  var polarChartType = {
@@ -11,7 +11,7 @@ var polarChartType = {
11
11
  return { x: "categorical", y: "linear" };
12
12
  },
13
13
  prepareData(data, options) {
14
- return chunkCDS2NXGT_cjs.prepareNoAxes(data, options);
14
+ return chunkV5Q6UNUK_cjs.prepareNoAxes(data, options);
15
15
  },
16
16
  render(ctx) {
17
17
  const { data, area, theme, options } = ctx;
@@ -36,11 +36,11 @@ var polarChartType = {
36
36
  const ringCount = 3;
37
37
  for (let r = 1; r <= ringCount; r++) {
38
38
  const ringR = maxOuterR * r / ringCount;
39
- const pb = new chunkUMIJYYF3_cjs.PathBuilder();
39
+ const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
40
40
  pb.moveTo(cx + ringR, cy);
41
41
  pb.arc(ringR, ringR, 0, false, true, cx - ringR, cy);
42
42
  pb.arc(ringR, ringR, 0, false, true, cx + ringR, cy);
43
- nodes.push(chunkUMIJYYF3_cjs.path(pb.build(), {
43
+ nodes.push(chunkJVVGQLJQ_cjs.path(pb.build(), {
44
44
  class: "chartts-polar-grid",
45
45
  stroke: theme.gridColor,
46
46
  strokeWidth: theme.gridWidth,
@@ -60,7 +60,7 @@ var polarChartType = {
60
60
  if (sliceAngle < outerPadAngle * 2 + 0.01) continue;
61
61
  const colorIndex = i % options.colors.length;
62
62
  const color = options.colors[colorIndex];
63
- const d = chunkWYIIWTIR_cjs.roundedSlicePath(
63
+ const d = chunkKWSVJRXX_cjs.roundedSlicePath(
64
64
  cx,
65
65
  cy,
66
66
  wedgeR,
@@ -72,7 +72,7 @@ var polarChartType = {
72
72
  cornerRadius
73
73
  );
74
74
  const wedgeNodes = [
75
- chunkUMIJYYF3_cjs.path(d, {
75
+ chunkJVVGQLJQ_cjs.path(d, {
76
76
  class: "chartts-polar-wedge",
77
77
  fill: color,
78
78
  fillOpacity: 0.75,
@@ -88,7 +88,7 @@ var polarChartType = {
88
88
  const lx = cx + labelR * Math.cos(midAngle);
89
89
  const ly = cy + labelR * Math.sin(midAngle);
90
90
  const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? "middle" : Math.cos(midAngle) > 0 ? "start" : "end";
91
- wedgeNodes.push(chunkUMIJYYF3_cjs.text(lx, ly, String(data.labels[i] ?? ""), {
91
+ wedgeNodes.push(chunkJVVGQLJQ_cjs.text(lx, ly, String(data.labels[i] ?? ""), {
92
92
  class: "chartts-polar-label",
93
93
  fill: theme.textMuted,
94
94
  textAnchor: anchor,
@@ -96,7 +96,7 @@ var polarChartType = {
96
96
  fontSize: theme.fontSizeSmall,
97
97
  fontFamily: theme.fontFamily
98
98
  }));
99
- nodes.push(chunkUMIJYYF3_cjs.group(wedgeNodes, {
99
+ nodes.push(chunkJVVGQLJQ_cjs.group(wedgeNodes, {
100
100
  class: `chartts-series chartts-series-${i}`,
101
101
  "data-series-name": String(data.labels[i] ?? `Item ${i + 1}`)
102
102
  }));
@@ -141,5 +141,5 @@ var polarChartType = {
141
141
  };
142
142
 
143
143
  exports.polarChartType = polarChartType;
144
- //# sourceMappingURL=chunk-SXVMEC6N.cjs.map
145
- //# sourceMappingURL=chunk-SXVMEC6N.cjs.map
144
+ //# sourceMappingURL=chunk-GRXHW5S3.cjs.map
145
+ //# sourceMappingURL=chunk-GRXHW5S3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/polar/polar-type.ts"],"names":["prepareNoAxes","PathBuilder","path","roundedSlicePath","text","group"],"mappings":"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","file":"chunk-SXVMEC6N.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'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\n/**\n * Polar / Radial bar chart (Nightingale rose diagram).\n *\n * Each category is a wedge whose radius is proportional to its value.\n * Uses the first series' values as wedge sizes.\n * Wedges have uniform pixel gaps, rounded corners, and a small inner radius.\n */\nexport const polarChartType: ChartTypePlugin = {\n type: 'polar',\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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) maxVal = 1\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n const gapPx = 4\n const halfGap = gapPx / 2\n const cornerRadius = 5\n\n // Draw concentric grid rings\n const ringCount = 3\n for (let r = 1; r <= ringCount; r++) {\n const ringR = (maxOuterR * r) / ringCount\n const pb = new PathBuilder()\n pb.moveTo(cx + ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx - ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx + ringR, cy)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-polar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fill: 'none',\n opacity: 0.3,\n }))\n }\n\n // Draw wedges\n for (let i = 0; i < count; i++) {\n const value = Math.abs(values[i]!)\n const wedgeR = (value / maxVal) * maxOuterR\n const startAngle = -Math.PI / 2 + i * angleStep\n const endAngle = -Math.PI / 2 + (i + 1) * angleStep\n const sliceAngle = endAngle - startAngle\n\n if (wedgeR < innerR + 2) continue\n\n // Uniform pixel gap: different angular offsets at different radii\n const outerPadAngle = halfGap / wedgeR\n const innerPadAngle = innerR > 0 ? halfGap / innerR : 0\n\n if (sliceAngle < outerPadAngle * 2 + 0.01) continue\n\n const colorIndex = i % options.colors.length\n const color = options.colors[colorIndex]!\n\n const d = roundedSlicePath(\n cx, cy, wedgeR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + innerPadAngle, endAngle - innerPadAngle,\n cornerRadius,\n )\n\n const wedgeNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-polar-wedge',\n fill: color,\n fillOpacity: 0.75,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Item ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label at the outer edge\n const midAngle = (startAngle + endAngle) / 2\n const labelR = maxOuterR + 10\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? 'middle' as const\n : Math.cos(midAngle) > 0 ? 'start' as const : 'end' as const\n\n wedgeNodes.push(text(lx, ly, String(data.labels[i] ?? ''), {\n class: 'chartts-polar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(wedgeNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Item ${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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > maxOuterR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const offset = angle + Math.PI / 2\n const normalizedAngle = offset < 0 ? offset + Math.PI * 2 : offset\n const idx = Math.floor(normalizedAngle / angleStep)\n\n if (idx >= 0 && idx < count) {\n const wedgeR = (Math.abs(values[idx]!) / maxVal) * maxOuterR\n if (dist <= wedgeR && dist >= innerR) {\n const midAngle = -Math.PI / 2 + (idx + 0.5) * angleStep\n const midR = (innerR + wedgeR) / 2\n return { seriesIndex: 0, pointIndex: idx, distance: dist, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n }\n\n return null\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/polar/polar-type.ts"],"names":["prepareNoAxes","PathBuilder","path","roundedSlicePath","text","group"],"mappings":"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","file":"chunk-GRXHW5S3.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'\nimport { roundedSlicePath } from '../../utils/slice-path'\n\n/**\n * Polar / Radial bar chart (Nightingale rose diagram).\n *\n * Each category is a wedge whose radius is proportional to its value.\n * Uses the first series' values as wedge sizes.\n * Wedges have uniform pixel gaps, rounded corners, and a small inner radius.\n */\nexport const polarChartType: ChartTypePlugin = {\n type: 'polar',\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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) maxVal = 1\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n const gapPx = 4\n const halfGap = gapPx / 2\n const cornerRadius = 5\n\n // Draw concentric grid rings\n const ringCount = 3\n for (let r = 1; r <= ringCount; r++) {\n const ringR = (maxOuterR * r) / ringCount\n const pb = new PathBuilder()\n pb.moveTo(cx + ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx - ringR, cy)\n pb.arc(ringR, ringR, 0, false, true, cx + ringR, cy)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-polar-grid',\n stroke: theme.gridColor,\n strokeWidth: theme.gridWidth,\n fill: 'none',\n opacity: 0.3,\n }))\n }\n\n // Draw wedges\n for (let i = 0; i < count; i++) {\n const value = Math.abs(values[i]!)\n const wedgeR = (value / maxVal) * maxOuterR\n const startAngle = -Math.PI / 2 + i * angleStep\n const endAngle = -Math.PI / 2 + (i + 1) * angleStep\n const sliceAngle = endAngle - startAngle\n\n if (wedgeR < innerR + 2) continue\n\n // Uniform pixel gap: different angular offsets at different radii\n const outerPadAngle = halfGap / wedgeR\n const innerPadAngle = innerR > 0 ? halfGap / innerR : 0\n\n if (sliceAngle < outerPadAngle * 2 + 0.01) continue\n\n const colorIndex = i % options.colors.length\n const color = options.colors[colorIndex]!\n\n const d = roundedSlicePath(\n cx, cy, wedgeR, innerR,\n startAngle + outerPadAngle, endAngle - outerPadAngle,\n startAngle + innerPadAngle, endAngle - innerPadAngle,\n cornerRadius,\n )\n\n const wedgeNodes: RenderNode[] = [\n path(d, {\n class: 'chartts-polar-wedge',\n fill: color,\n fillOpacity: 0.75,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? `Item ${i + 1}`}: ${values[i]}`,\n }),\n ]\n\n // Label at the outer edge\n const midAngle = (startAngle + endAngle) / 2\n const labelR = maxOuterR + 10\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? 'middle' as const\n : Math.cos(midAngle) > 0 ? 'start' as const : 'end' as const\n\n wedgeNodes.push(text(lx, ly, String(data.labels[i] ?? ''), {\n class: 'chartts-polar-label',\n fill: theme.textMuted,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n nodes.push(group(wedgeNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i] ?? `Item ${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 values = series.values\n const count = values.length\n let maxVal = 0\n for (const v of values) {\n if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n }\n if (maxVal === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxOuterR = Math.min(area.width, area.height) / 2 - 16\n const innerR = maxOuterR * 0.08\n const angleStep = (Math.PI * 2) / count\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > maxOuterR || dist < innerR) return null\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n const offset = angle + Math.PI / 2\n const normalizedAngle = offset < 0 ? offset + Math.PI * 2 : offset\n const idx = Math.floor(normalizedAngle / angleStep)\n\n if (idx >= 0 && idx < count) {\n const wedgeR = (Math.abs(values[idx]!) / maxVal) * maxOuterR\n if (dist <= wedgeR && dist >= innerR) {\n const midAngle = -Math.PI / 2 + (idx + 0.5) * angleStep\n const midR = (innerR + wedgeR) / 2\n return { seriesIndex: 0, pointIndex: idx, distance: dist, x: cx + midR * Math.cos(midAngle), y: cy + midR * Math.sin(midAngle) }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { createChart } from './chunk-DX4FBN3I.js';
1
+ import { createChart } from './chunk-AEQXFDL7.js';
2
2
 
3
3
  // src/api/factory.ts
4
4
  function createConvenience(chartType) {
@@ -9,5 +9,5 @@ function createConvenience(chartType) {
9
9
  }
10
10
 
11
11
  export { createConvenience };
12
- //# sourceMappingURL=chunk-K5TPJVOK.js.map
13
- //# sourceMappingURL=chunk-K5TPJVOK.js.map
12
+ //# sourceMappingURL=chunk-HCIBBUV5.js.map
13
+ //# sourceMappingURL=chunk-HCIBBUV5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/factory.ts"],"names":[],"mappings":";;;AAQO,SAAS,kBAAkB,SAAA,EAA4B;AAC5D,EAAA,OAAO,SAAU,QAA8B,MAAA,EAAoC;AACjF,IAAA,MAAM,EAAE,IAAA,EAAM,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC7B,IAAA,OAAO,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA;AAAA,EACrD,CAAA;AACF","file":"chunk-K5TPJVOK.js","sourcesContent":["import { createChart } from './create'\nimport type { ChartData, ChartOptions, ChartInstance, ChartTypePlugin } from '../types'\n\nexport interface ChartConfig extends ChartOptions {\n data: ChartData\n debug?: boolean\n}\n\nexport function createConvenience(chartType: ChartTypePlugin) {\n return function (target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, chartType, data, options)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/api/factory.ts"],"names":[],"mappings":";;;AAQO,SAAS,kBAAkB,SAAA,EAA4B;AAC5D,EAAA,OAAO,SAAU,QAA8B,MAAA,EAAoC;AACjF,IAAA,MAAM,EAAE,IAAA,EAAM,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC7B,IAAA,OAAO,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA;AAAA,EACrD,CAAA;AACF","file":"chunk-HCIBBUV5.js","sourcesContent":["import { createChart } from './create'\nimport type { ChartData, ChartOptions, ChartInstance, ChartTypePlugin } from '../types'\n\nexport interface ChartConfig extends ChartOptions {\n data: ChartData\n debug?: boolean\n}\n\nexport function createConvenience(chartType: ChartTypePlugin) {\n return function (target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, chartType, data, options)\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkNHGKZMD7_cjs = require('./chunk-NHGKZMD7.cjs');
4
4
  var chunkLU35QDPN_cjs = require('./chunk-LU35QDPN.cjs');
5
- var chunkUMIJYYF3_cjs = require('./chunk-UMIJYYF3.cjs');
5
+ var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
6
6
 
7
7
  // src/charts/bar/horizontal-bar-type.ts
8
8
  var horizontalBarChartType = {
@@ -11,7 +11,7 @@ var horizontalBarChartType = {
11
11
  return { x: "categorical", y: "linear" };
12
12
  },
13
13
  prepareData(data, options) {
14
- const prepared = chunkUMIJYYF3_cjs.prepareData(data, {
14
+ const prepared = chunkJVVGQLJQ_cjs.prepareData(data, {
15
15
  ...options,
16
16
  xAxis: false,
17
17
  yAxis: false,
@@ -45,7 +45,7 @@ var horizontalBarChartType = {
45
45
  const zeroX = valueToX(0);
46
46
  for (let i = 0; i < pointCount; i++) {
47
47
  const catCenter = area.y + categoryHeight * (i + 0.5);
48
- nodes.push(chunkUMIJYYF3_cjs.text(area.x + labelWidth - 6, catCenter, String(data.labels[i] ?? ""), {
48
+ nodes.push(chunkJVVGQLJQ_cjs.text(area.x + labelWidth - 6, catCenter, String(data.labels[i] ?? ""), {
49
49
  class: "chartts-hbar-label",
50
50
  fill: theme.textMuted,
51
51
  textAnchor: "end",
@@ -67,7 +67,7 @@ var horizontalBarChartType = {
67
67
  const r = Math.min(options.barRadius, barHeight / 2, w / 2);
68
68
  if (r > 0 && w > r * 2) {
69
69
  const d = isPositive ? `M${chunkLU35QDPN_cjs.formatNum(x)},${chunkLU35QDPN_cjs.formatNum(barY)}H${chunkLU35QDPN_cjs.formatNum(x + w - r)}Q${chunkLU35QDPN_cjs.formatNum(x + w)},${chunkLU35QDPN_cjs.formatNum(barY)},${chunkLU35QDPN_cjs.formatNum(x + w)},${chunkLU35QDPN_cjs.formatNum(barY + r)}V${chunkLU35QDPN_cjs.formatNum(barY + barHeight - r)}Q${chunkLU35QDPN_cjs.formatNum(x + w)},${chunkLU35QDPN_cjs.formatNum(barY + barHeight)},${chunkLU35QDPN_cjs.formatNum(x + w - r)},${chunkLU35QDPN_cjs.formatNum(barY + barHeight)}H${chunkLU35QDPN_cjs.formatNum(x)}Z` : `M${chunkLU35QDPN_cjs.formatNum(x + w)},${chunkLU35QDPN_cjs.formatNum(barY)}H${chunkLU35QDPN_cjs.formatNum(x + r)}Q${chunkLU35QDPN_cjs.formatNum(x)},${chunkLU35QDPN_cjs.formatNum(barY)},${chunkLU35QDPN_cjs.formatNum(x)},${chunkLU35QDPN_cjs.formatNum(barY + r)}V${chunkLU35QDPN_cjs.formatNum(barY + barHeight - r)}Q${chunkLU35QDPN_cjs.formatNum(x)},${chunkLU35QDPN_cjs.formatNum(barY + barHeight)},${chunkLU35QDPN_cjs.formatNum(x + r)},${chunkLU35QDPN_cjs.formatNum(barY + barHeight)}H${chunkLU35QDPN_cjs.formatNum(x + w)}Z`;
70
- barNodes.push(chunkUMIJYYF3_cjs.path(d, {
70
+ barNodes.push(chunkJVVGQLJQ_cjs.path(d, {
71
71
  class: "chartts-bar chartts-bar-horizontal",
72
72
  fill: barFill,
73
73
  "data-series": series.index,
@@ -77,7 +77,7 @@ var horizontalBarChartType = {
77
77
  ariaLabel: `${series.name}: ${series.values[i]}`
78
78
  }));
79
79
  } else {
80
- barNodes.push(chunkUMIJYYF3_cjs.rect(x, barY, w, barHeight, {
80
+ barNodes.push(chunkJVVGQLJQ_cjs.rect(x, barY, w, barHeight, {
81
81
  class: "chartts-bar chartts-bar-horizontal",
82
82
  fill: barFill,
83
83
  "data-series": series.index,
@@ -88,7 +88,7 @@ var horizontalBarChartType = {
88
88
  }));
89
89
  }
90
90
  }
91
- nodes.push(chunkUMIJYYF3_cjs.group(barNodes, {
91
+ nodes.push(chunkJVVGQLJQ_cjs.group(barNodes, {
92
92
  class: `chartts-series chartts-series-${series.index}`,
93
93
  "data-series-name": series.name
94
94
  }));
@@ -126,5 +126,5 @@ var horizontalBarChartType = {
126
126
  };
127
127
 
128
128
  exports.horizontalBarChartType = horizontalBarChartType;
129
- //# sourceMappingURL=chunk-HFWO37RY.cjs.map
130
- //# sourceMappingURL=chunk-HFWO37RY.cjs.map
129
+ //# sourceMappingURL=chunk-HCK2VUWD.cjs.map
130
+ //# sourceMappingURL=chunk-HCK2VUWD.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/bar/horizontal-bar-type.ts"],"names":["prepareData","createHorizontalMapper","text","formatNum","path","rect","group"],"mappings":"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","file":"chunk-HFWO37RY.cjs","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":["prepareData","createHorizontalMapper","text","formatNum","path","rect","group"],"mappings":"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","file":"chunk-HCK2VUWD.cjs","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,6 +1,6 @@
1
1
  import { createHorizontalMapper } from './chunk-E6PR75X7.js';
2
2
  import { formatNum } from './chunk-OGSZO22B.js';
3
- import { text, path, rect, group, prepareData } from './chunk-DX4FBN3I.js';
3
+ import { text, path, rect, group, prepareData } from './chunk-AEQXFDL7.js';
4
4
 
5
5
  // src/charts/bar/horizontal-bar-type.ts
6
6
  var horizontalBarChartType = {
@@ -124,5 +124,5 @@ var horizontalBarChartType = {
124
124
  };
125
125
 
126
126
  export { horizontalBarChartType };
127
- //# sourceMappingURL=chunk-FSDI3NJV.js.map
128
- //# sourceMappingURL=chunk-FSDI3NJV.js.map
127
+ //# sourceMappingURL=chunk-IDZTDJLH.js.map
128
+ //# sourceMappingURL=chunk-IDZTDJLH.js.map