@chartts/core 0.1.1 → 0.1.2

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 (286) hide show
  1. package/README.md +61 -5
  2. package/dist/area.cjs +10 -10
  3. package/dist/area.js +5 -5
  4. package/dist/bar.cjs +9 -9
  5. package/dist/bar.js +4 -4
  6. package/dist/baseline.cjs +9 -9
  7. package/dist/baseline.js +4 -4
  8. package/dist/boxplot.cjs +9 -9
  9. package/dist/boxplot.js +4 -4
  10. package/dist/bubble.cjs +9 -9
  11. package/dist/bubble.js +4 -4
  12. package/dist/bullet.cjs +10 -10
  13. package/dist/bullet.js +5 -5
  14. package/dist/calendar.cjs +10 -10
  15. package/dist/calendar.js +5 -5
  16. package/dist/candlestick.cjs +9 -9
  17. package/dist/candlestick.js +4 -4
  18. package/dist/chord.cjs +10 -10
  19. package/dist/chord.js +5 -5
  20. package/dist/{chunk-E2S7RAT2.js → chunk-27E6G2GT.js} +3 -3
  21. package/dist/{chunk-E2S7RAT2.js.map → chunk-27E6G2GT.js.map} +1 -1
  22. package/dist/{chunk-ROYZ7W4M.cjs → chunk-2KMMVJEE.cjs} +6 -6
  23. package/dist/{chunk-ROYZ7W4M.cjs.map → chunk-2KMMVJEE.cjs.map} +1 -1
  24. package/dist/{chunk-QZ4ZYTP6.js → chunk-2L46SAT7.js} +4 -4
  25. package/dist/{chunk-QZ4ZYTP6.js.map → chunk-2L46SAT7.js.map} +1 -1
  26. package/dist/{chunk-MVWERW4G.cjs → chunk-2PRCN5OJ.cjs} +6 -6
  27. package/dist/{chunk-MVWERW4G.cjs.map → chunk-2PRCN5OJ.cjs.map} +1 -1
  28. package/dist/{chunk-B54L2CPW.cjs → chunk-3N447NTJ.cjs} +13 -13
  29. package/dist/{chunk-B54L2CPW.cjs.map → chunk-3N447NTJ.cjs.map} +1 -1
  30. package/dist/{chunk-7YV56WPE.js → chunk-3NWZJCWL.js} +4 -4
  31. package/dist/{chunk-7YV56WPE.js.map → chunk-3NWZJCWL.js.map} +1 -1
  32. package/dist/{chunk-O5KGKQSU.js → chunk-3QXN7JBV.js} +4 -4
  33. package/dist/{chunk-O5KGKQSU.js.map → chunk-3QXN7JBV.js.map} +1 -1
  34. package/dist/{chunk-XHQWWR5M.cjs → chunk-3TLJCGGQ.cjs} +71 -37
  35. package/dist/chunk-3TLJCGGQ.cjs.map +1 -0
  36. package/dist/{chunk-BXX2EPFE.cjs → chunk-3YFDZGHO.cjs} +12 -12
  37. package/dist/{chunk-BXX2EPFE.cjs.map → chunk-3YFDZGHO.cjs.map} +1 -1
  38. package/dist/{chunk-LEJGLR2P.cjs → chunk-43WDYYVH.cjs} +8 -8
  39. package/dist/{chunk-LEJGLR2P.cjs.map → chunk-43WDYYVH.cjs.map} +1 -1
  40. package/dist/{chunk-SUNC3CPV.js → chunk-4ABM7UYD.js} +3 -3
  41. package/dist/{chunk-SUNC3CPV.js.map → chunk-4ABM7UYD.js.map} +1 -1
  42. package/dist/{chunk-Z6E3XVP2.cjs → chunk-5LQ26P4J.cjs} +10 -10
  43. package/dist/{chunk-Z6E3XVP2.cjs.map → chunk-5LQ26P4J.cjs.map} +1 -1
  44. package/dist/{chunk-SJS4ISBA.js → chunk-5M624BRW.js} +3 -3
  45. package/dist/{chunk-SJS4ISBA.js.map → chunk-5M624BRW.js.map} +1 -1
  46. package/dist/{chunk-4VG47RLS.js → chunk-6WJJ26J5.js} +4 -4
  47. package/dist/{chunk-4VG47RLS.js.map → chunk-6WJJ26J5.js.map} +1 -1
  48. package/dist/{chunk-HOOOCSU4.js → chunk-7HOU6XMW.js} +4 -4
  49. package/dist/{chunk-HOOOCSU4.js.map → chunk-7HOU6XMW.js.map} +1 -1
  50. package/dist/{chunk-M4AQD6WX.cjs → chunk-7JN6GXML.cjs} +10 -10
  51. package/dist/{chunk-M4AQD6WX.cjs.map → chunk-7JN6GXML.cjs.map} +1 -1
  52. package/dist/{chunk-LUTU4WW3.js → chunk-7MXBXWVD.js} +4 -4
  53. package/dist/{chunk-LUTU4WW3.js.map → chunk-7MXBXWVD.js.map} +1 -1
  54. package/dist/{chunk-22LR6CFM.js → chunk-AA45U5KV.js} +4 -4
  55. package/dist/{chunk-22LR6CFM.js.map → chunk-AA45U5KV.js.map} +1 -1
  56. package/dist/{chunk-GNRRK7TZ.cjs → chunk-AAKS22M3.cjs} +11 -11
  57. package/dist/{chunk-GNRRK7TZ.cjs.map → chunk-AAKS22M3.cjs.map} +1 -1
  58. package/dist/{chunk-J6NPRKT4.cjs → chunk-ALRCYQQX.cjs} +6 -6
  59. package/dist/{chunk-J6NPRKT4.cjs.map → chunk-ALRCYQQX.cjs.map} +1 -1
  60. package/dist/{chunk-KVI6DN3R.js → chunk-ARQLGTTV.js} +4 -4
  61. package/dist/{chunk-KVI6DN3R.js.map → chunk-ARQLGTTV.js.map} +1 -1
  62. package/dist/{chunk-H4RNJ7FK.cjs → chunk-B7IV2PB3.cjs} +8 -8
  63. package/dist/{chunk-H4RNJ7FK.cjs.map → chunk-B7IV2PB3.cjs.map} +1 -1
  64. package/dist/{chunk-CMEXNS5V.js → chunk-BMEMMYVF.js} +4 -4
  65. package/dist/{chunk-CMEXNS5V.js.map → chunk-BMEMMYVF.js.map} +1 -1
  66. package/dist/{chunk-3BRQGYDX.js → chunk-BMTVFAX2.js} +71 -37
  67. package/dist/chunk-BMTVFAX2.js.map +1 -0
  68. package/dist/{chunk-BR3KTAGW.js → chunk-CCHMQZIB.js} +4 -4
  69. package/dist/{chunk-BR3KTAGW.js.map → chunk-CCHMQZIB.js.map} +1 -1
  70. package/dist/{chunk-NQSC7CKN.js → chunk-CHERQT4B.js} +3 -3
  71. package/dist/{chunk-NQSC7CKN.js.map → chunk-CHERQT4B.js.map} +1 -1
  72. package/dist/{chunk-KOHWMGRF.js → chunk-CJEMSKW3.js} +7 -7
  73. package/dist/{chunk-KOHWMGRF.js.map → chunk-CJEMSKW3.js.map} +1 -1
  74. package/dist/{chunk-3TTTELGB.cjs → chunk-COPERSVL.cjs} +15 -15
  75. package/dist/{chunk-3TTTELGB.cjs.map → chunk-COPERSVL.cjs.map} +1 -1
  76. package/dist/{chunk-PLGZ4REQ.cjs → chunk-D2IP3MWJ.cjs} +12 -12
  77. package/dist/{chunk-PLGZ4REQ.cjs.map → chunk-D2IP3MWJ.cjs.map} +1 -1
  78. package/dist/{chunk-M4UST3UU.cjs → chunk-DAH76GIX.cjs} +10 -10
  79. package/dist/{chunk-M4UST3UU.cjs.map → chunk-DAH76GIX.cjs.map} +1 -1
  80. package/dist/{chunk-TOS2RYHQ.js → chunk-DKVRRL3F.js} +4 -4
  81. package/dist/{chunk-TOS2RYHQ.js.map → chunk-DKVRRL3F.js.map} +1 -1
  82. package/dist/{chunk-SKVCPG5R.cjs → chunk-DZHP4UUE.cjs} +11 -11
  83. package/dist/{chunk-SKVCPG5R.cjs.map → chunk-DZHP4UUE.cjs.map} +1 -1
  84. package/dist/{chunk-NMLDPXOL.js → chunk-DZKYVTV3.js} +4 -4
  85. package/dist/{chunk-NMLDPXOL.js.map → chunk-DZKYVTV3.js.map} +1 -1
  86. package/dist/{chunk-66HSJRRH.js → chunk-DZW35WR2.js} +4 -4
  87. package/dist/{chunk-66HSJRRH.js.map → chunk-DZW35WR2.js.map} +1 -1
  88. package/dist/{chunk-FFJ6BVEY.cjs → chunk-EAKXLFOR.cjs} +9 -9
  89. package/dist/{chunk-FFJ6BVEY.cjs.map → chunk-EAKXLFOR.cjs.map} +1 -1
  90. package/dist/{chunk-QHJHYV3H.cjs → chunk-EFRBTSUO.cjs} +4 -4
  91. package/dist/{chunk-QHJHYV3H.cjs.map → chunk-EFRBTSUO.cjs.map} +1 -1
  92. package/dist/{chunk-QIJZZOX7.js → chunk-EYN74SQ5.js} +4 -4
  93. package/dist/{chunk-QIJZZOX7.js.map → chunk-EYN74SQ5.js.map} +1 -1
  94. package/dist/{chunk-Y54XVNXB.cjs → chunk-FEQKBVCZ.cjs} +13 -13
  95. package/dist/{chunk-Y54XVNXB.cjs.map → chunk-FEQKBVCZ.cjs.map} +1 -1
  96. package/dist/{chunk-UQBDGCS6.cjs → chunk-FIAKZSRR.cjs} +7 -7
  97. package/dist/{chunk-UQBDGCS6.cjs.map → chunk-FIAKZSRR.cjs.map} +1 -1
  98. package/dist/{chunk-HB4EGHJ7.cjs → chunk-FKAA5FNG.cjs} +9 -9
  99. package/dist/{chunk-HB4EGHJ7.cjs.map → chunk-FKAA5FNG.cjs.map} +1 -1
  100. package/dist/{chunk-NYVFC2SF.js → chunk-FKVYS4RB.js} +3 -3
  101. package/dist/{chunk-NYVFC2SF.js.map → chunk-FKVYS4RB.js.map} +1 -1
  102. package/dist/{chunk-ZDZQG3GH.cjs → chunk-FQG4DRJS.cjs} +13 -13
  103. package/dist/chunk-FQG4DRJS.cjs.map +1 -0
  104. package/dist/{chunk-GM3ZO5WV.js → chunk-FSKUEB7P.js} +3 -3
  105. package/dist/{chunk-GM3ZO5WV.js.map → chunk-FSKUEB7P.js.map} +1 -1
  106. package/dist/{chunk-NONU7KUN.cjs → chunk-FTKL3UAN.cjs} +6 -6
  107. package/dist/{chunk-NONU7KUN.cjs.map → chunk-FTKL3UAN.cjs.map} +1 -1
  108. package/dist/{chunk-ZL25X5WW.js → chunk-GI7PBJSK.js} +3 -3
  109. package/dist/{chunk-ZL25X5WW.js.map → chunk-GI7PBJSK.js.map} +1 -1
  110. package/dist/{chunk-NFD6VAVM.js → chunk-GL3M7MAM.js} +3 -3
  111. package/dist/{chunk-NFD6VAVM.js.map → chunk-GL3M7MAM.js.map} +1 -1
  112. package/dist/{chunk-3XVGEBR4.js → chunk-GMLJDDHZ.js} +3 -3
  113. package/dist/{chunk-3XVGEBR4.js.map → chunk-GMLJDDHZ.js.map} +1 -1
  114. package/dist/{chunk-N6IVODRJ.js → chunk-GQR7IHER.js} +4 -4
  115. package/dist/{chunk-N6IVODRJ.js.map → chunk-GQR7IHER.js.map} +1 -1
  116. package/dist/{chunk-MYPCA25Y.cjs → chunk-GUVPVNPD.cjs} +10 -10
  117. package/dist/{chunk-MYPCA25Y.cjs.map → chunk-GUVPVNPD.cjs.map} +1 -1
  118. package/dist/{chunk-5QOQR5FE.cjs → chunk-HOPFELRP.cjs} +4 -4
  119. package/dist/{chunk-5QOQR5FE.cjs.map → chunk-HOPFELRP.cjs.map} +1 -1
  120. package/dist/{chunk-FRWC6GUR.cjs → chunk-IAE4VRB7.cjs} +9 -9
  121. package/dist/{chunk-FRWC6GUR.cjs.map → chunk-IAE4VRB7.cjs.map} +1 -1
  122. package/dist/{chunk-BYXRFTEI.cjs → chunk-ID7GYRYL.cjs} +10 -10
  123. package/dist/{chunk-BYXRFTEI.cjs.map → chunk-ID7GYRYL.cjs.map} +1 -1
  124. package/dist/{chunk-QLRK46YY.cjs → chunk-IKUA7O73.cjs} +7 -7
  125. package/dist/{chunk-QLRK46YY.cjs.map → chunk-IKUA7O73.cjs.map} +1 -1
  126. package/dist/{chunk-HDWWUEPD.js → chunk-IUYPKYOU.js} +4 -4
  127. package/dist/{chunk-HDWWUEPD.js.map → chunk-IUYPKYOU.js.map} +1 -1
  128. package/dist/{chunk-BC6KW2OG.js → chunk-IXFSJBJS.js} +3 -3
  129. package/dist/{chunk-BC6KW2OG.js.map → chunk-IXFSJBJS.js.map} +1 -1
  130. package/dist/{chunk-X2JNB5UN.js → chunk-JT6H7G52.js} +4 -4
  131. package/dist/{chunk-X2JNB5UN.js.map → chunk-JT6H7G52.js.map} +1 -1
  132. package/dist/{chunk-TW6KPQIS.js → chunk-K2EZ4SS4.js} +3 -3
  133. package/dist/{chunk-TW6KPQIS.js.map → chunk-K2EZ4SS4.js.map} +1 -1
  134. package/dist/{chunk-KE7ILTM4.cjs → chunk-K7UR7GYC.cjs} +11 -11
  135. package/dist/{chunk-KE7ILTM4.cjs.map → chunk-K7UR7GYC.cjs.map} +1 -1
  136. package/dist/{chunk-TTOX27BZ.cjs → chunk-KEMT7F5H.cjs} +7 -7
  137. package/dist/{chunk-TTOX27BZ.cjs.map → chunk-KEMT7F5H.cjs.map} +1 -1
  138. package/dist/{chunk-FKYNRMPX.js → chunk-KHQRHTTN.js} +4 -4
  139. package/dist/{chunk-FKYNRMPX.js.map → chunk-KHQRHTTN.js.map} +1 -1
  140. package/dist/{chunk-ZDYCIP6N.cjs → chunk-KUFDELQM.cjs} +9 -9
  141. package/dist/{chunk-ZDYCIP6N.cjs.map → chunk-KUFDELQM.cjs.map} +1 -1
  142. package/dist/{chunk-LB4MV5CG.js → chunk-L37ZPX6D.js} +3 -3
  143. package/dist/{chunk-LB4MV5CG.js.map → chunk-L37ZPX6D.js.map} +1 -1
  144. package/dist/{chunk-QAYX6XN3.js → chunk-LCEMO7NI.js} +3 -3
  145. package/dist/{chunk-QAYX6XN3.js.map → chunk-LCEMO7NI.js.map} +1 -1
  146. package/dist/{chunk-L54BZYAI.cjs → chunk-M6JYSINX.cjs} +6 -6
  147. package/dist/{chunk-L54BZYAI.cjs.map → chunk-M6JYSINX.cjs.map} +1 -1
  148. package/dist/{chunk-VPI7UGB3.cjs → chunk-MGYBMQAX.cjs} +8 -8
  149. package/dist/{chunk-VPI7UGB3.cjs.map → chunk-MGYBMQAX.cjs.map} +1 -1
  150. package/dist/{chunk-6KNBJ4CE.js → chunk-MQBKLKYF.js} +4 -4
  151. package/dist/{chunk-6KNBJ4CE.js.map → chunk-MQBKLKYF.js.map} +1 -1
  152. package/dist/{chunk-BRSHEDTZ.js → chunk-MVJKRPX7.js} +3 -3
  153. package/dist/{chunk-BRSHEDTZ.js.map → chunk-MVJKRPX7.js.map} +1 -1
  154. package/dist/{chunk-Q6U5D2ZB.cjs → chunk-MZCKMTQE.cjs} +9 -9
  155. package/dist/{chunk-Q6U5D2ZB.cjs.map → chunk-MZCKMTQE.cjs.map} +1 -1
  156. package/dist/{chunk-BEYG2HQ4.cjs → chunk-MZQY2FTP.cjs} +12 -12
  157. package/dist/{chunk-BEYG2HQ4.cjs.map → chunk-MZQY2FTP.cjs.map} +1 -1
  158. package/dist/{chunk-ETPZGEL7.cjs → chunk-N7NZQVIV.cjs} +6 -6
  159. package/dist/{chunk-ETPZGEL7.cjs.map → chunk-N7NZQVIV.cjs.map} +1 -1
  160. package/dist/{chunk-H2AE7JMU.js → chunk-NML7F34A.js} +3 -3
  161. package/dist/{chunk-H2AE7JMU.js.map → chunk-NML7F34A.js.map} +1 -1
  162. package/dist/{chunk-DNQ6N3VG.js → chunk-NQGZMWNT.js} +4 -4
  163. package/dist/{chunk-DNQ6N3VG.js.map → chunk-NQGZMWNT.js.map} +1 -1
  164. package/dist/{chunk-MLX3EO2C.js → chunk-NZWFBAFQ.js} +3 -3
  165. package/dist/{chunk-MLX3EO2C.js.map → chunk-NZWFBAFQ.js.map} +1 -1
  166. package/dist/{chunk-XBIM73HV.cjs → chunk-PCTMS2PX.cjs} +7 -7
  167. package/dist/{chunk-XBIM73HV.cjs.map → chunk-PCTMS2PX.cjs.map} +1 -1
  168. package/dist/{chunk-D2SV6YT3.js → chunk-QCR6L55R.js} +4 -4
  169. package/dist/{chunk-D2SV6YT3.js.map → chunk-QCR6L55R.js.map} +1 -1
  170. package/dist/{chunk-SZVK6RRQ.js → chunk-QRTYX5KO.js} +4 -4
  171. package/dist/{chunk-SZVK6RRQ.js.map → chunk-QRTYX5KO.js.map} +1 -1
  172. package/dist/{chunk-FUZFNUCJ.js → chunk-QXQSJ3FZ.js} +3 -3
  173. package/dist/{chunk-FUZFNUCJ.js.map → chunk-QXQSJ3FZ.js.map} +1 -1
  174. package/dist/{chunk-7SEHTEMR.js → chunk-RLH3PS3Y.js} +3 -3
  175. package/dist/{chunk-7SEHTEMR.js.map → chunk-RLH3PS3Y.js.map} +1 -1
  176. package/dist/{chunk-Q2BDB5ZA.cjs → chunk-S64PTNT7.cjs} +8 -8
  177. package/dist/{chunk-Q2BDB5ZA.cjs.map → chunk-S64PTNT7.cjs.map} +1 -1
  178. package/dist/{chunk-6LKN3HRX.js → chunk-S6NGWPXC.js} +3 -3
  179. package/dist/{chunk-6LKN3HRX.js.map → chunk-S6NGWPXC.js.map} +1 -1
  180. package/dist/{chunk-4YJPBUX2.cjs → chunk-SC5BGA2N.cjs} +7 -7
  181. package/dist/{chunk-4YJPBUX2.cjs.map → chunk-SC5BGA2N.cjs.map} +1 -1
  182. package/dist/{chunk-KSRROKYC.cjs → chunk-SKREYNRK.cjs} +11 -11
  183. package/dist/{chunk-KSRROKYC.cjs.map → chunk-SKREYNRK.cjs.map} +1 -1
  184. package/dist/{chunk-2TWYS3BT.cjs → chunk-SLJNRP7O.cjs} +14 -14
  185. package/dist/{chunk-2TWYS3BT.cjs.map → chunk-SLJNRP7O.cjs.map} +1 -1
  186. package/dist/{chunk-Y2JZHX3P.cjs → chunk-T6LXFMBR.cjs} +8 -8
  187. package/dist/{chunk-Y2JZHX3P.cjs.map → chunk-T6LXFMBR.cjs.map} +1 -1
  188. package/dist/{chunk-RCVRZCCC.cjs → chunk-TIHVTKXS.cjs} +9 -9
  189. package/dist/{chunk-RCVRZCCC.cjs.map → chunk-TIHVTKXS.cjs.map} +1 -1
  190. package/dist/{chunk-DL7P72FA.cjs → chunk-TVPS2NJH.cjs} +10 -10
  191. package/dist/{chunk-DL7P72FA.cjs.map → chunk-TVPS2NJH.cjs.map} +1 -1
  192. package/dist/{chunk-SQJAKZ4W.js → chunk-U7GBOQXX.js} +4 -4
  193. package/dist/{chunk-SQJAKZ4W.js.map → chunk-U7GBOQXX.js.map} +1 -1
  194. package/dist/{chunk-6N66T7VQ.js → chunk-VGGKMTO6.js} +3 -3
  195. package/dist/{chunk-6N66T7VQ.js.map → chunk-VGGKMTO6.js.map} +1 -1
  196. package/dist/{chunk-7CGXK7KT.js → chunk-VJQCHBS6.js} +3 -3
  197. package/dist/{chunk-7CGXK7KT.js.map → chunk-VJQCHBS6.js.map} +1 -1
  198. package/dist/{chunk-4HK4RM3X.cjs → chunk-VK72MICB.cjs} +7 -7
  199. package/dist/{chunk-4HK4RM3X.cjs.map → chunk-VK72MICB.cjs.map} +1 -1
  200. package/dist/{chunk-EGQ4JCFU.cjs → chunk-WS2AL7GY.cjs} +7 -7
  201. package/dist/{chunk-EGQ4JCFU.cjs.map → chunk-WS2AL7GY.cjs.map} +1 -1
  202. package/dist/{chunk-Y4P4VY7A.cjs → chunk-XKDBNAHH.cjs} +10 -10
  203. package/dist/{chunk-Y4P4VY7A.cjs.map → chunk-XKDBNAHH.cjs.map} +1 -1
  204. package/dist/{chunk-UN7K3YQG.cjs → chunk-Y4HJCMB4.cjs} +6 -6
  205. package/dist/{chunk-UN7K3YQG.cjs.map → chunk-Y4HJCMB4.cjs.map} +1 -1
  206. package/dist/{chunk-SWYCVF46.js → chunk-YMJQUKKX.js} +8 -8
  207. package/dist/chunk-YMJQUKKX.js.map +1 -0
  208. package/dist/combo.cjs +9 -9
  209. package/dist/combo.js +4 -4
  210. package/dist/custom.cjs +10 -10
  211. package/dist/custom.js +5 -5
  212. package/dist/donut.cjs +10 -10
  213. package/dist/donut.js +5 -5
  214. package/dist/dumbbell.cjs +10 -10
  215. package/dist/dumbbell.js +5 -5
  216. package/dist/funnel.cjs +10 -10
  217. package/dist/funnel.js +5 -5
  218. package/dist/gauge.cjs +10 -10
  219. package/dist/gauge.js +5 -5
  220. package/dist/geo.cjs +12 -12
  221. package/dist/geo.js +5 -5
  222. package/dist/graph.cjs +10 -10
  223. package/dist/graph.js +5 -5
  224. package/dist/heatmap.cjs +10 -10
  225. package/dist/heatmap.js +5 -5
  226. package/dist/histogram.cjs +9 -9
  227. package/dist/histogram.js +4 -4
  228. package/dist/horizontal-bar.cjs +9 -9
  229. package/dist/horizontal-bar.js +4 -4
  230. package/dist/index.cjs +179 -179
  231. package/dist/index.js +91 -91
  232. package/dist/kagi.cjs +10 -10
  233. package/dist/kagi.js +5 -5
  234. package/dist/line.cjs +9 -9
  235. package/dist/line.js +4 -4
  236. package/dist/lines.cjs +10 -10
  237. package/dist/lines.js +5 -5
  238. package/dist/lollipop.cjs +9 -9
  239. package/dist/lollipop.js +4 -4
  240. package/dist/matrix.cjs +10 -10
  241. package/dist/matrix.js +5 -5
  242. package/dist/ohlc.cjs +9 -9
  243. package/dist/ohlc.js +4 -4
  244. package/dist/parallel.cjs +10 -10
  245. package/dist/parallel.js +5 -5
  246. package/dist/pictorialbar.cjs +10 -10
  247. package/dist/pictorialbar.js +5 -5
  248. package/dist/pie.cjs +10 -10
  249. package/dist/pie.js +5 -5
  250. package/dist/polar.cjs +10 -10
  251. package/dist/polar.js +5 -5
  252. package/dist/radar.cjs +10 -10
  253. package/dist/radar.js +5 -5
  254. package/dist/radialbar.cjs +10 -10
  255. package/dist/radialbar.js +5 -5
  256. package/dist/range.cjs +9 -9
  257. package/dist/range.js +4 -4
  258. package/dist/renko.cjs +10 -10
  259. package/dist/renko.js +5 -5
  260. package/dist/sankey.cjs +10 -10
  261. package/dist/sankey.js +5 -5
  262. package/dist/scatter.cjs +9 -9
  263. package/dist/scatter.js +4 -4
  264. package/dist/sparkline.cjs +9 -9
  265. package/dist/sparkline.js +4 -4
  266. package/dist/stacked-bar.cjs +9 -9
  267. package/dist/stacked-bar.js +4 -4
  268. package/dist/step.cjs +10 -10
  269. package/dist/step.js +5 -5
  270. package/dist/sunburst.cjs +10 -10
  271. package/dist/sunburst.js +5 -5
  272. package/dist/themeriver.cjs +10 -10
  273. package/dist/themeriver.js +5 -5
  274. package/dist/tree.cjs +10 -10
  275. package/dist/tree.js +5 -5
  276. package/dist/treemap.cjs +10 -10
  277. package/dist/treemap.js +5 -5
  278. package/dist/volume.cjs +9 -9
  279. package/dist/volume.js +4 -4
  280. package/dist/waterfall.cjs +9 -9
  281. package/dist/waterfall.js +4 -4
  282. package/package.json +1 -1
  283. package/dist/chunk-3BRQGYDX.js.map +0 -1
  284. package/dist/chunk-SWYCVF46.js.map +0 -1
  285. package/dist/chunk-XHQWWR5M.cjs.map +0 -1
  286. package/dist/chunk-ZDZQG3GH.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-3XVGEBR4.js';
