@chartts/core 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/dist/area.cjs +10 -10
  2. package/dist/area.js +5 -5
  3. package/dist/bar.cjs +9 -9
  4. package/dist/bar.js +4 -4
  5. package/dist/baseline.cjs +9 -9
  6. package/dist/baseline.js +4 -4
  7. package/dist/boxplot.cjs +9 -9
  8. package/dist/boxplot.js +4 -4
  9. package/dist/bubble.cjs +9 -9
  10. package/dist/bubble.js +4 -4
  11. package/dist/bullet.cjs +10 -10
  12. package/dist/bullet.js +5 -5
  13. package/dist/calendar.cjs +10 -10
  14. package/dist/calendar.js +5 -5
  15. package/dist/candlestick.cjs +9 -9
  16. package/dist/candlestick.js +4 -4
  17. package/dist/chord.cjs +10 -10
  18. package/dist/chord.js +5 -5
  19. package/dist/{chunk-XKERO5K2.js → chunk-24557PYN.js} +3 -3
  20. package/dist/{chunk-XKERO5K2.js.map → chunk-24557PYN.js.map} +1 -1
  21. package/dist/{chunk-5YNIOIKK.js → chunk-2BUIZDOB.js} +3 -3
  22. package/dist/{chunk-5YNIOIKK.js.map → chunk-2BUIZDOB.js.map} +1 -1
  23. package/dist/{chunk-EHKHXQ46.cjs → chunk-2IMUTDTD.cjs} +10 -10
  24. package/dist/{chunk-EHKHXQ46.cjs.map → chunk-2IMUTDTD.cjs.map} +1 -1
  25. package/dist/{chunk-7ZPHLIFP.cjs → chunk-2IWLOBSF.cjs} +6 -6
  26. package/dist/{chunk-7ZPHLIFP.cjs.map → chunk-2IWLOBSF.cjs.map} +1 -1
  27. package/dist/{chunk-F5AOBHQY.js → chunk-2JYK52HV.js} +4 -4
  28. package/dist/{chunk-F5AOBHQY.js.map → chunk-2JYK52HV.js.map} +1 -1
  29. package/dist/{chunk-WVQVGQJO.cjs → chunk-2QRCHYTZ.cjs} +7 -7
  30. package/dist/{chunk-WVQVGQJO.cjs.map → chunk-2QRCHYTZ.cjs.map} +1 -1
  31. package/dist/{chunk-XWCY67K5.js → chunk-34DQGCPP.js} +4 -4
  32. package/dist/{chunk-XWCY67K5.js.map → chunk-34DQGCPP.js.map} +1 -1
  33. package/dist/{chunk-5J26EN5I.js → chunk-3JB4JBBK.js} +4 -4
  34. package/dist/{chunk-5J26EN5I.js.map → chunk-3JB4JBBK.js.map} +1 -1
  35. package/dist/{chunk-EHNX3MG3.cjs → chunk-3NHH6C4K.cjs} +13 -13
  36. package/dist/{chunk-EHNX3MG3.cjs.map → chunk-3NHH6C4K.cjs.map} +1 -1
  37. package/dist/{chunk-ECB3UPTC.cjs → chunk-3SVNEKXE.cjs} +11 -11
  38. package/dist/{chunk-ECB3UPTC.cjs.map → chunk-3SVNEKXE.cjs.map} +1 -1
  39. package/dist/{chunk-BYB3LQAT.cjs → chunk-4D6PVH2C.cjs} +9 -9
  40. package/dist/{chunk-BYB3LQAT.cjs.map → chunk-4D6PVH2C.cjs.map} +1 -1
  41. package/dist/{chunk-NG7DRWWT.cjs → chunk-4MNVJVK3.cjs} +6 -6
  42. package/dist/{chunk-NG7DRWWT.cjs.map → chunk-4MNVJVK3.cjs.map} +1 -1
  43. package/dist/{chunk-RQJRVKAH.js → chunk-4QRND2V5.js} +3 -3
  44. package/dist/{chunk-RQJRVKAH.js.map → chunk-4QRND2V5.js.map} +1 -1
  45. package/dist/{chunk-NGKUI7XE.cjs → chunk-55ZTXQQQ.cjs} +12 -12
  46. package/dist/{chunk-NGKUI7XE.cjs.map → chunk-55ZTXQQQ.cjs.map} +1 -1
  47. package/dist/{chunk-2MWA7H6J.js → chunk-56BN43J4.js} +5 -5
  48. package/dist/{chunk-2MWA7H6J.js.map → chunk-56BN43J4.js.map} +1 -1
  49. package/dist/{chunk-RJIPFWW7.js → chunk-5E7FXDBM.js} +4 -4
  50. package/dist/{chunk-RJIPFWW7.js.map → chunk-5E7FXDBM.js.map} +1 -1
  51. package/dist/{chunk-ILCWDAKD.js → chunk-5HZEDCJG.js} +3 -3
  52. package/dist/{chunk-ILCWDAKD.js.map → chunk-5HZEDCJG.js.map} +1 -1
  53. package/dist/{chunk-DKXW2FQC.cjs → chunk-5QT67VYJ.cjs} +10 -10
  54. package/dist/{chunk-DKXW2FQC.cjs.map → chunk-5QT67VYJ.cjs.map} +1 -1
  55. package/dist/{chunk-XE5ZYFGM.js → chunk-5QVUBGM7.js} +4 -4
  56. package/dist/{chunk-XE5ZYFGM.js.map → chunk-5QVUBGM7.js.map} +1 -1
  57. package/dist/{chunk-DR5MQC3W.js → chunk-62DBXI4N.js} +4 -4
  58. package/dist/{chunk-DR5MQC3W.js.map → chunk-62DBXI4N.js.map} +1 -1
  59. package/dist/{chunk-HMB2RIEE.js → chunk-6QMV75NT.js} +4 -4
  60. package/dist/{chunk-HMB2RIEE.js.map → chunk-6QMV75NT.js.map} +1 -1
  61. package/dist/{chunk-OUN3MWRQ.cjs → chunk-754Z4OR6.cjs} +10 -10
  62. package/dist/{chunk-OUN3MWRQ.cjs.map → chunk-754Z4OR6.cjs.map} +1 -1
  63. package/dist/{chunk-3SOKHPAO.js → chunk-7GLCJPV5.js} +4 -4
  64. package/dist/{chunk-3SOKHPAO.js.map → chunk-7GLCJPV5.js.map} +1 -1
  65. package/dist/{chunk-PQCHNZHM.cjs → chunk-7PHOSSLJ.cjs} +9 -9
  66. package/dist/{chunk-PQCHNZHM.cjs.map → chunk-7PHOSSLJ.cjs.map} +1 -1
  67. package/dist/{chunk-VBEZS3Q4.cjs → chunk-A5G32G2R.cjs} +9 -9
  68. package/dist/{chunk-VBEZS3Q4.cjs.map → chunk-A5G32G2R.cjs.map} +1 -1
  69. package/dist/{chunk-DX4FBN3I.js → chunk-AEQXFDL7.js} +14 -9
  70. package/dist/chunk-AEQXFDL7.js.map +1 -0
  71. package/dist/{chunk-RHTVKBRC.cjs → chunk-ATMSGQCW.cjs} +9 -9
  72. package/dist/{chunk-RHTVKBRC.cjs.map → chunk-ATMSGQCW.cjs.map} +1 -1
  73. package/dist/{chunk-2ITF366P.js → chunk-BFBVJ6MU.js} +3 -3
  74. package/dist/{chunk-2ITF366P.js.map → chunk-BFBVJ6MU.js.map} +1 -1
  75. package/dist/{chunk-E43H3A3G.cjs → chunk-BGGESAAG.cjs} +7 -7
  76. package/dist/{chunk-E43H3A3G.cjs.map → chunk-BGGESAAG.cjs.map} +1 -1
  77. package/dist/{chunk-R6ZDSXN7.cjs → chunk-CA42BCSM.cjs} +8 -8
  78. package/dist/{chunk-R6ZDSXN7.cjs.map → chunk-CA42BCSM.cjs.map} +1 -1
  79. package/dist/{chunk-FV7R2LLD.js → chunk-CU5ZXVZQ.js} +4 -4
  80. package/dist/{chunk-FV7R2LLD.js.map → chunk-CU5ZXVZQ.js.map} +1 -1
  81. package/dist/{chunk-JNQ4NL3R.cjs → chunk-CUIPBYMG.cjs} +8 -8
  82. package/dist/{chunk-JNQ4NL3R.cjs.map → chunk-CUIPBYMG.cjs.map} +1 -1
  83. package/dist/{chunk-CCMLOCTH.js → chunk-CWZADOJ6.js} +3 -3
  84. package/dist/{chunk-CCMLOCTH.js.map → chunk-CWZADOJ6.js.map} +1 -1
  85. package/dist/{chunk-FZIBM3G5.cjs → chunk-D5QUAWF3.cjs} +10 -10
  86. package/dist/{chunk-FZIBM3G5.cjs.map → chunk-D5QUAWF3.cjs.map} +1 -1
  87. package/dist/{chunk-YZQROIJY.js → chunk-DAAU5H24.js} +3 -3
  88. package/dist/{chunk-YZQROIJY.js.map → chunk-DAAU5H24.js.map} +1 -1
  89. package/dist/{chunk-GAWIUMAK.cjs → chunk-DT4GG5BF.cjs} +7 -7
  90. package/dist/{chunk-GAWIUMAK.cjs.map → chunk-DT4GG5BF.cjs.map} +1 -1
  91. package/dist/{chunk-4L62MAZA.js → chunk-DX77WSIB.js} +5 -5
  92. package/dist/{chunk-4L62MAZA.js.map → chunk-DX77WSIB.js.map} +1 -1
  93. package/dist/{chunk-4ORSJM2I.js → chunk-EPUWA3ZW.js} +4 -4
  94. package/dist/{chunk-4ORSJM2I.js.map → chunk-EPUWA3ZW.js.map} +1 -1
  95. package/dist/{chunk-ZTUKOCJN.cjs → chunk-ESJMEDLY.cjs} +4 -4
  96. package/dist/{chunk-ZTUKOCJN.cjs.map → chunk-ESJMEDLY.cjs.map} +1 -1
  97. package/dist/{chunk-6JNW43SE.js → chunk-EWVXMQRW.js} +5 -5
  98. package/dist/{chunk-6JNW43SE.js.map → chunk-EWVXMQRW.js.map} +1 -1
  99. package/dist/{chunk-LIY7MYRG.js → chunk-FGBIJ6PL.js} +4 -4
  100. package/dist/{chunk-LIY7MYRG.js.map → chunk-FGBIJ6PL.js.map} +1 -1
  101. package/dist/{chunk-OFEROCC5.cjs → chunk-FGHSUT6X.cjs} +6 -6
  102. package/dist/{chunk-OFEROCC5.cjs.map → chunk-FGHSUT6X.cjs.map} +1 -1
  103. package/dist/{chunk-QKJUAMRK.cjs → chunk-FVLVTY5D.cjs} +6 -6
  104. package/dist/{chunk-QKJUAMRK.cjs.map → chunk-FVLVTY5D.cjs.map} +1 -1
  105. package/dist/{chunk-YX6RW6ZW.cjs → chunk-GBL4R3GH.cjs} +6 -6
  106. package/dist/{chunk-YX6RW6ZW.cjs.map → chunk-GBL4R3GH.cjs.map} +1 -1
  107. package/dist/{chunk-SXVMEC6N.cjs → chunk-GRXHW5S3.cjs} +12 -12
  108. package/dist/{chunk-SXVMEC6N.cjs.map → chunk-GRXHW5S3.cjs.map} +1 -1
  109. package/dist/{chunk-K5TPJVOK.js → chunk-HCIBBUV5.js} +3 -3
  110. package/dist/{chunk-K5TPJVOK.js.map → chunk-HCIBBUV5.js.map} +1 -1
  111. package/dist/{chunk-HFWO37RY.cjs → chunk-HCK2VUWD.cjs} +8 -8
  112. package/dist/{chunk-HFWO37RY.cjs.map → chunk-HCK2VUWD.cjs.map} +1 -1
  113. package/dist/{chunk-FSDI3NJV.js → chunk-IDZTDJLH.js} +3 -3
  114. package/dist/{chunk-FSDI3NJV.js.map → chunk-IDZTDJLH.js.map} +1 -1
  115. package/dist/{chunk-FDNJNVKA.cjs → chunk-IF6RQ53Q.cjs} +9 -9
  116. package/dist/{chunk-FDNJNVKA.cjs.map → chunk-IF6RQ53Q.cjs.map} +1 -1
  117. package/dist/{chunk-PVPTFMJJ.js → chunk-IOV77VHP.js} +4 -4
  118. package/dist/{chunk-PVPTFMJJ.js.map → chunk-IOV77VHP.js.map} +1 -1
  119. package/dist/{chunk-UMIJYYF3.cjs → chunk-JVVGQLJQ.cjs} +14 -9
  120. package/dist/chunk-JVVGQLJQ.cjs.map +1 -0
  121. package/dist/{chunk-MY4KMVJ5.cjs → chunk-JYVRX3BX.cjs} +8 -8
  122. package/dist/{chunk-MY4KMVJ5.cjs.map → chunk-JYVRX3BX.cjs.map} +1 -1
  123. package/dist/{chunk-ZY7ETQD6.js → chunk-KHG3G2ZX.js} +3 -3
  124. package/dist/{chunk-ZY7ETQD6.js.map → chunk-KHG3G2ZX.js.map} +1 -1
  125. package/dist/{chunk-ASNAQ35U.js → chunk-KNMEXOKJ.js} +4 -4
  126. package/dist/{chunk-ASNAQ35U.js.map → chunk-KNMEXOKJ.js.map} +1 -1
  127. package/dist/{chunk-WYIIWTIR.cjs → chunk-KWSVJRXX.cjs} +4 -4
  128. package/dist/{chunk-WYIIWTIR.cjs.map → chunk-KWSVJRXX.cjs.map} +1 -1
  129. package/dist/{chunk-OAL5RS2X.cjs → chunk-LARNENXE.cjs} +10 -10
  130. package/dist/{chunk-OAL5RS2X.cjs.map → chunk-LARNENXE.cjs.map} +1 -1
  131. package/dist/{chunk-MYXLKVJE.js → chunk-LRHMLNPW.js} +12 -4
  132. package/dist/chunk-LRHMLNPW.js.map +1 -0
  133. package/dist/{chunk-66BHM3UN.cjs → chunk-LXYNL7BI.cjs} +10 -10
  134. package/dist/{chunk-66BHM3UN.cjs.map → chunk-LXYNL7BI.cjs.map} +1 -1
  135. package/dist/{chunk-V45C74EB.js → chunk-MEERXUZS.js} +4 -4
  136. package/dist/{chunk-V45C74EB.js.map → chunk-MEERXUZS.js.map} +1 -1
  137. package/dist/{chunk-YJHB2GHQ.js → chunk-MJY25P44.js} +3 -3
  138. package/dist/{chunk-YJHB2GHQ.js.map → chunk-MJY25P44.js.map} +1 -1
  139. package/dist/{chunk-6UWYKNFN.cjs → chunk-MSCRIA2U.cjs} +12 -12
  140. package/dist/{chunk-6UWYKNFN.cjs.map → chunk-MSCRIA2U.cjs.map} +1 -1
  141. package/dist/{chunk-UZH6PVHD.js → chunk-N35UAFEU.js} +4 -4
  142. package/dist/{chunk-UZH6PVHD.js.map → chunk-N35UAFEU.js.map} +1 -1
  143. package/dist/{chunk-6E6ZDWZD.cjs → chunk-NE2W2MF3.cjs} +10 -10
  144. package/dist/{chunk-6E6ZDWZD.cjs.map → chunk-NE2W2MF3.cjs.map} +1 -1
  145. package/dist/{chunk-7PNCJ4OQ.js → chunk-NQ7Y6ZKH.js} +3 -3
  146. package/dist/{chunk-7PNCJ4OQ.js.map → chunk-NQ7Y6ZKH.js.map} +1 -1
  147. package/dist/{chunk-LK2A3HBT.js → chunk-NRULNA5F.js} +4 -4
  148. package/dist/{chunk-LK2A3HBT.js.map → chunk-NRULNA5F.js.map} +1 -1
  149. package/dist/{chunk-47EP245Y.cjs → chunk-OEGSDOJ2.cjs} +7 -7
  150. package/dist/{chunk-47EP245Y.cjs.map → chunk-OEGSDOJ2.cjs.map} +1 -1
  151. package/dist/{chunk-ZFSFOD5W.cjs → chunk-OMAW52LY.cjs} +6 -6
  152. package/dist/{chunk-ZFSFOD5W.cjs.map → chunk-OMAW52LY.cjs.map} +1 -1
  153. package/dist/{chunk-YOLF5DYU.js → chunk-OMSHGBV3.js} +4 -4
  154. package/dist/{chunk-YOLF5DYU.js.map → chunk-OMSHGBV3.js.map} +1 -1
  155. package/dist/{chunk-4H2LGLGI.cjs → chunk-OTXHJHXU.cjs} +11 -11
  156. package/dist/{chunk-4H2LGLGI.cjs.map → chunk-OTXHJHXU.cjs.map} +1 -1
  157. package/dist/{chunk-DRIJNFWP.cjs → chunk-PCAYYCLY.cjs} +10 -10
  158. package/dist/{chunk-DRIJNFWP.cjs.map → chunk-PCAYYCLY.cjs.map} +1 -1
  159. package/dist/{chunk-QERWC7U6.js → chunk-PKXW45G4.js} +3 -3
  160. package/dist/{chunk-QERWC7U6.js.map → chunk-PKXW45G4.js.map} +1 -1
  161. package/dist/{chunk-YDQDZWZ7.cjs → chunk-QEPMEEZC.cjs} +6 -6
  162. package/dist/{chunk-YDQDZWZ7.cjs.map → chunk-QEPMEEZC.cjs.map} +1 -1
  163. package/dist/{chunk-G6R6MSRF.cjs → chunk-QPHUAF3R.cjs} +8 -8
  164. package/dist/{chunk-G6R6MSRF.cjs.map → chunk-QPHUAF3R.cjs.map} +1 -1
  165. package/dist/{chunk-RFEKSP62.js → chunk-QPHWRD25.js} +3 -3
  166. package/dist/{chunk-RFEKSP62.js.map → chunk-QPHWRD25.js.map} +1 -1
  167. package/dist/{chunk-XN6YS55F.cjs → chunk-QYI7ZV3B.cjs} +30 -22
  168. package/dist/chunk-QYI7ZV3B.cjs.map +1 -0
  169. package/dist/{chunk-3V64BDKG.cjs → chunk-R2W3RJFW.cjs} +13 -13
  170. package/dist/{chunk-3V64BDKG.cjs.map → chunk-R2W3RJFW.cjs.map} +1 -1
  171. package/dist/{chunk-46ZZTP5B.js → chunk-SGZUUUXU.js} +4 -4
  172. package/dist/{chunk-46ZZTP5B.js.map → chunk-SGZUUUXU.js.map} +1 -1
  173. package/dist/{chunk-MPQECPE3.js → chunk-T7SCCACB.js} +3 -3
  174. package/dist/{chunk-MPQECPE3.js.map → chunk-T7SCCACB.js.map} +1 -1
  175. package/dist/{chunk-GPSNBZPX.js → chunk-TC3H6ZED.js} +4 -4
  176. package/dist/{chunk-GPSNBZPX.js.map → chunk-TC3H6ZED.js.map} +1 -1
  177. package/dist/{chunk-AG7VY6MJ.cjs → chunk-TEZNWW3R.cjs} +8 -8
  178. package/dist/{chunk-AG7VY6MJ.cjs.map → chunk-TEZNWW3R.cjs.map} +1 -1
  179. package/dist/{chunk-KTCP23W6.js → chunk-THHZMRFU.js} +3 -3
  180. package/dist/{chunk-KTCP23W6.js.map → chunk-THHZMRFU.js.map} +1 -1
  181. package/dist/{chunk-RWQH5EO5.cjs → chunk-TLHQ6JCK.cjs} +11 -11
  182. package/dist/{chunk-RWQH5EO5.cjs.map → chunk-TLHQ6JCK.cjs.map} +1 -1
  183. package/dist/{chunk-CDS2NXGT.cjs → chunk-V5Q6UNUK.cjs} +4 -4
  184. package/dist/{chunk-CDS2NXGT.cjs.map → chunk-V5Q6UNUK.cjs.map} +1 -1
  185. package/dist/{chunk-BT5H3WMI.js → chunk-VBMLJUBE.js} +4 -4
  186. package/dist/{chunk-BT5H3WMI.js.map → chunk-VBMLJUBE.js.map} +1 -1
  187. package/dist/{chunk-UFMPALRH.js → chunk-VGJD4F4H.js} +3 -3
  188. package/dist/{chunk-UFMPALRH.js.map → chunk-VGJD4F4H.js.map} +1 -1
  189. package/dist/{chunk-RN7NNB6I.js → chunk-VJXUBN7J.js} +3 -3
  190. package/dist/{chunk-RN7NNB6I.js.map → chunk-VJXUBN7J.js.map} +1 -1
  191. package/dist/{chunk-TVDQNLGJ.js → chunk-VUHNBLFA.js} +3 -3
  192. package/dist/{chunk-TVDQNLGJ.js.map → chunk-VUHNBLFA.js.map} +1 -1
  193. package/dist/{chunk-OAIMES5S.cjs → chunk-W476ER4X.cjs} +17 -17
  194. package/dist/{chunk-OAIMES5S.cjs.map → chunk-W476ER4X.cjs.map} +1 -1
  195. package/dist/{chunk-4XVJYNOT.js → chunk-WZCES5M6.js} +4 -4
  196. package/dist/{chunk-4XVJYNOT.js.map → chunk-WZCES5M6.js.map} +1 -1
  197. package/dist/{chunk-2EZ2TVYT.cjs → chunk-Y6CVUI6A.cjs} +13 -13
  198. package/dist/{chunk-2EZ2TVYT.cjs.map → chunk-Y6CVUI6A.cjs.map} +1 -1
  199. package/dist/{chunk-4WQUX2B4.cjs → chunk-YCL43UQM.cjs} +12 -12
  200. package/dist/{chunk-4WQUX2B4.cjs.map → chunk-YCL43UQM.cjs.map} +1 -1
  201. package/dist/{chunk-XWN43PZF.cjs → chunk-YZXRD6K6.cjs} +7 -7
  202. package/dist/{chunk-XWN43PZF.cjs.map → chunk-YZXRD6K6.cjs.map} +1 -1
  203. package/dist/{chunk-IRUIWMH6.js → chunk-ZFGLBJYC.js} +3 -3
  204. package/dist/{chunk-IRUIWMH6.js.map → chunk-ZFGLBJYC.js.map} +1 -1
  205. package/dist/{chunk-6EGHZDZI.cjs → chunk-ZNKVOTPB.cjs} +15 -15
  206. package/dist/{chunk-6EGHZDZI.cjs.map → chunk-ZNKVOTPB.cjs.map} +1 -1
  207. package/dist/{chunk-WJP6CRML.js → chunk-ZOEN3ARN.js} +3 -3
  208. package/dist/{chunk-WJP6CRML.js.map → chunk-ZOEN3ARN.js.map} +1 -1
  209. package/dist/{chunk-TWSWD4PU.js → chunk-ZYXRRVR6.js} +3 -3
  210. package/dist/{chunk-TWSWD4PU.js.map → chunk-ZYXRRVR6.js.map} +1 -1
  211. package/dist/combo.cjs +9 -9
  212. package/dist/combo.js +4 -4
  213. package/dist/custom.cjs +10 -10
  214. package/dist/custom.js +5 -5
  215. package/dist/donut.cjs +11 -11
  216. package/dist/donut.js +6 -6
  217. package/dist/dumbbell.cjs +10 -10
  218. package/dist/dumbbell.js +5 -5
  219. package/dist/funnel.cjs +10 -10
  220. package/dist/funnel.js +5 -5
  221. package/dist/gauge.cjs +10 -10
  222. package/dist/gauge.js +5 -5
  223. package/dist/geo.cjs +12 -12
  224. package/dist/geo.js +5 -5
  225. package/dist/graph.cjs +10 -10
  226. package/dist/graph.js +5 -5
  227. package/dist/heatmap.cjs +10 -10
  228. package/dist/heatmap.js +5 -5
  229. package/dist/histogram.cjs +9 -9
  230. package/dist/histogram.js +4 -4
  231. package/dist/horizontal-bar.cjs +9 -9
  232. package/dist/horizontal-bar.js +4 -4
  233. package/dist/index.cjs +180 -180
  234. package/dist/index.d.cts +4 -0
  235. package/dist/index.d.ts +4 -0
  236. package/dist/index.js +92 -92
  237. package/dist/kagi.cjs +10 -10
  238. package/dist/kagi.js +5 -5
  239. package/dist/line.cjs +9 -9
  240. package/dist/line.js +4 -4
  241. package/dist/lines.cjs +10 -10
  242. package/dist/lines.js +5 -5
  243. package/dist/lollipop.cjs +9 -9
  244. package/dist/lollipop.js +4 -4
  245. package/dist/matrix.cjs +10 -10
  246. package/dist/matrix.js +5 -5
  247. package/dist/ohlc.cjs +9 -9
  248. package/dist/ohlc.js +4 -4
  249. package/dist/parallel.cjs +10 -10
  250. package/dist/parallel.js +5 -5
  251. package/dist/pictorialbar.cjs +10 -10
  252. package/dist/pictorialbar.js +5 -5
  253. package/dist/pie.cjs +11 -11
  254. package/dist/pie.js +6 -6
  255. package/dist/polar.cjs +11 -11
  256. package/dist/polar.js +6 -6
  257. package/dist/radar.cjs +10 -10
  258. package/dist/radar.js +5 -5
  259. package/dist/radialbar.cjs +10 -10
  260. package/dist/radialbar.js +5 -5
  261. package/dist/range.cjs +9 -9
  262. package/dist/range.js +4 -4
  263. package/dist/renko.cjs +10 -10
  264. package/dist/renko.js +5 -5
  265. package/dist/sankey.cjs +10 -10
  266. package/dist/sankey.js +5 -5
  267. package/dist/scatter.cjs +9 -9
  268. package/dist/scatter.js +4 -4
  269. package/dist/sparkline.cjs +9 -9
  270. package/dist/sparkline.js +4 -4
  271. package/dist/stacked-bar.cjs +9 -9
  272. package/dist/stacked-bar.js +4 -4
  273. package/dist/step.cjs +10 -10
  274. package/dist/step.js +5 -5
  275. package/dist/sunburst.cjs +11 -11
  276. package/dist/sunburst.js +6 -6
  277. package/dist/themeriver.cjs +10 -10
  278. package/dist/themeriver.js +5 -5
  279. package/dist/tree.cjs +10 -10
  280. package/dist/tree.js +5 -5
  281. package/dist/treemap.cjs +10 -10
  282. package/dist/treemap.js +5 -5
  283. package/dist/volume.cjs +9 -9
  284. package/dist/volume.js +4 -4
  285. package/dist/waterfall.cjs +9 -9
  286. package/dist/waterfall.js +4 -4
  287. package/package.json +1 -1
  288. package/dist/chunk-DX4FBN3I.js.map +0 -1
  289. package/dist/chunk-MYXLKVJE.js.map +0 -1
  290. package/dist/chunk-UMIJYYF3.cjs.map +0 -1
  291. package/dist/chunk-XN6YS55F.cjs.map +0 -1
@@ -1 +0,0 @@
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":["circle","PathBuilder","path","rect","text","line","group","prepareNoAxes"],"mappings":"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","file":"chunk-XN6YS55F.cjs","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 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"]}