@chartts/core 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/LICENSE +21 -0
  2. package/dist/{area-type-B3CtuIIP.d.cts → area-type-BanqpQvK.d.cts} +1 -1
  3. package/dist/{area-type-DmB6fTVf.d.ts → area-type-Bzn6ur_t.d.ts} +1 -1
  4. package/dist/area.cjs +10 -10
  5. package/dist/area.d.cts +4 -4
  6. package/dist/area.d.ts +4 -4
  7. package/dist/area.js +5 -5
  8. package/dist/{bar-type-CkI-kkrC.d.cts → bar-type-BjYOtm2e.d.cts} +1 -1
  9. package/dist/{bar-type-Bne_khsO.d.ts → bar-type-D1gkUeQ2.d.ts} +1 -1
  10. package/dist/bar.cjs +9 -9
  11. package/dist/bar.d.cts +4 -4
  12. package/dist/bar.d.ts +4 -4
  13. package/dist/bar.js +4 -4
  14. package/dist/{baseline-type-B1O4XHT3.d.ts → baseline-type-DnAv8oax.d.ts} +1 -1
  15. package/dist/{baseline-type-BAPrZJ5W.d.cts → baseline-type-DskNy6iR.d.cts} +1 -1
  16. package/dist/baseline.cjs +9 -9
  17. package/dist/baseline.d.cts +4 -4
  18. package/dist/baseline.d.ts +4 -4
  19. package/dist/baseline.js +4 -4
  20. package/dist/{boxplot-type-CEWf7p5X.d.ts → boxplot-type-Bi46NGr5.d.ts} +1 -1
  21. package/dist/{boxplot-type-Da8_smoe.d.cts → boxplot-type-Df2L92GY.d.cts} +1 -1
  22. package/dist/boxplot.cjs +9 -9
  23. package/dist/boxplot.d.cts +4 -4
  24. package/dist/boxplot.d.ts +4 -4
  25. package/dist/boxplot.js +4 -4
  26. package/dist/{bubble-type-Dxb2JCKv.d.cts → bubble-type-D2_dA-tK.d.cts} +1 -1
  27. package/dist/{bubble-type-pru5MgB7.d.ts → bubble-type-XCkdPCxY.d.ts} +1 -1
  28. package/dist/bubble.cjs +9 -9
  29. package/dist/bubble.d.cts +4 -4
  30. package/dist/bubble.d.ts +4 -4
  31. package/dist/bubble.js +4 -4
  32. package/dist/{bullet-type-CPEYkEvt.d.ts → bullet-type-CluDVdqG.d.ts} +1 -1
  33. package/dist/{bullet-type-khCmwFqH.d.cts → bullet-type-yyHFEoBR.d.cts} +1 -1
  34. package/dist/bullet.cjs +10 -10
  35. package/dist/bullet.d.cts +4 -4
  36. package/dist/bullet.d.ts +4 -4
  37. package/dist/bullet.js +5 -5
  38. package/dist/{calendar-type-yJWPY6qT.d.ts → calendar-type-BXl4jP0I.d.ts} +1 -1
  39. package/dist/{calendar-type-Br5mpdea.d.cts → calendar-type-_hW3OLW-.d.cts} +1 -1
  40. package/dist/calendar.cjs +10 -10
  41. package/dist/calendar.d.cts +4 -4
  42. package/dist/calendar.d.ts +4 -4
  43. package/dist/calendar.js +5 -5
  44. package/dist/{candlestick-type-CtLZy_uC.d.ts → candlestick-type-CAfkfMPN.d.ts} +1 -1
  45. package/dist/{candlestick-type-CazXUb77.d.cts → candlestick-type-D-fhJzmV.d.cts} +1 -1
  46. package/dist/candlestick.cjs +9 -9
  47. package/dist/candlestick.d.cts +4 -4
  48. package/dist/candlestick.d.ts +4 -4
  49. package/dist/candlestick.js +4 -4
  50. package/dist/{chord-type-ruvHboZl.d.ts → chord-type-BLjyRxsx.d.ts} +1 -1
  51. package/dist/{chord-type-ChIZaOZd.d.cts → chord-type-Dvuvx5rp.d.cts} +1 -1
  52. package/dist/chord.cjs +10 -10
  53. package/dist/chord.d.cts +4 -4
  54. package/dist/chord.d.ts +4 -4
  55. package/dist/chord.js +5 -5
  56. package/dist/{chunk-S6NGWPXC.js → chunk-24557PYN.js} +4 -4
  57. package/dist/chunk-24557PYN.js.map +1 -0
  58. package/dist/{chunk-K2EZ4SS4.js → chunk-2BUIZDOB.js} +5 -5
  59. package/dist/chunk-2BUIZDOB.js.map +1 -0
  60. package/dist/{chunk-TVPS2NJH.cjs → chunk-2IMUTDTD.cjs} +11 -11
  61. package/dist/chunk-2IMUTDTD.cjs.map +1 -0
  62. package/dist/{chunk-2KMMVJEE.cjs → chunk-2IWLOBSF.cjs} +7 -7
  63. package/dist/chunk-2IWLOBSF.cjs.map +1 -0
  64. package/dist/{chunk-MQBKLKYF.js → chunk-2JYK52HV.js} +4 -4
  65. package/dist/{chunk-MQBKLKYF.js.map → chunk-2JYK52HV.js.map} +1 -1
  66. package/dist/{chunk-KEMT7F5H.cjs → chunk-2QRCHYTZ.cjs} +9 -9
  67. package/dist/chunk-2QRCHYTZ.cjs.map +1 -0
  68. package/dist/{chunk-JT6H7G52.js → chunk-34DQGCPP.js} +5 -5
  69. package/dist/chunk-34DQGCPP.js.map +1 -0
  70. package/dist/{chunk-6WJJ26J5.js → chunk-3JB4JBBK.js} +6 -6
  71. package/dist/chunk-3JB4JBBK.js.map +1 -0
  72. package/dist/{chunk-SLJNRP7O.cjs → chunk-3NHH6C4K.cjs} +14 -24
  73. package/dist/chunk-3NHH6C4K.cjs.map +1 -0
  74. package/dist/{chunk-K7UR7GYC.cjs → chunk-3SVNEKXE.cjs} +13 -13
  75. package/dist/chunk-3SVNEKXE.cjs.map +1 -0
  76. package/dist/{chunk-S64PTNT7.cjs → chunk-4D6PVH2C.cjs} +27 -30
  77. package/dist/chunk-4D6PVH2C.cjs.map +1 -0
  78. package/dist/{chunk-N7NZQVIV.cjs → chunk-4MNVJVK3.cjs} +7 -7
  79. package/dist/chunk-4MNVJVK3.cjs.map +1 -0
  80. package/dist/{chunk-VGGKMTO6.js → chunk-4QRND2V5.js} +4 -4
  81. package/dist/chunk-4QRND2V5.js.map +1 -0
  82. package/dist/{chunk-MZQY2FTP.cjs → chunk-55ZTXQQQ.cjs} +13 -13
  83. package/dist/chunk-55ZTXQQQ.cjs.map +1 -0
  84. package/dist/{chunk-YMJQUKKX.js → chunk-56BN43J4.js} +68 -42
  85. package/dist/chunk-56BN43J4.js.map +1 -0
  86. package/dist/{chunk-QRTYX5KO.js → chunk-5E7FXDBM.js} +5 -5
  87. package/dist/chunk-5E7FXDBM.js.map +1 -0
  88. package/dist/{chunk-RLH3PS3Y.js → chunk-5HZEDCJG.js} +3 -3
  89. package/dist/{chunk-RLH3PS3Y.js.map → chunk-5HZEDCJG.js.map} +1 -1
  90. package/dist/{chunk-7JN6GXML.cjs → chunk-5QT67VYJ.cjs} +13 -11
  91. package/dist/chunk-5QT67VYJ.cjs.map +1 -0
  92. package/dist/{chunk-EYN74SQ5.js → chunk-5QVUBGM7.js} +5 -5
  93. package/dist/chunk-5QVUBGM7.js.map +1 -0
  94. package/dist/{chunk-QCR6L55R.js → chunk-62DBXI4N.js} +8 -5
  95. package/dist/chunk-62DBXI4N.js.map +1 -0
  96. package/dist/{chunk-U7GBOQXX.js → chunk-6QMV75NT.js} +5 -5
  97. package/dist/chunk-6QMV75NT.js.map +1 -0
  98. package/dist/{chunk-IAE4VRB7.cjs → chunk-754Z4OR6.cjs} +35 -10
  99. package/dist/chunk-754Z4OR6.cjs.map +1 -0
  100. package/dist/{chunk-CJEMSKW3.js → chunk-7GLCJPV5.js} +217 -57
  101. package/dist/chunk-7GLCJPV5.js.map +1 -0
  102. package/dist/{chunk-TIHVTKXS.cjs → chunk-7PHOSSLJ.cjs} +11 -11
  103. package/dist/chunk-7PHOSSLJ.cjs.map +1 -0
  104. package/dist/{chunk-EAKXLFOR.cjs → chunk-A5G32G2R.cjs} +11 -11
  105. package/dist/chunk-A5G32G2R.cjs.map +1 -0
  106. package/dist/{chunk-BMTVFAX2.js → chunk-AEQXFDL7.js} +240 -104
  107. package/dist/chunk-AEQXFDL7.js.map +1 -0
  108. package/dist/{chunk-FKAA5FNG.cjs → chunk-ATMSGQCW.cjs} +10 -10
  109. package/dist/chunk-ATMSGQCW.cjs.map +1 -0
  110. package/dist/{chunk-GI7PBJSK.js → chunk-BFBVJ6MU.js} +4 -4
  111. package/dist/chunk-BFBVJ6MU.js.map +1 -0
  112. package/dist/{chunk-IKUA7O73.cjs → chunk-BGGESAAG.cjs} +7 -7
  113. package/dist/{chunk-IKUA7O73.cjs.map → chunk-BGGESAAG.cjs.map} +1 -1
  114. package/dist/{chunk-WS2AL7GY.cjs → chunk-CA42BCSM.cjs} +34 -8
  115. package/dist/chunk-CA42BCSM.cjs.map +1 -0
  116. package/dist/{chunk-CCHMQZIB.js → chunk-CU5ZXVZQ.js} +5 -5
  117. package/dist/chunk-CU5ZXVZQ.js.map +1 -0
  118. package/dist/{chunk-B7IV2PB3.cjs → chunk-CUIPBYMG.cjs} +9 -9
  119. package/dist/chunk-CUIPBYMG.cjs.map +1 -0
  120. package/dist/{chunk-NZWFBAFQ.js → chunk-CWZADOJ6.js} +30 -4
  121. package/dist/chunk-CWZADOJ6.js.map +1 -0
  122. package/dist/{chunk-ID7GYRYL.cjs → chunk-D5QUAWF3.cjs} +11 -11
  123. package/dist/chunk-D5QUAWF3.cjs.map +1 -0
  124. package/dist/{chunk-27E6G2GT.js → chunk-DAAU5H24.js} +4 -4
  125. package/dist/chunk-DAAU5H24.js.map +1 -0
  126. package/dist/{chunk-VK72MICB.cjs → chunk-DT4GG5BF.cjs} +8 -8
  127. package/dist/{chunk-VK72MICB.cjs.map → chunk-DT4GG5BF.cjs.map} +1 -1
  128. package/dist/{chunk-7HOU6XMW.js → chunk-DX77WSIB.js} +25 -28
  129. package/dist/chunk-DX77WSIB.js.map +1 -0
  130. package/dist/{chunk-GQR7IHER.js → chunk-EPUWA3ZW.js} +6 -6
  131. package/dist/chunk-EPUWA3ZW.js.map +1 -0
  132. package/dist/{chunk-EFRBTSUO.cjs → chunk-ESJMEDLY.cjs} +4 -4
  133. package/dist/{chunk-EFRBTSUO.cjs.map → chunk-ESJMEDLY.cjs.map} +1 -1
  134. package/dist/{chunk-KHQRHTTN.js → chunk-EWVXMQRW.js} +40 -30
  135. package/dist/chunk-EWVXMQRW.js.map +1 -0
  136. package/dist/{chunk-2L46SAT7.js → chunk-FGBIJ6PL.js} +30 -5
  137. package/dist/chunk-FGBIJ6PL.js.map +1 -0
  138. package/dist/{chunk-FTKL3UAN.cjs → chunk-FGHSUT6X.cjs} +6 -6
  139. package/dist/{chunk-FTKL3UAN.cjs.map → chunk-FGHSUT6X.cjs.map} +1 -1
  140. package/dist/{chunk-2PRCN5OJ.cjs → chunk-FVLVTY5D.cjs} +6 -6
  141. package/dist/{chunk-2PRCN5OJ.cjs.map → chunk-FVLVTY5D.cjs.map} +1 -1
  142. package/dist/{chunk-ALRCYQQX.cjs → chunk-GBL4R3GH.cjs} +10 -7
  143. package/dist/chunk-GBL4R3GH.cjs.map +1 -0
  144. package/dist/{chunk-SKREYNRK.cjs → chunk-GRXHW5S3.cjs} +45 -35
  145. package/dist/chunk-GRXHW5S3.cjs.map +1 -0
  146. package/dist/{chunk-FSKUEB7P.js → chunk-HCIBBUV5.js} +3 -3
  147. package/dist/{chunk-FSKUEB7P.js.map → chunk-HCIBBUV5.js.map} +1 -1
  148. package/dist/{chunk-MGYBMQAX.cjs → chunk-HCK2VUWD.cjs} +9 -9
  149. package/dist/chunk-HCK2VUWD.cjs.map +1 -0
  150. package/dist/{chunk-NML7F34A.js → chunk-IDZTDJLH.js} +4 -4
  151. package/dist/chunk-IDZTDJLH.js.map +1 -0
  152. package/dist/{chunk-KUFDELQM.cjs → chunk-IF6RQ53Q.cjs} +10 -10
  153. package/dist/chunk-IF6RQ53Q.cjs.map +1 -0
  154. package/dist/{chunk-BMEMMYVF.js → chunk-IOV77VHP.js} +5 -5
  155. package/dist/{chunk-BMEMMYVF.js.map → chunk-IOV77VHP.js.map} +1 -1
  156. package/dist/{chunk-3TLJCGGQ.cjs → chunk-JVVGQLJQ.cjs} +240 -104
  157. package/dist/chunk-JVVGQLJQ.cjs.map +1 -0
  158. package/dist/{chunk-T6LXFMBR.cjs → chunk-JYVRX3BX.cjs} +9 -9
  159. package/dist/{chunk-T6LXFMBR.cjs.map → chunk-JYVRX3BX.cjs.map} +1 -1
  160. package/dist/{chunk-MVJKRPX7.js → chunk-KHG3G2ZX.js} +3 -3
  161. package/dist/{chunk-MVJKRPX7.js.map → chunk-KHG3G2ZX.js.map} +1 -1
  162. package/dist/{chunk-7MXBXWVD.js → chunk-KNMEXOKJ.js} +5 -5
  163. package/dist/chunk-KNMEXOKJ.js.map +1 -0
  164. package/dist/chunk-KWSVJRXX.cjs +128 -0
  165. package/dist/chunk-KWSVJRXX.cjs.map +1 -0
  166. package/dist/{chunk-XKDBNAHH.cjs → chunk-LARNENXE.cjs} +11 -11
  167. package/dist/chunk-LARNENXE.cjs.map +1 -0
  168. package/dist/chunk-LRHMLNPW.js +897 -0
  169. package/dist/chunk-LRHMLNPW.js.map +1 -0
  170. package/dist/{chunk-5LQ26P4J.cjs → chunk-LXYNL7BI.cjs} +11 -11
  171. package/dist/chunk-LXYNL7BI.cjs.map +1 -0
  172. package/dist/{chunk-ARQLGTTV.js → chunk-MEERXUZS.js} +5 -5
  173. package/dist/{chunk-ARQLGTTV.js.map → chunk-MEERXUZS.js.map} +1 -1
  174. package/dist/{chunk-VJQCHBS6.js → chunk-MJY25P44.js} +15 -5
  175. package/dist/chunk-MJY25P44.js.map +1 -0
  176. package/dist/{chunk-3YFDZGHO.cjs → chunk-MSCRIA2U.cjs} +13 -13
  177. package/dist/{chunk-3YFDZGHO.cjs.map → chunk-MSCRIA2U.cjs.map} +1 -1
  178. package/dist/{chunk-DZKYVTV3.js → chunk-N35UAFEU.js} +5 -5
  179. package/dist/{chunk-DZKYVTV3.js.map → chunk-N35UAFEU.js.map} +1 -1
  180. package/dist/{chunk-DAH76GIX.cjs → chunk-NE2W2MF3.cjs} +11 -11
  181. package/dist/chunk-NE2W2MF3.cjs.map +1 -0
  182. package/dist/{chunk-CHERQT4B.js → chunk-NQ7Y6ZKH.js} +4 -4
  183. package/dist/chunk-NQ7Y6ZKH.js.map +1 -0
  184. package/dist/{chunk-AA45U5KV.js → chunk-NRULNA5F.js} +5 -5
  185. package/dist/chunk-NRULNA5F.js.map +1 -0
  186. package/dist/{chunk-PCTMS2PX.cjs → chunk-OEGSDOJ2.cjs} +19 -9
  187. package/dist/chunk-OEGSDOJ2.cjs.map +1 -0
  188. package/dist/{chunk-M6JYSINX.cjs → chunk-OMAW52LY.cjs} +8 -8
  189. package/dist/chunk-OMAW52LY.cjs.map +1 -0
  190. package/dist/{chunk-IUYPKYOU.js → chunk-OMSHGBV3.js} +9 -5
  191. package/dist/chunk-OMSHGBV3.js.map +1 -0
  192. package/dist/{chunk-DZHP4UUE.cjs → chunk-OTXHJHXU.cjs} +16 -12
  193. package/dist/chunk-OTXHJHXU.cjs.map +1 -0
  194. package/dist/{chunk-GUVPVNPD.cjs → chunk-PCAYYCLY.cjs} +11 -11
  195. package/dist/chunk-PCAYYCLY.cjs.map +1 -0
  196. package/dist/{chunk-LCEMO7NI.js → chunk-PKXW45G4.js} +3 -3
  197. package/dist/{chunk-LCEMO7NI.js.map → chunk-PKXW45G4.js.map} +1 -1
  198. package/dist/{chunk-Y4HJCMB4.cjs → chunk-QEPMEEZC.cjs} +7 -7
  199. package/dist/chunk-QEPMEEZC.cjs.map +1 -0
  200. package/dist/{chunk-43WDYYVH.cjs → chunk-QPHUAF3R.cjs} +10 -10
  201. package/dist/chunk-QPHUAF3R.cjs.map +1 -0
  202. package/dist/{chunk-FKVYS4RB.js → chunk-QPHWRD25.js} +15 -8
  203. package/dist/chunk-QPHWRD25.js.map +1 -0
  204. package/dist/chunk-QYI7ZV3B.cjs +899 -0
  205. package/dist/chunk-QYI7ZV3B.cjs.map +1 -0
  206. package/dist/{chunk-3N447NTJ.cjs → chunk-R2W3RJFW.cjs} +14 -14
  207. package/dist/chunk-R2W3RJFW.cjs.map +1 -0
  208. package/dist/{chunk-DZW35WR2.js → chunk-SGZUUUXU.js} +5 -5
  209. package/dist/chunk-SGZUUUXU.js.map +1 -0
  210. package/dist/{chunk-GMLJDDHZ.js → chunk-T7SCCACB.js} +3 -3
  211. package/dist/{chunk-GMLJDDHZ.js.map → chunk-T7SCCACB.js.map} +1 -1
  212. package/dist/{chunk-3NWZJCWL.js → chunk-TC3H6ZED.js} +5 -5
  213. package/dist/chunk-TC3H6ZED.js.map +1 -0
  214. package/dist/{chunk-FIAKZSRR.cjs → chunk-TEZNWW3R.cjs} +19 -12
  215. package/dist/chunk-TEZNWW3R.cjs.map +1 -0
  216. package/dist/{chunk-5M624BRW.js → chunk-THHZMRFU.js} +4 -4
  217. package/dist/chunk-THHZMRFU.js.map +1 -0
  218. package/dist/{chunk-AAKS22M3.cjs → chunk-TLHQ6JCK.cjs} +12 -12
  219. package/dist/{chunk-AAKS22M3.cjs.map → chunk-TLHQ6JCK.cjs.map} +1 -1
  220. package/dist/{chunk-HOPFELRP.cjs → chunk-V5Q6UNUK.cjs} +4 -4
  221. package/dist/{chunk-HOPFELRP.cjs.map → chunk-V5Q6UNUK.cjs.map} +1 -1
  222. package/dist/{chunk-DKVRRL3F.js → chunk-VBMLJUBE.js} +6 -6
  223. package/dist/chunk-VBMLJUBE.js.map +1 -0
  224. package/dist/chunk-VGJD4F4H.js +126 -0
  225. package/dist/chunk-VGJD4F4H.js.map +1 -0
  226. package/dist/{chunk-GL3M7MAM.js → chunk-VJXUBN7J.js} +4 -4
  227. package/dist/chunk-VJXUBN7J.js.map +1 -0
  228. package/dist/{chunk-4ABM7UYD.js → chunk-VUHNBLFA.js} +4 -4
  229. package/dist/chunk-VUHNBLFA.js.map +1 -0
  230. package/dist/{chunk-D2IP3MWJ.cjs → chunk-W476ER4X.cjs} +219 -59
  231. package/dist/chunk-W476ER4X.cjs.map +1 -0
  232. package/dist/{chunk-3QXN7JBV.js → chunk-WZCES5M6.js} +7 -5
  233. package/dist/chunk-WZCES5M6.js.map +1 -0
  234. package/dist/{chunk-FEQKBVCZ.cjs → chunk-Y6CVUI6A.cjs} +14 -14
  235. package/dist/chunk-Y6CVUI6A.cjs.map +1 -0
  236. package/dist/{chunk-FQG4DRJS.cjs → chunk-YCL43UQM.cjs} +71 -45
  237. package/dist/chunk-YCL43UQM.cjs.map +1 -0
  238. package/dist/{chunk-SC5BGA2N.cjs → chunk-YZXRD6K6.cjs} +8 -8
  239. package/dist/chunk-YZXRD6K6.cjs.map +1 -0
  240. package/dist/{chunk-L37ZPX6D.js → chunk-ZFGLBJYC.js} +5 -5
  241. package/dist/chunk-ZFGLBJYC.js.map +1 -0
  242. package/dist/{chunk-COPERSVL.cjs → chunk-ZNKVOTPB.cjs} +15 -15
  243. package/dist/{chunk-COPERSVL.cjs.map → chunk-ZNKVOTPB.cjs.map} +1 -1
  244. package/dist/{chunk-IXFSJBJS.js → chunk-ZOEN3ARN.js} +4 -14
  245. package/dist/chunk-ZOEN3ARN.js.map +1 -0
  246. package/dist/{chunk-QXQSJ3FZ.js → chunk-ZYXRRVR6.js} +5 -5
  247. package/dist/chunk-ZYXRRVR6.js.map +1 -0
  248. package/dist/{combo-type-wodyLq1f.d.cts → combo-type-CCrfKcTc.d.cts} +1 -1
  249. package/dist/{combo-type-BdSohVyy.d.ts → combo-type-Drb7xHSH.d.ts} +1 -1
  250. package/dist/combo.cjs +9 -9
  251. package/dist/combo.d.cts +4 -4
  252. package/dist/combo.d.ts +4 -4
  253. package/dist/combo.js +4 -4
  254. package/dist/{custom-type-B6w1n5Ua.d.cts → custom-type-CUdaJtsU.d.cts} +1 -1
  255. package/dist/{custom-type-XFjuPwCr.d.ts → custom-type-DeCdYBIK.d.ts} +1 -1
  256. package/dist/custom.cjs +10 -10
  257. package/dist/custom.d.cts +4 -4
  258. package/dist/custom.d.ts +4 -4
  259. package/dist/custom.js +5 -5
  260. package/dist/donut.cjs +11 -10
  261. package/dist/donut.cjs.map +1 -1
  262. package/dist/donut.d.cts +4 -4
  263. package/dist/donut.d.ts +4 -4
  264. package/dist/donut.js +6 -5
  265. package/dist/donut.js.map +1 -1
  266. package/dist/{dumbbell-type-w424KzI2.d.cts → dumbbell-type--8jqwUbP.d.cts} +1 -1
  267. package/dist/{dumbbell-type-DPSE0OTg.d.ts → dumbbell-type-FrAcyybz.d.ts} +1 -1
  268. package/dist/dumbbell.cjs +10 -10
  269. package/dist/dumbbell.d.cts +4 -4
  270. package/dist/dumbbell.d.ts +4 -4
  271. package/dist/dumbbell.js +5 -5
  272. package/dist/{engine-CNukbv7k.d.ts → engine-7vdmtmTm.d.cts} +20 -0
  273. package/dist/{engine-CNukbv7k.d.cts → engine-7vdmtmTm.d.ts} +20 -0
  274. package/dist/{factory-dbngWV4d.d.cts → factory-DVmPQ-5P.d.cts} +1 -1
  275. package/dist/{factory-jRzNNxwj.d.ts → factory-DXvw-FCZ.d.ts} +1 -1
  276. package/dist/{funnel-type-CMXGQq4T.d.ts → funnel-type-BhtkYPBR.d.ts} +1 -1
  277. package/dist/{funnel-type-BeVl3ohX.d.cts → funnel-type-BqLhbGkI.d.cts} +1 -1
  278. package/dist/funnel.cjs +10 -10
  279. package/dist/funnel.d.cts +4 -4
  280. package/dist/funnel.d.ts +4 -4
  281. package/dist/funnel.js +5 -5
  282. package/dist/{gauge-type-DmjDdfsY.d.cts → gauge-type-NeAO1otO.d.cts} +1 -1
  283. package/dist/{gauge-type-BpDBwCeD.d.ts → gauge-type-h6z_4lnL.d.ts} +1 -1
  284. package/dist/gauge.cjs +10 -10
  285. package/dist/gauge.d.cts +4 -4
  286. package/dist/gauge.d.ts +4 -4
  287. package/dist/gauge.js +5 -5
  288. package/dist/geo.cjs +12 -12
  289. package/dist/geo.d.cts +4 -4
  290. package/dist/geo.d.ts +4 -4
  291. package/dist/geo.js +5 -5
  292. package/dist/graph-type-Bg04GFeS.d.ts +15 -0
  293. package/dist/graph-type-DF-vww8T.d.cts +15 -0
  294. package/dist/graph.cjs +63 -10
  295. package/dist/graph.cjs.map +1 -1
  296. package/dist/graph.d.cts +65 -5
  297. package/dist/graph.d.ts +65 -5
  298. package/dist/graph.js +58 -6
  299. package/dist/graph.js.map +1 -1
  300. package/dist/{heatmap-type-q6nNhVTr.d.ts → heatmap-type-BAxcLZ1S.d.ts} +1 -1
  301. package/dist/{heatmap-type-D0shkxK7.d.cts → heatmap-type-CkmoO1Vi.d.cts} +1 -1
  302. package/dist/heatmap.cjs +10 -10
  303. package/dist/heatmap.d.cts +4 -4
  304. package/dist/heatmap.d.ts +4 -4
  305. package/dist/heatmap.js +5 -5
  306. package/dist/{histogram-type-BWil-Rb7.d.cts → histogram-type-BMxwKNZD.d.cts} +1 -1
  307. package/dist/{histogram-type-CF593WSp.d.ts → histogram-type-Bz1r_8dr.d.ts} +1 -1
  308. package/dist/histogram.cjs +9 -9
  309. package/dist/histogram.d.cts +4 -4
  310. package/dist/histogram.d.ts +4 -4
  311. package/dist/histogram.js +4 -4
  312. package/dist/{horizontal-bar-type-0mqnyMUR.d.cts → horizontal-bar-type-CPMqObyF.d.cts} +1 -1
  313. package/dist/{horizontal-bar-type-DAlrxY0h.d.ts → horizontal-bar-type-oNPstB_X.d.ts} +1 -1
  314. package/dist/horizontal-bar.cjs +9 -9
  315. package/dist/horizontal-bar.d.cts +4 -4
  316. package/dist/horizontal-bar.d.ts +4 -4
  317. package/dist/horizontal-bar.js +4 -4
  318. package/dist/index.cjs +180 -179
  319. package/dist/index.cjs.map +1 -1
  320. package/dist/index.d.cts +51 -47
  321. package/dist/index.d.ts +51 -47
  322. package/dist/index.js +92 -91
  323. package/dist/index.js.map +1 -1
  324. package/dist/{kagi-type-Y5XUVm3h.d.ts → kagi-type-DLvdmNEs.d.ts} +1 -1
  325. package/dist/{kagi-type-aG-Q1bWk.d.cts → kagi-type-DolumABK.d.cts} +1 -1
  326. package/dist/kagi.cjs +10 -10
  327. package/dist/kagi.d.cts +4 -4
  328. package/dist/kagi.d.ts +4 -4
  329. package/dist/kagi.js +5 -5
  330. package/dist/{line-type-Diw0nXj7.d.ts → line-type-CQ_Sbwde.d.ts} +1 -1
  331. package/dist/{line-type-B8lgTFjb.d.cts → line-type-DU-iLYyU.d.cts} +1 -1
  332. package/dist/line.cjs +9 -9
  333. package/dist/line.d.cts +4 -4
  334. package/dist/line.d.ts +4 -4
  335. package/dist/line.js +4 -4
  336. package/dist/{lines-type-CGrg_mDi.d.cts → lines-type-BZF5YnFG.d.cts} +1 -1
  337. package/dist/{lines-type-V-seVNZ4.d.ts → lines-type-CkKW7kQN.d.ts} +1 -1
  338. package/dist/lines.cjs +10 -10
  339. package/dist/lines.d.cts +4 -4
  340. package/dist/lines.d.ts +4 -4
  341. package/dist/lines.js +5 -5
  342. package/dist/{lollipop-type-CoTzKLSu.d.cts → lollipop-type-BUeY0pGU.d.cts} +1 -1
  343. package/dist/{lollipop-type-Ygc4rRql.d.ts → lollipop-type-DY7z1meu.d.ts} +1 -1
  344. package/dist/lollipop.cjs +9 -9
  345. package/dist/lollipop.d.cts +4 -4
  346. package/dist/lollipop.d.ts +4 -4
  347. package/dist/lollipop.js +4 -4
  348. package/dist/{matrix-type-Crb_NwUJ.d.cts → matrix-type-DZBt3yku.d.cts} +1 -1
  349. package/dist/{matrix-type-Dag1VLCY.d.ts → matrix-type-DkaWmxKb.d.ts} +1 -1
  350. package/dist/matrix.cjs +10 -10
  351. package/dist/matrix.d.cts +4 -4
  352. package/dist/matrix.d.ts +4 -4
  353. package/dist/matrix.js +5 -5
  354. package/dist/{ohlc-type-BQBHvVJO.d.cts → ohlc-type-C6NE-Bb3.d.cts} +1 -1
  355. package/dist/{ohlc-type-CGR-vRGL.d.ts → ohlc-type-eQd0E8lm.d.ts} +1 -1
  356. package/dist/ohlc.cjs +9 -9
  357. package/dist/ohlc.d.cts +4 -4
  358. package/dist/ohlc.d.ts +4 -4
  359. package/dist/ohlc.js +4 -4
  360. package/dist/{parallel-type-D-S-EqeC.d.cts → parallel-type-Cn2B_2-r.d.cts} +1 -1
  361. package/dist/{parallel-type-6t6xyHMg.d.ts → parallel-type-D4B96-R-.d.ts} +1 -1
  362. package/dist/parallel.cjs +10 -10
  363. package/dist/parallel.d.cts +4 -4
  364. package/dist/parallel.d.ts +4 -4
  365. package/dist/parallel.js +5 -5
  366. package/dist/{pictorialbar-type-A-8mTX1N.d.ts → pictorialbar-type-CoClaroO.d.ts} +1 -1
  367. package/dist/{pictorialbar-type-CnJEH9GZ.d.cts → pictorialbar-type-jiWGSHOU.d.cts} +1 -1
  368. package/dist/pictorialbar.cjs +10 -10
  369. package/dist/pictorialbar.d.cts +4 -4
  370. package/dist/pictorialbar.d.ts +4 -4
  371. package/dist/pictorialbar.js +5 -5
  372. package/dist/{pie-type-S7kUKGRS.d.ts → pie-type-0inQl-lu.d.ts} +1 -1
  373. package/dist/{pie-type-duX5xkfQ.d.cts → pie-type-9iaid0XE.d.cts} +1 -1
  374. package/dist/pie.cjs +11 -10
  375. package/dist/pie.cjs.map +1 -1
  376. package/dist/pie.d.cts +4 -4
  377. package/dist/pie.d.ts +4 -4
  378. package/dist/pie.js +6 -5
  379. package/dist/pie.js.map +1 -1
  380. package/dist/{polar-type-CI6-I8Yg.d.cts → polar-type-BraqKI4A.d.ts} +2 -1
  381. package/dist/{polar-type-Dj21GIc9.d.ts → polar-type-DsB9FOAO.d.cts} +2 -1
  382. package/dist/polar.cjs +11 -10
  383. package/dist/polar.cjs.map +1 -1
  384. package/dist/polar.d.cts +4 -4
  385. package/dist/polar.d.ts +4 -4
  386. package/dist/polar.js +6 -5
  387. package/dist/polar.js.map +1 -1
  388. package/dist/{radar-type-CYjZHuKm.d.ts → radar-type-C0JiXn53.d.ts} +1 -1
  389. package/dist/{radar-type-Dgyr13Zd.d.cts → radar-type-DaLjHpgO.d.cts} +1 -1
  390. package/dist/radar.cjs +10 -10
  391. package/dist/radar.d.cts +4 -4
  392. package/dist/radar.d.ts +4 -4
  393. package/dist/radar.js +5 -5
  394. package/dist/{radialbar-type-CLZ8XgST.d.ts → radialbar-type-DMzib3wW.d.ts} +1 -1
  395. package/dist/{radialbar-type-C_SBXoaa.d.cts → radialbar-type-YtZDe2x4.d.cts} +1 -1
  396. package/dist/radialbar.cjs +10 -10
  397. package/dist/radialbar.d.cts +4 -4
  398. package/dist/radialbar.d.ts +4 -4
  399. package/dist/radialbar.js +5 -5
  400. package/dist/{range-type-_LbMV4tl.d.ts → range-type-RlwPvBxs.d.ts} +1 -1
  401. package/dist/{range-type-CkriEnLm.d.cts → range-type-imi4626F.d.cts} +1 -1
  402. package/dist/range.cjs +9 -9
  403. package/dist/range.d.cts +4 -4
  404. package/dist/range.d.ts +4 -4
  405. package/dist/range.js +4 -4
  406. package/dist/{renko-type-ejoXt2ro.d.ts → renko-type-Bv23hPuk.d.ts} +1 -1
  407. package/dist/{renko-type-43OXCtZ3.d.cts → renko-type-DEe4vBKT.d.cts} +1 -1
  408. package/dist/renko.cjs +10 -10
  409. package/dist/renko.d.cts +4 -4
  410. package/dist/renko.d.ts +4 -4
  411. package/dist/renko.js +5 -5
  412. package/dist/{sankey-type-DfkTUnXB.d.cts → sankey-type-B0LCLees.d.cts} +1 -1
  413. package/dist/{sankey-type-CN7PL5MQ.d.ts → sankey-type-Gr2owHtQ.d.ts} +1 -1
  414. package/dist/sankey.cjs +10 -10
  415. package/dist/sankey.d.cts +4 -4
  416. package/dist/sankey.d.ts +4 -4
  417. package/dist/sankey.js +5 -5
  418. package/dist/{scatter-type-CD7X1pZb.d.cts → scatter-type-C0vMtH11.d.cts} +1 -1
  419. package/dist/{scatter-type-D3HdPkZ6.d.ts → scatter-type-DPCIXt3X.d.ts} +1 -1
  420. package/dist/scatter.cjs +9 -9
  421. package/dist/scatter.d.cts +4 -4
  422. package/dist/scatter.d.ts +4 -4
  423. package/dist/scatter.js +4 -4
  424. package/dist/{sparkline-type-qt3yoLs7.d.cts → sparkline-type-BDDpw4DS.d.cts} +1 -1
  425. package/dist/{sparkline-type-COW3izgF.d.ts → sparkline-type-BtSsuoh4.d.ts} +1 -1
  426. package/dist/sparkline.cjs +9 -9
  427. package/dist/sparkline.d.cts +4 -4
  428. package/dist/sparkline.d.ts +4 -4
  429. package/dist/sparkline.js +4 -4
  430. package/dist/{stacked-bar-type-C-5pmb-D.d.ts → stacked-bar-type-5_GXIxLN.d.ts} +1 -1
  431. package/dist/{stacked-bar-type-Ct6HK2A0.d.cts → stacked-bar-type-BF4R1zEK.d.cts} +1 -1
  432. package/dist/stacked-bar.cjs +9 -9
  433. package/dist/stacked-bar.d.cts +4 -4
  434. package/dist/stacked-bar.d.ts +4 -4
  435. package/dist/stacked-bar.js +4 -4
  436. package/dist/{step-type-BSL-CUny.d.cts → step-type-CZJO5PE4.d.cts} +1 -1
  437. package/dist/{step-type-Cleoshov.d.ts → step-type-CoBGeRRR.d.ts} +1 -1
  438. package/dist/step.cjs +10 -10
  439. package/dist/step.d.cts +4 -4
  440. package/dist/step.d.ts +4 -4
  441. package/dist/step.js +5 -5
  442. package/dist/{sunburst-type-ZFw2w6m8.d.ts → sunburst-type-CAcFLV8s.d.ts} +1 -1
  443. package/dist/{sunburst-type-BOztb_Px.d.cts → sunburst-type-DgP1x1nn.d.cts} +1 -1
  444. package/dist/sunburst.cjs +11 -10
  445. package/dist/sunburst.cjs.map +1 -1
  446. package/dist/sunburst.d.cts +4 -4
  447. package/dist/sunburst.d.ts +4 -4
  448. package/dist/sunburst.js +6 -5
  449. package/dist/sunburst.js.map +1 -1
  450. package/dist/{themeriver-type-B5PYChcC.d.ts → themeriver-type-BxLJux1v.d.ts} +1 -1
  451. package/dist/{themeriver-type-BnRSsyal.d.cts → themeriver-type-CGn5zE2F.d.cts} +1 -1
  452. package/dist/themeriver.cjs +10 -10
  453. package/dist/themeriver.d.cts +4 -4
  454. package/dist/themeriver.d.ts +4 -4
  455. package/dist/themeriver.js +5 -5
  456. package/dist/{tree-type-B-bOSg0l.d.ts → tree-type-Dyw9F7oq.d.ts} +1 -1
  457. package/dist/{tree-type-Cz84wHnR.d.cts → tree-type-xf-pj4pG.d.cts} +1 -1
  458. package/dist/tree.cjs +10 -10
  459. package/dist/tree.d.cts +4 -4
  460. package/dist/tree.d.ts +4 -4
  461. package/dist/tree.js +5 -5
  462. package/dist/{treemap-type-DYDj-rWv.d.ts → treemap-type-B4ty-Vge.d.ts} +1 -1
  463. package/dist/{treemap-type-OBCGexiK.d.cts → treemap-type-CeLgbJFQ.d.cts} +1 -1
  464. package/dist/treemap.cjs +10 -10
  465. package/dist/treemap.d.cts +4 -4
  466. package/dist/treemap.d.ts +4 -4
  467. package/dist/treemap.js +5 -5
  468. package/dist/{volume-type-C9wRmKR6.d.ts → volume-type-2ZgLIkPV.d.ts} +1 -1
  469. package/dist/{volume-type-CfERBN5g.d.cts → volume-type-Dvnr4sC9.d.cts} +1 -1
  470. package/dist/volume.cjs +9 -9
  471. package/dist/volume.d.cts +4 -4
  472. package/dist/volume.d.ts +4 -4
  473. package/dist/volume.js +4 -4
  474. package/dist/{waterfall-type-hm5ylGgW.d.cts → waterfall-type-D_6Db7Zy.d.cts} +1 -1
  475. package/dist/{waterfall-type-CpdVtBi_.d.ts → waterfall-type-DsC5vlAP.d.ts} +1 -1
  476. package/dist/waterfall.cjs +9 -9
  477. package/dist/waterfall.d.cts +4 -4
  478. package/dist/waterfall.d.ts +4 -4
  479. package/dist/waterfall.js +4 -4
  480. package/dist/world-regions-C0JUJCGT.d.ts +25 -0
  481. package/dist/world-regions-gUFRPji8.d.cts +25 -0
  482. package/package.json +11 -7
  483. package/dist/chunk-27E6G2GT.js.map +0 -1
  484. package/dist/chunk-2KMMVJEE.cjs.map +0 -1
  485. package/dist/chunk-2L46SAT7.js.map +0 -1
  486. package/dist/chunk-3N447NTJ.cjs.map +0 -1
  487. package/dist/chunk-3NWZJCWL.js.map +0 -1
  488. package/dist/chunk-3QXN7JBV.js.map +0 -1
  489. package/dist/chunk-3TLJCGGQ.cjs.map +0 -1
  490. package/dist/chunk-43WDYYVH.cjs.map +0 -1
  491. package/dist/chunk-4ABM7UYD.js.map +0 -1
  492. package/dist/chunk-5LQ26P4J.cjs.map +0 -1
  493. package/dist/chunk-5M624BRW.js.map +0 -1
  494. package/dist/chunk-6WJJ26J5.js.map +0 -1
  495. package/dist/chunk-7HOU6XMW.js.map +0 -1
  496. package/dist/chunk-7JN6GXML.cjs.map +0 -1
  497. package/dist/chunk-7MXBXWVD.js.map +0 -1
  498. package/dist/chunk-AA45U5KV.js.map +0 -1
  499. package/dist/chunk-ALRCYQQX.cjs.map +0 -1
  500. package/dist/chunk-B7IV2PB3.cjs.map +0 -1
  501. package/dist/chunk-BMTVFAX2.js.map +0 -1
  502. package/dist/chunk-CCHMQZIB.js.map +0 -1
  503. package/dist/chunk-CHERQT4B.js.map +0 -1
  504. package/dist/chunk-CJEMSKW3.js.map +0 -1
  505. package/dist/chunk-D2IP3MWJ.cjs.map +0 -1
  506. package/dist/chunk-DAH76GIX.cjs.map +0 -1
  507. package/dist/chunk-DKVRRL3F.js.map +0 -1
  508. package/dist/chunk-DZHP4UUE.cjs.map +0 -1
  509. package/dist/chunk-DZW35WR2.js.map +0 -1
  510. package/dist/chunk-EAKXLFOR.cjs.map +0 -1
  511. package/dist/chunk-EYN74SQ5.js.map +0 -1
  512. package/dist/chunk-FEQKBVCZ.cjs.map +0 -1
  513. package/dist/chunk-FIAKZSRR.cjs.map +0 -1
  514. package/dist/chunk-FKAA5FNG.cjs.map +0 -1
  515. package/dist/chunk-FKVYS4RB.js.map +0 -1
  516. package/dist/chunk-FQG4DRJS.cjs.map +0 -1
  517. package/dist/chunk-GI7PBJSK.js.map +0 -1
  518. package/dist/chunk-GL3M7MAM.js.map +0 -1
  519. package/dist/chunk-GQR7IHER.js.map +0 -1
  520. package/dist/chunk-GUVPVNPD.cjs.map +0 -1
  521. package/dist/chunk-IAE4VRB7.cjs.map +0 -1
  522. package/dist/chunk-ID7GYRYL.cjs.map +0 -1
  523. package/dist/chunk-IUYPKYOU.js.map +0 -1
  524. package/dist/chunk-IXFSJBJS.js.map +0 -1
  525. package/dist/chunk-JT6H7G52.js.map +0 -1
  526. package/dist/chunk-K2EZ4SS4.js.map +0 -1
  527. package/dist/chunk-K7UR7GYC.cjs.map +0 -1
  528. package/dist/chunk-KEMT7F5H.cjs.map +0 -1
  529. package/dist/chunk-KHQRHTTN.js.map +0 -1
  530. package/dist/chunk-KUFDELQM.cjs.map +0 -1
  531. package/dist/chunk-L37ZPX6D.js.map +0 -1
  532. package/dist/chunk-M6JYSINX.cjs.map +0 -1
  533. package/dist/chunk-MGYBMQAX.cjs.map +0 -1
  534. package/dist/chunk-MZCKMTQE.cjs +0 -210
  535. package/dist/chunk-MZCKMTQE.cjs.map +0 -1
  536. package/dist/chunk-MZQY2FTP.cjs.map +0 -1
  537. package/dist/chunk-N7NZQVIV.cjs.map +0 -1
  538. package/dist/chunk-NML7F34A.js.map +0 -1
  539. package/dist/chunk-NQGZMWNT.js +0 -208
  540. package/dist/chunk-NQGZMWNT.js.map +0 -1
  541. package/dist/chunk-NZWFBAFQ.js.map +0 -1
  542. package/dist/chunk-PCTMS2PX.cjs.map +0 -1
  543. package/dist/chunk-QCR6L55R.js.map +0 -1
  544. package/dist/chunk-QRTYX5KO.js.map +0 -1
  545. package/dist/chunk-QXQSJ3FZ.js.map +0 -1
  546. package/dist/chunk-S64PTNT7.cjs.map +0 -1
  547. package/dist/chunk-S6NGWPXC.js.map +0 -1
  548. package/dist/chunk-SC5BGA2N.cjs.map +0 -1
  549. package/dist/chunk-SKREYNRK.cjs.map +0 -1
  550. package/dist/chunk-SLJNRP7O.cjs.map +0 -1
  551. package/dist/chunk-TIHVTKXS.cjs.map +0 -1
  552. package/dist/chunk-TVPS2NJH.cjs.map +0 -1
  553. package/dist/chunk-U7GBOQXX.js.map +0 -1
  554. package/dist/chunk-VGGKMTO6.js.map +0 -1
  555. package/dist/chunk-VJQCHBS6.js.map +0 -1
  556. package/dist/chunk-WS2AL7GY.cjs.map +0 -1
  557. package/dist/chunk-XKDBNAHH.cjs.map +0 -1
  558. package/dist/chunk-Y4HJCMB4.cjs.map +0 -1
  559. package/dist/chunk-YMJQUKKX.js.map +0 -1
  560. package/dist/graph-type-DkdAB6Vc.d.cts +0 -5
  561. package/dist/graph-type-ul9xwdf5.d.ts +0 -5
  562. package/dist/world-regions-D-TCHPZP.d.cts +0 -38
  563. package/dist/world-regions-DjMvYgFu.d.ts +0 -38
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/graph/parse.ts","../src/charts/graph/text-measure.ts","../src/charts/graph/shapes.ts","../src/charts/graph/edges.ts","../src/charts/graph/layout-force.ts","../src/charts/graph/layout-hierarchy.ts","../src/charts/graph/layout-circular.ts","../src/charts/graph/graph-type.ts"],"names":["group"],"mappings":"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","file":"chunk-LRHMLNPW.js","sourcesContent":["import type { PreparedData, ResolvedOptions } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions, NodeShape } from './types'\n\n/**\n * Parse graph data from three possible input formats into internal\n * GraphNode[] and GraphEdge[] arrays.\n *\n * Auto-detection order:\n * 1. Rich format — options contain `.nodes` or `.edges`\n * 2. Arrow notation — any series name contains `→` or `->`\n * 3. Adjacency matrix — fallback\n */\nexport function parseGraphData(\n data: PreparedData,\n options: ResolvedOptions,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const opts = options as unknown as GraphOptions\n const defaultShape: NodeShape = opts.nodeShape ?? 'rect'\n\n // --- 1. Rich format ---\n if (opts.nodes || opts.edges) {\n return parseRichFormat(data, opts, defaultShape)\n }\n\n // --- 2. Arrow notation ---\n const hasArrow = data.series.some(\n (s) => s.name.includes('→') || s.name.includes('->'),\n )\n if (hasArrow) {\n return parseArrowNotation(data, defaultShape)\n }\n\n // --- 3. Adjacency matrix ---\n return parseAdjacencyMatrix(data, defaultShape)\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction makeNode(\n id: string,\n label: string,\n index: number,\n value: number,\n shape: NodeShape,\n color: string | null,\n pin: { x: number; y: number } | null,\n): GraphNode {\n return {\n id,\n label,\n index,\n value,\n shape,\n color,\n pin,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0,\n width: 0,\n height: 0,\n }\n}\n\nfunction makeEdge(\n source: number,\n target: number,\n weight: number,\n label: string | null,\n style: 'solid' | 'dashed' | 'dotted',\n color: string | null,\n): GraphEdge {\n return { source, target, weight, label, style, color }\n}\n\n// ---------------------------------------------------------------------------\n// Rich format\n// ---------------------------------------------------------------------------\n\nfunction parseRichFormat(\n _data: PreparedData,\n opts: GraphOptions,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const idToIndex = new Map<string, number>()\n\n // Create nodes from opts.nodes\n if (opts.nodes) {\n for (const nodeDef of opts.nodes) {\n const idx = graphNodes.length\n idToIndex.set(nodeDef.id, idx)\n graphNodes.push(\n makeNode(\n nodeDef.id,\n nodeDef.label ?? nodeDef.id,\n idx,\n 1,\n nodeDef.shape ?? defaultShape,\n nodeDef.color ?? null,\n nodeDef.pin ?? null,\n ),\n )\n }\n }\n\n const graphEdges: GraphEdge[] = []\n\n if (opts.edges) {\n for (const edgeDef of opts.edges) {\n // Auto-create source node if not declared\n if (!idToIndex.has(edgeDef.source)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.source, idx)\n graphNodes.push(\n makeNode(edgeDef.source, edgeDef.source, idx, 1, defaultShape, null, null),\n )\n }\n\n // Auto-create target node if not declared\n if (!idToIndex.has(edgeDef.target)) {\n const idx = graphNodes.length\n idToIndex.set(edgeDef.target, idx)\n graphNodes.push(\n makeNode(edgeDef.target, edgeDef.target, idx, 1, defaultShape, null, null),\n )\n }\n\n const srcIdx = idToIndex.get(edgeDef.source)!\n const tgtIdx = idToIndex.get(edgeDef.target)!\n\n graphEdges.push(\n makeEdge(\n srcIdx,\n tgtIdx,\n edgeDef.weight ?? 1,\n edgeDef.label ?? null,\n edgeDef.style ?? 'solid',\n edgeDef.color ?? null,\n ),\n )\n }\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Arrow notation\n// ---------------------------------------------------------------------------\n\nconst ARROW_RE = /\\s*(?:→|->)\\s*/\n\nfunction parseArrowNotation(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n const nameToIndex = new Map<string, number>()\n const graphEdges: GraphEdge[] = []\n\n function getOrCreateNode(name: string): number {\n let idx = nameToIndex.get(name)\n if (idx !== undefined) return idx\n idx = graphNodes.length\n nameToIndex.set(name, idx)\n graphNodes.push(makeNode(name, name, idx, 0, defaultShape, null, null))\n return idx\n }\n\n for (const series of data.series) {\n const parts = series.name.split(ARROW_RE)\n if (parts.length < 2) continue\n\n const srcName = parts[0]!\n const tgtName = parts[1]!\n const weight = series.values[0] ?? 1\n\n const srcIdx = getOrCreateNode(srcName)\n const tgtIdx = getOrCreateNode(tgtName)\n\n // Accumulate value from edge weights\n graphNodes[srcIdx]!.value += weight\n graphNodes[tgtIdx]!.value += weight\n\n graphEdges.push(makeEdge(srcIdx, tgtIdx, weight, null, 'solid', null))\n }\n\n return { graphNodes, graphEdges }\n}\n\n// ---------------------------------------------------------------------------\n// Adjacency matrix\n// ---------------------------------------------------------------------------\n\nfunction parseAdjacencyMatrix(\n data: PreparedData,\n defaultShape: NodeShape,\n): { graphNodes: GraphNode[]; graphEdges: GraphEdge[] } {\n const graphNodes: GraphNode[] = []\n\n // Create nodes from labels\n for (let i = 0; i < data.labels.length; i++) {\n const name = String(data.labels[i])\n const value = Math.abs(data.series[0]?.values[i] ?? 1)\n graphNodes.push(makeNode(name, name, i, value, defaultShape, null, null))\n }\n\n const graphEdges: GraphEdge[] = []\n\n // If series count > 1 and matches label count, treat as adjacency matrix\n if (data.series.length > 1 && data.series.length === data.labels.length) {\n for (let i = 0; i < data.series.length; i++) {\n const row = data.series[i]!\n for (let j = 0; j < row.values.length; j++) {\n const weight = row.values[j] ?? 0\n if (weight > 0) {\n graphEdges.push(makeEdge(i, j, weight, null, 'solid', null))\n }\n }\n }\n }\n\n return { graphNodes, graphEdges }\n}\n","import type { NodeShape } from './types'\n\nconst CHAR_WIDTH_RATIO = 0.6\nconst PADDING_H = 16\nconst PADDING_V = 10\n\n/**\n * Heuristic text measurement (no DOM access).\n * Returns the bounding box needed for the node shape to contain the label.\n */\nexport function measureNodeSize(\n label: string,\n fontSize: number,\n shape: NodeShape,\n): { width: number; height: number } {\n const charWidth = fontSize * CHAR_WIDTH_RATIO\n const textWidth = label.length * charWidth\n const textHeight = fontSize * 1.2\n\n let w = textWidth + PADDING_H * 2\n let h = textHeight + PADDING_V * 2\n\n // Enforce minimums\n w = Math.max(w, 40)\n h = Math.max(h, 28)\n\n switch (shape) {\n case 'circle': {\n // Circle must contain the text bbox\n const d = Math.sqrt(w * w + h * h)\n return { width: d, height: d }\n }\n case 'diamond': {\n // Diamond needs ~1.4x bbox dimensions\n return { width: w * 1.45, height: h * 1.45 }\n }\n case 'hexagon': {\n // Hexagon needs slightly wider to contain text\n return { width: w * 1.25, height: h * 1.15 }\n }\n case 'stadium':\n case 'rect':\n default:\n return { width: w, height: h }\n }\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode } from './types'\nimport { path, rect, circle, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n// ---------------------------------------------------------------------------\n// renderNodeShape — returns [shape, label] RenderNodes for a graph node\n// ---------------------------------------------------------------------------\n\nexport function renderNodeShape(\n node: GraphNode,\n color: string,\n theme: ThemeConfig,\n): RenderNode[] {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n\n const baseAttrs = {\n class: 'chartts-graph-node',\n fill: color,\n fillOpacity: 0.85,\n stroke: color,\n strokeWidth: 1.5,\n 'data-series': node.index,\n 'data-index': 0,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${node.label}: ${node.value}`,\n } as const\n\n let shapeNode: RenderNode\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n shapeNode = circle(cx, cy, r, { ...baseAttrs })\n break\n }\n\n case 'diamond': {\n const pb = new PathBuilder()\n pb.moveTo(cx, cy - h / 2)\n .lineTo(cx + w / 2, cy)\n .lineTo(cx, cy + h / 2)\n .lineTo(cx - w / 2, cy)\n .close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'hexagon': {\n const rx = w / 2\n const ry = h / 2\n const pb = new PathBuilder()\n // flat-top hexagon: vertices at 0°, 60°, 120°, 180°, 240°, 300°\n for (let i = 0; i < 6; i++) {\n const angle = (Math.PI / 180) * (i * 60)\n const px = cx + rx * Math.cos(angle)\n const py = cy + ry * Math.sin(angle)\n if (i === 0) pb.moveTo(px, py)\n else pb.lineTo(px, py)\n }\n pb.close()\n shapeNode = path(pb.build(), { ...baseAttrs })\n break\n }\n\n case 'stadium': {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: h / 2,\n })\n break\n }\n\n // 'rect' is the default\n default: {\n shapeNode = rect(cx - w / 2, cy - h / 2, w, h, {\n ...baseAttrs,\n rx: 8,\n })\n break\n }\n }\n\n const labelNode = text(cx, cy, node.label, {\n class: 'chartts-graph-label',\n fill: '#fff',\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n })\n\n return [shapeNode, labelNode]\n}\n\n// ---------------------------------------------------------------------------\n// clipToNodeBoundary — find the point on a shape boundary at given angle\n// ---------------------------------------------------------------------------\n\n/** Small outward padding so edges don't touch the shape directly. */\nconst PAD = 3\n\nexport function clipToNodeBoundary(\n node: GraphNode,\n angle: number,\n): { x: number; y: number } {\n const cx = node.x\n const cy = node.y\n const w = node.width\n const h = node.height\n const cos = Math.cos(angle)\n const sin = Math.sin(angle)\n\n let bx: number\n let by: number\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(w, h) / 2\n bx = cx + r * cos\n by = cy + r * sin\n break\n }\n\n case 'diamond': {\n // Diamond has 4 edges. The half-extents along x/y are w/2 and h/2.\n // For a diamond with vertices at (0,-h/2), (w/2,0), (0,h/2), (-w/2,0)\n // the boundary along direction (cos,sin) can be found via the Minkowski\n // support function. For a rhombus the implicit equation is\n // |x|/(w/2) + |y|/(h/2) = 1\n // so the ray t*(cos,sin) hits the boundary at\n // t = 1 / (|cos|/(w/2) + |sin|/(h/2))\n const hw = w / 2\n const hh = h / 2\n const t = 1 / (Math.abs(cos) / hw + Math.abs(sin) / hh)\n bx = cx + t * cos\n by = cy + t * sin\n break\n }\n\n case 'hexagon': {\n // Flat-top hexagon with rx = w/2, ry = h/2.\n // Vertices at angles 0°,60°,120°,180°,240°,300°.\n // Find which edge segment the ray intersects and compute intersection.\n const rx = w / 2\n const ry = h / 2\n const pt = hexBoundary(cx, cy, rx, ry, angle, cos, sin)\n bx = pt.x\n by = pt.y\n break\n }\n\n // rect and stadium share the same rectangular bounding box logic\n default: {\n const hw = w / 2\n const hh = h / 2\n const cornerAngle = Math.atan2(hh, hw)\n // Normalize angle into [0, 2π)\n let a = ((angle % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)\n\n if (a < cornerAngle || a >= 2 * Math.PI - cornerAngle) {\n // hits right edge\n const t = hw / Math.abs(cos)\n bx = cx + hw\n by = cy + t * sin\n } else if (a < Math.PI - cornerAngle) {\n // hits bottom edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy + hh\n } else if (a < Math.PI + cornerAngle) {\n // hits left edge\n const t = hw / Math.abs(cos)\n bx = cx - hw\n by = cy + t * sin\n } else {\n // hits top edge\n const t = hh / Math.abs(sin)\n bx = cx + t * cos\n by = cy - hh\n }\n break\n }\n }\n\n // Apply outward padding\n bx += PAD * cos\n by += PAD * sin\n\n return { x: bx, y: by }\n}\n\n// ---------------------------------------------------------------------------\n// Hexagon boundary helper\n// ---------------------------------------------------------------------------\n\nfunction hexBoundary(\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n _angle: number,\n cos: number,\n sin: number,\n): { x: number; y: number } {\n // Compute the 6 vertices of the flat-top hexagon\n const verts: Array<{ x: number; y: number }> = []\n for (let i = 0; i < 6; i++) {\n const a = (Math.PI / 180) * (i * 60)\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) })\n }\n\n // Ray from center: P(t) = (cx + t*cos, cy + t*sin), t > 0\n // Test intersection with each of the 6 edges\n let bestT = Infinity\n let bestPt = { x: cx + rx * cos, y: cy + ry * sin } // fallback\n\n for (let i = 0; i < 6; i++) {\n const v0 = verts[i]!\n const v1 = verts[(i + 1) % 6]!\n\n // Edge: Q(s) = v0 + s*(v1 - v0), s in [0,1]\n // Solve: (cx + t*cos, cy + t*sin) = (v0.x + s*dx, v0.y + s*dy)\n const dx = v1.x - v0.x\n const dy = v1.y - v0.y\n\n const denom = cos * dy - sin * dx\n if (Math.abs(denom) < 1e-12) continue // parallel\n\n const t = ((v0.x - cx) * dy - (v0.y - cy) * dx) / denom\n const s = cos !== 0\n ? ((cx + t * cos) - v0.x) / dx\n : ((cy + t * sin) - v0.y) / dy\n\n if (t > 1e-6 && s >= -1e-6 && s <= 1 + 1e-6 && t < bestT) {\n bestT = t\n bestPt = { x: cx + t * cos, y: cy + t * sin }\n }\n }\n\n return bestPt\n}\n","import type { RenderNode, ThemeConfig } from '../../types'\nimport type { GraphNode, GraphEdge, GraphOptions } from './types'\nimport { path, rect, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { clipToNodeBoundary } from './shapes'\n\n// ---------------------------------------------------------------------------\n// Arrowhead helper\n// ---------------------------------------------------------------------------\n\nfunction renderArrowhead(\n tipX: number,\n tipY: number,\n angle: number,\n size: number,\n color: string,\n): RenderNode {\n const cosA = Math.cos(angle)\n const sinA = Math.sin(angle)\n\n // Base center (back from the tip along the edge direction)\n const baseX = tipX - cosA * size\n const baseY = tipY - sinA * size\n\n // Perpendicular offset\n const perpX = -sinA * size * 0.4\n const perpY = cosA * size * 0.4\n\n const leftX = baseX + perpX\n const leftY = baseY + perpY\n const rightX = baseX - perpX\n const rightY = baseY - perpY\n\n const pb = new PathBuilder()\n pb.moveTo(tipX, tipY)\n .lineTo(leftX, leftY)\n .lineTo(rightX, rightY)\n .close()\n\n return path(pb.build(), {\n fill: color,\n class: 'chartts-graph-arrow',\n })\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport function renderEdges(\n nodes: GraphNode[],\n edges: GraphEdge[],\n options: GraphOptions,\n theme: ThemeConfig,\n): RenderNode[] {\n const result: RenderNode[] = []\n\n // Build a map of (source,target) pair counts so we can alternate curve\n // direction for multi-edges between the same pair.\n const pairIndex = new Map<string, number>()\n\n for (const edge of edges) {\n const src = nodes[edge.source]\n const tgt = nodes[edge.target]\n if (!src || !tgt) continue\n\n // --- 1. Connection points ------------------------------------------\n const angle = Math.atan2(tgt.y - src.y, tgt.x - src.x)\n const start = clipToNodeBoundary(src, angle)\n const end = clipToNodeBoundary(tgt, angle + Math.PI)\n\n // Edge attrs shared between straight / curved\n const edgeColor = edge.color ?? theme.gridColor\n const edgeAttrs = {\n class: 'chartts-graph-edge',\n stroke: edgeColor,\n strokeWidth: Math.max(1, Math.min(3, edge.weight * 0.5)),\n strokeDasharray:\n edge.style === 'dashed'\n ? '8,4'\n : edge.style === 'dotted'\n ? '2,4'\n : undefined,\n opacity: 0.6,\n fill: 'none',\n }\n\n // --- 2. Edge path ---------------------------------------------------\n let arrowAngle = angle // angle at the target end for the arrowhead\n let labelX = (start.x + end.x) / 2\n let labelY = (start.y + end.y) / 2\n\n if (options.edgeStyle === 'straight' || options.edgeStyle === undefined) {\n // Default: straight line\n result.push(line(start.x, start.y, end.x, end.y, edgeAttrs))\n } else {\n // Curved: quadratic bezier\n const pairKey =\n Math.min(edge.source, edge.target) +\n ':' +\n Math.max(edge.source, edge.target)\n const idx = pairIndex.get(pairKey) ?? 0\n pairIndex.set(pairKey, idx + 1)\n\n // Alternate direction: even indices go one way, odd the other\n const sign = idx % 2 === 0 ? 1 : -1\n\n const offset = Math.max(edge.weight * 8, 15)\n\n const mx = (start.x + end.x) / 2\n const my = (start.y + end.y) / 2\n\n // Perpendicular direction to the edge\n const perpAngle = angle + Math.PI / 2\n const cx = mx + Math.cos(perpAngle) * offset * sign\n const cy = my + Math.sin(perpAngle) * offset * sign\n\n const pb = new PathBuilder()\n pb.moveTo(start.x, start.y).quadTo(cx, cy, end.x, end.y)\n\n result.push(path(pb.build(), edgeAttrs))\n\n // For curved edges the arrow should follow the last segment direction\n // (from control point to end point)\n arrowAngle = Math.atan2(end.y - cy, end.x - cx)\n\n // Label at the midpoint of the quadratic bezier: Q(0.5) = 0.25*P0 + 0.5*CP + 0.25*P1\n labelX = 0.25 * start.x + 0.5 * cx + 0.25 * end.x\n labelY = 0.25 * start.y + 0.5 * cy + 0.25 * end.y\n }\n\n // --- 3. Arrowhead ---------------------------------------------------\n if (options.arrows !== false) {\n const arrowSize = 8\n result.push(renderArrowhead(end.x, end.y, arrowAngle, arrowSize, edgeColor))\n }\n\n // --- 4. Edge label --------------------------------------------------\n if (edge.label != null) {\n const lx = labelX\n const ly = labelY\n\n // Estimate label dimensions for background rect\n const charWidth = (theme.fontSizeSmall - 1) * 0.6\n const pw = edge.label.length * charWidth + 8\n const ph = (theme.fontSizeSmall - 1) + 6\n\n const bgFill =\n theme.background === 'transparent' ? '#fff' : theme.background\n\n result.push(\n rect(lx - pw / 2, ly - ph / 2, pw, ph, {\n fill: bgFill,\n rx: 3,\n }),\n )\n\n result.push(\n text(lx, ly, edge.label, {\n fill: theme.textMuted,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: theme.fontSizeSmall - 1,\n fontFamily: theme.fontFamily,\n }),\n )\n }\n }\n\n return result\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Improved force-directed layout (Fruchterman-Reingold style).\n *\n * Features over the old layout:\n * - Node-size-aware repulsion (prevents shape overlap)\n * - Pin support (pinned nodes keep position, still repel)\n * - Velocity damping (0.8x per iteration)\n * - Layout caching for warm-start during drag\n */\n\nexport interface ForceLayoutOpts {\n iterations: number\n area: { x: number; y: number; width: number; height: number }\n}\n\n/** Module-scoped layout cache for warm-start (drag reflows). */\nconst layoutCache = new Map<string, Array<{ x: number; y: number }>>()\n\n/** Build a cache key from node IDs + edge connectivity. */\nfunction cacheKey(nodes: GraphNode[], edges: GraphEdge[]): string {\n const nk = nodes.map(n => n.id).join(',')\n const ek = edges.map(e => `${e.source}-${e.target}`).join(',')\n return nk + '|' + ek\n}\n\nexport function forceLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: ForceLayoutOpts,\n): void {\n const { area, iterations } = opts\n const n = nodes.length\n if (n === 0) return\n\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Try warm-start from cache\n const key = cacheKey(nodes, edges)\n const cached = layoutCache.get(key)\n\n if (cached && cached.length === n) {\n for (let i = 0; i < n; i++) {\n const node = nodes[i]!\n if (!node.pin) {\n node.x = cached[i]!.x\n node.y = cached[i]!.y\n }\n }\n } else {\n // Initialize positions: pinned nodes get their pin, others in a circle\n for (let i = 0; i < n; i++) {\n const node = nodes[i]!\n if (node.pin) {\n // Pin coordinates are 0-1 normalized — map to area\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n } else {\n const angle = (2 * Math.PI * i) / n\n const r = Math.min(area.width, area.height) * 0.3\n node.x = cx + r * Math.cos(angle)\n node.y = cy + r * Math.sin(angle)\n }\n node.vx = 0\n node.vy = 0\n }\n }\n\n const k = Math.sqrt((area.width * area.height) / Math.max(n, 1))\n const repulsion = k * k\n\n for (let iter = 0; iter < iterations; iter++) {\n const temp = 0.1 * (1 - iter / iterations) * Math.min(area.width, area.height) * 0.5\n\n // Reset velocities\n for (const node of nodes) {\n node.vx = 0\n node.vy = 0\n }\n\n // Repulsion between all pairs (node-size-aware)\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const ni = nodes[i]!\n const nj = nodes[j]!\n const dx = ni.x - nj.x\n const dy = ni.y - nj.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n\n // Extra repulsion for overlapping shapes\n const minDist = (Math.max(ni.width, ni.height) + Math.max(nj.width, nj.height)) / 2\n const effectiveDist = Math.max(dist - minDist * 0.6, 1)\n\n const force = repulsion / (effectiveDist * effectiveDist)\n const fx = (dx / dist) * force\n const fy = (dy / dist) * force\n\n ni.vx += fx\n ni.vy += fy\n nj.vx -= fx\n nj.vy -= fy\n }\n }\n\n // Attraction along edges\n for (const edge of edges) {\n const src = nodes[edge.source]!\n const tgt = nodes[edge.target]!\n const dx = tgt.x - src.x\n const dy = tgt.y - src.y\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1)\n const force = (dist * dist) / k\n const fx = (dx / dist) * force * 0.1\n const fy = (dy / dist) * force * 0.1\n\n src.vx += fx\n src.vy += fy\n tgt.vx -= fx\n tgt.vy -= fy\n }\n\n // Gravity toward center\n for (const node of nodes) {\n const dx = cx - node.x\n const dy = cy - node.y\n node.vx += dx * 0.01\n node.vy += dy * 0.01\n }\n\n // Apply velocities with temperature damping\n for (const node of nodes) {\n // Pinned nodes don't move\n if (node.pin) continue\n\n // Damping\n node.vx *= 0.8\n node.vy *= 0.8\n\n const speed = Math.sqrt(node.vx * node.vx + node.vy * node.vy)\n if (speed > 0) {\n const capped = Math.min(speed, temp)\n node.x += (node.vx / speed) * capped\n node.y += (node.vy / speed) * capped\n }\n\n // Constrain to area with margin for node size\n const mx = Math.max(20, node.width / 2 + 5)\n const my = Math.max(20, node.height / 2 + 5)\n node.x = Math.max(area.x + mx, Math.min(area.x + area.width - mx, node.x))\n node.y = Math.max(area.y + my, Math.min(area.y + area.height - my, node.y))\n }\n }\n\n // Store in cache for warm-start\n layoutCache.set(key, nodes.map(nd => ({ x: nd.x, y: nd.y })))\n}\n\n/** Clear the layout cache (call when data changes). */\nexport function clearForceCache(): void {\n layoutCache.clear()\n}\n","import type { GraphNode, GraphEdge, LayoutDirection } from './types'\n\n/**\n * Hierarchical layout — simplified Sugiyama algorithm.\n *\n * Steps:\n * 1. Layer assignment (longest-path from roots)\n * 2. Ordering (barycenter heuristic, 3 passes)\n * 3. Coordinate assignment (even distribution per layer)\n * 4. Direction mapping (TB / BT / LR / RL)\n *\n * Cycles are handled by detecting back-edges and temporarily reversing them\n * during layout, then restoring original direction.\n */\n\nexport interface HierarchyLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n direction: LayoutDirection\n}\n\nexport function hierarchyLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: HierarchyLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area, direction } = opts\n\n // Build adjacency lists\n const outgoing = new Array<number[]>(n)\n const incoming = new Array<number[]>(n)\n for (let i = 0; i < n; i++) {\n outgoing[i] = []\n incoming[i] = []\n }\n\n // Detect and break cycles via DFS\n const edgesCopy = edges.map(e => ({ ...e }))\n breakCycles(edgesCopy, n, outgoing, incoming)\n\n // 1. Layer assignment (longest path from roots)\n const layers = assignLayers(n, outgoing, incoming)\n\n // 2. Ordering within layers (barycenter heuristic)\n const layerGroups = groupByLayer(layers, n)\n orderLayers(layerGroups, outgoing, incoming, 3)\n\n // 3. Coordinate assignment\n const isHorizontal = direction === 'LR' || direction === 'RL'\n const maxLayer = Math.max(...layers, 0)\n\n const availW = area.width\n const availH = area.height\n\n // Layer spacing\n const layerCount = maxLayer + 1\n const layerGap = isHorizontal\n ? availW / (layerCount + 1)\n : availH / (layerCount + 1)\n\n for (let layer = 0; layer <= maxLayer; layer++) {\n const group = layerGroups[layer] ?? []\n if (group.length === 0) continue\n\n const nodeGap = isHorizontal\n ? availH / (group.length + 1)\n : availW / (group.length + 1)\n\n for (let pos = 0; pos < group.length; pos++) {\n const node = nodes[group[pos]!]!\n\n // Pinned nodes override layout\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n continue\n }\n\n let layerCoord = area.x + layerGap * (layer + 1)\n let posCoord = area.y + nodeGap * (pos + 1)\n\n if (isHorizontal) {\n // layerCoord = x, posCoord = y\n // already correct\n } else {\n // layerCoord = y, posCoord = x\n const tmp = layerCoord\n layerCoord = posCoord\n posCoord = tmp\n }\n\n // Direction flipping\n switch (direction) {\n case 'TB':\n node.x = layerCoord\n node.y = posCoord\n break\n case 'BT':\n node.x = layerCoord\n node.y = area.y + area.height - (posCoord - area.y)\n break\n case 'LR':\n node.x = layerCoord\n node.y = posCoord\n break\n case 'RL':\n node.x = area.x + area.width - (layerCoord - area.x)\n node.y = posCoord\n break\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cycle breaking via DFS\n// ---------------------------------------------------------------------------\n\nfunction breakCycles(\n edges: GraphEdge[],\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): void {\n // Build adjacency from edges\n for (const e of edges) {\n outgoing[e.source]!.push(e.target)\n incoming[e.target]!.push(e.source)\n }\n\n // DFS-based cycle detection — reverse back-edges\n const WHITE = 0, GRAY = 1, BLACK = 2\n const color = new Array<number>(n).fill(WHITE)\n\n function dfs(u: number): void {\n color[u] = GRAY\n const out = outgoing[u]!\n for (let i = 0; i < out.length; i++) {\n const v = out[i]!\n if (color[v] === GRAY) {\n // Back-edge: reverse it in the edges list\n // Find the edge u → v and reverse it\n for (const e of edges) {\n if (e.source === u && e.target === v) {\n e.source = v\n e.target = u\n break\n }\n }\n // Update adjacency\n out.splice(i, 1)\n i--\n outgoing[v]!.push(u)\n incoming[u]!.push(v)\n const idx = incoming[v]!.indexOf(u)\n if (idx >= 0) incoming[v]!.splice(idx, 1)\n } else if (color[v] === WHITE) {\n dfs(v)\n }\n }\n color[u] = BLACK\n }\n\n for (let i = 0; i < n; i++) {\n if (color[i] === WHITE) dfs(i)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Layer assignment (longest path from roots)\n// ---------------------------------------------------------------------------\n\nfunction assignLayers(\n n: number,\n outgoing: number[][],\n incoming: number[][],\n): number[] {\n const layers = new Array<number>(n).fill(-1)\n\n // Roots = nodes with no incoming edges\n const roots: number[] = []\n for (let i = 0; i < n; i++) {\n if (incoming[i]!.length === 0) roots.push(i)\n }\n\n // If no roots (all cycles broken), pick node 0\n if (roots.length === 0 && n > 0) roots.push(0)\n\n // BFS from roots\n const queue: number[] = []\n for (const r of roots) {\n layers[r] = 0\n queue.push(r)\n }\n\n let qi = 0\n while (qi < queue.length) {\n const u = queue[qi++]!\n for (const v of outgoing[u]!) {\n const newLayer = layers[u]! + 1\n if (layers[v]! < newLayer) {\n layers[v] = newLayer\n queue.push(v)\n }\n }\n }\n\n // Any unassigned nodes get layer 0\n for (let i = 0; i < n; i++) {\n if (layers[i]! < 0) layers[i] = 0\n }\n\n return layers\n}\n\n// ---------------------------------------------------------------------------\n// Group nodes by layer\n// ---------------------------------------------------------------------------\n\nfunction groupByLayer(layers: number[], n: number): number[][] {\n const maxLayer = Math.max(...layers, 0)\n const groups: number[][] = new Array(maxLayer + 1)\n for (let i = 0; i <= maxLayer; i++) groups[i] = []\n\n for (let i = 0; i < n; i++) {\n groups[layers[i]!]!.push(i)\n }\n return groups\n}\n\n// ---------------------------------------------------------------------------\n// Barycenter ordering\n// ---------------------------------------------------------------------------\n\nfunction orderLayers(\n layerGroups: number[][],\n outgoing: number[][],\n incoming: number[][],\n passes: number,\n): void {\n for (let pass = 0; pass < passes; pass++) {\n // Forward pass: order each layer based on positions of predecessors\n for (let l = 1; l < layerGroups.length; l++) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const prevLayer = layerGroups[l - 1]!\n for (let i = 0; i < prevLayer.length; i++) posMap.set(prevLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, incoming, posMap)\n const bb = barycenter(b, incoming, posMap)\n return ba - bb\n })\n }\n\n // Backward pass: order each layer based on positions of successors\n for (let l = layerGroups.length - 2; l >= 0; l--) {\n const layer = layerGroups[l]!\n const posMap = new Map<number, number>()\n const nextLayer = layerGroups[l + 1]!\n for (let i = 0; i < nextLayer.length; i++) posMap.set(nextLayer[i]!, i)\n\n layer.sort((a, b) => {\n const ba = barycenter(a, outgoing, posMap)\n const bb = barycenter(b, outgoing, posMap)\n return ba - bb\n })\n }\n }\n}\n\nfunction barycenter(\n nodeIdx: number,\n adj: number[][],\n posMap: Map<number, number>,\n): number {\n const neighbors = adj[nodeIdx]!\n if (neighbors.length === 0) return 0\n\n let sum = 0\n let count = 0\n for (const nb of neighbors) {\n const pos = posMap.get(nb)\n if (pos !== undefined) {\n sum += pos\n count++\n }\n }\n return count > 0 ? sum / count : 0\n}\n","import type { GraphNode, GraphEdge } from './types'\n\n/**\n * Circular layout — nodes arranged equally around a circle.\n *\n * Features:\n * - Connectivity-based ordering to reduce edge crossings\n * - Pin support: pinned nodes keep their position, others fill gaps\n */\n\nexport interface CircularLayoutOpts {\n area: { x: number; y: number; width: number; height: number }\n}\n\nexport function circularLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: CircularLayoutOpts,\n): void {\n const n = nodes.length\n if (n === 0) return\n\n const { area } = opts\n const cx = area.x + area.width / 2\n const cy = area.y + area.height / 2\n\n // Leave room for node shapes\n const maxNodeSize = Math.max(\n ...nodes.map(nd => Math.max(nd.width, nd.height)),\n 40,\n )\n const radius = Math.min(area.width, area.height) / 2 - maxNodeSize / 2 - 10\n\n // Order nodes to reduce crossings (BFS from most-connected node)\n const order = connectivityOrder(nodes, edges)\n\n // Count unpinned nodes to distribute them evenly\n const unpinned: number[] = []\n for (const idx of order) {\n if (!nodes[idx]!.pin) unpinned.push(idx)\n }\n\n const angleStep = (2 * Math.PI) / Math.max(unpinned.length, 1)\n const startAngle = -Math.PI / 2 // 12 o'clock\n\n for (let i = 0; i < unpinned.length; i++) {\n const node = nodes[unpinned[i]!]!\n const angle = startAngle + angleStep * i\n node.x = cx + radius * Math.cos(angle)\n node.y = cy + radius * Math.sin(angle)\n }\n\n // Apply pinned positions\n for (const node of nodes) {\n if (node.pin) {\n node.x = area.x + node.pin.x * area.width\n node.y = area.y + node.pin.y * area.height\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Connectivity-based ordering (BFS from most-connected node)\n// ---------------------------------------------------------------------------\n\nfunction connectivityOrder(nodes: GraphNode[], edges: GraphEdge[]): number[] {\n const n = nodes.length\n if (n === 0) return []\n\n // Build adjacency list\n const adj = new Array<number[]>(n)\n for (let i = 0; i < n; i++) adj[i] = []\n\n for (const e of edges) {\n adj[e.source]!.push(e.target)\n adj[e.target]!.push(e.source)\n }\n\n // Find most-connected node as BFS start\n let startNode = 0\n let maxDeg = 0\n for (let i = 0; i < n; i++) {\n if (adj[i]!.length > maxDeg) {\n maxDeg = adj[i]!.length\n startNode = i\n }\n }\n\n // BFS\n const visited = new Set<number>()\n const order: number[] = []\n const queue: number[] = [startNode]\n visited.add(startNode)\n\n while (queue.length > 0) {\n const u = queue.shift()!\n order.push(u)\n\n // Sort neighbors by degree (descending) for better ordering\n const neighbors = adj[u]!.filter(v => !visited.has(v))\n neighbors.sort((a, b) => adj[b]!.length - adj[a]!.length)\n\n for (const v of neighbors) {\n if (!visited.has(v)) {\n visited.add(v)\n queue.push(v)\n }\n }\n }\n\n // Add any disconnected nodes\n for (let i = 0; i < n; i++) {\n if (!visited.has(i)) order.push(i)\n }\n\n return order\n}\n","import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group } from '../../render/tree'\nimport type { GraphNode, GraphEdge, GraphOptions, GraphLayout } from './types'\nimport { parseGraphData } from './parse'\nimport { measureNodeSize } from './text-measure'\nimport { renderNodeShape } from './shapes'\nimport { renderEdges } from './edges'\nimport { forceLayout } from './layout-force'\nimport { hierarchyLayout } from './layout-hierarchy'\nimport { circularLayout } from './layout-circular'\n\n/**\n * Graph / Network chart — rich node-link diagram.\n *\n * Supports:\n * - 5 node shapes (rect, circle, diamond, hexagon, stadium)\n * - 3 layouts (force, hierarchical, circular)\n * - Edge arrows, labels, and dash styles\n * - Pin support (data-driven + interactive via enableGraphDrag)\n * - 3 data formats: rich, arrow-notation, adjacency matrix\n */\nexport const graphChartType: ChartTypePlugin = {\n type: 'graph',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const opts = options as unknown as GraphOptions\n // Rich format: data lives in options.nodes/edges, not series\n if ((opts.nodes || opts.edges) && (!data.series.length || data.series.every(s => s.values.length === 0))) {\n return {\n series: [],\n labels: [],\n bounds: { xMin: 0, xMax: 1, yMin: 0, yMax: 1 },\n }\n }\n return prepareNoAxes(data, options)\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n const result: RenderNode[] = []\n\n // 1. Parse data into nodes + edges\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return result\n\n // 2. Measure text for each node to compute width/height\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n\n // 3. Layout\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n // 4. Render edges first (behind nodes)\n const edgeNodes = renderEdges(graphNodes, graphEdges, graphOpts, theme)\n if (edgeNodes.length > 0) {\n result.push(group(edgeNodes, { class: 'chartts-graph-edges' }))\n }\n\n // 5. Render node shapes\n for (const node of graphNodes) {\n const color = node.color ?? options.colors[node.index % options.colors.length]!\n const shapeNodes = renderNodeShape(node, color, theme)\n\n result.push(group(shapeNodes, {\n class: `chartts-series chartts-series-${node.index}`,\n 'data-series-name': node.label,\n }))\n }\n\n return result\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, area, theme, options } = ctx\n const graphOpts = options as unknown as GraphOptions\n\n const { graphNodes, graphEdges } = parseGraphData(data, options)\n if (graphNodes.length === 0) return null\n\n // Measure + layout (same as render)\n for (const node of graphNodes) {\n const size = measureNodeSize(node.label, theme.fontSizeSmall, node.shape)\n node.width = size.width\n node.height = size.height\n }\n runLayout(graphNodes, graphEdges, graphOpts, area)\n\n // Shape-aware hit testing\n let best: HitResult | null = null\n let bestDist = Infinity\n\n for (const node of graphNodes) {\n const dist = shapeDistance(node, mx, my)\n if (dist < bestDist && dist < 8) {\n bestDist = dist\n best = { seriesIndex: node.index, pointIndex: 0, distance: dist, x: node.x, y: node.y }\n }\n }\n\n return best\n },\n}\n\n// ---------------------------------------------------------------------------\n// Layout dispatcher\n// ---------------------------------------------------------------------------\n\nfunction runLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n opts: GraphOptions,\n area: { x: number; y: number; width: number; height: number },\n): void {\n const layout: GraphLayout = opts.layout ?? 'force'\n\n switch (layout) {\n case 'hierarchical':\n hierarchyLayout(nodes, edges, {\n area,\n direction: opts.direction ?? 'TB',\n })\n break\n\n case 'circular':\n circularLayout(nodes, edges, { area })\n break\n\n case 'force':\n default:\n forceLayout(nodes, edges, {\n area,\n iterations: opts.iterations ?? 120,\n })\n break\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shape-aware distance (0 = inside shape, >0 = outside)\n// ---------------------------------------------------------------------------\n\nfunction shapeDistance(node: GraphNode, mx: number, my: number): number {\n const dx = mx - node.x\n const dy = my - node.y\n const absDx = Math.abs(dx)\n const absDy = Math.abs(dy)\n\n switch (node.shape) {\n case 'circle': {\n const r = Math.max(node.width, node.height) / 2\n const dist = Math.sqrt(dx * dx + dy * dy)\n return Math.max(0, dist - r)\n }\n\n case 'diamond': {\n const hw = node.width / 2\n const hh = node.height / 2\n // Diamond implicit: |x|/hw + |y|/hh <= 1\n const d = absDx / hw + absDy / hh\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (d - 1)\n }\n\n case 'hexagon': {\n const rx = node.width / 2\n const ry = node.height / 2\n // Simplified: check if inside bounding ellipse\n const d = (dx * dx) / (rx * rx) + (dy * dy) / (ry * ry)\n return d <= 1 ? 0 : Math.sqrt(dx * dx + dy * dy) * (Math.sqrt(d) - 1)\n }\n\n // rect, stadium\n default: {\n const hw = node.width / 2\n const hh = node.height / 2\n const ox = Math.max(0, absDx - hw)\n const oy = Math.max(0, absDy - hh)\n return Math.sqrt(ox * ox + oy * oy)\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkNHGKZMD7_cjs = require('./chunk-NHGKZMD7.cjs');
4
- var chunk3TLJCGGQ_cjs = require('./chunk-3TLJCGGQ.cjs');
4
+ var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
5
5
 
6
6
  // src/charts/boxplot/boxplot-type.ts
7
7
  var boxplotChartType = {
@@ -18,7 +18,7 @@ var boxplotChartType = {
18
18
  while (padded.length < valLen) padded.push("");
19
19
  syntheticData.labels = padded;
20
20
  }
21
- const prepared = chunk3TLJCGGQ_cjs.prepareData(syntheticData, options);
21
+ const prepared = chunkJVVGQLJQ_cjs.prepareData(syntheticData, options);
22
22
  if (data.labels && data.labels.length < valLen) {
23
23
  prepared.labels = [...data.labels];
24
24
  }
@@ -54,24 +54,24 @@ var boxplotChartType = {
54
54
  const color = options.colors[i % options.colors.length];
55
55
  const seriesIdx = Math.min(i, data.series.length - 1);
56
56
  const boxNodes = [];
57
- boxNodes.push(chunk3TLJCGGQ_cjs.line(cx, yMin, cx, yMax, {
57
+ boxNodes.push(chunkJVVGQLJQ_cjs.line(cx, yMin, cx, yMax, {
58
58
  class: "chartts-boxplot-whisker",
59
59
  stroke: color,
60
60
  strokeWidth: 1.5
61
61
  }));
62
- boxNodes.push(chunk3TLJCGGQ_cjs.line(cx - boxWidth * 0.3, yMin, cx + boxWidth * 0.3, yMin, {
62
+ boxNodes.push(chunkJVVGQLJQ_cjs.line(cx - boxWidth * 0.3, yMin, cx + boxWidth * 0.3, yMin, {
63
63
  class: "chartts-boxplot-cap",
64
64
  stroke: color,
65
65
  strokeWidth: 1.5
66
66
  }));
67
- boxNodes.push(chunk3TLJCGGQ_cjs.line(cx - boxWidth * 0.3, yMax, cx + boxWidth * 0.3, yMax, {
67
+ boxNodes.push(chunkJVVGQLJQ_cjs.line(cx - boxWidth * 0.3, yMax, cx + boxWidth * 0.3, yMax, {
68
68
  class: "chartts-boxplot-cap",
69
69
  stroke: color,
70
70
  strokeWidth: 1.5
71
71
  }));
72
72
  const boxTop = Math.min(yQ1, yQ3);
73
73
  const boxH = Math.abs(yQ3 - yQ1);
74
- boxNodes.push(chunk3TLJCGGQ_cjs.rect(boxX, boxTop, boxWidth, boxH, {
74
+ boxNodes.push(chunkJVVGQLJQ_cjs.rect(boxX, boxTop, boxWidth, boxH, {
75
75
  class: "chartts-boxplot-box",
76
76
  fill: color,
77
77
  fillOpacity: 0.25,
@@ -85,12 +85,12 @@ var boxplotChartType = {
85
85
  role: "img",
86
86
  ariaLabel: `${data.labels[i]}: min=${vMin}, Q1=${q1}, median=${median}, Q3=${q3}, max=${vMax}`
87
87
  }));
88
- boxNodes.push(chunk3TLJCGGQ_cjs.line(boxX, yMed, boxX + boxWidth, yMed, {
88
+ boxNodes.push(chunkJVVGQLJQ_cjs.line(boxX, yMed, boxX + boxWidth, yMed, {
89
89
  class: "chartts-boxplot-median",
90
90
  stroke: color,
91
91
  strokeWidth: 2.5
92
92
  }));
93
- nodes.push(chunk3TLJCGGQ_cjs.group(boxNodes, {
93
+ nodes.push(chunkJVVGQLJQ_cjs.group(boxNodes, {
94
94
  class: `chartts-series chartts-series-${i}`,
95
95
  "data-series-name": String(data.labels[i])
96
96
  }));
@@ -120,7 +120,7 @@ var boxplotChartType = {
120
120
  const bottom = Math.max(yMin, yMax);
121
121
  if (mx >= cx - boxWidth / 2 - 4 && mx <= cx + boxWidth / 2 + 4 && my >= top - 4 && my <= bottom + 4) {
122
122
  const seriesIdx = Math.min(i, data.series.length - 1);
123
- return { seriesIndex: seriesIdx, pointIndex: i, distance: 0 };
123
+ return { seriesIndex: seriesIdx, pointIndex: i, distance: 0, x: cx, y: yScale.map(vals[2]) };
124
124
  }
125
125
  }
126
126
  return null;
@@ -128,5 +128,5 @@ var boxplotChartType = {
128
128
  };
129
129
 
130
130
  exports.boxplotChartType = boxplotChartType;
131
- //# sourceMappingURL=chunk-5LQ26P4J.cjs.map
132
- //# sourceMappingURL=chunk-5LQ26P4J.cjs.map
131
+ //# sourceMappingURL=chunk-LXYNL7BI.cjs.map
132
+ //# sourceMappingURL=chunk-LXYNL7BI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/boxplot/boxplot-type.ts"],"names":["prepareData","getBandwidth","line","rect","group"],"mappings":"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","file":"chunk-LXYNL7BI.cjs","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect, line } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\n/**\n * Boxplot / Whisker chart — displays statistical distribution for each category.\n *\n * Data format: each series has exactly 5 values per label:\n * [min, Q1, median, Q3, max]\n *\n * For simplicity, if there are N labels, series[0] has N*5 values:\n * [min1, q1_1, med1, q3_1, max1, min2, q1_2, med2, q3_2, max2, ...]\n *\n * Or use multiple series where each series has 5 values for its category.\n */\nexport interface BoxplotOptions {\n /** Width ratio of boxes. Default 0.6. */\n boxWidth?: number\n}\n\nexport const boxplotChartType: ChartTypePlugin = {\n type: 'boxplot',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n // Boxplot: single series with N*5 values. Create synthetic labels if needed.\n // We need to trick the validator: expand labels to match values length.\n const labelCount = data.labels?.length ?? 0\n const valLen = data.series[0]?.values.length ?? 0\n const syntheticData = { ...data }\n if (labelCount > 0 && valLen > labelCount) {\n // Pad labels to match values length (validator needs them equal)\n const padded: string[] = (data.labels ?? []).map(String)\n while (padded.length < valLen) padded.push('')\n syntheticData.labels = padded\n }\n\n const prepared = prepareData(syntheticData, options)\n\n // Restore original labels for rendering\n if (data.labels && data.labels.length < valLen) {\n prepared.labels = [...data.labels]\n }\n\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, options, xScale, yScale } = ctx\n const nodes: RenderNode[] = []\n\n // Each series represents one boxplot: 5 values = [min, Q1, median, Q3, max]\n const seriesCount = data.series.length\n if (seriesCount === 0) return nodes\n\n const bOpts = options as unknown as BoxplotOptions\n const boxWidthRatio = bOpts.boxWidth ?? 0.6\n\n const bw = getBandwidth(xScale)\n const boxWidth = bw * boxWidthRatio\n\n for (let i = 0; i < data.labels.length; i++) {\n // Collect the 5 values for this label from all series,\n // or if single series with N*5 values, extract 5 at offset i*5\n let vals: number[]\n if (data.series.length === 1) {\n const s = data.series[0]!\n if (s.values.length >= (i + 1) * 5) {\n vals = s.values.slice(i * 5, i * 5 + 5)\n } else continue\n } else if (data.series.length > i && data.series[i]!.values.length >= 5) {\n vals = data.series[i]!.values.slice(0, 5)\n } else continue\n\n const [vMin, q1, median, q3, vMax] = vals as [number, number, number, number, number]\n const cx = xScale.map(i)\n const boxX = cx - boxWidth / 2\n\n const yMin = yScale.map(vMin)\n const yQ1 = yScale.map(q1)\n const yMed = yScale.map(median)\n const yQ3 = yScale.map(q3)\n const yMax = yScale.map(vMax)\n\n const color = options.colors[i % options.colors.length]!\n const seriesIdx = Math.min(i, data.series.length - 1)\n const boxNodes: RenderNode[] = []\n\n // Whisker line (min to max)\n boxNodes.push(line(cx, yMin, cx, yMax, {\n class: 'chartts-boxplot-whisker',\n stroke: color,\n strokeWidth: 1.5,\n }))\n\n // Min whisker cap\n boxNodes.push(line(cx - boxWidth * 0.3, yMin, cx + boxWidth * 0.3, yMin, {\n class: 'chartts-boxplot-cap',\n stroke: color,\n strokeWidth: 1.5,\n }))\n\n // Max whisker cap\n boxNodes.push(line(cx - boxWidth * 0.3, yMax, cx + boxWidth * 0.3, yMax, {\n class: 'chartts-boxplot-cap',\n stroke: color,\n strokeWidth: 1.5,\n }))\n\n // IQR box (Q1 to Q3)\n const boxTop = Math.min(yQ1, yQ3)\n const boxH = Math.abs(yQ3 - yQ1)\n boxNodes.push(rect(boxX, boxTop, boxWidth, boxH, {\n class: 'chartts-boxplot-box',\n fill: color,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 1.5,\n rx: 4,\n ry: 4,\n 'data-series': seriesIdx,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i]}: min=${vMin}, Q1=${q1}, median=${median}, Q3=${q3}, max=${vMax}`,\n }))\n\n // Median line\n boxNodes.push(line(boxX, yMed, boxX + boxWidth, yMed, {\n class: 'chartts-boxplot-median',\n stroke: color,\n strokeWidth: 2.5,\n }))\n\n nodes.push(group(boxNodes, {\n class: `chartts-series chartts-series-${i}`,\n 'data-series-name': String(data.labels[i]),\n }))\n }\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n const { data, xScale, yScale, options } = ctx\n if (data.labels.length === 0) return null\n\n const bOpts = options as unknown as BoxplotOptions\n const boxWidthRatio = bOpts.boxWidth ?? 0.6\n const bw = getBandwidth(xScale)\n const boxWidth = bw * boxWidthRatio\n\n for (let i = 0; i < data.labels.length; i++) {\n let vals: number[]\n if (data.series.length === 1) {\n const s = data.series[0]!\n if (s.values.length >= (i + 1) * 5) vals = s.values.slice(i * 5, i * 5 + 5)\n else continue\n } else if (data.series.length > i && data.series[i]!.values.length >= 5) {\n vals = data.series[i]!.values.slice(0, 5)\n } else continue\n\n const cx = xScale.map(i)\n const yMin = yScale.map(vals[0]!)\n const yMax = yScale.map(vals[4]!)\n\n const top = Math.min(yMin, yMax)\n const bottom = Math.max(yMin, yMax)\n\n if (mx >= cx - boxWidth / 2 - 4 && mx <= cx + boxWidth / 2 + 4 &&\n my >= top - 4 && my <= bottom + 4) {\n const seriesIdx = Math.min(i, data.series.length - 1)\n return { seriesIndex: seriesIdx, pointIndex: i, distance: 0, x: cx, y: yScale.map(vals[2]!) }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { prepareNoAxes } from './chunk-GMLJDDHZ.js';
2
- import { line, text, PathBuilder, path } from './chunk-BMTVFAX2.js';
1
+ import { prepareNoAxes } from './chunk-T7SCCACB.js';
2
+ import { line, text, PathBuilder, path } from './chunk-AEQXFDL7.js';
3
3
 
4
4
  // src/charts/parallel/parallel-type.ts
5
5
  var parallelChartType = {
@@ -134,7 +134,7 @@ var parallelChartType = {
134
134
  const dist = Math.sqrt((mx - x) ** 2 + (my - y) ** 2);
135
135
  if (dist < bestDist) {
136
136
  bestDist = dist;
137
- best = { seriesIndex: si, pointIndex: d, distance: dist };
137
+ best = { seriesIndex: si, pointIndex: d, distance: dist, x, y };
138
138
  }
139
139
  }
140
140
  }
@@ -143,5 +143,5 @@ var parallelChartType = {
143
143
  };
144
144
 
145
145
  export { parallelChartType };
146
- //# sourceMappingURL=chunk-ARQLGTTV.js.map
147
- //# sourceMappingURL=chunk-ARQLGTTV.js.map
146
+ //# sourceMappingURL=chunk-MEERXUZS.js.map
147
+ //# sourceMappingURL=chunk-MEERXUZS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/parallel/parallel-type.ts"],"names":[],"mappings":"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","file":"chunk-ARQLGTTV.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, 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":[],"mappings":"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","file":"chunk-MEERXUZS.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, 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, x, y }\n }\n }\n }\n\n return best\n },\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { getBandwidth } from './chunk-E6PR75X7.js';
2
- import { rect, group, prepareData } from './chunk-BMTVFAX2.js';
2
+ import { rect, group, prepareData } from './chunk-AEQXFDL7.js';
3
3
 
4
4
  // src/charts/waterfall/waterfall-type.ts
5
5
  var waterfallChartType = {
@@ -104,15 +104,25 @@ var waterfallChartType = {
104
104
  return nodes;
105
105
  },
106
106
  hitTest(ctx, mx, _my) {
107
- const { data, xScale } = ctx;
107
+ const { data, xScale, yScale, options } = ctx;
108
108
  const series = data.series[0];
109
109
  if (!series) return null;
110
+ const wOpts = options;
111
+ const totals = new Set(wOpts.totals ?? [series.values.length - 1]);
110
112
  const bw = getBandwidth(xScale);
111
113
  const barWidth = bw * 0.6;
114
+ let running = 0;
112
115
  for (let i = 0; i < series.values.length; i++) {
116
+ const val = series.values[i];
117
+ const isTotal = totals.has(i);
118
+ if (isTotal) {
119
+ running = val;
120
+ } else {
121
+ running += val;
122
+ }
113
123
  const cx = xScale.map(i);
114
124
  if (mx >= cx - barWidth / 2 - 4 && mx <= cx + barWidth / 2 + 4) {
115
- return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx) };
125
+ return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx), x: cx, y: yScale.map(running) };
116
126
  }
117
127
  }
118
128
  return null;
@@ -120,5 +130,5 @@ var waterfallChartType = {
120
130
  };
121
131
 
122
132
  export { waterfallChartType };
123
- //# sourceMappingURL=chunk-VJQCHBS6.js.map
124
- //# sourceMappingURL=chunk-VJQCHBS6.js.map
133
+ //# sourceMappingURL=chunk-MJY25P44.js.map
134
+ //# sourceMappingURL=chunk-MJY25P44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/waterfall/waterfall-type.ts"],"names":[],"mappings":"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","file":"chunk-MJY25P44.js","sourcesContent":["import type {\n ChartTypePlugin, ChartData, ResolvedOptions, PreparedData,\n RenderContext, RenderNode, HitResult, ScaleType,\n} from '../../types'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\nexport interface WaterfallOptions {\n /** Indices that represent totals (absolute, not cumulative). Default: last index. */\n totals?: number[]\n /** Up color. Default emerald. */\n upColor?: string\n /** Down color. Default red. */\n downColor?: string\n /** Total color. Default blue. */\n totalColor?: string\n /** Show connector lines between bars. Default true. */\n connectors?: boolean\n}\n\n/**\n * Waterfall chart — running totals with floating bars.\n * Each value is a delta from the previous running total.\n * Positive = up (green), negative = down (red), totals = absolute (blue).\n */\nexport const waterfallChartType: ChartTypePlugin = {\n type: 'waterfall',\n\n getScaleTypes(): { x: ScaleType; y: ScaleType } {\n return { x: 'categorical', y: 'linear' }\n },\n\n prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n const prepared = prepareData(data, options)\n\n const wOpts = options as unknown as WaterfallOptions\n const series = data.series[0]\n if (!series) return prepared\n\n const totals = new Set(wOpts.totals ?? [series.values.length - 1])\n\n // Compute running totals to find proper y bounds\n let running = 0\n let yMin = 0\n let yMax = 0\n for (let i = 0; i < series.values.length; i++) {\n if (totals.has(i)) {\n running = series.values[i]!\n } else {\n running += series.values[i]!\n }\n if (running < yMin) yMin = running\n if (running > yMax) yMax = running\n }\n\n // Include 0 in range\n prepared.bounds.yMin = Math.min(0, yMin)\n prepared.bounds.yMax = Math.max(0, yMax)\n\n return prepared\n },\n\n render(ctx: RenderContext): RenderNode[] {\n const { data, xScale, yScale, options, theme } = ctx\n const nodes: RenderNode[] = []\n\n const series = data.series[0]\n if (!series || series.values.length === 0) return nodes\n\n const wOpts = options as unknown as WaterfallOptions\n const totals = new Set(wOpts.totals ?? [series.values.length - 1])\n const upColor = wOpts.upColor ?? 'var(--color-emerald-500, #10b981)'\n const downColor = wOpts.downColor ?? 'var(--color-red-500, #ef4444)'\n const totalColor = wOpts.totalColor ?? 'var(--color-blue-500, #3b82f6)'\n const showConnectors = wOpts.connectors ?? true\n\n const bw = getBandwidth(xScale)\n const barWidth = bw * 0.6\n const barNodes: RenderNode[] = []\n const connectorNodes: RenderNode[] = []\n\n let running = 0\n let prevTop = yScale.map(0)\n\n for (let i = 0; i < series.values.length; i++) {\n const val = series.values[i]!\n const cx = xScale.map(i)\n const isTotal = totals.has(i)\n\n let barTop: number\n let barBottom: number\n let color: string\n\n if (isTotal) {\n // Total bar: from 0 to the value\n running = val\n barTop = yScale.map(Math.max(0, val))\n barBottom = yScale.map(Math.min(0, val))\n color = totalColor\n } else {\n // Delta bar: from running to running + val\n const from = running\n running += val\n barTop = yScale.map(Math.max(from, running))\n barBottom = yScale.map(Math.min(from, running))\n color = val >= 0 ? upColor : downColor\n }\n\n const barH = Math.max(barBottom - barTop, 1)\n\n barNodes.push(rect(cx - barWidth / 2, barTop, barWidth, barH, {\n rx: 3, ry: 3,\n class: 'chartts-waterfall-bar',\n fill: color,\n 'data-series': 0,\n 'data-index': i,\n tabindex: 0,\n role: 'img',\n ariaLabel: `${data.labels[i] ?? i}: ${val}${isTotal ? ' (total)' : ''}`,\n }))\n\n // Connector line from previous bar's end to this bar's start\n if (showConnectors && i > 0 && !isTotal) {\n connectorNodes.push({\n type: 'line',\n x1: xScale.map(i - 1) + barWidth / 2,\n y1: prevTop,\n x2: cx - barWidth / 2,\n y2: prevTop,\n attrs: {\n class: 'chartts-waterfall-connector',\n stroke: theme.gridColor,\n strokeWidth: 1,\n strokeDasharray: '3,2',\n },\n })\n }\n\n prevTop = barTop\n }\n\n if (connectorNodes.length > 0) {\n nodes.push(group(connectorNodes, { class: 'chartts-waterfall-connectors' }))\n }\n\n nodes.push(group(barNodes, {\n class: 'chartts-series chartts-series-0',\n 'data-series-name': series.name,\n }))\n\n return nodes\n },\n\n hitTest(ctx: RenderContext, mx: number, _my: number): HitResult | null {\n const { data, xScale, yScale, options } = ctx\n const series = data.series[0]\n if (!series) return null\n\n const wOpts = options as unknown as WaterfallOptions\n const totals = new Set(wOpts.totals ?? [series.values.length - 1])\n const bw = getBandwidth(xScale)\n const barWidth = bw * 0.6\n\n let running = 0\n for (let i = 0; i < series.values.length; i++) {\n const val = series.values[i]!\n const isTotal = totals.has(i)\n if (isTotal) {\n running = val\n } else {\n running += val\n }\n\n const cx = xScale.map(i)\n if (mx >= cx - barWidth / 2 - 4 && mx <= cx + barWidth / 2 + 4) {\n return { seriesIndex: 0, pointIndex: i, distance: Math.abs(mx - cx), x: cx, y: yScale.map(running) }\n }\n }\n\n return null\n },\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkHOPFELRP_cjs = require('./chunk-HOPFELRP.cjs');
4
- var chunk3TLJCGGQ_cjs = require('./chunk-3TLJCGGQ.cjs');
3
+ var chunkV5Q6UNUK_cjs = require('./chunk-V5Q6UNUK.cjs');
4
+ var chunkJVVGQLJQ_cjs = require('./chunk-JVVGQLJQ.cjs');
5
5
 
6
6
  // src/charts/radar/radar-type.ts
7
7
  var radarChartType = {
@@ -10,7 +10,7 @@ var radarChartType = {
10
10
  return { x: "categorical", y: "linear" };
11
11
  },
12
12
  prepareData(data, options) {
13
- return chunkHOPFELRP_cjs.prepareNoAxes(data, options);
13
+ return chunkV5Q6UNUK_cjs.prepareNoAxes(data, options);
14
14
  },
15
15
  render(ctx) {
16
16
  const { data, area, theme } = ctx;
@@ -32,7 +32,7 @@ var radarChartType = {
32
32
  const gridLevels = 3;
33
33
  for (let level = 1; level <= gridLevels; level++) {
34
34
  const r = radius * level / gridLevels;
35
- const pb = new chunk3TLJCGGQ_cjs.PathBuilder();
35
+ const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
36
36
  for (let i = 0; i <= labelCount; i++) {
37
37
  const angle = startAngle + i % labelCount * angleStep;
38
38
  const x = cx + r * Math.cos(angle);
@@ -40,7 +40,7 @@ var radarChartType = {
40
40
  if (i === 0) pb.moveTo(x, y);
41
41
  else pb.lineTo(x, y);
42
42
  }
43
- nodes.push(chunk3TLJCGGQ_cjs.path(pb.build(), {
43
+ nodes.push(chunkJVVGQLJQ_cjs.path(pb.build(), {
44
44
  class: "chartts-radar-grid",
45
45
  stroke: theme.gridColor,
46
46
  strokeWidth: theme.gridWidth,
@@ -68,7 +68,7 @@ var radarChartType = {
68
68
  const lx = cx + labelR * Math.cos(angle);
69
69
  const ly = cy + labelR * Math.sin(angle);
70
70
  const anchor = Math.abs(Math.cos(angle)) < 0.01 ? "middle" : Math.cos(angle) > 0 ? "start" : "end";
71
- nodes.push(chunk3TLJCGGQ_cjs.text(lx, ly, String(data.labels[i]), {
71
+ nodes.push(chunkJVVGQLJQ_cjs.text(lx, ly, String(data.labels[i]), {
72
72
  class: "chartts-radar-label",
73
73
  fill: theme.textMuted,
74
74
  textAnchor: anchor,
@@ -78,7 +78,7 @@ var radarChartType = {
78
78
  }));
79
79
  }
80
80
  for (const series of data.series) {
81
- const pb = new chunk3TLJCGGQ_cjs.PathBuilder();
81
+ const pb = new chunkJVVGQLJQ_cjs.PathBuilder();
82
82
  const points = [];
83
83
  for (let i = 0; i < labelCount; i++) {
84
84
  const val = series.values[i] ?? 0;
@@ -92,7 +92,7 @@ var radarChartType = {
92
92
  }
93
93
  pb.close();
94
94
  const seriesNodes = [];
95
- seriesNodes.push(chunk3TLJCGGQ_cjs.path(pb.build(), {
95
+ seriesNodes.push(chunkJVVGQLJQ_cjs.path(pb.build(), {
96
96
  class: "chartts-radar-area",
97
97
  fill: series.color,
98
98
  fillOpacity: 0.2,
@@ -101,7 +101,7 @@ var radarChartType = {
101
101
  "data-series": series.index
102
102
  }));
103
103
  for (let i = 0; i < points.length; i++) {
104
- seriesNodes.push(chunk3TLJCGGQ_cjs.circle(points[i].x, points[i].y, theme.pointRadius, {
104
+ seriesNodes.push(chunkJVVGQLJQ_cjs.circle(points[i].x, points[i].y, theme.pointRadius, {
105
105
  class: "chartts-radar-point",
106
106
  fill: series.color,
107
107
  "data-series": series.index,
@@ -111,7 +111,7 @@ var radarChartType = {
111
111
  ariaLabel: `${series.name} ${data.labels[i]}: ${series.values[i]}`
112
112
  }));
113
113
  }
114
- nodes.push(chunk3TLJCGGQ_cjs.group(seriesNodes, {
114
+ nodes.push(chunkJVVGQLJQ_cjs.group(seriesNodes, {
115
115
  class: `chartts-series chartts-series-${series.index}`,
116
116
  "data-series-name": series.name
117
117
  }));
@@ -147,7 +147,7 @@ var radarChartType = {
147
147
  const dist = Math.sqrt((mx - px) ** 2 + (my - py) ** 2);
148
148
  if (dist < bestDist && dist < hitRadius) {
149
149
  bestDist = dist;
150
- best = { seriesIndex: series.index, pointIndex: i, distance: dist };
150
+ best = { seriesIndex: series.index, pointIndex: i, distance: dist, x: px, y: py };
151
151
  }
152
152
  }
153
153
  }
@@ -156,5 +156,5 @@ var radarChartType = {
156
156
  };
157
157
 
158
158
  exports.radarChartType = radarChartType;
159
- //# sourceMappingURL=chunk-3YFDZGHO.cjs.map
160
- //# sourceMappingURL=chunk-3YFDZGHO.cjs.map
159
+ //# sourceMappingURL=chunk-MSCRIA2U.cjs.map
160
+ //# sourceMappingURL=chunk-MSCRIA2U.cjs.map