2
- import { PathBuilder, path, text } from './chunk-3BRQGYDX.js';
1
+ import { prepareNoAxes } from './chunk-GMLJDDHZ.js';
2
+ import { PathBuilder, path, text } from './chunk-BMTVFAX2.js';
3
3
 
4
4
  // src/charts/sunburst/sunburst-type.ts
5
5
  var sunburstChartType = {
@@ -212,5 +212,5 @@ function findSector(node, targetDepth, angle) {
212
212
  }
213
213
 
214
214
  export { sunburstChartType };
215
- //# sourceMappingURL=chunk-HOOOCSU4.js.map
216
- //# sourceMappingURL=chunk-HOOOCSU4.js.map
215
+ //# sourceMappingURL=chunk-7HOU6XMW.js.map
216
+ //# sourceMappingURL=chunk-7HOU6XMW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/sunburst/sunburst-type.ts"],"names":[],"mappings":"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","file":"chunk-HOOOCSU4.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Sunburst chart — hierarchical radial visualization.\n *\n * Data convention:\n * - labels: leaf node names\n * - series[0].values: leaf values (sizes)\n * - Hierarchy is encoded via label separators: \"A/B/C\" means root→A→B→C\n * If no separators, falls back to flat ring layout (single ring).\n *\n * The chart draws concentric rings from center outward, one ring per depth level.\n */\n\ninterface SunburstNode {\n name: string\n fullPath: string\n value: number\n children: SunburstNode[]\n depth: number\n startAngle: number\n endAngle: number\n // Computed during layout\n totalValue: number\n}\n\nexport const sunburstChartType: ChartTypePlugin = {\n type: 'sunburst',\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 // Build tree from labels\n const root = buildTree(data.labels, series.values)\n if (root.totalValue === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxRadius = Math.min(area.width, area.height) / 2 - 4\n const innerRadius = maxRadius * 0.15\n\n // Compute max depth for ring sizing\n const maxDepth = getMaxDepth(root)\n const ringWidth = (maxRadius - innerRadius) / Math.max(maxDepth, 1)\n\n // Layout angles recursively\n layoutAngles(root, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2)\n\n // Render all non-root nodes\n let colorIdx = 0\n const renderNode = (node: SunburstNode, parentColorIdx: number) => {\n if (node.depth === 0) {\n // Root — render children with cycling colors\n for (let i = 0; i < node.children.length; i++) {\n renderNode(node.children[i]!, i)\n }\n return\n }\n\n const ci = node.depth === 1 ? parentColorIdx : parentColorIdx\n const color = options.colors[ci % options.colors.length]!\n const r0 = innerRadius + (node.depth - 1) * ringWidth\n const r1 = r0 + ringWidth - 1 // 1px gap between rings\n\n const sliceAngle = node.endAngle - node.startAngle\n if (sliceAngle < 0.005) return // Skip tiny slices\n\n const padAngle = 0.01\n const actualStart = node.startAngle + padAngle / 2\n const actualEnd = node.endAngle - padAngle / 2\n if (actualEnd <= actualStart) return\n\n // Build annular sector path\n const pb = new PathBuilder()\n const largeArc = sliceAngle > Math.PI\n\n const x1o = cx + r1 * Math.cos(actualStart)\n const y1o = cy + r1 * Math.sin(actualStart)\n const x2o = cx + r1 * Math.cos(actualEnd)\n const y2o = cy + r1 * Math.sin(actualEnd)\n const x1i = cx + r0 * Math.cos(actualEnd)\n const y1i = cy + r0 * Math.sin(actualEnd)\n const x2i = cx + r0 * Math.cos(actualStart)\n const y2i = cy + r0 * Math.sin(actualStart)\n\n pb.moveTo(x1o, y1o)\n pb.arc(r1, r1, 0, largeArc, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n pb.arc(r0, r0, 0, largeArc, false, x2i, y2i)\n pb.close()\n\n const opacity = 1 - (node.depth - 1) * 0.15\n\n nodes.push(path(pb.build(), {\n class: 'chartts-sunburst-sector',\n fill: color,\n fillOpacity: Math.max(0.4, opacity),\n stroke: theme.background === 'transparent' ? '#fff' : theme.background,\n strokeWidth: 0.5,\n 'data-series': 0,\n 'data-index': colorIdx,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${node.name}: ${node.totalValue}`,\n }))\n\n // Label for larger sectors\n if (sliceAngle > 0.3 && ringWidth > 20) {\n const midAngle = (actualStart + actualEnd) / 2\n const labelR = (r0 + r1) / 2\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n\n const fontSize = Math.min(theme.fontSizeSmall, ringWidth * 0.35)\n nodes.push(text(lx, ly, node.name, {\n class: 'chartts-sunburst-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n colorIdx++\n\n // Render children\n for (let i = 0; i < node.children.length; i++) {\n renderNode(node.children[i]!, parentColorIdx)\n }\n }\n\n renderNode(root, 0)\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 cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxRadius = Math.min(area.width, area.height) / 2 - 4\n const innerRadius = maxRadius * 0.15\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n if (dist > maxRadius || dist < innerRadius) return null\n\n const root = buildTree(data.labels, series.values)\n const maxDepth = getMaxDepth(root)\n const ringWidth = (maxRadius - innerRadius) / Math.max(maxDepth, 1)\n\n layoutAngles(root, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2)\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n // Find which ring (depth) the point is in\n const depthFloat = (dist - innerRadius) / ringWidth\n const depth = Math.floor(depthFloat) + 1\n\n // Find sector at this depth and angle\n const hit = findSector(root, depth, angle)\n if (hit) {\n return { seriesIndex: 0, pointIndex: hit, distance: 0 }\n }\n\n return null\n },\n}\n\n// ---------------------------------------------------------------------------\n// Tree building\n// ---------------------------------------------------------------------------\n\nfunction buildTree(labels: (string | number | Date)[], values: number[]): SunburstNode {\n const root: SunburstNode = {\n name: 'root', fullPath: '', value: 0,\n children: [], depth: 0, startAngle: 0, endAngle: 0, totalValue: 0,\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = String(labels[i] ?? `Item ${i}`)\n const value = Math.abs(values[i] ?? 0)\n if (value <= 0) continue\n\n const parts = label.includes('/') ? label.split('/') : [label]\n let current = root\n\n for (let p = 0; p < parts.length; p++) {\n const part = parts[p]!.trim()\n let child = current.children.find(c => c.name === part)\n\n if (!child) {\n child = {\n name: part,\n fullPath: parts.slice(0, p + 1).join('/'),\n value: 0,\n children: [],\n depth: p + 1,\n startAngle: 0,\n endAngle: 0,\n totalValue: 0,\n }\n current.children.push(child)\n }\n\n if (p === parts.length - 1) {\n child.value = value\n }\n current = child\n }\n }\n\n // Compute totals bottom-up\n computeTotals(root)\n\n return root\n}\n\nfunction computeTotals(node: SunburstNode): number {\n if (node.children.length === 0) {\n node.totalValue = node.value\n return node.totalValue\n }\n let sum = 0\n for (const child of node.children) {\n sum += computeTotals(child)\n }\n node.totalValue = Math.max(sum, node.value)\n return node.totalValue\n}\n\nfunction layoutAngles(node: SunburstNode, start: number, end: number): void {\n node.startAngle = start\n node.endAngle = end\n\n if (node.children.length === 0 || node.totalValue === 0) return\n\n let current = start\n for (const child of node.children) {\n const fraction = child.totalValue / node.totalValue\n const childEnd = current + fraction * (end - start)\n layoutAngles(child, current, childEnd)\n current = childEnd\n }\n}\n\nfunction getMaxDepth(node: SunburstNode): number {\n if (node.children.length === 0) return node.depth\n let max = node.depth\n for (const child of node.children) {\n max = Math.max(max, getMaxDepth(child))\n }\n return max\n}\n\nfunction findSector(node: SunburstNode, targetDepth: number, angle: number): number | null {\n if (node.depth === targetDepth) {\n if (angle >= node.startAngle && angle < node.endAngle) {\n return node.depth // Return something non-null to indicate a hit\n }\n return null\n }\n\n for (const child of node.children) {\n if (angle >= child.startAngle && angle < child.endAngle) {\n const result = findSector(child, targetDepth, angle)\n if (result !== null) return result\n }\n }\n\n return null\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/sunburst/sunburst-type.ts"],"names":[],"mappings":"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","file":"chunk-7HOU6XMW.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Sunburst chart — hierarchical radial visualization.\n *\n * Data convention:\n * - labels: leaf node names\n * - series[0].values: leaf values (sizes)\n * - Hierarchy is encoded via label separators: \"A/B/C\" means root→A→B→C\n * If no separators, falls back to flat ring layout (single ring).\n *\n * The chart draws concentric rings from center outward, one ring per depth level.\n */\n\ninterface SunburstNode {\n name: string\n fullPath: string\n value: number\n children: SunburstNode[]\n depth: number\n startAngle: number\n endAngle: number\n // Computed during layout\n totalValue: number\n}\n\nexport const sunburstChartType: ChartTypePlugin = {\n type: 'sunburst',\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 // Build tree from labels\n const root = buildTree(data.labels, series.values)\n if (root.totalValue === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxRadius = Math.min(area.width, area.height) / 2 - 4\n const innerRadius = maxRadius * 0.15\n\n // Compute max depth for ring sizing\n const maxDepth = getMaxDepth(root)\n const ringWidth = (maxRadius - innerRadius) / Math.max(maxDepth, 1)\n\n // Layout angles recursively\n layoutAngles(root, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2)\n\n // Render all non-root nodes\n let colorIdx = 0\n const renderNode = (node: SunburstNode, parentColorIdx: number) => {\n if (node.depth === 0) {\n // Root — render children with cycling colors\n for (let i = 0; i < node.children.length; i++) {\n renderNode(node.children[i]!, i)\n }\n return\n }\n\n const ci = node.depth === 1 ? parentColorIdx : parentColorIdx\n const color = options.colors[ci % options.colors.length]!\n const r0 = innerRadius + (node.depth - 1) * ringWidth\n const r1 = r0 + ringWidth - 1 // 1px gap between rings\n\n const sliceAngle = node.endAngle - node.startAngle\n if (sliceAngle < 0.005) return // Skip tiny slices\n\n const padAngle = 0.01\n const actualStart = node.startAngle + padAngle / 2\n const actualEnd = node.endAngle - padAngle / 2\n if (actualEnd <= actualStart) return\n\n // Build annular sector path\n const pb = new PathBuilder()\n const largeArc = sliceAngle > Math.PI\n\n const x1o = cx + r1 * Math.cos(actualStart)\n const y1o = cy + r1 * Math.sin(actualStart)\n const x2o = cx + r1 * Math.cos(actualEnd)\n const y2o = cy + r1 * Math.sin(actualEnd)\n const x1i = cx + r0 * Math.cos(actualEnd)\n const y1i = cy + r0 * Math.sin(actualEnd)\n const x2i = cx + r0 * Math.cos(actualStart)\n const y2i = cy + r0 * Math.sin(actualStart)\n\n pb.moveTo(x1o, y1o)\n pb.arc(r1, r1, 0, largeArc, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n pb.arc(r0, r0, 0, largeArc, false, x2i, y2i)\n pb.close()\n\n const opacity = 1 - (node.depth - 1) * 0.15\n\n nodes.push(path(pb.build(), {\n class: 'chartts-sunburst-sector',\n fill: color,\n fillOpacity: Math.max(0.4, opacity),\n stroke: theme.background === 'transparent' ? '#fff' : theme.background,\n strokeWidth: 0.5,\n 'data-series': 0,\n 'data-index': colorIdx,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${node.name}: ${node.totalValue}`,\n }))\n\n // Label for larger sectors\n if (sliceAngle > 0.3 && ringWidth > 20) {\n const midAngle = (actualStart + actualEnd) / 2\n const labelR = (r0 + r1) / 2\n const lx = cx + labelR * Math.cos(midAngle)\n const ly = cy + labelR * Math.sin(midAngle)\n\n const fontSize = Math.min(theme.fontSizeSmall, ringWidth * 0.35)\n nodes.push(text(lx, ly, node.name, {\n class: 'chartts-sunburst-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n\n colorIdx++\n\n // Render children\n for (let i = 0; i < node.children.length; i++) {\n renderNode(node.children[i]!, parentColorIdx)\n }\n }\n\n renderNode(root, 0)\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 cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const maxRadius = Math.min(area.width, area.height) / 2 - 4\n const innerRadius = maxRadius * 0.15\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n if (dist > maxRadius || dist < innerRadius) return null\n\n const root = buildTree(data.labels, series.values)\n const maxDepth = getMaxDepth(root)\n const ringWidth = (maxRadius - innerRadius) / Math.max(maxDepth, 1)\n\n layoutAngles(root, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2)\n\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n // Find which ring (depth) the point is in\n const depthFloat = (dist - innerRadius) / ringWidth\n const depth = Math.floor(depthFloat) + 1\n\n // Find sector at this depth and angle\n const hit = findSector(root, depth, angle)\n if (hit) {\n return { seriesIndex: 0, pointIndex: hit, distance: 0 }\n }\n\n return null\n },\n}\n\n// ---------------------------------------------------------------------------\n// Tree building\n// ---------------------------------------------------------------------------\n\nfunction buildTree(labels: (string | number | Date)[], values: number[]): SunburstNode {\n const root: SunburstNode = {\n name: 'root', fullPath: '', value: 0,\n children: [], depth: 0, startAngle: 0, endAngle: 0, totalValue: 0,\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = String(labels[i] ?? `Item ${i}`)\n const value = Math.abs(values[i] ?? 0)\n if (value <= 0) continue\n\n const parts = label.includes('/') ? label.split('/') : [label]\n let current = root\n\n for (let p = 0; p < parts.length; p++) {\n const part = parts[p]!.trim()\n let child = current.children.find(c => c.name === part)\n\n if (!child) {\n child = {\n name: part,\n fullPath: parts.slice(0, p + 1).join('/'),\n value: 0,\n children: [],\n depth: p + 1,\n startAngle: 0,\n endAngle: 0,\n totalValue: 0,\n }\n current.children.push(child)\n }\n\n if (p === parts.length - 1) {\n child.value = value\n }\n current = child\n }\n }\n\n // Compute totals bottom-up\n computeTotals(root)\n\n return root\n}\n\nfunction computeTotals(node: SunburstNode): number {\n if (node.children.length === 0) {\n node.totalValue = node.value\n return node.totalValue\n }\n let sum = 0\n for (const child of node.children) {\n sum += computeTotals(child)\n }\n node.totalValue = Math.max(sum, node.value)\n return node.totalValue\n}\n\nfunction layoutAngles(node: SunburstNode, start: number, end: number): void {\n node.startAngle = start\n node.endAngle = end\n\n if (node.children.length === 0 || node.totalValue === 0) return\n\n let current = start\n for (const child of node.children) {\n const fraction = child.totalValue / node.totalValue\n const childEnd = current + fraction * (end - start)\n layoutAngles(child, current, childEnd)\n current = childEnd\n }\n}\n\nfunction getMaxDepth(node: SunburstNode): number {\n if (node.children.length === 0) return node.depth\n let max = node.depth\n for (const child of node.children) {\n max = Math.max(max, getMaxDepth(child))\n }\n return max\n}\n\nfunction findSector(node: SunburstNode, targetDepth: number, angle: number): number | null {\n if (node.depth === targetDepth) {\n if (angle >= node.startAngle && angle < node.endAngle) {\n return node.depth // Return something non-null to indicate a hit\n }\n return null\n }\n\n for (const child of node.children) {\n if (angle >= child.startAngle && angle < child.endAngle) {\n const result = findSector(child, targetDepth, angle)\n if (result !== null) return result\n }\n }\n\n return null\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk5QOQR5FE_cjs = require('./chunk-5QOQR5FE.cjs');
4
- var chunkXHQWWR5M_cjs = require('./chunk-XHQWWR5M.cjs');
3
+ var chunkHOPFELRP_cjs = require('./chunk-HOPFELRP.cjs');
4
+ var chunk3TLJCGGQ_cjs = require('./chunk-3TLJCGGQ.cjs');
5
5
 
6
6
  // src/charts/chord/chord-type.ts
7
7
  var chordChartType = {
@@ -10,7 +10,7 @@ var chordChartType = {
10
10
  return { x: "categorical", y: "linear" };
11
11
  },
12
12
  prepareData(data, options) {
13
- return chunk5QOQR5FE_cjs.prepareNoAxes(data, options);
13
+ return chunkHOPFELRP_cjs.prepareNoAxes(data, options);
14
14
  },
15
15
  render(ctx) {
16
16
  const { data, area, theme, options } = ctx;
@@ -24,7 +24,7 @@ var chordChartType = {
24
24
  for (const arc of arcs) {
25
25
  if (arc.endAngle - arc.startAngle < 0.01) continue;
26
26
  const color = options.colors[arc.index % options.colors.length];
27
- const pb = new chunkXHQWWR5M_cjs.PathBuilder();
27
+ const pb = new chunk3TLJCGGQ_cjs.PathBuilder();
28
28
  const x1o = cx + outerR * Math.cos(arc.startAngle);
29
29
  const y1o = cy + outerR * Math.sin(arc.startAngle);
30
30
  const x2o = cx + outerR * Math.cos(arc.endAngle);
@@ -39,7 +39,7 @@ var chordChartType = {
39
39
  pb.lineTo(x1i, y1i);
40
40
  pb.arc(innerR, innerR, 0, largeArc, false, x2i, y2i);
41
41
  pb.close();
42
- nodes.push(chunkXHQWWR5M_cjs.path(pb.build(), {
42
+ nodes.push(chunk3TLJCGGQ_cjs.path(pb.build(), {
43
43
  class: "chartts-chord-arc",
44
44
  fill: color,
45
45
  stroke: color,
@@ -55,7 +55,7 @@ var chordChartType = {
55
55
  const lx = cx + labelR * Math.cos(midAngle);
56
56
  const ly = cy + labelR * Math.sin(midAngle);
57
57
  const anchor = Math.abs(Math.cos(midAngle)) < 0.01 ? "middle" : Math.cos(midAngle) > 0 ? "start" : "end";
58
- nodes.push(chunkXHQWWR5M_cjs.text(lx, ly, arc.name, {
58
+ nodes.push(chunk3TLJCGGQ_cjs.text(lx, ly, arc.name, {
59
59
  class: "chartts-chord-label",
60
60
  fill: theme.textColor,
61
61
  textAnchor: anchor,
@@ -67,7 +67,7 @@ var chordChartType = {
67
67
  for (let ri = 0; ri < ribbons.length; ri++) {
68
68
  const ribbon = ribbons[ri];
69
69
  const color = options.colors[ribbon.source % options.colors.length];
70
- const pb = new chunkXHQWWR5M_cjs.PathBuilder();
70
+ const pb = new chunk3TLJCGGQ_cjs.PathBuilder();
71
71
  const sx1 = cx + innerR * Math.cos(ribbon.sourceStart);
72
72
  const sy1 = cy + innerR * Math.sin(ribbon.sourceStart);
73
73
  const sx2 = cx + innerR * Math.cos(ribbon.sourceEnd);
@@ -84,7 +84,7 @@ var chordChartType = {
84
84
  pb.arc(innerR, innerR, 0, tgtLarge, true, tx2, ty2);
85
85
  pb.quadTo(cx, cy, sx1, sy1);
86
86
  pb.close();
87
- nodes.push(chunkXHQWWR5M_cjs.path(pb.build(), {
87
+ nodes.push(chunk3TLJCGGQ_cjs.path(pb.build(), {
88
88
  class: "chartts-chord-ribbon",
89
89
  fill: color,
90
90
  fillOpacity: 0.35,
@@ -216,5 +216,5 @@ function buildChordLayout(data, _options) {
216
216
  }
217
217
 
218
218
  exports.chordChartType = chordChartType;
219
- //# sourceMappingURL=chunk-M4AQD6WX.cjs.map
220
- //# sourceMappingURL=chunk-M4AQD6WX.cjs.map
219
+ //# sourceMappingURL=chunk-7JN6GXML.cjs.map
220
+ //# sourceMappingURL=chunk-7JN6GXML.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/chord/chord-type.ts"],"names":["prepareNoAxes","PathBuilder","path","text"],"mappings":"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","file":"chunk-M4AQD6WX.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Chord diagram — shows relationships between entities via ribbons\n * connecting arcs on a circle.\n *\n * Data convention:\n * - labels: entity names (placed around the circle as arcs)\n * - series[i].values[j]: flow from entity i to entity j (adjacency matrix)\n * series.length should equal labels.length for a square matrix.\n *\n * Alternative: arrow notation like Sankey\n * - series names contain \"→\" or \"->\" (e.g., \"A → B\")\n */\n\ninterface ChordArc {\n index: number\n name: string\n total: number\n startAngle: number\n endAngle: number\n}\n\ninterface ChordRibbon {\n source: number\n target: number\n value: number\n sourceStart: number\n sourceEnd: number\n targetStart: number\n targetEnd: number\n}\n\nexport const chordChartType: ChartTypePlugin = {\n type: 'chord',\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 { arcs, ribbons } = buildChordLayout(data, options)\n if (arcs.length === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 20\n const innerR = outerR - 14\n\n // Render arcs\n for (const arc of arcs) {\n if (arc.endAngle - arc.startAngle < 0.01) continue\n\n const color = options.colors[arc.index % options.colors.length]!\n const pb = new PathBuilder()\n\n const x1o = cx + outerR * Math.cos(arc.startAngle)\n const y1o = cy + outerR * Math.sin(arc.startAngle)\n const x2o = cx + outerR * Math.cos(arc.endAngle)\n const y2o = cy + outerR * Math.sin(arc.endAngle)\n const x1i = cx + innerR * Math.cos(arc.endAngle)\n const y1i = cy + innerR * Math.sin(arc.endAngle)\n const x2i = cx + innerR * Math.cos(arc.startAngle)\n const y2i = cy + innerR * Math.sin(arc.startAngle)\n const largeArc = (arc.endAngle - arc.startAngle) > Math.PI\n\n pb.moveTo(x1o, y1o)\n pb.arc(outerR, outerR, 0, largeArc, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n pb.arc(innerR, innerR, 0, largeArc, false, x2i, y2i)\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-chord-arc',\n fill: color,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': arc.index,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${arc.name}: ${arc.total}`,\n }))\n\n // Label\n const midAngle = (arc.startAngle + arc.endAngle) / 2\n const labelR = outerR + 12\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 nodes.push(text(lx, ly, arc.name, {\n class: 'chartts-chord-label',\n fill: theme.textColor,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Render ribbons\n for (let ri = 0; ri < ribbons.length; ri++) {\n const ribbon = ribbons[ri]!\n const color = options.colors[ribbon.source % options.colors.length]!\n\n const pb = new PathBuilder()\n // Source arc on inner ring\n const sx1 = cx + innerR * Math.cos(ribbon.sourceStart)\n const sy1 = cy + innerR * Math.sin(ribbon.sourceStart)\n const sx2 = cx + innerR * Math.cos(ribbon.sourceEnd)\n const sy2 = cy + innerR * Math.sin(ribbon.sourceEnd)\n // Target arc on inner ring\n const tx1 = cx + innerR * Math.cos(ribbon.targetStart)\n const ty1 = cy + innerR * Math.sin(ribbon.targetStart)\n const tx2 = cx + innerR * Math.cos(ribbon.targetEnd)\n const ty2 = cy + innerR * Math.sin(ribbon.targetEnd)\n\n const srcLarge = (ribbon.sourceEnd - ribbon.sourceStart) > Math.PI\n const tgtLarge = (ribbon.targetEnd - ribbon.targetStart) > Math.PI\n\n pb.moveTo(sx1, sy1)\n pb.arc(innerR, innerR, 0, srcLarge, true, sx2, sy2)\n // Bezier to target\n pb.quadTo(cx, cy, tx1, ty1)\n pb.arc(innerR, innerR, 0, tgtLarge, true, tx2, ty2)\n // Bezier back to source\n pb.quadTo(cx, cy, sx1, sy1)\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-chord-ribbon',\n fill: color,\n fillOpacity: 0.35,\n stroke: color,\n strokeWidth: 0.3,\n 'data-series': ribbon.source,\n 'data-index': ri,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${arcs[ribbon.source]!.name} → ${arcs[ribbon.target]!.name}: ${ribbon.value}`,\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 { arcs } = buildChordLayout(data, options)\n if (arcs.length === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 20\n const innerR = outerR - 14\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // Check arc hits\n if (dist >= innerR && dist <= outerR) {\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n for (const arc of arcs) {\n if (angle >= arc.startAngle && angle <= arc.endAngle) {\n return { seriesIndex: arc.index, pointIndex: 0, distance: 0 }\n }\n }\n }\n\n return null\n },\n}\n\n// ---------------------------------------------------------------------------\n// Layout computation\n// ---------------------------------------------------------------------------\n\nfunction buildChordLayout(\n data: PreparedData,\n _options: ResolvedOptions,\n): { arcs: ChordArc[]; ribbons: ChordRibbon[]; matrix: number[][] } {\n const arcs: ChordArc[] = []\n const ribbons: ChordRibbon[] = []\n\n // Check for arrow notation\n const hasArrows = data.series.some(s => s.name.includes('→') || s.name.includes('->'))\n\n // Build adjacency matrix\n const nodeNames: string[] = []\n const nodeMap = new Map<string, number>()\n\n function getOrCreate(name: string): number {\n if (nodeMap.has(name)) return nodeMap.get(name)!\n const idx = nodeNames.length\n nodeMap.set(name, idx)\n nodeNames.push(name)\n return idx\n }\n\n if (hasArrows) {\n // Parse arrow notation\n for (const series of data.series) {\n const parts = series.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length < 2) continue\n getOrCreate(parts[0]!.trim())\n getOrCreate(parts[1]!.trim())\n }\n } else {\n for (let i = 0; i < data.labels.length; i++) {\n getOrCreate(String(data.labels[i]))\n }\n }\n\n const n = nodeNames.length\n if (n === 0) return { arcs, ribbons, matrix: [] }\n\n const matrix: number[][] = Array.from({ length: n }, () => new Array(n).fill(0))\n\n if (hasArrows) {\n for (const series of data.series) {\n const parts = series.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length < 2) continue\n const src = getOrCreate(parts[0]!.trim())\n const tgt = getOrCreate(parts[1]!.trim())\n const val = series.values[0] ?? 0\n if (val > 0) matrix[src]![tgt]! += val\n }\n } else {\n for (let si = 0; si < data.series.length && si < n; si++) {\n for (let j = 0; j < data.series[si]!.values.length && j < n; j++) {\n const val = data.series[si]!.values[j]!\n if (val > 0) matrix[si]![j]! = val\n }\n }\n }\n\n // Compute totals per node\n const totals = nodeNames.map((_, i) => {\n let total = 0\n for (let j = 0; j < n; j++) {\n total += matrix[i]![j]!\n total += matrix[j]![i]!\n }\n return total\n })\n\n const grandTotal = totals.reduce((s, t) => s + t, 0)\n if (grandTotal === 0) return { arcs, ribbons, matrix }\n\n // Layout arcs\n const padAngle = 0.04\n const totalPad = padAngle * n\n const available = Math.PI * 2 - totalPad\n\n let angle = -Math.PI / 2\n for (let i = 0; i < n; i++) {\n const span = (totals[i]! / grandTotal) * available\n arcs.push({\n index: i,\n name: nodeNames[i]!,\n total: totals[i]!,\n startAngle: angle,\n endAngle: angle + span,\n })\n angle += span + padAngle\n }\n\n // Layout ribbons — track offsets within each arc\n const arcOffsets = arcs.map(a => a.startAngle)\n\n for (let i = 0; i < n; i++) {\n for (let j = i; j < n; j++) {\n const val = matrix[i]![j]! + matrix[j]![i]!\n if (val <= 0) continue\n\n const srcSpan = (matrix[i]![j]! / Math.max(totals[i]!, 1)) * (arcs[i]!.endAngle - arcs[i]!.startAngle)\n const tgtSpan = (matrix[j]![i]! / Math.max(totals[j]!, 1)) * (arcs[j]!.endAngle - arcs[j]!.startAngle)\n\n ribbons.push({\n source: i,\n target: j,\n value: val,\n sourceStart: arcOffsets[i]!,\n sourceEnd: arcOffsets[i]! + srcSpan,\n targetStart: arcOffsets[j]!,\n targetEnd: arcOffsets[j]! + tgtSpan,\n })\n\n arcOffsets[i]! += srcSpan\n arcOffsets[j]! += tgtSpan\n }\n }\n\n return { arcs, ribbons, matrix }\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/chord/chord-type.ts"],"names":["prepareNoAxes","PathBuilder","path","text"],"mappings":"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","file":"chunk-7JN6GXML.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Chord diagram — shows relationships between entities via ribbons\n * connecting arcs on a circle.\n *\n * Data convention:\n * - labels: entity names (placed around the circle as arcs)\n * - series[i].values[j]: flow from entity i to entity j (adjacency matrix)\n * series.length should equal labels.length for a square matrix.\n *\n * Alternative: arrow notation like Sankey\n * - series names contain \"→\" or \"->\" (e.g., \"A → B\")\n */\n\ninterface ChordArc {\n index: number\n name: string\n total: number\n startAngle: number\n endAngle: number\n}\n\ninterface ChordRibbon {\n source: number\n target: number\n value: number\n sourceStart: number\n sourceEnd: number\n targetStart: number\n targetEnd: number\n}\n\nexport const chordChartType: ChartTypePlugin = {\n type: 'chord',\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 { arcs, ribbons } = buildChordLayout(data, options)\n if (arcs.length === 0) return nodes\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 20\n const innerR = outerR - 14\n\n // Render arcs\n for (const arc of arcs) {\n if (arc.endAngle - arc.startAngle < 0.01) continue\n\n const color = options.colors[arc.index % options.colors.length]!\n const pb = new PathBuilder()\n\n const x1o = cx + outerR * Math.cos(arc.startAngle)\n const y1o = cy + outerR * Math.sin(arc.startAngle)\n const x2o = cx + outerR * Math.cos(arc.endAngle)\n const y2o = cy + outerR * Math.sin(arc.endAngle)\n const x1i = cx + innerR * Math.cos(arc.endAngle)\n const y1i = cy + innerR * Math.sin(arc.endAngle)\n const x2i = cx + innerR * Math.cos(arc.startAngle)\n const y2i = cy + innerR * Math.sin(arc.startAngle)\n const largeArc = (arc.endAngle - arc.startAngle) > Math.PI\n\n pb.moveTo(x1o, y1o)\n pb.arc(outerR, outerR, 0, largeArc, true, x2o, y2o)\n pb.lineTo(x1i, y1i)\n pb.arc(innerR, innerR, 0, largeArc, false, x2i, y2i)\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-chord-arc',\n fill: color,\n stroke: color,\n strokeWidth: 0.5,\n 'data-series': arc.index,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${arc.name}: ${arc.total}`,\n }))\n\n // Label\n const midAngle = (arc.startAngle + arc.endAngle) / 2\n const labelR = outerR + 12\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 nodes.push(text(lx, ly, arc.name, {\n class: 'chartts-chord-label',\n fill: theme.textColor,\n textAnchor: anchor,\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Render ribbons\n for (let ri = 0; ri < ribbons.length; ri++) {\n const ribbon = ribbons[ri]!\n const color = options.colors[ribbon.source % options.colors.length]!\n\n const pb = new PathBuilder()\n // Source arc on inner ring\n const sx1 = cx + innerR * Math.cos(ribbon.sourceStart)\n const sy1 = cy + innerR * Math.sin(ribbon.sourceStart)\n const sx2 = cx + innerR * Math.cos(ribbon.sourceEnd)\n const sy2 = cy + innerR * Math.sin(ribbon.sourceEnd)\n // Target arc on inner ring\n const tx1 = cx + innerR * Math.cos(ribbon.targetStart)\n const ty1 = cy + innerR * Math.sin(ribbon.targetStart)\n const tx2 = cx + innerR * Math.cos(ribbon.targetEnd)\n const ty2 = cy + innerR * Math.sin(ribbon.targetEnd)\n\n const srcLarge = (ribbon.sourceEnd - ribbon.sourceStart) > Math.PI\n const tgtLarge = (ribbon.targetEnd - ribbon.targetStart) > Math.PI\n\n pb.moveTo(sx1, sy1)\n pb.arc(innerR, innerR, 0, srcLarge, true, sx2, sy2)\n // Bezier to target\n pb.quadTo(cx, cy, tx1, ty1)\n pb.arc(innerR, innerR, 0, tgtLarge, true, tx2, ty2)\n // Bezier back to source\n pb.quadTo(cx, cy, sx1, sy1)\n pb.close()\n\n nodes.push(path(pb.build(), {\n class: 'chartts-chord-ribbon',\n fill: color,\n fillOpacity: 0.35,\n stroke: color,\n strokeWidth: 0.3,\n 'data-series': ribbon.source,\n 'data-index': ri,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${arcs[ribbon.source]!.name} → ${arcs[ribbon.target]!.name}: ${ribbon.value}`,\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 { arcs } = buildChordLayout(data, options)\n if (arcs.length === 0) return null\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const outerR = Math.min(area.width, area.height) / 2 - 20\n const innerR = outerR - 14\n\n const dx = mx - cx\n const dy = my - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // Check arc hits\n if (dist >= innerR && dist <= outerR) {\n let angle = Math.atan2(dy, dx)\n if (angle < -Math.PI / 2) angle += Math.PI * 2\n\n for (const arc of arcs) {\n if (angle >= arc.startAngle && angle <= arc.endAngle) {\n return { seriesIndex: arc.index, pointIndex: 0, distance: 0 }\n }\n }\n }\n\n return null\n },\n}\n\n// ---------------------------------------------------------------------------\n// Layout computation\n// ---------------------------------------------------------------------------\n\nfunction buildChordLayout(\n data: PreparedData,\n _options: ResolvedOptions,\n): { arcs: ChordArc[]; ribbons: ChordRibbon[]; matrix: number[][] } {\n const arcs: ChordArc[] = []\n const ribbons: ChordRibbon[] = []\n\n // Check for arrow notation\n const hasArrows = data.series.some(s => s.name.includes('→') || s.name.includes('->'))\n\n // Build adjacency matrix\n const nodeNames: string[] = []\n const nodeMap = new Map<string, number>()\n\n function getOrCreate(name: string): number {\n if (nodeMap.has(name)) return nodeMap.get(name)!\n const idx = nodeNames.length\n nodeMap.set(name, idx)\n nodeNames.push(name)\n return idx\n }\n\n if (hasArrows) {\n // Parse arrow notation\n for (const series of data.series) {\n const parts = series.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length < 2) continue\n getOrCreate(parts[0]!.trim())\n getOrCreate(parts[1]!.trim())\n }\n } else {\n for (let i = 0; i < data.labels.length; i++) {\n getOrCreate(String(data.labels[i]))\n }\n }\n\n const n = nodeNames.length\n if (n === 0) return { arcs, ribbons, matrix: [] }\n\n const matrix: number[][] = Array.from({ length: n }, () => new Array(n).fill(0))\n\n if (hasArrows) {\n for (const series of data.series) {\n const parts = series.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length < 2) continue\n const src = getOrCreate(parts[0]!.trim())\n const tgt = getOrCreate(parts[1]!.trim())\n const val = series.values[0] ?? 0\n if (val > 0) matrix[src]![tgt]! += val\n }\n } else {\n for (let si = 0; si < data.series.length && si < n; si++) {\n for (let j = 0; j < data.series[si]!.values.length && j < n; j++) {\n const val = data.series[si]!.values[j]!\n if (val > 0) matrix[si]![j]! = val\n }\n }\n }\n\n // Compute totals per node\n const totals = nodeNames.map((_, i) => {\n let total = 0\n for (let j = 0; j < n; j++) {\n total += matrix[i]![j]!\n total += matrix[j]![i]!\n }\n return total\n })\n\n const grandTotal = totals.reduce((s, t) => s + t, 0)\n if (grandTotal === 0) return { arcs, ribbons, matrix }\n\n // Layout arcs\n const padAngle = 0.04\n const totalPad = padAngle * n\n const available = Math.PI * 2 - totalPad\n\n let angle = -Math.PI / 2\n for (let i = 0; i < n; i++) {\n const span = (totals[i]! / grandTotal) * available\n arcs.push({\n index: i,\n name: nodeNames[i]!,\n total: totals[i]!,\n startAngle: angle,\n endAngle: angle + span,\n })\n angle += span + padAngle\n }\n\n // Layout ribbons — track offsets within each arc\n const arcOffsets = arcs.map(a => a.startAngle)\n\n for (let i = 0; i < n; i++) {\n for (let j = i; j < n; j++) {\n const val = matrix[i]![j]! + matrix[j]![i]!\n if (val <= 0) continue\n\n const srcSpan = (matrix[i]![j]! / Math.max(totals[i]!, 1)) * (arcs[i]!.endAngle - arcs[i]!.startAngle)\n const tgtSpan = (matrix[j]![i]! / Math.max(totals[j]!, 1)) * (arcs[j]!.endAngle - arcs[j]!.startAngle)\n\n ribbons.push({\n source: i,\n target: j,\n value: val,\n sourceStart: arcOffsets[i]!,\n sourceEnd: arcOffsets[i]! + srcSpan,\n targetStart: arcOffsets[j]!,\n targetEnd: arcOffsets[j]! + tgtSpan,\n })\n\n arcOffsets[i]! += srcSpan\n arcOffsets[j]! += tgtSpan\n }\n }\n\n return { arcs, ribbons, matrix }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-3XVGEBR4.js';
2
- import { rect, text, group } from './chunk-3BRQGYDX.js';
1
+ import { prepareNoAxes } from './chunk-GMLJDDHZ.js';
2
+ import { rect, text, group } from './chunk-BMTVFAX2.js';
3
3
 
4
4
  // src/charts/treemap/treemap-type.ts
5
5
  var treemapChartType = {
@@ -147,5 +147,5 @@ function layoutRow(values, start, x, y, w, h, rects) {
147
147
  }
148
148
 
149
149
  export { treemapChartType };
150
- //# sourceMappingURL=chunk-LUTU4WW3.js.map
151
- //# sourceMappingURL=chunk-LUTU4WW3.js.map
150
+ //# sourceMappingURL=chunk-7MXBXWVD.js.map
151
+ //# sourceMappingURL=chunk-7MXBXWVD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/treemap/treemap-type.ts"],"names":["rowThickness"],"mappings":"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","file":"chunk-LUTU4WW3.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 * Treemap chart — rectangular space-filling visualization.\n *\n * Uses the first series' values as areas. Labels are cell labels.\n * Implements a simple squarified treemap layout.\n */\nexport const treemapChartType: ChartTypePlugin = {\n type: 'treemap',\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 // Build items sorted by value descending\n const items = series.values\n .map((v, i) => ({ value: Math.abs(v), index: i }))\n .filter(d => d.value > 0)\n .sort((a, b) => b.value - a.value)\n\n if (items.length === 0) return nodes\n\n const total = items.reduce((s, d) => s + d.value, 0)\n const gap = 2\n\n // Layout using slice-and-dice (simpler, works well)\n const rects = squarify(items.map(d => d.value / total), area.x, area.y, area.width, area.height)\n\n for (let k = 0; k < items.length; k++) {\n const item = items[k]!\n const r = rects[k]!\n const colorIndex = item.index % options.colors.length\n const color = options.colors[colorIndex]!\n const label = String(data.labels[item.index] ?? `Item ${item.index + 1}`)\n\n const cellNodes: RenderNode[] = []\n\n cellNodes.push(rect(r.x + gap / 2, r.y + gap / 2, r.w - gap, r.h - gap, {\n class: 'chartts-treemap-cell',\n fill: color,\n fillOpacity: 0.75,\n rx: 5,\n ry: 5,\n 'data-series': 0,\n 'data-index': item.index,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${label}: ${series.values[item.index]}`,\n }))\n\n // Only show label if cell is big enough\n if (r.w > 30 && r.h > 20) {\n const fontSize = Math.min(theme.fontSizeSmall, r.w * 0.15, r.h * 0.3)\n cellNodes.push(text(r.x + r.w / 2, r.y + r.h / 2 - fontSize * 0.3, label, {\n class: 'chartts-treemap-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n\n // Show value below label\n if (r.h > 35) {\n cellNodes.push(text(r.x + r.w / 2, r.y + r.h / 2 + fontSize * 0.8, String(series.values[item.index]), {\n class: 'chartts-treemap-value',\n fill: 'rgba(255,255,255,0.7)',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: fontSize * 0.85,\n fontFamily: theme.fontFamily,\n }))\n }\n }\n\n nodes.push(group(cellNodes, {\n class: `chartts-series chartts-series-${item.index}`,\n 'data-series-name': label,\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 items = series.values\n .map((v, i) => ({ value: Math.abs(v), index: i }))\n .filter(d => d.value > 0)\n .sort((a, b) => b.value - a.value)\n\n if (items.length === 0) return null\n const total = items.reduce((s, d) => s + d.value, 0)\n const rects = squarify(items.map(d => d.value / total), area.x, area.y, area.width, area.height)\n\n for (let k = 0; k < items.length; k++) {\n const r = rects[k]!\n if (mx >= r.x && mx <= r.x + r.w && my >= r.y && my <= r.y + r.h) {\n return { seriesIndex: 0, pointIndex: items[k]!.index, distance: 0 }\n }\n }\n\n return null\n },\n}\n\ninterface Rect { x: number; y: number; w: number; h: number }\n\n/**\n * Squarified treemap layout.\n * Takes normalized values (sum to 1) and fills a rectangle.\n */\nfunction squarify(values: number[], x: number, y: number, w: number, h: number): Rect[] {\n const rects: Rect[] = []\n layoutRow(values, 0, x, y, w, h, rects)\n return rects\n}\n\nfunction layoutRow(\n values: number[], start: number,\n x: number, y: number, w: number, h: number,\n rects: Rect[],\n): void {\n if (start >= values.length) return\n if (values.length - start === 1) {\n rects.push({ x, y, w, h })\n return\n }\n\n const isWide = w >= h\n\n // Greedily add items to the current row until aspect ratio gets worse\n let rowSum = 0\n let bestWorst = Infinity\n let rowEnd = start\n\n for (let i = start; i < values.length; i++) {\n const newSum = rowSum + values[i]!\n\n // Compute row takes up fraction of the short side\n const rowFraction = newSum\n const rowThickness = isWide ? w * rowFraction : h * rowFraction\n const count = i - start + 1\n\n if (rowThickness <= 0) { rowSum = newSum; rowEnd = i + 1; continue }\n\n // Worst aspect ratio in this row\n let worst = 0\n for (let j = start; j <= i; j++) {\n const cellFrac = values[j]! / newSum\n const cellLen = isWide ? h * cellFrac : w * cellFrac\n const ar = Math.max(rowThickness / cellLen, cellLen / rowThickness)\n if (ar > worst) worst = ar\n }\n\n if (count === 1 || worst <= bestWorst) {\n bestWorst = worst\n rowSum = newSum\n rowEnd = i + 1\n } else {\n break\n }\n }\n\n if (rowEnd === start) rowEnd = start + 1\n const finalSum = values.slice(start, rowEnd).reduce((a, b) => a + b, 0)\n\n // Lay out this row\n const rowThickness = isWide ? w * finalSum : h * finalSum\n let offset = 0\n\n for (let i = start; i < rowEnd; i++) {\n const frac = finalSum > 0 ? values[i]! / finalSum : 0\n const cellLen = isWide ? h * frac : w * frac\n\n if (isWide) {\n rects.push({ x, y: y + offset, w: rowThickness, h: cellLen })\n } else {\n rects.push({ x: x + offset, y, w: cellLen, h: rowThickness })\n }\n offset += cellLen\n }\n\n // Recurse for remaining items\n if (isWide) {\n layoutRow(values, rowEnd, x + rowThickness, y, w - rowThickness, h, rects)\n } else {\n layoutRow(values, rowEnd, x, y + rowThickness, w, h - rowThickness, rects)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/treemap/treemap-type.ts"],"names":["rowThickness"],"mappings":"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","file":"chunk-7MXBXWVD.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 * Treemap chart — rectangular space-filling visualization.\n *\n * Uses the first series' values as areas. Labels are cell labels.\n * Implements a simple squarified treemap layout.\n */\nexport const treemapChartType: ChartTypePlugin = {\n type: 'treemap',\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 // Build items sorted by value descending\n const items = series.values\n .map((v, i) => ({ value: Math.abs(v), index: i }))\n .filter(d => d.value > 0)\n .sort((a, b) => b.value - a.value)\n\n if (items.length === 0) return nodes\n\n const total = items.reduce((s, d) => s + d.value, 0)\n const gap = 2\n\n // Layout using slice-and-dice (simpler, works well)\n const rects = squarify(items.map(d => d.value / total), area.x, area.y, area.width, area.height)\n\n for (let k = 0; k < items.length; k++) {\n const item = items[k]!\n const r = rects[k]!\n const colorIndex = item.index % options.colors.length\n const color = options.colors[colorIndex]!\n const label = String(data.labels[item.index] ?? `Item ${item.index + 1}`)\n\n const cellNodes: RenderNode[] = []\n\n cellNodes.push(rect(r.x + gap / 2, r.y + gap / 2, r.w - gap, r.h - gap, {\n class: 'chartts-treemap-cell',\n fill: color,\n fillOpacity: 0.75,\n rx: 5,\n ry: 5,\n 'data-series': 0,\n 'data-index': item.index,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${label}: ${series.values[item.index]}`,\n }))\n\n // Only show label if cell is big enough\n if (r.w > 30 && r.h > 20) {\n const fontSize = Math.min(theme.fontSizeSmall, r.w * 0.15, r.h * 0.3)\n cellNodes.push(text(r.x + r.w / 2, r.y + r.h / 2 - fontSize * 0.3, label, {\n class: 'chartts-treemap-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n\n // Show value below label\n if (r.h > 35) {\n cellNodes.push(text(r.x + r.w / 2, r.y + r.h / 2 + fontSize * 0.8, String(series.values[item.index]), {\n class: 'chartts-treemap-value',\n fill: 'rgba(255,255,255,0.7)',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: fontSize * 0.85,\n fontFamily: theme.fontFamily,\n }))\n }\n }\n\n nodes.push(group(cellNodes, {\n class: `chartts-series chartts-series-${item.index}`,\n 'data-series-name': label,\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 items = series.values\n .map((v, i) => ({ value: Math.abs(v), index: i }))\n .filter(d => d.value > 0)\n .sort((a, b) => b.value - a.value)\n\n if (items.length === 0) return null\n const total = items.reduce((s, d) => s + d.value, 0)\n const rects = squarify(items.map(d => d.value / total), area.x, area.y, area.width, area.height)\n\n for (let k = 0; k < items.length; k++) {\n const r = rects[k]!\n if (mx >= r.x && mx <= r.x + r.w && my >= r.y && my <= r.y + r.h) {\n return { seriesIndex: 0, pointIndex: items[k]!.index, distance: 0 }\n }\n }\n\n return null\n },\n}\n\ninterface Rect { x: number; y: number; w: number; h: number }\n\n/**\n * Squarified treemap layout.\n * Takes normalized values (sum to 1) and fills a rectangle.\n */\nfunction squarify(values: number[], x: number, y: number, w: number, h: number): Rect[] {\n const rects: Rect[] = []\n layoutRow(values, 0, x, y, w, h, rects)\n return rects\n}\n\nfunction layoutRow(\n values: number[], start: number,\n x: number, y: number, w: number, h: number,\n rects: Rect[],\n): void {\n if (start >= values.length) return\n if (values.length - start === 1) {\n rects.push({ x, y, w, h })\n return\n }\n\n const isWide = w >= h\n\n // Greedily add items to the current row until aspect ratio gets worse\n let rowSum = 0\n let bestWorst = Infinity\n let rowEnd = start\n\n for (let i = start; i < values.length; i++) {\n const newSum = rowSum + values[i]!\n\n // Compute row takes up fraction of the short side\n const rowFraction = newSum\n const rowThickness = isWide ? w * rowFraction : h * rowFraction\n const count = i - start + 1\n\n if (rowThickness <= 0) { rowSum = newSum; rowEnd = i + 1; continue }\n\n // Worst aspect ratio in this row\n let worst = 0\n for (let j = start; j <= i; j++) {\n const cellFrac = values[j]! / newSum\n const cellLen = isWide ? h * cellFrac : w * cellFrac\n const ar = Math.max(rowThickness / cellLen, cellLen / rowThickness)\n if (ar > worst) worst = ar\n }\n\n if (count === 1 || worst <= bestWorst) {\n bestWorst = worst\n rowSum = newSum\n rowEnd = i + 1\n } else {\n break\n }\n }\n\n if (rowEnd === start) rowEnd = start + 1\n const finalSum = values.slice(start, rowEnd).reduce((a, b) => a + b, 0)\n\n // Lay out this row\n const rowThickness = isWide ? w * finalSum : h * finalSum\n let offset = 0\n\n for (let i = start; i < rowEnd; i++) {\n const frac = finalSum > 0 ? values[i]! / finalSum : 0\n const cellLen = isWide ? h * frac : w * frac\n\n if (isWide) {\n rects.push({ x, y: y + offset, w: rowThickness, h: cellLen })\n } else {\n rects.push({ x: x + offset, y, w: cellLen, h: rowThickness })\n }\n offset += cellLen\n }\n\n // Recurse for remaining items\n if (isWide) {\n layoutRow(values, rowEnd, x + rowThickness, y, w - rowThickness, h, rects)\n } else {\n layoutRow(values, rowEnd, x, y + rowThickness, w, h - rowThickness, rects)\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-3XVGEBR4.js';
2
- import { PathBuilder, path, circle, text, group } from './chunk-3BRQGYDX.js';
1
+ import { prepareNoAxes } from './chunk-GMLJDDHZ.js';
2
+ import { PathBuilder, path, circle, text, group } from './chunk-BMTVFAX2.js';
3
3
 
4
4
  // src/charts/lines/lines-type.ts
5
5
  var linesChartType = {
@@ -172,5 +172,5 @@ var linesChartType = {
172
172
  };
173
173
 
174
174
  export { linesChartType };
175
- //# sourceMappingURL=chunk-22LR6CFM.js.map
176
- //# sourceMappingURL=chunk-22LR6CFM.js.map
175
+ //# sourceMappingURL=chunk-AA45U5KV.js.map
176
+ //# sourceMappingURL=chunk-AA45U5KV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/lines/lines-type.ts"],"names":[],"mappings":"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","file":"chunk-22LR6CFM.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { circle, text, group } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { path } from '../../render/tree'\n\n/**\n * Lines (flow lines) chart — curved connection lines between named points.\n *\n * Data convention:\n * - labels: point/city names\n * - series use arrow notation: \"A → B\" with values[0] = flow magnitude\n *\n * Options:\n * - points: array of {name, x, y} defining positions in 0..1 normalized space\n * - showNodes: show circles at point positions (default true)\n * - showArrows: show arrowheads (default true)\n * - showLabels: show point name labels (default true)\n * - curvature: bezier curve amount 0..1 (default 0.3)\n */\n\nexport interface LinesPoint {\n name: string\n x: number // 0..1 normalized\n y: number // 0..1 normalized\n}\n\nexport interface LinesOptions {\n points?: LinesPoint[]\n showNodes?: boolean\n showArrows?: boolean\n showLabels?: boolean\n curvature?: number\n}\n\ninterface ParsedFlow {\n source: string\n target: string\n value: number\n}\n\nexport const linesChartType: ChartTypePlugin = {\n type: 'lines',\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 lOpts = options as unknown as LinesOptions\n const showNodes = lOpts.showNodes !== false\n const showArrows = lOpts.showArrows !== false\n const showLabels = lOpts.showLabels !== false\n const curvature = lOpts.curvature ?? 0.3\n\n // Build point positions\n const pointMap = new Map<string, { x: number; y: number }>()\n\n if (lOpts.points) {\n for (const p of lOpts.points) {\n pointMap.set(p.name, {\n x: area.x + p.x * area.width,\n y: area.y + p.y * area.height,\n })\n }\n } else {\n // Auto-layout: arrange points in a circle\n const names = new Set<string>()\n for (const s of data.series) {\n const parts = s.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length >= 2) {\n names.add(parts[0]!.trim())\n names.add(parts[1]!.trim())\n }\n }\n // Also add labels\n for (const l of data.labels) names.add(String(l))\n\n const nameArr = [...names]\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const r = Math.min(area.width, area.height) / 2 - 40\n\n nameArr.forEach((name, i) => {\n const angle = (i / nameArr.length) * Math.PI * 2 - Math.PI / 2\n pointMap.set(name, {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n })\n })\n }\n\n // Parse flows from series\n const flows: ParsedFlow[] = []\n for (const s of data.series) {\n const parts = s.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length >= 2) {\n flows.push({\n source: parts[0]!.trim(),\n target: parts[1]!.trim(),\n value: s.values[0] ?? 1,\n })\n }\n }\n\n if (flows.length === 0 && pointMap.size === 0) return nodes\n\n // Max flow for line width scaling\n const maxFlow = Math.max(...flows.map(f => Math.abs(f.value)), 1)\n\n // Render flow lines\n for (let fi = 0; fi < flows.length; fi++) {\n const flow = flows[fi]!\n const src = pointMap.get(flow.source)\n const tgt = pointMap.get(flow.target)\n if (!src || !tgt) continue\n\n const color = options.colors[fi % options.colors.length]!\n const lineWidth = 1 + (Math.abs(flow.value) / maxFlow) * 4\n\n // Curved bezier\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const mx = (src.x + tgt.x) / 2\n const my = (src.y + tgt.y) / 2\n const cpx = mx - dy * curvature\n const cpy = my + dx * curvature\n\n const pb = new PathBuilder()\n pb.moveTo(src.x, src.y)\n pb.quadTo(cpx, cpy, tgt.x, tgt.y)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-lines-flow',\n fill: 'none',\n stroke: color,\n strokeWidth: lineWidth,\n strokeOpacity: 0.6,\n strokeLinecap: 'round',\n 'data-series': fi,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${flow.source} → ${flow.target}: ${flow.value}`,\n }))\n\n // Arrowhead at target\n if (showArrows) {\n const t = 0.95 // position along curve for arrow direction\n const ax = (1 - t) * (1 - t) * src.x + 2 * (1 - t) * t * cpx + t * t * tgt.x\n const ay = (1 - t) * (1 - t) * src.y + 2 * (1 - t) * t * cpy + t * t * tgt.y\n const angle = Math.atan2(tgt.y - ay, tgt.x - ax)\n const arrowSize = 6 + lineWidth\n\n const apb = new PathBuilder()\n apb.moveTo(tgt.x, tgt.y)\n apb.lineTo(\n tgt.x - arrowSize * Math.cos(angle - 0.4),\n tgt.y - arrowSize * Math.sin(angle - 0.4),\n )\n apb.lineTo(\n tgt.x - arrowSize * Math.cos(angle + 0.4),\n tgt.y - arrowSize * Math.sin(angle + 0.4),\n )\n apb.close()\n\n nodes.push(path(apb.build(), {\n class: 'chartts-lines-arrow',\n fill: color,\n fillOpacity: 0.8,\n }))\n }\n }\n\n // Render nodes\n if (showNodes) {\n const nodeNodes: RenderNode[] = []\n let idx = 0\n for (const [name, pos] of pointMap) {\n const color = options.colors[idx % options.colors.length]!\n\n nodeNodes.push(circle(pos.x, pos.y, 6, {\n class: 'chartts-lines-node',\n fill: color,\n stroke: theme.background === 'transparent' ? '#fff' : theme.background,\n strokeWidth: 2,\n 'data-series': idx,\n 'data-index': 0,\n }))\n\n if (showLabels) {\n nodeNodes.push(text(pos.x, pos.y - 14, name, {\n class: 'chartts-lines-label',\n fill: theme.textColor,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n idx++\n }\n nodes.push(group(nodeNodes, { class: 'chartts-lines-nodes' }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { options } = ctx\n const lOpts = options as unknown as LinesOptions\n const pointMap = new Map<string, { x: number; y: number }>()\n\n if (lOpts.points) {\n const { area } = ctx\n for (const p of lOpts.points) {\n pointMap.set(p.name, {\n x: area.x + p.x * area.width,\n y: area.y + p.y * area.height,\n })\n }\n }\n\n let idx = 0\n for (const [, pos] of pointMap) {\n const dx = mx - pos.x\n const dy = my - pos.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist < 12) {\n return { seriesIndex: idx, pointIndex: 0, distance: dist }\n }\n idx++\n }\n return null\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/lines/lines-type.ts"],"names":[],"mappings":"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","file":"chunk-AA45U5KV.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { circle, text, group } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { path } from '../../render/tree'\n\n/**\n * Lines (flow lines) chart — curved connection lines between named points.\n *\n * Data convention:\n * - labels: point/city names\n * - series use arrow notation: \"A → B\" with values[0] = flow magnitude\n *\n * Options:\n * - points: array of {name, x, y} defining positions in 0..1 normalized space\n * - showNodes: show circles at point positions (default true)\n * - showArrows: show arrowheads (default true)\n * - showLabels: show point name labels (default true)\n * - curvature: bezier curve amount 0..1 (default 0.3)\n */\n\nexport interface LinesPoint {\n name: string\n x: number // 0..1 normalized\n y: number // 0..1 normalized\n}\n\nexport interface LinesOptions {\n points?: LinesPoint[]\n showNodes?: boolean\n showArrows?: boolean\n showLabels?: boolean\n curvature?: number\n}\n\ninterface ParsedFlow {\n source: string\n target: string\n value: number\n}\n\nexport const linesChartType: ChartTypePlugin = {\n type: 'lines',\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 lOpts = options as unknown as LinesOptions\n const showNodes = lOpts.showNodes !== false\n const showArrows = lOpts.showArrows !== false\n const showLabels = lOpts.showLabels !== false\n const curvature = lOpts.curvature ?? 0.3\n\n // Build point positions\n const pointMap = new Map<string, { x: number; y: number }>()\n\n if (lOpts.points) {\n for (const p of lOpts.points) {\n pointMap.set(p.name, {\n x: area.x + p.x * area.width,\n y: area.y + p.y * area.height,\n })\n }\n } else {\n // Auto-layout: arrange points in a circle\n const names = new Set<string>()\n for (const s of data.series) {\n const parts = s.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length >= 2) {\n names.add(parts[0]!.trim())\n names.add(parts[1]!.trim())\n }\n }\n // Also add labels\n for (const l of data.labels) names.add(String(l))\n\n const nameArr = [...names]\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n const r = Math.min(area.width, area.height) / 2 - 40\n\n nameArr.forEach((name, i) => {\n const angle = (i / nameArr.length) * Math.PI * 2 - Math.PI / 2\n pointMap.set(name, {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n })\n })\n }\n\n // Parse flows from series\n const flows: ParsedFlow[] = []\n for (const s of data.series) {\n const parts = s.name.split(/\\s*(?:→|->)\\s*/)\n if (parts.length >= 2) {\n flows.push({\n source: parts[0]!.trim(),\n target: parts[1]!.trim(),\n value: s.values[0] ?? 1,\n })\n }\n }\n\n if (flows.length === 0 && pointMap.size === 0) return nodes\n\n // Max flow for line width scaling\n const maxFlow = Math.max(...flows.map(f => Math.abs(f.value)), 1)\n\n // Render flow lines\n for (let fi = 0; fi < flows.length; fi++) {\n const flow = flows[fi]!\n const src = pointMap.get(flow.source)\n const tgt = pointMap.get(flow.target)\n if (!src || !tgt) continue\n\n const color = options.colors[fi % options.colors.length]!\n const lineWidth = 1 + (Math.abs(flow.value) / maxFlow) * 4\n\n // Curved bezier\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const mx = (src.x + tgt.x) / 2\n const my = (src.y + tgt.y) / 2\n const cpx = mx - dy * curvature\n const cpy = my + dx * curvature\n\n const pb = new PathBuilder()\n pb.moveTo(src.x, src.y)\n pb.quadTo(cpx, cpy, tgt.x, tgt.y)\n\n nodes.push(path(pb.build(), {\n class: 'chartts-lines-flow',\n fill: 'none',\n stroke: color,\n strokeWidth: lineWidth,\n strokeOpacity: 0.6,\n strokeLinecap: 'round',\n 'data-series': fi,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${flow.source} → ${flow.target}: ${flow.value}`,\n }))\n\n // Arrowhead at target\n if (showArrows) {\n const t = 0.95 // position along curve for arrow direction\n const ax = (1 - t) * (1 - t) * src.x + 2 * (1 - t) * t * cpx + t * t * tgt.x\n const ay = (1 - t) * (1 - t) * src.y + 2 * (1 - t) * t * cpy + t * t * tgt.y\n const angle = Math.atan2(tgt.y - ay, tgt.x - ax)\n const arrowSize = 6 + lineWidth\n\n const apb = new PathBuilder()\n apb.moveTo(tgt.x, tgt.y)\n apb.lineTo(\n tgt.x - arrowSize * Math.cos(angle - 0.4),\n tgt.y - arrowSize * Math.sin(angle - 0.4),\n )\n apb.lineTo(\n tgt.x - arrowSize * Math.cos(angle + 0.4),\n tgt.y - arrowSize * Math.sin(angle + 0.4),\n )\n apb.close()\n\n nodes.push(path(apb.build(), {\n class: 'chartts-lines-arrow',\n fill: color,\n fillOpacity: 0.8,\n }))\n }\n }\n\n // Render nodes\n if (showNodes) {\n const nodeNodes: RenderNode[] = []\n let idx = 0\n for (const [name, pos] of pointMap) {\n const color = options.colors[idx % options.colors.length]!\n\n nodeNodes.push(circle(pos.x, pos.y, 6, {\n class: 'chartts-lines-node',\n fill: color,\n stroke: theme.background === 'transparent' ? '#fff' : theme.background,\n strokeWidth: 2,\n 'data-series': idx,\n 'data-index': 0,\n }))\n\n if (showLabels) {\n nodeNodes.push(text(pos.x, pos.y - 14, name, {\n class: 'chartts-lines-label',\n fill: theme.textColor,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n }))\n }\n idx++\n }\n nodes.push(group(nodeNodes, { class: 'chartts-lines-nodes' }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { options } = ctx\n const lOpts = options as unknown as LinesOptions\n const pointMap = new Map<string, { x: number; y: number }>()\n\n if (lOpts.points) {\n const { area } = ctx\n for (const p of lOpts.points) {\n pointMap.set(p.name, {\n x: area.x + p.x * area.width,\n y: area.y + p.y * area.height,\n })\n }\n }\n\n let idx = 0\n for (const [, pos] of pointMap) {\n const dx = mx - pos.x\n const dy = my - pos.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist < 12) {\n return { seriesIndex: idx, pointIndex: 0, distance: dist }\n }\n idx++\n }\n return null\n },\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk5QOQR5FE_cjs = require('./chunk-5QOQR5FE.cjs');
4
- var chunkXHQWWR5M_cjs = require('./chunk-XHQWWR5M.cjs');
3
+ var chunkHOPFELRP_cjs = require('./chunk-HOPFELRP.cjs');
4
+ var chunk3TLJCGGQ_cjs = require('./chunk-3TLJCGGQ.cjs');
5
5
 
6
6
  // src/charts/parallel/parallel-type.ts
7
7
  var parallelChartType = {
@@ -10,7 +10,7 @@ var parallelChartType = {
10
10
  return { x: "categorical", y: "linear" };
11
11
  },
12
12
  prepareData(data, options) {
13
- return chunk5QOQR5FE_cjs.prepareNoAxes(data, options);
13
+ return chunkHOPFELRP_cjs.prepareNoAxes(data, options);
14
14
  },
15
15
  render(ctx) {
16
16
  const { data, area, theme, options } = ctx;
@@ -43,12 +43,12 @@ var parallelChartType = {
43
43
  };
44
44
  for (let d = 0; d < dimCount; d++) {
45
45
  const x = axisX(d);
46
- nodes.push(chunkXHQWWR5M_cjs.line(x, axisTop, x, axisBottom, {
46
+ nodes.push(chunk3TLJCGGQ_cjs.line(x, axisTop, x, axisBottom, {
47
47
  class: "chartts-parallel-axis",
48
48
  stroke: theme.axisColor,
49
49
  strokeWidth: theme.axisWidth
50
50
  }));
51
- nodes.push(chunkXHQWWR5M_cjs.text(x, axisBottom + 14, String(data.labels[d]), {
51
+ nodes.push(chunk3TLJCGGQ_cjs.text(x, axisBottom + 14, String(data.labels[d]), {
52
52
  class: "chartts-parallel-label",
53
53
  fill: theme.textMuted,
54
54
  textAnchor: "middle",
@@ -56,7 +56,7 @@ var parallelChartType = {
56
56
  fontSize: theme.fontSizeSmall,
57
57
  fontFamily: theme.fontFamily
58
58
  }));
59
- nodes.push(chunkXHQWWR5M_cjs.text(x - 6, axisTop, String(Math.round(maxs[d])), {
59
+ nodes.push(chunk3TLJCGGQ_cjs.text(x - 6, axisTop, String(Math.round(maxs[d])), {
60
60
  class: "chartts-parallel-tick",
61
61
  fill: theme.textMuted,
62
62
  textAnchor: "end",
@@ -64,7 +64,7 @@ var parallelChartType = {
64
64
  fontSize: theme.fontSizeSmall * 0.85,
65
65
  fontFamily: theme.fontFamily
66
66
  }));
67
- nodes.push(chunkXHQWWR5M_cjs.text(x - 6, axisBottom, String(Math.round(mins[d])), {
67
+ nodes.push(chunk3TLJCGGQ_cjs.text(x - 6, axisBottom, String(Math.round(mins[d])), {
68
68
  class: "chartts-parallel-tick",
69
69
  fill: theme.textMuted,
70
70
  textAnchor: "end",
@@ -76,14 +76,14 @@ var parallelChartType = {
76
76
  for (let si = 0; si < data.series.length; si++) {
77
77
  const series = data.series[si];
78
78
  const color = series.color ?? options.colors[si % options.colors.length];
79
- const pb = new chunkXHQWWR5M_cjs.PathBuilder();
79
+ const pb = new chunk3TLJCGGQ_cjs.PathBuilder();
80
80
  for (let d = 0; d < dimCount; d++) {
81
81
  const x = axisX(d);
82
82
  const y = valueToY(d, series.values[d] ?? 0);
83
83
  if (d === 0) pb.moveTo(x, y);
84
84
  else pb.lineTo(x, y);
85
85
  }
86
- nodes.push(chunkXHQWWR5M_cjs.path(pb.build(), {
86
+ nodes.push(chunk3TLJCGGQ_cjs.path(pb.build(), {
87
87
  class: "chartts-parallel-line",
88
88
  stroke: color,
89
89
  strokeWidth: theme.lineWidth,
@@ -145,5 +145,5 @@ var parallelChartType = {
145
145
  };
146
146
 
147
147
  exports.parallelChartType = parallelChartType;
148
- //# sourceMappingURL=chunk-GNRRK7TZ.cjs.map
149
- //# sourceMappingURL=chunk-GNRRK7TZ.cjs.map
148
+ //# sourceMappingURL=chunk-AAKS22M3.cjs.map
149
+ //# sourceMappingURL=chunk-AAKS22M3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/parallel/parallel-type.ts"],"names":["prepareNoAxes","line","text","PathBuilder","path"],"mappings":"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","file":"chunk-GNRRK7TZ.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Parallel coordinates chart — multi-dimensional data on parallel vertical axes.\n *\n * Data convention:\n * - labels: axis names (dimensions), one per axis\n * - series[i]: one data record. series[i].values[j] = value for dimension j\n *\n * Each series becomes a polyline crossing all axes.\n */\n\nexport const parallelChartType: ChartTypePlugin = {\n type: 'parallel',\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 dimCount = data.labels.length\n if (dimCount < 2 || data.series.length === 0) return nodes\n\n const padding = 24\n const axisSpacing = (area.width - padding * 2) / Math.max(dimCount - 1, 1)\n const axisTop = area.y + padding\n const axisBottom = area.y + area.height - padding\n\n // Compute min/max per dimension\n const mins: number[] = new Array(dimCount).fill(Infinity)\n const maxs: number[] = new Array(dimCount).fill(-Infinity)\n for (const series of data.series) {\n for (let d = 0; d < dimCount; d++) {\n const v = series.values[d] ?? 0\n if (v < mins[d]!) mins[d] = v\n if (v > maxs[d]!) maxs[d] = v\n }\n }\n\n // Ensure min !== max\n for (let d = 0; d < dimCount; d++) {\n if (mins[d] === maxs[d]) {\n mins[d] = mins[d]! - 1\n maxs[d] = maxs[d]! + 1\n }\n }\n\n const axisX = (dim: number) => area.x + padding + dim * axisSpacing\n const valueToY = (dim: number, value: number) => {\n const frac = (value - mins[dim]!) / (maxs[dim]! - mins[dim]!)\n return axisBottom - frac * (axisBottom - axisTop) // invert: higher values = higher on axis\n }\n\n // Draw axes\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n\n // Axis line\n nodes.push(line(x, axisTop, x, axisBottom, {\n class: 'chartts-parallel-axis',\n stroke: theme.axisColor,\n strokeWidth: theme.axisWidth,\n }))\n\n // Axis label at bottom\n nodes.push(text(x, axisBottom + 14, String(data.labels[d]!), {\n class: 'chartts-parallel-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n // Min/max ticks\n nodes.push(text(x - 6, axisTop, String(Math.round(maxs[d]!)), {\n class: 'chartts-parallel-tick',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall * 0.85,\n fontFamily: theme.fontFamily,\n }))\n nodes.push(text(x - 6, axisBottom, String(Math.round(mins[d]!)), {\n class: 'chartts-parallel-tick',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall * 0.85,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Draw series lines\n for (let si = 0; si < data.series.length; si++) {\n const series = data.series[si]!\n const color = series.color ?? options.colors[si % options.colors.length]!\n\n const pb = new PathBuilder()\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n const y = valueToY(d, series.values[d] ?? 0)\n if (d === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n\n nodes.push(path(pb.build(), {\n class: 'chartts-parallel-line',\n stroke: color,\n strokeWidth: theme.lineWidth,\n fill: 'none',\n fillOpacity: 0,\n opacity: Math.max(0.3, 1 - data.series.length * 0.03),\n 'data-series': si,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${series.values.join(', ')}`,\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 dimCount = data.labels.length\n if (dimCount < 2 || data.series.length === 0) return null\n\n const padding = 24\n const axisSpacing = (area.width - padding * 2) / Math.max(dimCount - 1, 1)\n const axisTop = area.y + padding\n const axisBottom = area.y + area.height - padding\n\n const mins: number[] = new Array(dimCount).fill(Infinity)\n const maxs: number[] = new Array(dimCount).fill(-Infinity)\n for (const series of data.series) {\n for (let d = 0; d < dimCount; d++) {\n const v = series.values[d] ?? 0\n if (v < mins[d]!) mins[d] = v\n if (v > maxs[d]!) maxs[d] = v\n }\n }\n for (let d = 0; d < dimCount; d++) {\n if (mins[d] === maxs[d]) { mins[d] = mins[d]! - 1; maxs[d] = maxs[d]! + 1 }\n }\n\n const axisX = (dim: number) => area.x + padding + dim * axisSpacing\n const valueToY = (dim: number, value: number) => {\n const frac = (value - mins[dim]!) / (maxs[dim]! - mins[dim]!)\n return axisBottom - frac * (axisBottom - axisTop)\n }\n\n // Find closest series line\n let best: HitResult | null = null\n let bestDist = 20 // max hit distance\n\n for (let si = 0; si < data.series.length; si++) {\n const series = data.series[si]!\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n const y = valueToY(d, series.values[d] ?? 0)\n const dist = Math.sqrt((mx - x) ** 2 + (my - y) ** 2)\n if (dist < bestDist) {\n bestDist = dist\n best = { seriesIndex: si, pointIndex: d, distance: dist }\n }\n }\n }\n\n return best\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/parallel/parallel-type.ts"],"names":["prepareNoAxes","line","text","PathBuilder","path"],"mappings":"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","file":"chunk-AAKS22M3.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { path, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Parallel coordinates chart — multi-dimensional data on parallel vertical axes.\n *\n * Data convention:\n * - labels: axis names (dimensions), one per axis\n * - series[i]: one data record. series[i].values[j] = value for dimension j\n *\n * Each series becomes a polyline crossing all axes.\n */\n\nexport const parallelChartType: ChartTypePlugin = {\n type: 'parallel',\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 dimCount = data.labels.length\n if (dimCount < 2 || data.series.length === 0) return nodes\n\n const padding = 24\n const axisSpacing = (area.width - padding * 2) / Math.max(dimCount - 1, 1)\n const axisTop = area.y + padding\n const axisBottom = area.y + area.height - padding\n\n // Compute min/max per dimension\n const mins: number[] = new Array(dimCount).fill(Infinity)\n const maxs: number[] = new Array(dimCount).fill(-Infinity)\n for (const series of data.series) {\n for (let d = 0; d < dimCount; d++) {\n const v = series.values[d] ?? 0\n if (v < mins[d]!) mins[d] = v\n if (v > maxs[d]!) maxs[d] = v\n }\n }\n\n // Ensure min !== max\n for (let d = 0; d < dimCount; d++) {\n if (mins[d] === maxs[d]) {\n mins[d] = mins[d]! - 1\n maxs[d] = maxs[d]! + 1\n }\n }\n\n const axisX = (dim: number) => area.x + padding + dim * axisSpacing\n const valueToY = (dim: number, value: number) => {\n const frac = (value - mins[dim]!) / (maxs[dim]! - mins[dim]!)\n return axisBottom - frac * (axisBottom - axisTop) // invert: higher values = higher on axis\n }\n\n // Draw axes\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n\n // Axis line\n nodes.push(line(x, axisTop, x, axisBottom, {\n class: 'chartts-parallel-axis',\n stroke: theme.axisColor,\n strokeWidth: theme.axisWidth,\n }))\n\n // Axis label at bottom\n nodes.push(text(x, axisBottom + 14, String(data.labels[d]!), {\n class: 'chartts-parallel-label',\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n }))\n\n // Min/max ticks\n nodes.push(text(x - 6, axisTop, String(Math.round(maxs[d]!)), {\n class: 'chartts-parallel-tick',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall * 0.85,\n fontFamily: theme.fontFamily,\n }))\n nodes.push(text(x - 6, axisBottom, String(Math.round(mins[d]!)), {\n class: 'chartts-parallel-tick',\n fill: theme.textMuted,\n textAnchor: 'end',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall * 0.85,\n fontFamily: theme.fontFamily,\n }))\n }\n\n // Draw series lines\n for (let si = 0; si < data.series.length; si++) {\n const series = data.series[si]!\n const color = series.color ?? options.colors[si % options.colors.length]!\n\n const pb = new PathBuilder()\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n const y = valueToY(d, series.values[d] ?? 0)\n if (d === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n\n nodes.push(path(pb.build(), {\n class: 'chartts-parallel-line',\n stroke: color,\n strokeWidth: theme.lineWidth,\n fill: 'none',\n fillOpacity: 0,\n opacity: Math.max(0.3, 1 - data.series.length * 0.03),\n 'data-series': si,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${series.name}: ${series.values.join(', ')}`,\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 dimCount = data.labels.length\n if (dimCount < 2 || data.series.length === 0) return null\n\n const padding = 24\n const axisSpacing = (area.width - padding * 2) / Math.max(dimCount - 1, 1)\n const axisTop = area.y + padding\n const axisBottom = area.y + area.height - padding\n\n const mins: number[] = new Array(dimCount).fill(Infinity)\n const maxs: number[] = new Array(dimCount).fill(-Infinity)\n for (const series of data.series) {\n for (let d = 0; d < dimCount; d++) {\n const v = series.values[d] ?? 0\n if (v < mins[d]!) mins[d] = v\n if (v > maxs[d]!) maxs[d] = v\n }\n }\n for (let d = 0; d < dimCount; d++) {\n if (mins[d] === maxs[d]) { mins[d] = mins[d]! - 1; maxs[d] = maxs[d]! + 1 }\n }\n\n const axisX = (dim: number) => area.x + padding + dim * axisSpacing\n const valueToY = (dim: number, value: number) => {\n const frac = (value - mins[dim]!) / (maxs[dim]! - mins[dim]!)\n return axisBottom - frac * (axisBottom - axisTop)\n }\n\n // Find closest series line\n let best: HitResult | null = null\n let bestDist = 20 // max hit distance\n\n for (let si = 0; si < data.series.length; si++) {\n const series = data.series[si]!\n for (let d = 0; d < dimCount; d++) {\n const x = axisX(d)\n const y = valueToY(d, series.values[d] ?? 0)\n const dist = Math.sqrt((mx - x) ** 2 + (my - y) ** 2)\n if (dist < bestDist) {\n bestDist = dist\n best = { seriesIndex: si, pointIndex: d, distance: dist }\n }\n }\n }\n\n return best\n },\n}\n"]}