@chartts/core 0.1.2 → 0.1.3

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-FEQKBVCZ.cjs → chunk-2EZ2TVYT.cjs} +14 -14
  57. package/dist/chunk-2EZ2TVYT.cjs.map +1 -0
  58. package/dist/{chunk-GI7PBJSK.js → chunk-2ITF366P.js} +4 -4
  59. package/dist/chunk-2ITF366P.js.map +1 -0
  60. package/dist/{chunk-YMJQUKKX.js → chunk-2MWA7H6J.js} +68 -42
  61. package/dist/chunk-2MWA7H6J.js.map +1 -0
  62. package/dist/{chunk-CJEMSKW3.js → chunk-3SOKHPAO.js} +217 -57
  63. package/dist/chunk-3SOKHPAO.js.map +1 -0
  64. package/dist/{chunk-3N447NTJ.cjs → chunk-3V64BDKG.cjs} +14 -14
  65. package/dist/chunk-3V64BDKG.cjs.map +1 -0
  66. package/dist/{chunk-DZW35WR2.js → chunk-46ZZTP5B.js} +5 -5
  67. package/dist/chunk-46ZZTP5B.js.map +1 -0
  68. package/dist/{chunk-PCTMS2PX.cjs → chunk-47EP245Y.cjs} +19 -9
  69. package/dist/chunk-47EP245Y.cjs.map +1 -0
  70. package/dist/{chunk-DZHP4UUE.cjs → chunk-4H2LGLGI.cjs} +16 -12
  71. package/dist/chunk-4H2LGLGI.cjs.map +1 -0
  72. package/dist/{chunk-7HOU6XMW.js → chunk-4L62MAZA.js} +25 -28
  73. package/dist/chunk-4L62MAZA.js.map +1 -0
  74. package/dist/{chunk-GQR7IHER.js → chunk-4ORSJM2I.js} +6 -6
  75. package/dist/chunk-4ORSJM2I.js.map +1 -0
  76. package/dist/{chunk-FQG4DRJS.cjs → chunk-4WQUX2B4.cjs} +71 -45
  77. package/dist/chunk-4WQUX2B4.cjs.map +1 -0
  78. package/dist/{chunk-3QXN7JBV.js → chunk-4XVJYNOT.js} +7 -5
  79. package/dist/chunk-4XVJYNOT.js.map +1 -0
  80. package/dist/{chunk-6WJJ26J5.js → chunk-5J26EN5I.js} +6 -6
  81. package/dist/chunk-5J26EN5I.js.map +1 -0
  82. package/dist/{chunk-K2EZ4SS4.js → chunk-5YNIOIKK.js} +5 -5
  83. package/dist/chunk-5YNIOIKK.js.map +1 -0
  84. package/dist/{chunk-5LQ26P4J.cjs → chunk-66BHM3UN.cjs} +11 -11
  85. package/dist/chunk-66BHM3UN.cjs.map +1 -0
  86. package/dist/{chunk-DAH76GIX.cjs → chunk-6E6ZDWZD.cjs} +11 -11
  87. package/dist/chunk-6E6ZDWZD.cjs.map +1 -0
  88. package/dist/{chunk-COPERSVL.cjs → chunk-6EGHZDZI.cjs} +15 -15
  89. package/dist/{chunk-COPERSVL.cjs.map → chunk-6EGHZDZI.cjs.map} +1 -1
  90. package/dist/{chunk-KHQRHTTN.js → chunk-6JNW43SE.js} +40 -30
  91. package/dist/chunk-6JNW43SE.js.map +1 -0
  92. package/dist/{chunk-3YFDZGHO.cjs → chunk-6UWYKNFN.cjs} +13 -13
  93. package/dist/{chunk-3YFDZGHO.cjs.map → chunk-6UWYKNFN.cjs.map} +1 -1
  94. package/dist/{chunk-CHERQT4B.js → chunk-7PNCJ4OQ.js} +4 -4
  95. package/dist/chunk-7PNCJ4OQ.js.map +1 -0
  96. package/dist/{chunk-2KMMVJEE.cjs → chunk-7ZPHLIFP.cjs} +7 -7
  97. package/dist/chunk-7ZPHLIFP.cjs.map +1 -0
  98. package/dist/{chunk-FIAKZSRR.cjs → chunk-AG7VY6MJ.cjs} +19 -12
  99. package/dist/chunk-AG7VY6MJ.cjs.map +1 -0
  100. package/dist/{chunk-7MXBXWVD.js → chunk-ASNAQ35U.js} +5 -5
  101. package/dist/chunk-ASNAQ35U.js.map +1 -0
  102. package/dist/{chunk-DKVRRL3F.js → chunk-BT5H3WMI.js} +6 -6
  103. package/dist/chunk-BT5H3WMI.js.map +1 -0
  104. package/dist/{chunk-S64PTNT7.cjs → chunk-BYB3LQAT.cjs} +27 -30
  105. package/dist/chunk-BYB3LQAT.cjs.map +1 -0
  106. package/dist/{chunk-NZWFBAFQ.js → chunk-CCMLOCTH.js} +30 -4
  107. package/dist/chunk-CCMLOCTH.js.map +1 -0
  108. package/dist/{chunk-HOPFELRP.cjs → chunk-CDS2NXGT.cjs} +4 -4
  109. package/dist/{chunk-HOPFELRP.cjs.map → chunk-CDS2NXGT.cjs.map} +1 -1
  110. package/dist/{chunk-7JN6GXML.cjs → chunk-DKXW2FQC.cjs} +13 -11
  111. package/dist/chunk-DKXW2FQC.cjs.map +1 -0
  112. package/dist/{chunk-QCR6L55R.js → chunk-DR5MQC3W.js} +8 -5
  113. package/dist/chunk-DR5MQC3W.js.map +1 -0
  114. package/dist/{chunk-GUVPVNPD.cjs → chunk-DRIJNFWP.cjs} +11 -11
  115. package/dist/chunk-DRIJNFWP.cjs.map +1 -0
  116. package/dist/{chunk-BMTVFAX2.js → chunk-DX4FBN3I.js} +230 -99
  117. package/dist/chunk-DX4FBN3I.js.map +1 -0
  118. package/dist/{chunk-IKUA7O73.cjs → chunk-E43H3A3G.cjs} +7 -7
  119. package/dist/{chunk-IKUA7O73.cjs.map → chunk-E43H3A3G.cjs.map} +1 -1
  120. package/dist/{chunk-K7UR7GYC.cjs → chunk-ECB3UPTC.cjs} +13 -13
  121. package/dist/chunk-ECB3UPTC.cjs.map +1 -0
  122. package/dist/{chunk-TVPS2NJH.cjs → chunk-EHKHXQ46.cjs} +11 -11
  123. package/dist/chunk-EHKHXQ46.cjs.map +1 -0
  124. package/dist/{chunk-SLJNRP7O.cjs → chunk-EHNX3MG3.cjs} +14 -24
  125. package/dist/chunk-EHNX3MG3.cjs.map +1 -0
  126. package/dist/{chunk-MQBKLKYF.js → chunk-F5AOBHQY.js} +4 -4
  127. package/dist/{chunk-MQBKLKYF.js.map → chunk-F5AOBHQY.js.map} +1 -1
  128. package/dist/{chunk-KUFDELQM.cjs → chunk-FDNJNVKA.cjs} +10 -10
  129. package/dist/chunk-FDNJNVKA.cjs.map +1 -0
  130. package/dist/{chunk-NML7F34A.js → chunk-FSDI3NJV.js} +4 -4
  131. package/dist/chunk-FSDI3NJV.js.map +1 -0
  132. package/dist/{chunk-CCHMQZIB.js → chunk-FV7R2LLD.js} +5 -5
  133. package/dist/chunk-FV7R2LLD.js.map +1 -0
  134. package/dist/{chunk-ID7GYRYL.cjs → chunk-FZIBM3G5.cjs} +11 -11
  135. package/dist/chunk-FZIBM3G5.cjs.map +1 -0
  136. package/dist/{chunk-43WDYYVH.cjs → chunk-G6R6MSRF.cjs} +10 -10
  137. package/dist/chunk-G6R6MSRF.cjs.map +1 -0
  138. package/dist/{chunk-VK72MICB.cjs → chunk-GAWIUMAK.cjs} +8 -8
  139. package/dist/{chunk-VK72MICB.cjs.map → chunk-GAWIUMAK.cjs.map} +1 -1
  140. package/dist/{chunk-3NWZJCWL.js → chunk-GPSNBZPX.js} +5 -5
  141. package/dist/chunk-GPSNBZPX.js.map +1 -0
  142. package/dist/{chunk-MGYBMQAX.cjs → chunk-HFWO37RY.cjs} +9 -9
  143. package/dist/chunk-HFWO37RY.cjs.map +1 -0
  144. package/dist/{chunk-U7GBOQXX.js → chunk-HMB2RIEE.js} +5 -5
  145. package/dist/chunk-HMB2RIEE.js.map +1 -0
  146. package/dist/{chunk-RLH3PS3Y.js → chunk-ILCWDAKD.js} +3 -3
  147. package/dist/{chunk-RLH3PS3Y.js.map → chunk-ILCWDAKD.js.map} +1 -1
  148. package/dist/{chunk-L37ZPX6D.js → chunk-IRUIWMH6.js} +5 -5
  149. package/dist/chunk-IRUIWMH6.js.map +1 -0
  150. package/dist/{chunk-B7IV2PB3.cjs → chunk-JNQ4NL3R.cjs} +9 -9
  151. package/dist/chunk-JNQ4NL3R.cjs.map +1 -0
  152. package/dist/{chunk-FSKUEB7P.js → chunk-K5TPJVOK.js} +3 -3
  153. package/dist/{chunk-FSKUEB7P.js.map → chunk-K5TPJVOK.js.map} +1 -1
  154. package/dist/{chunk-5M624BRW.js → chunk-KTCP23W6.js} +4 -4
  155. package/dist/chunk-KTCP23W6.js.map +1 -0
  156. package/dist/{chunk-2L46SAT7.js → chunk-LIY7MYRG.js} +30 -5
  157. package/dist/chunk-LIY7MYRG.js.map +1 -0
  158. package/dist/{chunk-AA45U5KV.js → chunk-LK2A3HBT.js} +5 -5
  159. package/dist/chunk-LK2A3HBT.js.map +1 -0
  160. package/dist/{chunk-GMLJDDHZ.js → chunk-MPQECPE3.js} +3 -3
  161. package/dist/{chunk-GMLJDDHZ.js.map → chunk-MPQECPE3.js.map} +1 -1
  162. package/dist/{chunk-T6LXFMBR.cjs → chunk-MY4KMVJ5.cjs} +9 -9
  163. package/dist/{chunk-T6LXFMBR.cjs.map → chunk-MY4KMVJ5.cjs.map} +1 -1
  164. package/dist/chunk-MYXLKVJE.js +889 -0
  165. package/dist/chunk-MYXLKVJE.js.map +1 -0
  166. package/dist/{chunk-N7NZQVIV.cjs → chunk-NG7DRWWT.cjs} +7 -7
  167. package/dist/chunk-NG7DRWWT.cjs.map +1 -0
  168. package/dist/{chunk-MZQY2FTP.cjs → chunk-NGKUI7XE.cjs} +13 -13
  169. package/dist/chunk-NGKUI7XE.cjs.map +1 -0
  170. package/dist/{chunk-D2IP3MWJ.cjs → chunk-OAIMES5S.cjs} +219 -59
  171. package/dist/chunk-OAIMES5S.cjs.map +1 -0
  172. package/dist/{chunk-XKDBNAHH.cjs → chunk-OAL5RS2X.cjs} +11 -11
  173. package/dist/chunk-OAL5RS2X.cjs.map +1 -0
  174. package/dist/{chunk-FTKL3UAN.cjs → chunk-OFEROCC5.cjs} +6 -6
  175. package/dist/{chunk-FTKL3UAN.cjs.map → chunk-OFEROCC5.cjs.map} +1 -1
  176. package/dist/{chunk-IAE4VRB7.cjs → chunk-OUN3MWRQ.cjs} +35 -10
  177. package/dist/chunk-OUN3MWRQ.cjs.map +1 -0
  178. package/dist/{chunk-TIHVTKXS.cjs → chunk-PQCHNZHM.cjs} +11 -11
  179. package/dist/chunk-PQCHNZHM.cjs.map +1 -0
  180. package/dist/{chunk-BMEMMYVF.js → chunk-PVPTFMJJ.js} +5 -5
  181. package/dist/{chunk-BMEMMYVF.js.map → chunk-PVPTFMJJ.js.map} +1 -1
  182. package/dist/{chunk-LCEMO7NI.js → chunk-QERWC7U6.js} +3 -3
  183. package/dist/{chunk-LCEMO7NI.js.map → chunk-QERWC7U6.js.map} +1 -1
  184. package/dist/{chunk-2PRCN5OJ.cjs → chunk-QKJUAMRK.cjs} +6 -6
  185. package/dist/{chunk-2PRCN5OJ.cjs.map → chunk-QKJUAMRK.cjs.map} +1 -1
  186. package/dist/{chunk-WS2AL7GY.cjs → chunk-R6ZDSXN7.cjs} +34 -8
  187. package/dist/chunk-R6ZDSXN7.cjs.map +1 -0
  188. package/dist/{chunk-FKVYS4RB.js → chunk-RFEKSP62.js} +15 -8
  189. package/dist/chunk-RFEKSP62.js.map +1 -0
  190. package/dist/{chunk-FKAA5FNG.cjs → chunk-RHTVKBRC.cjs} +10 -10
  191. package/dist/chunk-RHTVKBRC.cjs.map +1 -0
  192. package/dist/{chunk-QRTYX5KO.js → chunk-RJIPFWW7.js} +5 -5
  193. package/dist/chunk-RJIPFWW7.js.map +1 -0
  194. package/dist/{chunk-GL3M7MAM.js → chunk-RN7NNB6I.js} +4 -4
  195. package/dist/chunk-RN7NNB6I.js.map +1 -0
  196. package/dist/{chunk-VGGKMTO6.js → chunk-RQJRVKAH.js} +4 -4
  197. package/dist/chunk-RQJRVKAH.js.map +1 -0
  198. package/dist/{chunk-AAKS22M3.cjs → chunk-RWQH5EO5.cjs} +12 -12
  199. package/dist/{chunk-AAKS22M3.cjs.map → chunk-RWQH5EO5.cjs.map} +1 -1
  200. package/dist/{chunk-SKREYNRK.cjs → chunk-SXVMEC6N.cjs} +45 -35
  201. package/dist/chunk-SXVMEC6N.cjs.map +1 -0
  202. package/dist/{chunk-4ABM7UYD.js → chunk-TVDQNLGJ.js} +4 -4
  203. package/dist/chunk-TVDQNLGJ.js.map +1 -0
  204. package/dist/{chunk-QXQSJ3FZ.js → chunk-TWSWD4PU.js} +5 -5
  205. package/dist/chunk-TWSWD4PU.js.map +1 -0
  206. package/dist/chunk-UFMPALRH.js +126 -0
  207. package/dist/chunk-UFMPALRH.js.map +1 -0
  208. package/dist/{chunk-3TLJCGGQ.cjs → chunk-UMIJYYF3.cjs} +230 -99
  209. package/dist/chunk-UMIJYYF3.cjs.map +1 -0
  210. package/dist/{chunk-DZKYVTV3.js → chunk-UZH6PVHD.js} +5 -5
  211. package/dist/{chunk-DZKYVTV3.js.map → chunk-UZH6PVHD.js.map} +1 -1
  212. package/dist/{chunk-ARQLGTTV.js → chunk-V45C74EB.js} +5 -5
  213. package/dist/{chunk-ARQLGTTV.js.map → chunk-V45C74EB.js.map} +1 -1
  214. package/dist/{chunk-EAKXLFOR.cjs → chunk-VBEZS3Q4.cjs} +11 -11
  215. package/dist/chunk-VBEZS3Q4.cjs.map +1 -0
  216. package/dist/{chunk-IXFSJBJS.js → chunk-WJP6CRML.js} +4 -14
  217. package/dist/chunk-WJP6CRML.js.map +1 -0
  218. package/dist/{chunk-KEMT7F5H.cjs → chunk-WVQVGQJO.cjs} +9 -9
  219. package/dist/chunk-WVQVGQJO.cjs.map +1 -0
  220. package/dist/chunk-WYIIWTIR.cjs +128 -0
  221. package/dist/chunk-WYIIWTIR.cjs.map +1 -0
  222. package/dist/{chunk-EYN74SQ5.js → chunk-XE5ZYFGM.js} +5 -5
  223. package/dist/chunk-XE5ZYFGM.js.map +1 -0
  224. package/dist/{chunk-S6NGWPXC.js → chunk-XKERO5K2.js} +4 -4
  225. package/dist/chunk-XKERO5K2.js.map +1 -0
  226. package/dist/chunk-XN6YS55F.cjs +891 -0
  227. package/dist/chunk-XN6YS55F.cjs.map +1 -0
  228. package/dist/{chunk-JT6H7G52.js → chunk-XWCY67K5.js} +5 -5
  229. package/dist/chunk-XWCY67K5.js.map +1 -0
  230. package/dist/{chunk-SC5BGA2N.cjs → chunk-XWN43PZF.cjs} +8 -8
  231. package/dist/chunk-XWN43PZF.cjs.map +1 -0
  232. package/dist/{chunk-Y4HJCMB4.cjs → chunk-YDQDZWZ7.cjs} +7 -7
  233. package/dist/chunk-YDQDZWZ7.cjs.map +1 -0
  234. package/dist/{chunk-VJQCHBS6.js → chunk-YJHB2GHQ.js} +15 -5
  235. package/dist/chunk-YJHB2GHQ.js.map +1 -0
  236. package/dist/{chunk-IUYPKYOU.js → chunk-YOLF5DYU.js} +9 -5
  237. package/dist/chunk-YOLF5DYU.js.map +1 -0
  238. package/dist/{chunk-ALRCYQQX.cjs → chunk-YX6RW6ZW.cjs} +10 -7
  239. package/dist/chunk-YX6RW6ZW.cjs.map +1 -0
  240. package/dist/{chunk-27E6G2GT.js → chunk-YZQROIJY.js} +4 -4
  241. package/dist/chunk-YZQROIJY.js.map +1 -0
  242. package/dist/{chunk-M6JYSINX.cjs → chunk-ZFSFOD5W.cjs} +8 -8
  243. package/dist/chunk-ZFSFOD5W.cjs.map +1 -0
  244. package/dist/{chunk-EFRBTSUO.cjs → chunk-ZTUKOCJN.cjs} +4 -4
  245. package/dist/{chunk-EFRBTSUO.cjs.map → chunk-ZTUKOCJN.cjs.map} +1 -1
  246. package/dist/{chunk-MVJKRPX7.js → chunk-ZY7ETQD6.js} +3 -3
  247. package/dist/{chunk-MVJKRPX7.js.map → chunk-ZY7ETQD6.js.map} +1 -1
  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 +47 -47
  321. package/dist/index.d.ts +47 -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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/convenience.ts","../src/interaction/link.ts","../src/data/streaming.ts","../src/features/dataset.ts","../src/features/datazoom.ts","../src/features/datazoom-widget.ts","../src/features/graphic.ts","../src/features/richtext.ts","../src/registry/registry.ts","../src/scales/time.ts"],"names":["createChart","lineChartType","barChartType","stackedBarChartType","horizontalBarChartType","pieChartType","donutChartType","scatterChartType","sparklineChartType","areaChartType","radarChartType","bubbleChartType","candlestickChartType","gaugeChartType","waterfallChartType","funnelChartType","heatmapChartType","boxplotChartType","histogramChartType","treemapChartType","polarChartType","radialBarChartType","lollipopChartType","bulletChartType","dumbbellChartType","calendarChartType","comboChartType","sankeyChartType","sunburstChartType","treeChartType","graphChartType","parallelChartType","themeRiverChartType","pictorialBarChartType","chordChartType","geoChartType","linesChartType","matrixChartType","customChartType","ohlcChartType","stepChartType","volumeChartType","rangeChartType","baselineChartType","kagiChartType","renkoChartType","charts","rect","PathBuilder","path","text","pad","circle","line","group"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChartData, ChartOptions, ChartInstance } from '../types'\nimport { createChart } from './create'\nimport { lineChartType } from '../charts/line/line-type'\nimport { barChartType } from '../charts/bar/bar-type'\nimport { stackedBarChartType } from '../charts/bar/stacked-bar-type'\nimport { horizontalBarChartType } from '../charts/bar/horizontal-bar-type'\nimport { pieChartType, donutChartType } from '../charts/pie/pie-type'\nimport { scatterChartType } from '../charts/scatter/scatter-type'\nimport { sparklineChartType } from '../charts/sparkline/sparkline-type'\nimport { areaChartType } from '../charts/area/area-type'\nimport { radarChartType } from '../charts/radar/radar-type'\nimport { bubbleChartType } from '../charts/bubble/bubble-type'\nimport { candlestickChartType } from '../charts/candlestick/candlestick-type'\nimport { gaugeChartType } from '../charts/gauge/gauge-type'\nimport { waterfallChartType } from '../charts/waterfall/waterfall-type'\nimport { funnelChartType } from '../charts/funnel/funnel-type'\nimport { heatmapChartType } from '../charts/heatmap/heatmap-type'\nimport { boxplotChartType } from '../charts/boxplot/boxplot-type'\nimport { histogramChartType } from '../charts/histogram/histogram-type'\nimport { treemapChartType } from '../charts/treemap/treemap-type'\nimport { polarChartType } from '../charts/polar/polar-type'\nimport { radialBarChartType } from '../charts/radialbar/radialbar-type'\nimport { lollipopChartType } from '../charts/lollipop/lollipop-type'\nimport { bulletChartType } from '../charts/bullet/bullet-type'\nimport { dumbbellChartType } from '../charts/dumbbell/dumbbell-type'\nimport { calendarChartType } from '../charts/calendar/calendar-type'\nimport { comboChartType } from '../charts/combo/combo-type'\nimport { sankeyChartType } from '../charts/sankey/sankey-type'\nimport { sunburstChartType } from '../charts/sunburst/sunburst-type'\nimport { treeChartType } from '../charts/tree/tree-type'\nimport { graphChartType } from '../charts/graph/graph-type'\nimport { parallelChartType } from '../charts/parallel/parallel-type'\nimport { themeRiverChartType } from '../charts/themeriver/themeriver-type'\nimport { pictorialBarChartType } from '../charts/pictorialbar/pictorialbar-type'\nimport { chordChartType } from '../charts/chord/chord-type'\nimport { geoChartType } from '../charts/geo/geo-type'\nimport { linesChartType } from '../charts/lines/lines-type'\nimport { matrixChartType } from '../charts/matrix/matrix-type'\nimport { customChartType } from '../charts/custom/custom-type'\nimport { ohlcChartType } from '../charts/ohlc/ohlc-type'\nimport { stepChartType } from '../charts/step/step-type'\nimport { volumeChartType } from '../charts/volume/volume-type'\nimport { rangeChartType } from '../charts/range/range-type'\nimport { baselineChartType } from '../charts/baseline/baseline-type'\nimport { kagiChartType } from '../charts/kagi/kagi-type'\nimport { renkoChartType } from '../charts/renko/renko-type'\n\ninterface ChartConfig extends ChartOptions {\n data: ChartData\n debug?: boolean\n}\n\nexport function Line(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, lineChartType, data, options)\n}\n\nexport function Bar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, barChartType, data, options)\n}\n\nexport function StackedBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, stackedBarChartType, data, options)\n}\n\nexport function HorizontalBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, horizontalBarChartType, data, options)\n}\n\nexport function Pie(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, pieChartType, data, options)\n}\n\nexport function Donut(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, donutChartType, data, options)\n}\n\nexport function Scatter(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, scatterChartType, data, options)\n}\n\nexport function Sparkline(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sparklineChartType, data, options)\n}\n\nexport function Area(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, areaChartType, data, options)\n}\n\nexport function Radar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, radarChartType, data, options)\n}\n\nexport function Bubble(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, bubbleChartType, data, options)\n}\n\nexport function Candlestick(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, candlestickChartType, data, options)\n}\n\nexport function Gauge(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, gaugeChartType, data, options)\n}\n\nexport function Waterfall(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, waterfallChartType, data, options)\n}\n\nexport function Funnel(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, funnelChartType, data, options)\n}\n\nexport function Heatmap(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, heatmapChartType, data, options)\n}\n\nexport function Boxplot(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, boxplotChartType, data, options)\n}\n\nexport function Histogram(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, histogramChartType, data, options)\n}\n\nexport function Treemap(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, treemapChartType, data, options)\n}\n\nexport function Polar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, polarChartType, data, options)\n}\n\nexport function RadialBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, radialBarChartType, data, options)\n}\n\nexport function Lollipop(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, lollipopChartType, data, options)\n}\n\nexport function Bullet(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, bulletChartType, data, options)\n}\n\nexport function Dumbbell(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, dumbbellChartType, data, options)\n}\n\nexport function Calendar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, calendarChartType, data, options)\n}\n\nexport function Combo(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, comboChartType, data, options)\n}\n\nexport function Sankey(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sankeyChartType, data, options)\n}\n\nexport function Sunburst(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sunburstChartType, data, options)\n}\n\nexport function Tree(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, treeChartType, data, options)\n}\n\nexport function Graph(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, graphChartType, data, options)\n}\n\nexport function Parallel(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, parallelChartType, data, options)\n}\n\nexport function ThemeRiver(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, themeRiverChartType, data, options)\n}\n\nexport function PictorialBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, pictorialBarChartType, data, options)\n}\n\nexport function Chord(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, chordChartType, data, options)\n}\n\nexport function Geo(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, geoChartType, data, options)\n}\n\nexport function Lines(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, linesChartType, data, options)\n}\n\nexport function Matrix(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, matrixChartType, data, options)\n}\n\nexport function Custom(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, customChartType, data, options)\n}\n\nexport function OHLC(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, ohlcChartType, data, options)\n}\n\nexport function Step(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, stepChartType, data, options)\n}\n\nexport function Volume(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, volumeChartType, data, options)\n}\n\nexport function Range(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, rangeChartType, data, options)\n}\n\nexport function Baseline(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, baselineChartType, data, options)\n}\n\nexport function Kagi(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, kagiChartType, data, options)\n}\n\nexport function Renko(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, renkoChartType, data, options)\n}\n","/**\n * Linked charts — sync crosshair position across multiple chart instances.\n *\n * Usage:\n * ```ts\n * const unlink = linkCharts(chart1, chart2, chart3)\n * // Later:\n * unlink()\n * ```\n */\n\nimport type { ChartInstance } from '../types'\n\n/**\n * Link multiple chart instances so their crosshair positions stay in sync.\n * When one chart emits a crosshair:move event, all others receive it.\n *\n * Returns an unlink function to disconnect the charts.\n */\nexport function linkCharts(...charts: ChartInstance[]): () => void {\n if (charts.length < 2) return () => {}\n\n let broadcasting = false\n const unsubs: (() => void)[] = []\n\n for (const chart of charts) {\n const unsub = chart.on('crosshair:move', (payload: unknown) => {\n if (broadcasting) return\n broadcasting = true\n\n const { x, label } = payload as { x: number; label: string | number | Date }\n\n // Broadcast to all other charts via public _bus\n for (const other of charts) {\n if (other === chart) continue\n other._bus.emit('crosshair:move' as never, { x, label } as never)\n }\n\n broadcasting = false\n })\n\n unsubs.push(unsub)\n\n // Also sync hide events\n const unsubHide = chart.on('crosshair:hide', () => {\n if (broadcasting) return\n broadcasting = true\n for (const other of charts) {\n if (other === chart) continue\n other._bus.emit('crosshair:hide' as never, undefined as never)\n }\n broadcasting = false\n })\n unsubs.push(unsubHide)\n }\n\n return () => {\n for (const unsub of unsubs) unsub()\n unsubs.length = 0\n }\n}\n","/**\n * Realtime streaming data module.\n *\n * Provides a circular buffer + rolling window for live data feeds.\n * Throttled re-render via requestAnimationFrame.\n *\n * Usage:\n * ```ts\n * const stream = createStreamingChart(chart, {\n * windowSize: 100, // show last 100 points\n * seriesCount: 3, // 3 data series\n * seriesNames: ['CPU', 'Memory', 'Disk'],\n * })\n *\n * // Push single data point (one value per series)\n * stream.push([45, 72, 30], 'now')\n *\n * // Push batch of data points\n * stream.pushBatch([\n * { values: [45, 72, 30], label: '10:00' },\n * { values: [46, 71, 31], label: '10:01' },\n * ])\n *\n * // Pause / resume\n * stream.pause()\n * stream.resume()\n *\n * // Clean up\n * stream.destroy()\n * ```\n */\n\nimport type { ChartInstance, ChartData } from '../types'\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\nexport interface StreamingConfig {\n /** Number of data points visible in the rolling window. Default 100. */\n windowSize?: number\n /** Number of data series. Default 1. */\n seriesCount?: number\n /** Series names. Default ['Series 1', 'Series 2', ...] */\n seriesNames?: string[]\n /** Series colors (optional — falls back to chart palette). */\n seriesColors?: string[]\n /** Maximum buffer size (oldest data is discarded beyond this). Default 10x windowSize. */\n maxBufferSize?: number\n /** Throttle interval in ms (0 = use rAF). Default 0. */\n throttleMs?: number\n}\n\n// ---------------------------------------------------------------------------\n// Instance\n// ---------------------------------------------------------------------------\n\nexport interface StreamingInstance {\n /** Push one data point (one value per series). */\n push(values: number[], label?: string | number | Date): void\n /** Push a batch of data points at once. */\n pushBatch(points: Array<{ values: number[]; label?: string | number | Date }>): void\n /** Pause streaming (stops re-renders but still accepts data). */\n pause(): void\n /** Resume streaming re-renders. */\n resume(): void\n /** Clear all buffered data. */\n clear(): void\n /** Get current buffer size. */\n getBufferSize(): number\n /** Destroy the streaming instance and clean up. */\n destroy(): void\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nexport function createStreamingChart(\n chart: ChartInstance,\n config: StreamingConfig = {},\n): StreamingInstance {\n const windowSize = config.windowSize ?? 100\n const seriesCount = config.seriesCount ?? 1\n const maxBuffer = config.maxBufferSize ?? windowSize * 10\n const throttleMs = config.throttleMs ?? 0\n\n const names: string[] = config.seriesNames\n ?? Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`)\n const colors: (string | undefined)[] = config.seriesColors ?? []\n\n // Circular buffers: one per series + one for labels\n const buffers: number[][] = Array.from({ length: seriesCount }, () => [])\n const labels: (string | number | Date)[] = []\n let totalPushed = 0\n\n let paused = false\n let dirty = false\n let rafId: number | null = null\n let throttleTimer: ReturnType<typeof setTimeout> | null = null\n\n // -----------------------------------------------------------------------\n // Internal: schedule a chart update\n // -----------------------------------------------------------------------\n\n function scheduleUpdate(): void {\n if (paused) { dirty = true; return }\n\n if (throttleMs > 0) {\n if (throttleTimer !== null) return\n throttleTimer = setTimeout(() => {\n throttleTimer = null\n flush()\n }, throttleMs)\n } else {\n if (rafId !== null) return\n rafId = requestAnimationFrame(() => {\n rafId = null\n flush()\n })\n }\n }\n\n function flush(): void {\n dirty = false\n\n // Build ChartData from the rolling window\n const start = Math.max(0, labels.length - windowSize)\n const windowLabels = labels.slice(start)\n const series = buffers.map((buf, i) => ({\n name: names[i] ?? `Series ${i + 1}`,\n values: buf.slice(start),\n ...(colors[i] ? { color: colors[i] } : {}),\n }))\n\n const data: ChartData = {\n labels: windowLabels as string[],\n series,\n }\n\n chart.setData(data)\n }\n\n // -----------------------------------------------------------------------\n // Trim buffer if it exceeds maxBuffer\n // -----------------------------------------------------------------------\n\n function trimBuffer(): void {\n if (labels.length <= maxBuffer) return\n const excess = labels.length - maxBuffer\n labels.splice(0, excess)\n for (const buf of buffers) {\n buf.splice(0, excess)\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n push(values: number[], label?: string | number | Date): void {\n totalPushed++\n const lbl = label ?? totalPushed\n labels.push(lbl)\n\n for (let i = 0; i < seriesCount; i++) {\n buffers[i]!.push(values[i] ?? 0)\n }\n\n trimBuffer()\n scheduleUpdate()\n },\n\n pushBatch(points): void {\n for (const pt of points) {\n totalPushed++\n const lbl = pt.label ?? totalPushed\n labels.push(lbl)\n\n for (let i = 0; i < seriesCount; i++) {\n buffers[i]!.push(pt.values[i] ?? 0)\n }\n }\n\n trimBuffer()\n scheduleUpdate()\n },\n\n pause(): void {\n paused = true\n },\n\n resume(): void {\n paused = false\n if (dirty) scheduleUpdate()\n },\n\n clear(): void {\n labels.length = 0\n for (const buf of buffers) buf.length = 0\n totalPushed = 0\n dirty = false\n },\n\n getBufferSize(): number {\n return labels.length\n },\n\n destroy(): void {\n if (rafId !== null) cancelAnimationFrame(rafId)\n if (throttleTimer !== null) clearTimeout(throttleTimer)\n labels.length = 0\n for (const buf of buffers) buf.length = 0\n },\n }\n}\n","import type { ChartData, Series } from '../types'\n\n/**\n * Dataset — data transformation utilities for filtering, sorting, and\n * aggregating chart data before rendering.\n */\n\ntype Labels = ChartData['labels']\n\nfunction getLabels(data: ChartData): NonNullable<Labels> {\n return data.labels ?? []\n}\n\n// ---------------------------------------------------------------------------\n// Filter\n// ---------------------------------------------------------------------------\n\n/** Filter series by a predicate on values. */\nexport function filterData(\n data: ChartData,\n predicate: (value: number, index: number, seriesIndex: number) => boolean,\n): ChartData {\n const labels = getLabels(data)\n const keepIndices = labels\n .map((_: unknown, i: number) =>\n data.series.some((s, si) => predicate(s.values[i] ?? 0, i, si)) ? i : -1,\n )\n .filter((i: number) => i >= 0)\n\n return {\n ...data,\n series: data.series.map((s, si) => ({\n ...s,\n values: s.values.filter((v, i) => predicate(v, i, si)),\n })),\n labels: keepIndices.map((i: number) => (labels as unknown[])[i]) as Labels,\n }\n}\n\n/** Filter to keep only specific series by name or index. */\nexport function filterSeries(\n data: ChartData,\n keep: (string | number)[],\n): ChartData {\n return {\n ...data,\n series: data.series.filter((s, i) =>\n keep.includes(s.name) || keep.includes(i),\n ),\n }\n}\n\n/** Filter to keep only specific labels/categories. */\nexport function filterLabels(\n data: ChartData,\n keep: (string | number | Date)[],\n): ChartData {\n const labels = getLabels(data)\n const keepSet = new Set(keep.map(String))\n const indices = (labels as unknown[])\n .map((l, i) => keepSet.has(String(l)) ? i : -1)\n .filter(i => i >= 0)\n\n return {\n ...data,\n labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: indices.map(i => s.values[i] ?? 0),\n })),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sort\n// ---------------------------------------------------------------------------\n\n/** Sort data by label or by a specific series' values. */\nexport function sortData(\n data: ChartData,\n by: 'label' | number,\n direction: 'asc' | 'desc' = 'asc',\n): ChartData {\n const labels = getLabels(data)\n const indices = (labels as unknown[]).map((_: unknown, i: number) => i)\n const dir = direction === 'asc' ? 1 : -1\n\n if (by === 'label') {\n indices.sort((a, b) => dir * String((labels as unknown[])[a]).localeCompare(String((labels as unknown[])[b])))\n } else {\n const series = data.series[by]\n if (series) {\n indices.sort((a, b) => dir * ((series.values[a] ?? 0) - (series.values[b] ?? 0)))\n }\n }\n\n return {\n ...data,\n labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: indices.map(i => s.values[i] ?? 0),\n })),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Aggregate\n// ---------------------------------------------------------------------------\n\ntype AggFn = 'sum' | 'avg' | 'min' | 'max' | 'count'\n\n/** Aggregate all series values per label into a single series. */\nexport function aggregateData(\n data: ChartData,\n fn: AggFn = 'sum',\n): ChartData {\n const labels = getLabels(data)\n const agg = getAggFn(fn)\n const values = (labels as unknown[]).map((_: unknown, i: number) => {\n const vals = data.series.map(s => s.values[i] ?? 0)\n return agg(vals)\n })\n\n return {\n ...data,\n series: [{ name: fn, values }],\n }\n}\n\nfunction getAggFn(fn: AggFn): (vals: number[]) => number {\n switch (fn) {\n case 'sum': return vals => vals.reduce((a, b) => a + b, 0)\n case 'avg': return vals => vals.length > 0 ? vals.reduce((a, b) => a + b, 0) / vals.length : 0\n case 'min': return vals => Math.min(...vals)\n case 'max': return vals => Math.max(...vals)\n case 'count': return vals => vals.filter(v => v !== 0).length\n }\n}\n\n// ---------------------------------------------------------------------------\n// Transform pipeline\n// ---------------------------------------------------------------------------\n\ntype TransformFn = (data: ChartData) => ChartData\n\n/** Apply a chain of transforms to chart data. */\nexport function transformData(data: ChartData, ...transforms: TransformFn[]): ChartData {\n return transforms.reduce((d, fn) => fn(d), data)\n}\n\n// ---------------------------------------------------------------------------\n// Pivot / transpose\n// ---------------------------------------------------------------------------\n\n/** Transpose rows and columns — series become labels and vice versa. */\nexport function pivotData(data: ChartData): ChartData {\n const labels = getLabels(data)\n const newLabels = data.series.map(s => s.name) as string[]\n const newSeries: Series[] = (labels as unknown[]).map((label: unknown, i: number) => ({\n name: String(label),\n values: data.series.map(s => s.values[i] ?? 0),\n }))\n\n return { labels: newLabels, series: newSeries }\n}\n\n// ---------------------------------------------------------------------------\n// Slice / window\n// ---------------------------------------------------------------------------\n\n/** Take a slice of the data (for pagination or windowing). */\nexport function sliceData(data: ChartData, start: number, end?: number): ChartData {\n const labels = getLabels(data)\n return {\n ...data,\n labels: (labels as unknown[]).slice(start, end) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: s.values.slice(start, end),\n })),\n }\n}\n","import type { ChartData, RenderNode } from '../types'\nimport { rect, path, text } from '../render/tree'\nimport { PathBuilder } from '../render/tree'\n\n/**\n * DataZoom — interactive data range selection and filtering.\n *\n * Provides utilities to:\n * 1. Filter chart data to a visible window (applyDataZoom)\n * 2. Render a zoom slider control (renderDataZoomSlider)\n * 3. Manage zoom state (createDataZoomState)\n */\n\nexport interface DataZoomRange {\n /** Start percentage 0..1 */\n start: number\n /** End percentage 0..1 */\n end: number\n}\n\nexport interface DataZoomState {\n range: DataZoomRange\n setRange(start: number, end: number): void\n reset(): void\n zoomIn(factor?: number): void\n zoomOut(factor?: number): void\n panLeft(amount?: number): void\n panRight(amount?: number): void\n}\n\nexport interface DataZoomSliderOptions {\n x: number\n y: number\n width: number\n height?: number\n trackColor?: string\n handleColor?: string\n selectedColor?: string\n showMinimap?: boolean\n}\n\n/** Create a DataZoom state manager. */\nexport function createDataZoomState(\n initial?: Partial<DataZoomRange>,\n onChange?: (range: DataZoomRange) => void,\n): DataZoomState {\n const range: DataZoomRange = {\n start: initial?.start ?? 0,\n end: initial?.end ?? 1,\n }\n\n function clamp() {\n range.start = Math.max(0, Math.min(range.start, 1))\n range.end = Math.max(range.start + 0.01, Math.min(range.end, 1))\n onChange?.(range)\n }\n\n return {\n range,\n setRange(start: number, end: number) {\n range.start = start\n range.end = end\n clamp()\n },\n reset() {\n range.start = 0\n range.end = 1\n onChange?.(range)\n },\n zoomIn(factor = 0.1) {\n const center = (range.start + range.end) / 2\n const halfSpan = (range.end - range.start) / 2 * (1 - factor)\n range.start = center - halfSpan\n range.end = center + halfSpan\n clamp()\n },\n zoomOut(factor = 0.1) {\n const center = (range.start + range.end) / 2\n const halfSpan = (range.end - range.start) / 2 * (1 + factor)\n range.start = center - halfSpan\n range.end = center + halfSpan\n clamp()\n },\n panLeft(amount = 0.05) {\n const span = range.end - range.start\n range.start = Math.max(0, range.start - amount)\n range.end = range.start + span\n clamp()\n },\n panRight(amount = 0.05) {\n const span = range.end - range.start\n range.end = Math.min(1, range.end + amount)\n range.start = range.end - span\n clamp()\n },\n }\n}\n\n/** Apply DataZoom range to filter chart data. */\nexport function applyDataZoom(data: ChartData, range: DataZoomRange): ChartData {\n const labels = data.labels ?? []\n const total = labels.length\n if (total === 0) return data\n\n const startIdx = Math.floor(range.start * total)\n const endIdx = Math.ceil(range.end * total)\n\n return {\n ...data,\n labels: (labels as unknown[]).slice(startIdx, endIdx) as ChartData['labels'],\n series: data.series.map(s => ({\n ...s,\n values: s.values.slice(startIdx, endIdx),\n })),\n }\n}\n\n/** Render a DataZoom slider as RenderNode[]. */\nexport function renderDataZoomSlider(\n data: ChartData,\n range: DataZoomRange,\n opts: DataZoomSliderOptions,\n): RenderNode[] {\n const nodes: RenderNode[] = []\n const h = opts.height ?? 30\n const trackColor = opts.trackColor ?? '#e5e7eb'\n const handleColor = opts.handleColor ?? '#6b7280'\n const selectedColor = opts.selectedColor ?? 'rgba(59,130,246,0.2)'\n\n // Track background\n nodes.push(rect(opts.x, opts.y, opts.width, h, {\n class: 'chartts-datazoom-track',\n fill: trackColor,\n rx: 4,\n ry: 4,\n }))\n\n // Minimap sparkline\n if (opts.showMinimap !== false && data.series[0]) {\n const values = data.series[0].values\n const max = Math.max(...values.map(Math.abs), 1)\n const pb = new PathBuilder()\n\n for (let i = 0; i < values.length; i++) {\n const x = opts.x + (i / Math.max(values.length - 1, 1)) * opts.width\n const y = opts.y + h - (Math.abs(values[i]!) / max) * (h - 4) - 2\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n\n nodes.push(path(pb.build(), {\n class: 'chartts-datazoom-minimap',\n fill: 'none',\n stroke: handleColor,\n strokeWidth: 1,\n strokeOpacity: 0.4,\n }))\n }\n\n // Selected region\n const selX = opts.x + range.start * opts.width\n const selW = (range.end - range.start) * opts.width\n\n nodes.push(rect(selX, opts.y, selW, h, {\n class: 'chartts-datazoom-selected',\n fill: selectedColor,\n rx: 2,\n ry: 2,\n }))\n\n // Left handle\n nodes.push(rect(selX - 3, opts.y + 4, 6, h - 8, {\n class: 'chartts-datazoom-handle chartts-datazoom-handle-left',\n fill: handleColor,\n rx: 3,\n ry: 3,\n cursor: 'ew-resize',\n }))\n\n // Right handle\n nodes.push(rect(selX + selW - 3, opts.y + 4, 6, h - 8, {\n class: 'chartts-datazoom-handle chartts-datazoom-handle-right',\n fill: handleColor,\n rx: 3,\n ry: 3,\n cursor: 'ew-resize',\n }))\n\n // Range labels\n const dlabels = data.labels ?? []\n const total = dlabels.length\n const startIdx = Math.floor(range.start * total)\n const endIdx = Math.min(Math.ceil(range.end * total) - 1, total - 1)\n\n if (total > 0) {\n nodes.push(text(selX, opts.y + h + 12, String((dlabels as unknown[])[startIdx] ?? ''), {\n class: 'chartts-datazoom-label',\n fill: handleColor,\n textAnchor: 'start',\n fontSize: 9,\n }))\n\n nodes.push(text(selX + selW, opts.y + h + 12, String((dlabels as unknown[])[endIdx] ?? ''), {\n class: 'chartts-datazoom-label',\n fill: handleColor,\n textAnchor: 'end',\n fontSize: 9,\n }))\n }\n\n return nodes\n}\n","/**\n * Interactive DataZoom slider widget.\n *\n * A real DOM element with draggable handles and minimap sparkline.\n * Lives outside the chart render loop — manages its own pointer events.\n *\n * Usage:\n * ```ts\n * const widget = createDataZoomWidget({\n * data: fullData,\n * onChange: (range) => {\n * chart.setData(applyDataZoom(fullData, range))\n * },\n * })\n * container.appendChild(widget.element)\n * ```\n */\n\nimport type { ChartData } from '../types'\nimport { createDataZoomState, type DataZoomState, type DataZoomRange } from './datazoom'\n\nexport interface DataZoomWidgetOptions {\n /** Chart data (first series used for minimap sparkline). */\n data: ChartData\n /** Height of the slider in pixels. Default 40. */\n height?: number\n /** Initial visible range. Default { start: 0, end: 1 }. */\n initialRange?: Partial<DataZoomRange>\n /** Called when range changes via user interaction. */\n onChange?: (range: DataZoomRange) => void\n /** Track background color. */\n trackColor?: string\n /** Handle color. */\n handleColor?: string\n /** Selected region color. */\n selectedColor?: string\n /** Minimap line color. */\n minimapColor?: string\n}\n\nexport interface DataZoomWidget {\n /** The DOM element to insert into the page. */\n element: HTMLElement\n /** The state manager (setRange, reset, zoomIn, zoomOut, panLeft, panRight). */\n state: DataZoomState\n /** Update minimap sparkline data. */\n setData(data: ChartData): void\n /** Destroy and clean up. */\n destroy(): void\n}\n\nexport function createDataZoomWidget(options: DataZoomWidgetOptions): DataZoomWidget {\n const h = options.height ?? 40\n const trackColor = options.trackColor ?? '#e5e7eb'\n const handleColor = options.handleColor ?? '#6b7280'\n const selectedColor = options.selectedColor ?? 'rgba(59,130,246,0.25)'\n const minimapColor = options.minimapColor ?? '#9ca3af'\n\n let currentData = options.data\n\n // State\n const state = createDataZoomState(\n options.initialRange,\n (range) => {\n updateLayout()\n options.onChange?.(range)\n },\n )\n\n // -----------------------------------------------------------------------\n // DOM construction\n // -----------------------------------------------------------------------\n\n const root = document.createElement('div')\n root.className = 'chartts-datazoom-widget'\n root.style.cssText = `position:relative;height:${h}px;width:100%;user-select:none;touch-action:none;`\n\n // Track background\n const track = document.createElement('div')\n track.className = 'chartts-datazoom-track'\n track.style.cssText = `position:absolute;inset:0;background:${trackColor};border-radius:4px;overflow:hidden;`\n root.appendChild(track)\n\n // Minimap canvas\n const minimap = document.createElement('canvas')\n minimap.className = 'chartts-datazoom-minimap'\n minimap.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;'\n track.appendChild(minimap)\n\n // Left mask (dimmed area)\n const maskLeft = document.createElement('div')\n maskLeft.style.cssText = `position:absolute;top:0;left:0;height:100%;background:rgba(0,0,0,0.15);border-radius:4px 0 0 4px;pointer-events:none;`\n root.appendChild(maskLeft)\n\n // Right mask (dimmed area)\n const maskRight = document.createElement('div')\n maskRight.style.cssText = `position:absolute;top:0;right:0;height:100%;background:rgba(0,0,0,0.15);border-radius:0 4px 4px 0;pointer-events:none;`\n root.appendChild(maskRight)\n\n // Selected region (draggable for pan)\n const selected = document.createElement('div')\n selected.className = 'chartts-datazoom-selected'\n selected.style.cssText = `position:absolute;top:0;height:100%;background:${selectedColor};cursor:grab;border-top:2px solid ${handleColor};border-bottom:2px solid ${handleColor};`\n root.appendChild(selected)\n\n // Left handle\n const handleLeft = document.createElement('div')\n handleLeft.className = 'chartts-datazoom-handle-left'\n handleLeft.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n root.appendChild(handleLeft)\n\n // Right handle\n const handleRight = document.createElement('div')\n handleRight.className = 'chartts-datazoom-handle-right'\n handleRight.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n root.appendChild(handleRight)\n\n // -----------------------------------------------------------------------\n // Layout update\n // -----------------------------------------------------------------------\n\n function updateLayout(): void {\n const w = root.clientWidth || root.offsetWidth || 300\n const { start, end } = state.range\n\n const leftPx = start * w\n const rightPx = end * w\n const selWidth = rightPx - leftPx\n\n maskLeft.style.width = `${leftPx}px`\n maskRight.style.width = `${w - rightPx}px`\n\n selected.style.left = `${leftPx}px`\n selected.style.width = `${selWidth}px`\n\n handleLeft.style.left = `${leftPx}px`\n handleRight.style.left = `${rightPx}px`\n }\n\n // -----------------------------------------------------------------------\n // Minimap rendering\n // -----------------------------------------------------------------------\n\n function drawMinimap(): void {\n const w = root.clientWidth || root.offsetWidth || 300\n const dpr = window.devicePixelRatio || 1\n minimap.width = Math.round(w * dpr)\n minimap.height = Math.round(h * dpr)\n minimap.style.width = `${w}px`\n minimap.style.height = `${h}px`\n\n const ctx = minimap.getContext('2d')\n if (!ctx) return\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx.clearRect(0, 0, w, h)\n\n const series = currentData.series[0]\n if (!series || series.values.length === 0) return\n\n const values = series.values.filter(v => !isNaN(v))\n if (values.length === 0) return\n\n const max = Math.max(...values)\n const min = Math.min(...values)\n const range = max - min || 1\n const pad = 4\n\n ctx.beginPath()\n ctx.strokeStyle = minimapColor\n ctx.lineWidth = 1\n ctx.globalAlpha = 0.5\n\n let started = false\n for (let i = 0; i < series.values.length; i++) {\n const v = series.values[i]!\n if (isNaN(v)) continue\n const x = (i / Math.max(series.values.length - 1, 1)) * w\n const y = h - pad - ((v - min) / range) * (h - pad * 2)\n if (!started) { ctx.moveTo(x, y); started = true }\n else ctx.lineTo(x, y)\n }\n ctx.stroke()\n\n // Fill area below the line\n if (started) {\n ctx.lineTo(w, h)\n ctx.lineTo(0, h)\n ctx.closePath()\n ctx.fillStyle = minimapColor\n ctx.globalAlpha = 0.08\n ctx.fill()\n }\n }\n\n // -----------------------------------------------------------------------\n // Pointer interaction\n // -----------------------------------------------------------------------\n\n type DragMode = 'left' | 'right' | 'pan' | null\n let dragMode: DragMode = null\n let dragStartX = 0\n let dragStartRange: DataZoomRange = { start: 0, end: 1 }\n\n function toNormalized(clientX: number): number {\n const r = root.getBoundingClientRect()\n return Math.max(0, Math.min(1, (clientX - r.left) / r.width))\n }\n\n function onPointerDown(e: PointerEvent): void {\n const target = e.target as HTMLElement\n if (target === handleLeft || target.closest('.chartts-datazoom-handle-left')) {\n dragMode = 'left'\n } else if (target === handleRight || target.closest('.chartts-datazoom-handle-right')) {\n dragMode = 'right'\n } else if (target === selected || target.closest('.chartts-datazoom-selected')) {\n dragMode = 'pan'\n selected.style.cursor = 'grabbing'\n } else {\n // Click on track — jump to position\n const pos = toNormalized(e.clientX)\n const span = state.range.end - state.range.start\n state.setRange(pos - span / 2, pos + span / 2)\n return\n }\n\n dragStartX = e.clientX\n dragStartRange = { ...state.range }\n root.setPointerCapture(e.pointerId)\n e.preventDefault()\n }\n\n function onPointerMove(e: PointerEvent): void {\n if (!dragMode) return\n\n const dx = e.clientX - dragStartX\n const w = root.clientWidth || root.offsetWidth || 300\n const delta = dx / w\n\n if (dragMode === 'left') {\n state.setRange(\n Math.min(dragStartRange.start + delta, state.range.end - 0.02),\n state.range.end,\n )\n } else if (dragMode === 'right') {\n state.setRange(\n state.range.start,\n Math.max(dragStartRange.end + delta, state.range.start + 0.02),\n )\n } else if (dragMode === 'pan') {\n const span = dragStartRange.end - dragStartRange.start\n let newStart = dragStartRange.start + delta\n let newEnd = dragStartRange.end + delta\n // Clamp to bounds\n if (newStart < 0) { newStart = 0; newEnd = span }\n if (newEnd > 1) { newEnd = 1; newStart = 1 - span }\n state.setRange(newStart, newEnd)\n }\n }\n\n function onPointerUp(_e: PointerEvent): void {\n dragMode = null\n selected.style.cursor = 'grab'\n }\n\n function onDblClick(): void {\n state.reset()\n }\n\n root.addEventListener('pointerdown', onPointerDown)\n root.addEventListener('pointermove', onPointerMove)\n root.addEventListener('pointerup', onPointerUp)\n root.addEventListener('dblclick', onDblClick)\n\n // -----------------------------------------------------------------------\n // Resize observer\n // -----------------------------------------------------------------------\n\n let resizeObserver: ResizeObserver | null = null\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n updateLayout()\n drawMinimap()\n })\n resizeObserver.observe(root)\n }\n\n // Initial draw (deferred to next frame so root has dimensions)\n requestAnimationFrame(() => {\n updateLayout()\n drawMinimap()\n })\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n element: root,\n state,\n\n setData(data: ChartData): void {\n currentData = data\n drawMinimap()\n },\n\n destroy(): void {\n resizeObserver?.disconnect()\n root.removeEventListener('pointerdown', onPointerDown)\n root.removeEventListener('pointermove', onPointerMove)\n root.removeEventListener('pointerup', onPointerUp)\n root.removeEventListener('dblclick', onDblClick)\n root.remove()\n },\n }\n}\n","import type { RenderNode, RenderAttrs } from '../types'\nimport { rect, circle, path, text, line, group } from '../render/tree'\n\n/**\n * Graphic — create custom SVG overlay elements for charts.\n *\n * Provides a declarative API to define arbitrary shapes, text, and groups\n * that can be overlaid on any chart. Positions can be absolute (px)\n * or relative (0..1 proportion of chart area).\n */\n\nexport interface GraphicElement {\n type: 'rect' | 'circle' | 'path' | 'text' | 'line' | 'group' | 'image'\n // Position (absolute px or relative 0..1 with position: 'relative')\n x?: number\n y?: number\n // Sizing\n width?: number\n height?: number\n r?: number\n // Content\n d?: string // path data\n content?: string // text content\n x2?: number // line end x\n y2?: number // line end y\n src?: string // image source\n // Children (for groups)\n children?: GraphicElement[]\n // Positioning mode\n position?: 'absolute' | 'relative'\n // Any SVG attributes\n attrs?: Record<string, unknown>\n}\n\nexport interface GraphicArea {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * Convert an array of GraphicElement definitions into RenderNode[].\n * Use `area` to resolve relative positions.\n */\nexport function createGraphicElements(\n elements: GraphicElement[],\n area?: GraphicArea,\n): RenderNode[] {\n return elements.map(el => resolveElement(el, area)).filter(Boolean) as RenderNode[]\n}\n\nfunction resolveElement(el: GraphicElement, area?: GraphicArea): RenderNode | null {\n const resolve = (v: number | undefined, dim: 'x' | 'y'): number => {\n if (v === undefined) return 0\n if (el.position === 'relative' && area) {\n return dim === 'x'\n ? area.x + v * area.width\n : area.y + v * area.height\n }\n return v\n }\n\n const resolveSize = (v: number | undefined, dim: 'w' | 'h'): number => {\n if (v === undefined) return 0\n if (el.position === 'relative' && area) {\n return dim === 'w' ? v * area.width : v * area.height\n }\n return v\n }\n\n const attrs: RenderAttrs = {\n class: 'chartts-graphic',\n ...(el.attrs as RenderAttrs),\n }\n\n switch (el.type) {\n case 'rect':\n return rect(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n resolveSize(el.width, 'w'),\n resolveSize(el.height, 'h'),\n attrs,\n )\n\n case 'circle':\n return circle(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n el.r ?? 10,\n attrs,\n )\n\n case 'path':\n return el.d ? path(el.d, attrs) : null\n\n case 'text':\n return text(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n el.content ?? '',\n attrs,\n )\n\n case 'line':\n return line(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n resolve(el.x2, 'x'),\n resolve(el.y2, 'y'),\n attrs,\n )\n\n case 'group': {\n const children = (el.children ?? [])\n .map(c => resolveElement(c, area))\n .filter(Boolean) as RenderNode[]\n return group(children, attrs)\n }\n\n case 'image':\n return {\n type: 'image' as unknown as RenderNode['type'],\n attrs: {\n ...attrs,\n href: el.src ?? '',\n x: resolve(el.x, 'x'),\n y: resolve(el.y, 'y'),\n width: resolveSize(el.width, 'w'),\n height: resolveSize(el.height, 'h'),\n },\n } as unknown as RenderNode\n\n default:\n return null\n }\n}\n\n/**\n * Convenience: create a horizontal guideline.\n */\nexport function horizontalLine(\n y: number,\n area: GraphicArea,\n attrs?: RenderAttrs,\n): RenderNode {\n return line(area.x, y, area.x + area.width, y, {\n class: 'chartts-graphic-guideline',\n stroke: '#6b7280',\n strokeWidth: 1,\n strokeDasharray: '4,3',\n ...attrs,\n })\n}\n\n/**\n * Convenience: create a vertical guideline.\n */\nexport function verticalLine(\n x: number,\n area: GraphicArea,\n attrs?: RenderAttrs,\n): RenderNode {\n return line(x, area.y, x, area.y + area.height, {\n class: 'chartts-graphic-guideline',\n stroke: '#6b7280',\n strokeWidth: 1,\n strokeDasharray: '4,3',\n ...attrs,\n })\n}\n\n/**\n * Convenience: create a text annotation at a position.\n */\nexport function annotation(\n x: number, y: number,\n content: string,\n attrs?: RenderAttrs,\n): RenderNode {\n return text(x, y, content, {\n class: 'chartts-graphic-annotation',\n fill: '#374151',\n fontSize: 11,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n ...attrs,\n })\n}\n","import type { RenderNode, RenderAttrs } from '../types'\n\n/**\n * Rich Text — parse simple markup into multi-styled text elements.\n *\n * Supports a simple markup syntax:\n * - {b}bold{/b} or **bold**\n * - {i}italic{/i} or *italic*\n * - {color:red}colored{/color}\n * - {size:16}sized{/size}\n * - {style:name}custom{/style} — uses named styles\n *\n * Returns a RenderNode (text element with tspan children).\n */\n\nexport interface RichTextStyle {\n fontWeight?: number | string\n fontStyle?: string\n fill?: string\n fontSize?: number | string\n fontFamily?: string\n textDecoration?: string\n}\n\nexport interface RichTextOptions {\n /** Default text attributes */\n defaults?: RichTextStyle\n /** Named styles for {style:name} syntax */\n styles?: Record<string, RichTextStyle>\n /** X position */\n x?: number\n /** Y position */\n y?: number\n /** Additional attributes for the parent text element */\n attrs?: RenderAttrs\n}\n\ninterface TextSpan {\n text: string\n style: RichTextStyle\n}\n\n/**\n * Parse rich text markup and return a RenderNode with tspan children.\n */\nexport function parseRichText(\n input: string,\n options: RichTextOptions = {},\n): RenderNode {\n const spans = parse(input, options.defaults ?? {}, options.styles ?? {})\n\n // Build tspan children\n const tspans: RenderNode[] = spans.map(span => ({\n type: 'tspan' as unknown as RenderNode['type'],\n attrs: {\n ...(span.style.fontWeight ? { fontWeight: span.style.fontWeight } : {}),\n ...(span.style.fontStyle ? { fontStyle: span.style.fontStyle } : {}),\n ...(span.style.fill ? { fill: span.style.fill } : {}),\n ...(span.style.fontSize ? { fontSize: span.style.fontSize } : {}),\n ...(span.style.fontFamily ? { fontFamily: span.style.fontFamily } : {}),\n ...(span.style.textDecoration ? { textDecoration: span.style.textDecoration } : {}),\n },\n children: [],\n text: span.text,\n } as unknown as RenderNode))\n\n return {\n type: 'text',\n x: options.x ?? 0,\n y: options.y ?? 0,\n text: '',\n attrs: {\n class: 'chartts-richtext',\n ...options.attrs,\n },\n children: tspans,\n } as unknown as RenderNode\n}\n\n/**\n * Format a value with rich text markup.\n * E.g., richLabel(\"Revenue\", 1234, { valueColor: \"#3b82f6\" })\n * → \"{b}Revenue{/b}: {color:#3b82f6}1,234{/color}\"\n */\nexport function richLabel(\n label: string,\n value: number | string,\n opts?: { valueColor?: string; valueWeight?: string },\n): string {\n const color = opts?.valueColor ?? '#3b82f6'\n const weight = opts?.valueWeight ?? ''\n const valueStr = typeof value === 'number' ? formatNum(value) : value\n const weightTag = weight ? `{b}${valueStr}{/b}` : valueStr\n return `{b}${label}{/b}: {color:${color}}${weightTag}{/color}`\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nfunction parse(\n input: string,\n defaults: RichTextStyle,\n namedStyles: Record<string, RichTextStyle>,\n): TextSpan[] {\n const spans: TextSpan[] = []\n const styleStack: RichTextStyle[] = [{ ...defaults }]\n\n // Pattern matches: {b}, {/b}, {i}, {/i}, {color:X}, {/color}, {size:X}, {/size}, {style:X}, {/style}, **X**, *X*\n const regex = /\\{(b|\\/b|i|\\/i|color:([^}]+)|\\/color|size:([^}]+)|\\/size|style:([^}]+)|\\/style)\\}|\\*\\*(.+?)\\*\\*|\\*(.+?)\\*/g\n\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(input)) !== null) {\n // Text before this match\n if (match.index > lastIndex) {\n spans.push({ text: input.slice(lastIndex, match.index), style: currentStyle(styleStack) })\n }\n\n const tag = match[1]\n const boldShorthand = match[5]\n const italicShorthand = match[6]\n\n if (boldShorthand) {\n spans.push({ text: boldShorthand, style: { ...currentStyle(styleStack), fontWeight: 700 } })\n } else if (italicShorthand) {\n spans.push({ text: italicShorthand, style: { ...currentStyle(styleStack), fontStyle: 'italic' } })\n } else if (tag === 'b') {\n styleStack.push({ ...currentStyle(styleStack), fontWeight: 700 })\n } else if (tag === '/b') {\n popStyle(styleStack)\n } else if (tag === 'i') {\n styleStack.push({ ...currentStyle(styleStack), fontStyle: 'italic' })\n } else if (tag === '/i') {\n popStyle(styleStack)\n } else if (tag?.startsWith('color:')) {\n styleStack.push({ ...currentStyle(styleStack), fill: match[2] })\n } else if (tag === '/color') {\n popStyle(styleStack)\n } else if (tag?.startsWith('size:')) {\n styleStack.push({ ...currentStyle(styleStack), fontSize: parseFloat(match[3]!) || 12 })\n } else if (tag === '/size') {\n popStyle(styleStack)\n } else if (tag?.startsWith('style:')) {\n const named = namedStyles[match[4]!]\n if (named) {\n styleStack.push({ ...currentStyle(styleStack), ...named })\n }\n } else if (tag === '/style') {\n popStyle(styleStack)\n }\n\n lastIndex = match.index + match[0].length\n }\n\n // Remaining text\n if (lastIndex < input.length) {\n spans.push({ text: input.slice(lastIndex), style: currentStyle(styleStack) })\n }\n\n return spans\n}\n\nfunction currentStyle(stack: RichTextStyle[]): RichTextStyle {\n return { ...stack[stack.length - 1]! }\n}\n\nfunction popStyle(stack: RichTextStyle[]): void {\n if (stack.length > 1) stack.pop()\n}\n\nfunction formatNum(n: number): string {\n return n.toLocaleString()\n}\n","import type { ChartTypePlugin, ScaleFactory, ScaleType } from '../types'\n\nconst charts = new Map<string, ChartTypePlugin>()\nconst scales = new Map<ScaleType, ScaleFactory>()\n\nexport function registerChart(plugin: ChartTypePlugin): void {\n if (charts.has(plugin.type)) {\n throw new Error(`[chartts] Chart type \"${plugin.type}\" already registered.`)\n }\n charts.set(plugin.type, plugin)\n}\n\nexport function getChart(type: string): ChartTypePlugin {\n const plugin = charts.get(type)\n if (!plugin) {\n const available = Array.from(charts.keys()).join(', ') || 'none'\n throw new Error(`[chartts] Unknown chart type \"${type}\". Registered: ${available}`)\n }\n return plugin\n}\n\nexport function registerScale(type: ScaleType, factory: ScaleFactory): void {\n scales.set(type, factory)\n}\n\nexport function getScaleFactory(type: ScaleType): ScaleFactory {\n const factory = scales.get(type)\n if (!factory) {\n throw new Error(`[chartts] Unknown scale type \"${type}\".`)\n }\n return factory\n}\n\nexport function clearRegistry(): void {\n charts.clear()\n scales.clear()\n}\n","import type { Scale, Tick } from '../types'\n\nexport interface TimeScaleOpts {\n domain?: [number | Date, number | Date]\n range?: [number, number]\n format?: (value: Date) => string\n}\n\nconst S = 1000, M = 60 * S, H = 60 * M, D = 24 * H, W = 7 * D, MO = 30 * D, Y = 365 * D\n\nconst INTERVALS: { ms: number; fmt: (d: Date) => string }[] = [\n { ms: S, fmt: fmtTime },\n { ms: 5 * S, fmt: fmtTime },\n { ms: 15 * S, fmt: fmtTime },\n { ms: 30 * S, fmt: fmtTime },\n { ms: M, fmt: fmtTime },\n { ms: 5 * M, fmt: fmtTime },\n { ms: 15 * M, fmt: fmtTime },\n { ms: H, fmt: fmtTime },\n { ms: 3 * H, fmt: fmtTime },\n { ms: 6 * H, fmt: fmtTime },\n { ms: 12 * H, fmt: fmtTime },\n { ms: D, fmt: fmtDate },\n { ms: W, fmt: fmtDate },\n { ms: MO, fmt: fmtMonthYear },\n { ms: 3 * MO, fmt: fmtMonthYear },\n { ms: 6 * MO, fmt: fmtMonthYear },\n { ms: Y, fmt: fmtYear },\n { ms: 5 * Y, fmt: fmtYear },\n { ms: 10 * Y, fmt: fmtYear },\n]\n\nexport function createTimeScale(opts?: TimeScaleOpts): Scale {\n let dMin = ts(opts?.domain?.[0] ?? 0)\n let dMax = ts(opts?.domain?.[1] ?? Date.now())\n let rMin = opts?.range?.[0] ?? 0\n let rMax = opts?.range?.[1] ?? 1\n const customFmt = opts?.format\n\n function map(value: number | string | Date): number {\n const v = ts(value)\n const span = dMax - dMin\n if (span === 0) return (rMin + rMax) / 2\n return rMin + ((v - dMin) / span) * (rMax - rMin)\n }\n\n function invert(px: number): number {\n const span = rMax - rMin\n if (span === 0) return (dMin + dMax) / 2\n return dMin + ((px - rMin) / span) * (dMax - dMin)\n }\n\n function ticks(count = 6): Tick[] {\n const span = dMax - dMin\n if (span <= 0) return []\n\n const target = span / count\n const interval = INTERVALS.find((i) => i.ms >= target) ?? INTERVALS[INTERVALS.length - 1]!\n const fmt = customFmt ?? interval.fmt\n const result: Tick[] = []\n const start = Math.ceil(dMin / interval.ms) * interval.ms\n\n for (let t = start; t <= dMax; t += interval.ms) {\n const d = new Date(t)\n result.push({ value: d, position: map(t), label: fmt(d) })\n }\n return result\n }\n\n return {\n map,\n invert,\n ticks,\n setDomain(min, max) { dMin = ts(min); dMax = ts(max) },\n setRange(min, max) { rMin = min; rMax = max },\n getDomain() { return [new Date(dMin), new Date(dMax)] },\n getRange() { return [rMin, rMax] },\n bandwidth() { return 0 },\n }\n}\n\nfunction ts(v: number | string | Date): number {\n return v instanceof Date ? v.getTime() : typeof v === 'string' ? new Date(v).getTime() : v\n}\n\nconst MONTHS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] as const\n\nfunction pad(n: number): string { return n < 10 ? `0${n}` : String(n) }\nfunction fmtTime(d: Date): string { return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\nfunction fmtDate(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getDate()}` }\nfunction fmtMonthYear(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getFullYear()}` }\nfunction fmtYear(d: Date): string { return String(d.getFullYear()) }\n"]}
1
+ {"version":3,"sources":["../src/api/convenience.ts","../src/interaction/link.ts","../src/data/streaming.ts","../src/features/dataset.ts","../src/features/datazoom.ts","../src/features/datazoom-widget.ts","../src/features/graphic.ts","../src/features/richtext.ts","../src/registry/registry.ts","../src/scales/time.ts"],"names":["createChart","lineChartType","barChartType","stackedBarChartType","horizontalBarChartType","pieChartType","donutChartType","scatterChartType","sparklineChartType","areaChartType","radarChartType","bubbleChartType","candlestickChartType","gaugeChartType","waterfallChartType","funnelChartType","heatmapChartType","boxplotChartType","histogramChartType","treemapChartType","polarChartType","radialBarChartType","lollipopChartType","bulletChartType","dumbbellChartType","calendarChartType","comboChartType","sankeyChartType","sunburstChartType","treeChartType","graphChartType","parallelChartType","themeRiverChartType","pictorialBarChartType","chordChartType","geoChartType","linesChartType","matrixChartType","customChartType","ohlcChartType","stepChartType","volumeChartType","rangeChartType","baselineChartType","kagiChartType","renkoChartType","charts","rect","PathBuilder","path","text","pad","circle","line","group"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChartData, ChartOptions, ChartInstance } from '../types'\nimport { createChart } from './create'\nimport { lineChartType } from '../charts/line/line-type'\nimport { barChartType } from '../charts/bar/bar-type'\nimport { stackedBarChartType } from '../charts/bar/stacked-bar-type'\nimport { horizontalBarChartType } from '../charts/bar/horizontal-bar-type'\nimport { pieChartType, donutChartType } from '../charts/pie/pie-type'\nimport { scatterChartType } from '../charts/scatter/scatter-type'\nimport { sparklineChartType } from '../charts/sparkline/sparkline-type'\nimport { areaChartType } from '../charts/area/area-type'\nimport { radarChartType } from '../charts/radar/radar-type'\nimport { bubbleChartType } from '../charts/bubble/bubble-type'\nimport { candlestickChartType } from '../charts/candlestick/candlestick-type'\nimport { gaugeChartType } from '../charts/gauge/gauge-type'\nimport { waterfallChartType } from '../charts/waterfall/waterfall-type'\nimport { funnelChartType } from '../charts/funnel/funnel-type'\nimport { heatmapChartType } from '../charts/heatmap/heatmap-type'\nimport { boxplotChartType } from '../charts/boxplot/boxplot-type'\nimport { histogramChartType } from '../charts/histogram/histogram-type'\nimport { treemapChartType } from '../charts/treemap/treemap-type'\nimport { polarChartType } from '../charts/polar/polar-type'\nimport { radialBarChartType } from '../charts/radialbar/radialbar-type'\nimport { lollipopChartType } from '../charts/lollipop/lollipop-type'\nimport { bulletChartType } from '../charts/bullet/bullet-type'\nimport { dumbbellChartType } from '../charts/dumbbell/dumbbell-type'\nimport { calendarChartType } from '../charts/calendar/calendar-type'\nimport { comboChartType } from '../charts/combo/combo-type'\nimport { sankeyChartType } from '../charts/sankey/sankey-type'\nimport { sunburstChartType } from '../charts/sunburst/sunburst-type'\nimport { treeChartType } from '../charts/tree/tree-type'\nimport { graphChartType } from '../charts/graph/graph-type'\nimport { parallelChartType } from '../charts/parallel/parallel-type'\nimport { themeRiverChartType } from '../charts/themeriver/themeriver-type'\nimport { pictorialBarChartType } from '../charts/pictorialbar/pictorialbar-type'\nimport { chordChartType } from '../charts/chord/chord-type'\nimport { geoChartType } from '../charts/geo/geo-type'\nimport { linesChartType } from '../charts/lines/lines-type'\nimport { matrixChartType } from '../charts/matrix/matrix-type'\nimport { customChartType } from '../charts/custom/custom-type'\nimport { ohlcChartType } from '../charts/ohlc/ohlc-type'\nimport { stepChartType } from '../charts/step/step-type'\nimport { volumeChartType } from '../charts/volume/volume-type'\nimport { rangeChartType } from '../charts/range/range-type'\nimport { baselineChartType } from '../charts/baseline/baseline-type'\nimport { kagiChartType } from '../charts/kagi/kagi-type'\nimport { renkoChartType } from '../charts/renko/renko-type'\n\ninterface ChartConfig extends ChartOptions {\n data: ChartData\n debug?: boolean\n}\n\nexport function Line(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, lineChartType, data, options)\n}\n\nexport function Bar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, barChartType, data, options)\n}\n\nexport function StackedBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, stackedBarChartType, data, options)\n}\n\nexport function HorizontalBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, horizontalBarChartType, data, options)\n}\n\nexport function Pie(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, pieChartType, data, options)\n}\n\nexport function Donut(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, donutChartType, data, options)\n}\n\nexport function Scatter(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, scatterChartType, data, options)\n}\n\nexport function Sparkline(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sparklineChartType, data, options)\n}\n\nexport function Area(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, areaChartType, data, options)\n}\n\nexport function Radar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, radarChartType, data, options)\n}\n\nexport function Bubble(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, bubbleChartType, data, options)\n}\n\nexport function Candlestick(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, candlestickChartType, data, options)\n}\n\nexport function Gauge(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, gaugeChartType, data, options)\n}\n\nexport function Waterfall(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, waterfallChartType, data, options)\n}\n\nexport function Funnel(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, funnelChartType, data, options)\n}\n\nexport function Heatmap(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, heatmapChartType, data, options)\n}\n\nexport function Boxplot(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, boxplotChartType, data, options)\n}\n\nexport function Histogram(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, histogramChartType, data, options)\n}\n\nexport function Treemap(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, treemapChartType, data, options)\n}\n\nexport function Polar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, polarChartType, data, options)\n}\n\nexport function RadialBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, radialBarChartType, data, options)\n}\n\nexport function Lollipop(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, lollipopChartType, data, options)\n}\n\nexport function Bullet(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, bulletChartType, data, options)\n}\n\nexport function Dumbbell(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, dumbbellChartType, data, options)\n}\n\nexport function Calendar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, calendarChartType, data, options)\n}\n\nexport function Combo(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, comboChartType, data, options)\n}\n\nexport function Sankey(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sankeyChartType, data, options)\n}\n\nexport function Sunburst(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, sunburstChartType, data, options)\n}\n\nexport function Tree(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, treeChartType, data, options)\n}\n\nexport function Graph(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, graphChartType, data, options)\n}\n\nexport function Parallel(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, parallelChartType, data, options)\n}\n\nexport function ThemeRiver(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, themeRiverChartType, data, options)\n}\n\nexport function PictorialBar(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, pictorialBarChartType, data, options)\n}\n\nexport function Chord(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, chordChartType, data, options)\n}\n\nexport function Geo(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, geoChartType, data, options)\n}\n\nexport function Lines(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, linesChartType, data, options)\n}\n\nexport function Matrix(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, matrixChartType, data, options)\n}\n\nexport function Custom(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, customChartType, data, options)\n}\n\nexport function OHLC(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, ohlcChartType, data, options)\n}\n\nexport function Step(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, stepChartType, data, options)\n}\n\nexport function Volume(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, volumeChartType, data, options)\n}\n\nexport function Range(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, rangeChartType, data, options)\n}\n\nexport function Baseline(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, baselineChartType, data, options)\n}\n\nexport function Kagi(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, kagiChartType, data, options)\n}\n\nexport function Renko(target: string | HTMLElement, config: ChartConfig): ChartInstance {\n const { data, ...options } = config\n return createChart(target, renkoChartType, data, options)\n}\n","/**\n * Linked charts — sync crosshair position across multiple chart instances.\n *\n * Usage:\n * ```ts\n * const unlink = linkCharts(chart1, chart2, chart3)\n * // Later:\n * unlink()\n * ```\n */\n\nimport type { ChartInstance } from '../types'\n\n/**\n * Link multiple chart instances so their crosshair positions stay in sync.\n * When one chart emits a crosshair:move event, all others receive it.\n *\n * Returns an unlink function to disconnect the charts.\n */\nexport function linkCharts(...charts: ChartInstance[]): () => void {\n if (charts.length < 2) return () => {}\n\n let broadcasting = false\n const unsubs: (() => void)[] = []\n\n for (const chart of charts) {\n const unsub = chart.on('crosshair:move', (payload: unknown) => {\n if (broadcasting) return\n broadcasting = true\n\n const { x, label } = payload as { x: number; label: string | number | Date }\n\n // Broadcast to all other charts via public _bus\n for (const other of charts) {\n if (other === chart) continue\n other._bus.emit('crosshair:move' as never, { x, label } as never)\n }\n\n broadcasting = false\n })\n\n unsubs.push(unsub)\n\n // Also sync hide events\n const unsubHide = chart.on('crosshair:hide', () => {\n if (broadcasting) return\n broadcasting = true\n for (const other of charts) {\n if (other === chart) continue\n other._bus.emit('crosshair:hide' as never, undefined as never)\n }\n broadcasting = false\n })\n unsubs.push(unsubHide)\n }\n\n return () => {\n for (const unsub of unsubs) unsub()\n unsubs.length = 0\n }\n}\n","/**\n * Realtime streaming data module.\n *\n * Provides a circular buffer + rolling window for live data feeds.\n * Throttled re-render via requestAnimationFrame.\n *\n * Usage:\n * ```ts\n * const stream = createStreamingChart(chart, {\n * windowSize: 100, // show last 100 points\n * seriesCount: 3, // 3 data series\n * seriesNames: ['CPU', 'Memory', 'Disk'],\n * })\n *\n * // Push single data point (one value per series)\n * stream.push([45, 72, 30], 'now')\n *\n * // Push batch of data points\n * stream.pushBatch([\n * { values: [45, 72, 30], label: '10:00' },\n * { values: [46, 71, 31], label: '10:01' },\n * ])\n *\n * // Pause / resume\n * stream.pause()\n * stream.resume()\n *\n * // Clean up\n * stream.destroy()\n * ```\n */\n\nimport type { ChartInstance, ChartData } from '../types'\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\nexport interface StreamingConfig {\n /** Number of data points visible in the rolling window. Default 100. */\n windowSize?: number\n /** Number of data series. Default 1. */\n seriesCount?: number\n /** Series names. Default ['Series 1', 'Series 2', ...] */\n seriesNames?: string[]\n /** Series colors (optional — falls back to chart palette). */\n seriesColors?: string[]\n /** Maximum buffer size (oldest data is discarded beyond this). Default 10x windowSize. */\n maxBufferSize?: number\n /** Throttle interval in ms (0 = use rAF). Default 0. */\n throttleMs?: number\n}\n\n// ---------------------------------------------------------------------------\n// Instance\n// ---------------------------------------------------------------------------\n\nexport interface StreamingInstance {\n /** Push one data point (one value per series). */\n push(values: number[], label?: string | number | Date): void\n /** Push a batch of data points at once. */\n pushBatch(points: Array<{ values: number[]; label?: string | number | Date }>): void\n /** Pause streaming (stops re-renders but still accepts data). */\n pause(): void\n /** Resume streaming re-renders. */\n resume(): void\n /** Clear all buffered data. */\n clear(): void\n /** Get current buffer size. */\n getBufferSize(): number\n /** Destroy the streaming instance and clean up. */\n destroy(): void\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nexport function createStreamingChart(\n chart: ChartInstance,\n config: StreamingConfig = {},\n): StreamingInstance {\n const windowSize = config.windowSize ?? 100\n const seriesCount = config.seriesCount ?? 1\n const maxBuffer = config.maxBufferSize ?? windowSize * 10\n const throttleMs = config.throttleMs ?? 0\n\n const names: string[] = config.seriesNames\n ?? Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`)\n const colors: (string | undefined)[] = config.seriesColors ?? []\n\n // Circular buffers: one per series + one for labels\n const buffers: number[][] = Array.from({ length: seriesCount }, () => [])\n const labels: (string | number | Date)[] = []\n let totalPushed = 0\n\n let paused = false\n let dirty = false\n let rafId: number | null = null\n let throttleTimer: ReturnType<typeof setTimeout> | null = null\n\n // -----------------------------------------------------------------------\n // Internal: schedule a chart update\n // -----------------------------------------------------------------------\n\n function scheduleUpdate(): void {\n if (paused) { dirty = true; return }\n\n if (throttleMs > 0) {\n if (throttleTimer !== null) return\n throttleTimer = setTimeout(() => {\n throttleTimer = null\n flush()\n }, throttleMs)\n } else {\n if (rafId !== null) return\n rafId = requestAnimationFrame(() => {\n rafId = null\n flush()\n })\n }\n }\n\n function flush(): void {\n dirty = false\n\n // Build ChartData from the rolling window\n const start = Math.max(0, labels.length - windowSize)\n const windowLabels = labels.slice(start)\n const series = buffers.map((buf, i) => ({\n name: names[i] ?? `Series ${i + 1}`,\n values: buf.slice(start),\n ...(colors[i] ? { color: colors[i] } : {}),\n }))\n\n const data: ChartData = {\n labels: windowLabels as string[],\n series,\n }\n\n chart.setData(data)\n }\n\n // -----------------------------------------------------------------------\n // Trim buffer if it exceeds maxBuffer\n // -----------------------------------------------------------------------\n\n function trimBuffer(): void {\n if (labels.length <= maxBuffer) return\n const excess = labels.length - maxBuffer\n labels.splice(0, excess)\n for (const buf of buffers) {\n buf.splice(0, excess)\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n push(values: number[], label?: string | number | Date): void {\n totalPushed++\n const lbl = label ?? totalPushed\n labels.push(lbl)\n\n for (let i = 0; i < seriesCount; i++) {\n buffers[i]!.push(values[i] ?? 0)\n }\n\n trimBuffer()\n scheduleUpdate()\n },\n\n pushBatch(points): void {\n for (const pt of points) {\n totalPushed++\n const lbl = pt.label ?? totalPushed\n labels.push(lbl)\n\n for (let i = 0; i < seriesCount; i++) {\n buffers[i]!.push(pt.values[i] ?? 0)\n }\n }\n\n trimBuffer()\n scheduleUpdate()\n },\n\n pause(): void {\n paused = true\n },\n\n resume(): void {\n paused = false\n if (dirty) scheduleUpdate()\n },\n\n clear(): void {\n labels.length = 0\n for (const buf of buffers) buf.length = 0\n totalPushed = 0\n dirty = false\n },\n\n getBufferSize(): number {\n return labels.length\n },\n\n destroy(): void {\n if (rafId !== null) cancelAnimationFrame(rafId)\n if (throttleTimer !== null) clearTimeout(throttleTimer)\n labels.length = 0\n for (const buf of buffers) buf.length = 0\n },\n }\n}\n","import type { ChartData, Series } from '../types'\n\n/**\n * Dataset — data transformation utilities for filtering, sorting, and\n * aggregating chart data before rendering.\n */\n\ntype Labels = ChartData['labels']\n\nfunction getLabels(data: ChartData): NonNullable<Labels> {\n return data.labels ?? []\n}\n\n// ---------------------------------------------------------------------------\n// Filter\n// ---------------------------------------------------------------------------\n\n/** Filter series by a predicate on values. */\nexport function filterData(\n data: ChartData,\n predicate: (value: number, index: number, seriesIndex: number) => boolean,\n): ChartData {\n const labels = getLabels(data)\n const keepIndices = labels\n .map((_: unknown, i: number) =>\n data.series.some((s, si) => predicate(s.values[i] ?? 0, i, si)) ? i : -1,\n )\n .filter((i: number) => i >= 0)\n\n return {\n ...data,\n series: data.series.map((s, si) => ({\n ...s,\n values: s.values.filter((v, i) => predicate(v, i, si)),\n })),\n labels: keepIndices.map((i: number) => (labels as unknown[])[i]) as Labels,\n }\n}\n\n/** Filter to keep only specific series by name or index. */\nexport function filterSeries(\n data: ChartData,\n keep: (string | number)[],\n): ChartData {\n return {\n ...data,\n series: data.series.filter((s, i) =>\n keep.includes(s.name) || keep.includes(i),\n ),\n }\n}\n\n/** Filter to keep only specific labels/categories. */\nexport function filterLabels(\n data: ChartData,\n keep: (string | number | Date)[],\n): ChartData {\n const labels = getLabels(data)\n const keepSet = new Set(keep.map(String))\n const indices = (labels as unknown[])\n .map((l, i) => keepSet.has(String(l)) ? i : -1)\n .filter(i => i >= 0)\n\n return {\n ...data,\n labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: indices.map(i => s.values[i] ?? 0),\n })),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sort\n// ---------------------------------------------------------------------------\n\n/** Sort data by label or by a specific series' values. */\nexport function sortData(\n data: ChartData,\n by: 'label' | number,\n direction: 'asc' | 'desc' = 'asc',\n): ChartData {\n const labels = getLabels(data)\n const indices = (labels as unknown[]).map((_: unknown, i: number) => i)\n const dir = direction === 'asc' ? 1 : -1\n\n if (by === 'label') {\n indices.sort((a, b) => dir * String((labels as unknown[])[a]).localeCompare(String((labels as unknown[])[b])))\n } else {\n const series = data.series[by]\n if (series) {\n indices.sort((a, b) => dir * ((series.values[a] ?? 0) - (series.values[b] ?? 0)))\n }\n }\n\n return {\n ...data,\n labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: indices.map(i => s.values[i] ?? 0),\n })),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Aggregate\n// ---------------------------------------------------------------------------\n\ntype AggFn = 'sum' | 'avg' | 'min' | 'max' | 'count'\n\n/** Aggregate all series values per label into a single series. */\nexport function aggregateData(\n data: ChartData,\n fn: AggFn = 'sum',\n): ChartData {\n const labels = getLabels(data)\n const agg = getAggFn(fn)\n const values = (labels as unknown[]).map((_: unknown, i: number) => {\n const vals = data.series.map(s => s.values[i] ?? 0)\n return agg(vals)\n })\n\n return {\n ...data,\n series: [{ name: fn, values }],\n }\n}\n\nfunction getAggFn(fn: AggFn): (vals: number[]) => number {\n switch (fn) {\n case 'sum': return vals => vals.reduce((a, b) => a + b, 0)\n case 'avg': return vals => vals.length > 0 ? vals.reduce((a, b) => a + b, 0) / vals.length : 0\n case 'min': return vals => Math.min(...vals)\n case 'max': return vals => Math.max(...vals)\n case 'count': return vals => vals.filter(v => v !== 0).length\n }\n}\n\n// ---------------------------------------------------------------------------\n// Transform pipeline\n// ---------------------------------------------------------------------------\n\ntype TransformFn = (data: ChartData) => ChartData\n\n/** Apply a chain of transforms to chart data. */\nexport function transformData(data: ChartData, ...transforms: TransformFn[]): ChartData {\n return transforms.reduce((d, fn) => fn(d), data)\n}\n\n// ---------------------------------------------------------------------------\n// Pivot / transpose\n// ---------------------------------------------------------------------------\n\n/** Transpose rows and columns — series become labels and vice versa. */\nexport function pivotData(data: ChartData): ChartData {\n const labels = getLabels(data)\n const newLabels = data.series.map(s => s.name) as string[]\n const newSeries: Series[] = (labels as unknown[]).map((label: unknown, i: number) => ({\n name: String(label),\n values: data.series.map(s => s.values[i] ?? 0),\n }))\n\n return { labels: newLabels, series: newSeries }\n}\n\n// ---------------------------------------------------------------------------\n// Slice / window\n// ---------------------------------------------------------------------------\n\n/** Take a slice of the data (for pagination or windowing). */\nexport function sliceData(data: ChartData, start: number, end?: number): ChartData {\n const labels = getLabels(data)\n return {\n ...data,\n labels: (labels as unknown[]).slice(start, end) as Labels,\n series: data.series.map(s => ({\n ...s,\n values: s.values.slice(start, end),\n })),\n }\n}\n","import type { ChartData, RenderNode } from '../types'\nimport { rect, path, text } from '../render/tree'\nimport { PathBuilder } from '../render/tree'\n\n/**\n * DataZoom — interactive data range selection and filtering.\n *\n * Provides utilities to:\n * 1. Filter chart data to a visible window (applyDataZoom)\n * 2. Render a zoom slider control (renderDataZoomSlider)\n * 3. Manage zoom state (createDataZoomState)\n */\n\nexport interface DataZoomRange {\n /** Start percentage 0..1 */\n start: number\n /** End percentage 0..1 */\n end: number\n}\n\nexport interface DataZoomState {\n range: DataZoomRange\n setRange(start: number, end: number): void\n reset(): void\n zoomIn(factor?: number): void\n zoomOut(factor?: number): void\n panLeft(amount?: number): void\n panRight(amount?: number): void\n}\n\nexport interface DataZoomSliderOptions {\n x: number\n y: number\n width: number\n height?: number\n trackColor?: string\n handleColor?: string\n selectedColor?: string\n showMinimap?: boolean\n}\n\n/** Create a DataZoom state manager. */\nexport function createDataZoomState(\n initial?: Partial<DataZoomRange>,\n onChange?: (range: DataZoomRange) => void,\n): DataZoomState {\n const range: DataZoomRange = {\n start: initial?.start ?? 0,\n end: initial?.end ?? 1,\n }\n\n function clamp() {\n range.start = Math.max(0, Math.min(range.start, 1))\n range.end = Math.max(range.start + 0.01, Math.min(range.end, 1))\n onChange?.(range)\n }\n\n return {\n range,\n setRange(start: number, end: number) {\n range.start = start\n range.end = end\n clamp()\n },\n reset() {\n range.start = 0\n range.end = 1\n onChange?.(range)\n },\n zoomIn(factor = 0.1) {\n const center = (range.start + range.end) / 2\n const halfSpan = (range.end - range.start) / 2 * (1 - factor)\n range.start = center - halfSpan\n range.end = center + halfSpan\n clamp()\n },\n zoomOut(factor = 0.1) {\n const center = (range.start + range.end) / 2\n const halfSpan = (range.end - range.start) / 2 * (1 + factor)\n range.start = center - halfSpan\n range.end = center + halfSpan\n clamp()\n },\n panLeft(amount = 0.05) {\n const span = range.end - range.start\n range.start = Math.max(0, range.start - amount)\n range.end = range.start + span\n clamp()\n },\n panRight(amount = 0.05) {\n const span = range.end - range.start\n range.end = Math.min(1, range.end + amount)\n range.start = range.end - span\n clamp()\n },\n }\n}\n\n/** Apply DataZoom range to filter chart data. */\nexport function applyDataZoom(data: ChartData, range: DataZoomRange): ChartData {\n const labels = data.labels ?? []\n const total = labels.length\n if (total === 0) return data\n\n const startIdx = Math.floor(range.start * total)\n const endIdx = Math.ceil(range.end * total)\n\n return {\n ...data,\n labels: (labels as unknown[]).slice(startIdx, endIdx) as ChartData['labels'],\n series: data.series.map(s => ({\n ...s,\n values: s.values.slice(startIdx, endIdx),\n })),\n }\n}\n\n/** Render a DataZoom slider as RenderNode[]. */\nexport function renderDataZoomSlider(\n data: ChartData,\n range: DataZoomRange,\n opts: DataZoomSliderOptions,\n): RenderNode[] {\n const nodes: RenderNode[] = []\n const h = opts.height ?? 30\n const trackColor = opts.trackColor ?? '#e5e7eb'\n const handleColor = opts.handleColor ?? '#6b7280'\n const selectedColor = opts.selectedColor ?? 'rgba(59,130,246,0.2)'\n\n // Track background\n nodes.push(rect(opts.x, opts.y, opts.width, h, {\n class: 'chartts-datazoom-track',\n fill: trackColor,\n rx: 4,\n ry: 4,\n }))\n\n // Minimap sparkline\n if (opts.showMinimap !== false && data.series[0]) {\n const values = data.series[0].values\n const max = Math.max(...values.map(Math.abs), 1)\n const pb = new PathBuilder()\n\n for (let i = 0; i < values.length; i++) {\n const x = opts.x + (i / Math.max(values.length - 1, 1)) * opts.width\n const y = opts.y + h - (Math.abs(values[i]!) / max) * (h - 4) - 2\n if (i === 0) pb.moveTo(x, y)\n else pb.lineTo(x, y)\n }\n\n nodes.push(path(pb.build(), {\n class: 'chartts-datazoom-minimap',\n fill: 'none',\n stroke: handleColor,\n strokeWidth: 1,\n strokeOpacity: 0.4,\n }))\n }\n\n // Selected region\n const selX = opts.x + range.start * opts.width\n const selW = (range.end - range.start) * opts.width\n\n nodes.push(rect(selX, opts.y, selW, h, {\n class: 'chartts-datazoom-selected',\n fill: selectedColor,\n rx: 2,\n ry: 2,\n }))\n\n // Left handle\n nodes.push(rect(selX - 3, opts.y + 4, 6, h - 8, {\n class: 'chartts-datazoom-handle chartts-datazoom-handle-left',\n fill: handleColor,\n rx: 3,\n ry: 3,\n cursor: 'ew-resize',\n }))\n\n // Right handle\n nodes.push(rect(selX + selW - 3, opts.y + 4, 6, h - 8, {\n class: 'chartts-datazoom-handle chartts-datazoom-handle-right',\n fill: handleColor,\n rx: 3,\n ry: 3,\n cursor: 'ew-resize',\n }))\n\n // Range labels\n const dlabels = data.labels ?? []\n const total = dlabels.length\n const startIdx = Math.floor(range.start * total)\n const endIdx = Math.min(Math.ceil(range.end * total) - 1, total - 1)\n\n if (total > 0) {\n nodes.push(text(selX, opts.y + h + 12, String((dlabels as unknown[])[startIdx] ?? ''), {\n class: 'chartts-datazoom-label',\n fill: handleColor,\n textAnchor: 'start',\n fontSize: 9,\n }))\n\n nodes.push(text(selX + selW, opts.y + h + 12, String((dlabels as unknown[])[endIdx] ?? ''), {\n class: 'chartts-datazoom-label',\n fill: handleColor,\n textAnchor: 'end',\n fontSize: 9,\n }))\n }\n\n return nodes\n}\n","/**\n * Interactive DataZoom slider widget.\n *\n * A real DOM element with draggable handles and minimap sparkline.\n * Lives outside the chart render loop — manages its own pointer events.\n *\n * Usage:\n * ```ts\n * const widget = createDataZoomWidget({\n * data: fullData,\n * onChange: (range) => {\n * chart.setData(applyDataZoom(fullData, range))\n * },\n * })\n * container.appendChild(widget.element)\n * ```\n */\n\nimport type { ChartData } from '../types'\nimport { createDataZoomState, type DataZoomState, type DataZoomRange } from './datazoom'\n\nexport interface DataZoomWidgetOptions {\n /** Chart data (first series used for minimap sparkline). */\n data: ChartData\n /** Height of the slider in pixels. Default 40. */\n height?: number\n /** Initial visible range. Default { start: 0, end: 1 }. */\n initialRange?: Partial<DataZoomRange>\n /** Called when range changes via user interaction. */\n onChange?: (range: DataZoomRange) => void\n /** Track background color. */\n trackColor?: string\n /** Handle color. */\n handleColor?: string\n /** Selected region color. */\n selectedColor?: string\n /** Minimap line color. */\n minimapColor?: string\n}\n\nexport interface DataZoomWidget {\n /** The DOM element to insert into the page. */\n element: HTMLElement\n /** The state manager (setRange, reset, zoomIn, zoomOut, panLeft, panRight). */\n state: DataZoomState\n /** Update minimap sparkline data. */\n setData(data: ChartData): void\n /** Destroy and clean up. */\n destroy(): void\n}\n\nexport function createDataZoomWidget(options: DataZoomWidgetOptions): DataZoomWidget {\n const h = options.height ?? 40\n const trackColor = options.trackColor ?? '#e5e7eb'\n const handleColor = options.handleColor ?? '#6b7280'\n const selectedColor = options.selectedColor ?? 'rgba(59,130,246,0.25)'\n const minimapColor = options.minimapColor ?? '#9ca3af'\n\n let currentData = options.data\n\n // State\n const state = createDataZoomState(\n options.initialRange,\n (range) => {\n updateLayout()\n options.onChange?.(range)\n },\n )\n\n // -----------------------------------------------------------------------\n // DOM construction\n // -----------------------------------------------------------------------\n\n const root = document.createElement('div')\n root.className = 'chartts-datazoom-widget'\n root.style.cssText = `position:relative;height:${h}px;width:100%;user-select:none;touch-action:none;`\n\n // Track background\n const track = document.createElement('div')\n track.className = 'chartts-datazoom-track'\n track.style.cssText = `position:absolute;inset:0;background:${trackColor};border-radius:4px;overflow:hidden;`\n root.appendChild(track)\n\n // Minimap canvas\n const minimap = document.createElement('canvas')\n minimap.className = 'chartts-datazoom-minimap'\n minimap.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;'\n track.appendChild(minimap)\n\n // Left mask (dimmed area)\n const maskLeft = document.createElement('div')\n maskLeft.style.cssText = `position:absolute;top:0;left:0;height:100%;background:rgba(0,0,0,0.15);border-radius:4px 0 0 4px;pointer-events:none;`\n root.appendChild(maskLeft)\n\n // Right mask (dimmed area)\n const maskRight = document.createElement('div')\n maskRight.style.cssText = `position:absolute;top:0;right:0;height:100%;background:rgba(0,0,0,0.15);border-radius:0 4px 4px 0;pointer-events:none;`\n root.appendChild(maskRight)\n\n // Selected region (draggable for pan)\n const selected = document.createElement('div')\n selected.className = 'chartts-datazoom-selected'\n selected.style.cssText = `position:absolute;top:0;height:100%;background:${selectedColor};cursor:grab;border-top:2px solid ${handleColor};border-bottom:2px solid ${handleColor};`\n root.appendChild(selected)\n\n // Left handle\n const handleLeft = document.createElement('div')\n handleLeft.className = 'chartts-datazoom-handle-left'\n handleLeft.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n root.appendChild(handleLeft)\n\n // Right handle\n const handleRight = document.createElement('div')\n handleRight.className = 'chartts-datazoom-handle-right'\n handleRight.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n root.appendChild(handleRight)\n\n // -----------------------------------------------------------------------\n // Layout update\n // -----------------------------------------------------------------------\n\n function updateLayout(): void {\n const w = root.clientWidth || root.offsetWidth || 300\n const { start, end } = state.range\n\n const leftPx = start * w\n const rightPx = end * w\n const selWidth = rightPx - leftPx\n\n maskLeft.style.width = `${leftPx}px`\n maskRight.style.width = `${w - rightPx}px`\n\n selected.style.left = `${leftPx}px`\n selected.style.width = `${selWidth}px`\n\n handleLeft.style.left = `${leftPx}px`\n handleRight.style.left = `${rightPx}px`\n }\n\n // -----------------------------------------------------------------------\n // Minimap rendering\n // -----------------------------------------------------------------------\n\n function drawMinimap(): void {\n const w = root.clientWidth || root.offsetWidth || 300\n const dpr = window.devicePixelRatio || 1\n minimap.width = Math.round(w * dpr)\n minimap.height = Math.round(h * dpr)\n minimap.style.width = `${w}px`\n minimap.style.height = `${h}px`\n\n const ctx = minimap.getContext('2d')\n if (!ctx) return\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx.clearRect(0, 0, w, h)\n\n const series = currentData.series[0]\n if (!series || series.values.length === 0) return\n\n const values = series.values.filter(v => !isNaN(v))\n if (values.length === 0) return\n\n const max = Math.max(...values)\n const min = Math.min(...values)\n const range = max - min || 1\n const pad = 4\n\n ctx.beginPath()\n ctx.strokeStyle = minimapColor\n ctx.lineWidth = 1\n ctx.globalAlpha = 0.5\n\n let started = false\n for (let i = 0; i < series.values.length; i++) {\n const v = series.values[i]!\n if (isNaN(v)) continue\n const x = (i / Math.max(series.values.length - 1, 1)) * w\n const y = h - pad - ((v - min) / range) * (h - pad * 2)\n if (!started) { ctx.moveTo(x, y); started = true }\n else ctx.lineTo(x, y)\n }\n ctx.stroke()\n\n // Fill area below the line\n if (started) {\n ctx.lineTo(w, h)\n ctx.lineTo(0, h)\n ctx.closePath()\n ctx.fillStyle = minimapColor\n ctx.globalAlpha = 0.08\n ctx.fill()\n }\n }\n\n // -----------------------------------------------------------------------\n // Pointer interaction\n // -----------------------------------------------------------------------\n\n type DragMode = 'left' | 'right' | 'pan' | null\n let dragMode: DragMode = null\n let dragStartX = 0\n let dragStartRange: DataZoomRange = { start: 0, end: 1 }\n\n function toNormalized(clientX: number): number {\n const r = root.getBoundingClientRect()\n return Math.max(0, Math.min(1, (clientX - r.left) / r.width))\n }\n\n function onPointerDown(e: PointerEvent): void {\n const target = e.target as HTMLElement\n if (target === handleLeft || target.closest('.chartts-datazoom-handle-left')) {\n dragMode = 'left'\n } else if (target === handleRight || target.closest('.chartts-datazoom-handle-right')) {\n dragMode = 'right'\n } else if (target === selected || target.closest('.chartts-datazoom-selected')) {\n dragMode = 'pan'\n selected.style.cursor = 'grabbing'\n } else {\n // Click on track — jump to position\n const pos = toNormalized(e.clientX)\n const span = state.range.end - state.range.start\n state.setRange(pos - span / 2, pos + span / 2)\n return\n }\n\n dragStartX = e.clientX\n dragStartRange = { ...state.range }\n root.setPointerCapture(e.pointerId)\n e.preventDefault()\n }\n\n function onPointerMove(e: PointerEvent): void {\n if (!dragMode) return\n\n const dx = e.clientX - dragStartX\n const w = root.clientWidth || root.offsetWidth || 300\n const delta = dx / w\n\n if (dragMode === 'left') {\n state.setRange(\n Math.min(dragStartRange.start + delta, state.range.end - 0.02),\n state.range.end,\n )\n } else if (dragMode === 'right') {\n state.setRange(\n state.range.start,\n Math.max(dragStartRange.end + delta, state.range.start + 0.02),\n )\n } else if (dragMode === 'pan') {\n const span = dragStartRange.end - dragStartRange.start\n let newStart = dragStartRange.start + delta\n let newEnd = dragStartRange.end + delta\n // Clamp to bounds\n if (newStart < 0) { newStart = 0; newEnd = span }\n if (newEnd > 1) { newEnd = 1; newStart = 1 - span }\n state.setRange(newStart, newEnd)\n }\n }\n\n function onPointerUp(_e: PointerEvent): void {\n dragMode = null\n selected.style.cursor = 'grab'\n }\n\n function onDblClick(): void {\n state.reset()\n }\n\n root.addEventListener('pointerdown', onPointerDown)\n root.addEventListener('pointermove', onPointerMove)\n root.addEventListener('pointerup', onPointerUp)\n root.addEventListener('dblclick', onDblClick)\n\n // -----------------------------------------------------------------------\n // Resize observer\n // -----------------------------------------------------------------------\n\n let resizeObserver: ResizeObserver | null = null\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n updateLayout()\n drawMinimap()\n })\n resizeObserver.observe(root)\n }\n\n // Initial draw (deferred to next frame so root has dimensions)\n requestAnimationFrame(() => {\n updateLayout()\n drawMinimap()\n })\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n return {\n element: root,\n state,\n\n setData(data: ChartData): void {\n currentData = data\n drawMinimap()\n },\n\n destroy(): void {\n resizeObserver?.disconnect()\n root.removeEventListener('pointerdown', onPointerDown)\n root.removeEventListener('pointermove', onPointerMove)\n root.removeEventListener('pointerup', onPointerUp)\n root.removeEventListener('dblclick', onDblClick)\n root.remove()\n },\n }\n}\n","import type { RenderNode, RenderAttrs } from '../types'\nimport { rect, circle, path, text, line, group } from '../render/tree'\n\n/**\n * Graphic — create custom SVG overlay elements for charts.\n *\n * Provides a declarative API to define arbitrary shapes, text, and groups\n * that can be overlaid on any chart. Positions can be absolute (px)\n * or relative (0..1 proportion of chart area).\n */\n\nexport interface GraphicElement {\n type: 'rect' | 'circle' | 'path' | 'text' | 'line' | 'group' | 'image'\n // Position (absolute px or relative 0..1 with position: 'relative')\n x?: number\n y?: number\n // Sizing\n width?: number\n height?: number\n r?: number\n // Content\n d?: string // path data\n content?: string // text content\n x2?: number // line end x\n y2?: number // line end y\n src?: string // image source\n // Children (for groups)\n children?: GraphicElement[]\n // Positioning mode\n position?: 'absolute' | 'relative'\n // Any SVG attributes\n attrs?: Record<string, unknown>\n}\n\nexport interface GraphicArea {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * Convert an array of GraphicElement definitions into RenderNode[].\n * Use `area` to resolve relative positions.\n */\nexport function createGraphicElements(\n elements: GraphicElement[],\n area?: GraphicArea,\n): RenderNode[] {\n return elements.map(el => resolveElement(el, area)).filter(Boolean) as RenderNode[]\n}\n\nfunction resolveElement(el: GraphicElement, area?: GraphicArea): RenderNode | null {\n const resolve = (v: number | undefined, dim: 'x' | 'y'): number => {\n if (v === undefined) return 0\n if (el.position === 'relative' && area) {\n return dim === 'x'\n ? area.x + v * area.width\n : area.y + v * area.height\n }\n return v\n }\n\n const resolveSize = (v: number | undefined, dim: 'w' | 'h'): number => {\n if (v === undefined) return 0\n if (el.position === 'relative' && area) {\n return dim === 'w' ? v * area.width : v * area.height\n }\n return v\n }\n\n const attrs: RenderAttrs = {\n class: 'chartts-graphic',\n ...(el.attrs as RenderAttrs),\n }\n\n switch (el.type) {\n case 'rect':\n return rect(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n resolveSize(el.width, 'w'),\n resolveSize(el.height, 'h'),\n attrs,\n )\n\n case 'circle':\n return circle(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n el.r ?? 10,\n attrs,\n )\n\n case 'path':\n return el.d ? path(el.d, attrs) : null\n\n case 'text':\n return text(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n el.content ?? '',\n attrs,\n )\n\n case 'line':\n return line(\n resolve(el.x, 'x'),\n resolve(el.y, 'y'),\n resolve(el.x2, 'x'),\n resolve(el.y2, 'y'),\n attrs,\n )\n\n case 'group': {\n const children = (el.children ?? [])\n .map(c => resolveElement(c, area))\n .filter(Boolean) as RenderNode[]\n return group(children, attrs)\n }\n\n case 'image':\n return {\n type: 'image' as unknown as RenderNode['type'],\n attrs: {\n ...attrs,\n href: el.src ?? '',\n x: resolve(el.x, 'x'),\n y: resolve(el.y, 'y'),\n width: resolveSize(el.width, 'w'),\n height: resolveSize(el.height, 'h'),\n },\n } as unknown as RenderNode\n\n default:\n return null\n }\n}\n\n/**\n * Convenience: create a horizontal guideline.\n */\nexport function horizontalLine(\n y: number,\n area: GraphicArea,\n attrs?: RenderAttrs,\n): RenderNode {\n return line(area.x, y, area.x + area.width, y, {\n class: 'chartts-graphic-guideline',\n stroke: '#6b7280',\n strokeWidth: 1,\n strokeDasharray: '4,3',\n ...attrs,\n })\n}\n\n/**\n * Convenience: create a vertical guideline.\n */\nexport function verticalLine(\n x: number,\n area: GraphicArea,\n attrs?: RenderAttrs,\n): RenderNode {\n return line(x, area.y, x, area.y + area.height, {\n class: 'chartts-graphic-guideline',\n stroke: '#6b7280',\n strokeWidth: 1,\n strokeDasharray: '4,3',\n ...attrs,\n })\n}\n\n/**\n * Convenience: create a text annotation at a position.\n */\nexport function annotation(\n x: number, y: number,\n content: string,\n attrs?: RenderAttrs,\n): RenderNode {\n return text(x, y, content, {\n class: 'chartts-graphic-annotation',\n fill: '#374151',\n fontSize: 11,\n textAnchor: 'middle',\n dominantBaseline: 'auto',\n ...attrs,\n })\n}\n","import type { RenderNode, RenderAttrs } from '../types'\n\n/**\n * Rich Text — parse simple markup into multi-styled text elements.\n *\n * Supports a simple markup syntax:\n * - {b}bold{/b} or **bold**\n * - {i}italic{/i} or *italic*\n * - {color:red}colored{/color}\n * - {size:16}sized{/size}\n * - {style:name}custom{/style} — uses named styles\n *\n * Returns a RenderNode (text element with tspan children).\n */\n\nexport interface RichTextStyle {\n fontWeight?: number | string\n fontStyle?: string\n fill?: string\n fontSize?: number | string\n fontFamily?: string\n textDecoration?: string\n}\n\nexport interface RichTextOptions {\n /** Default text attributes */\n defaults?: RichTextStyle\n /** Named styles for {style:name} syntax */\n styles?: Record<string, RichTextStyle>\n /** X position */\n x?: number\n /** Y position */\n y?: number\n /** Additional attributes for the parent text element */\n attrs?: RenderAttrs\n}\n\ninterface TextSpan {\n text: string\n style: RichTextStyle\n}\n\n/**\n * Parse rich text markup and return a RenderNode with tspan children.\n */\nexport function parseRichText(\n input: string,\n options: RichTextOptions = {},\n): RenderNode {\n const spans = parse(input, options.defaults ?? {}, options.styles ?? {})\n\n // Build tspan children\n const tspans: RenderNode[] = spans.map(span => ({\n type: 'tspan' as unknown as RenderNode['type'],\n attrs: {\n ...(span.style.fontWeight ? { fontWeight: span.style.fontWeight } : {}),\n ...(span.style.fontStyle ? { fontStyle: span.style.fontStyle } : {}),\n ...(span.style.fill ? { fill: span.style.fill } : {}),\n ...(span.style.fontSize ? { fontSize: span.style.fontSize } : {}),\n ...(span.style.fontFamily ? { fontFamily: span.style.fontFamily } : {}),\n ...(span.style.textDecoration ? { textDecoration: span.style.textDecoration } : {}),\n },\n children: [],\n text: span.text,\n } as unknown as RenderNode))\n\n return {\n type: 'text',\n x: options.x ?? 0,\n y: options.y ?? 0,\n text: '',\n attrs: {\n class: 'chartts-richtext',\n ...options.attrs,\n },\n children: tspans,\n } as unknown as RenderNode\n}\n\n/**\n * Format a value with rich text markup.\n * E.g., richLabel(\"Revenue\", 1234, { valueColor: \"#3b82f6\" })\n * → \"{b}Revenue{/b}: {color:#3b82f6}1,234{/color}\"\n */\nexport function richLabel(\n label: string,\n value: number | string,\n opts?: { valueColor?: string; valueWeight?: string },\n): string {\n const color = opts?.valueColor ?? '#3b82f6'\n const weight = opts?.valueWeight ?? ''\n const valueStr = typeof value === 'number' ? formatNum(value) : value\n const weightTag = weight ? `{b}${valueStr}{/b}` : valueStr\n return `{b}${label}{/b}: {color:${color}}${weightTag}{/color}`\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nfunction parse(\n input: string,\n defaults: RichTextStyle,\n namedStyles: Record<string, RichTextStyle>,\n): TextSpan[] {\n const spans: TextSpan[] = []\n const styleStack: RichTextStyle[] = [{ ...defaults }]\n\n // Pattern matches: {b}, {/b}, {i}, {/i}, {color:X}, {/color}, {size:X}, {/size}, {style:X}, {/style}, **X**, *X*\n const regex = /\\{(b|\\/b|i|\\/i|color:([^}]+)|\\/color|size:([^}]+)|\\/size|style:([^}]+)|\\/style)\\}|\\*\\*(.+?)\\*\\*|\\*(.+?)\\*/g\n\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(input)) !== null) {\n // Text before this match\n if (match.index > lastIndex) {\n spans.push({ text: input.slice(lastIndex, match.index), style: currentStyle(styleStack) })\n }\n\n const tag = match[1]\n const boldShorthand = match[5]\n const italicShorthand = match[6]\n\n if (boldShorthand) {\n spans.push({ text: boldShorthand, style: { ...currentStyle(styleStack), fontWeight: 700 } })\n } else if (italicShorthand) {\n spans.push({ text: italicShorthand, style: { ...currentStyle(styleStack), fontStyle: 'italic' } })\n } else if (tag === 'b') {\n styleStack.push({ ...currentStyle(styleStack), fontWeight: 700 })\n } else if (tag === '/b') {\n popStyle(styleStack)\n } else if (tag === 'i') {\n styleStack.push({ ...currentStyle(styleStack), fontStyle: 'italic' })\n } else if (tag === '/i') {\n popStyle(styleStack)\n } else if (tag?.startsWith('color:')) {\n styleStack.push({ ...currentStyle(styleStack), fill: match[2] })\n } else if (tag === '/color') {\n popStyle(styleStack)\n } else if (tag?.startsWith('size:')) {\n styleStack.push({ ...currentStyle(styleStack), fontSize: parseFloat(match[3]!) || 12 })\n } else if (tag === '/size') {\n popStyle(styleStack)\n } else if (tag?.startsWith('style:')) {\n const named = namedStyles[match[4]!]\n if (named) {\n styleStack.push({ ...currentStyle(styleStack), ...named })\n }\n } else if (tag === '/style') {\n popStyle(styleStack)\n }\n\n lastIndex = match.index + match[0].length\n }\n\n // Remaining text\n if (lastIndex < input.length) {\n spans.push({ text: input.slice(lastIndex), style: currentStyle(styleStack) })\n }\n\n return spans\n}\n\nfunction currentStyle(stack: RichTextStyle[]): RichTextStyle {\n return { ...stack[stack.length - 1]! }\n}\n\nfunction popStyle(stack: RichTextStyle[]): void {\n if (stack.length > 1) stack.pop()\n}\n\nfunction formatNum(n: number): string {\n return n.toLocaleString()\n}\n","import type { ChartTypePlugin, ScaleFactory, ScaleType } from '../types'\n\nconst charts = new Map<string, ChartTypePlugin>()\nconst scales = new Map<ScaleType, ScaleFactory>()\n\nexport function registerChart(plugin: ChartTypePlugin): void {\n if (charts.has(plugin.type)) {\n throw new Error(`[chartts] Chart type \"${plugin.type}\" already registered.`)\n }\n charts.set(plugin.type, plugin)\n}\n\nexport function getChart(type: string): ChartTypePlugin {\n const plugin = charts.get(type)\n if (!plugin) {\n const available = Array.from(charts.keys()).join(', ') || 'none'\n throw new Error(`[chartts] Unknown chart type \"${type}\". Registered: ${available}`)\n }\n return plugin\n}\n\nexport function registerScale(type: ScaleType, factory: ScaleFactory): void {\n scales.set(type, factory)\n}\n\nexport function getScaleFactory(type: ScaleType): ScaleFactory {\n const factory = scales.get(type)\n if (!factory) {\n throw new Error(`[chartts] Unknown scale type \"${type}\".`)\n }\n return factory\n}\n\nexport function clearRegistry(): void {\n charts.clear()\n scales.clear()\n}\n","import type { Scale, Tick } from '../types'\n\nexport interface TimeScaleOpts {\n domain?: [number | Date, number | Date]\n range?: [number, number]\n format?: (value: Date) => string\n}\n\nconst S = 1000, M = 60 * S, H = 60 * M, D = 24 * H, W = 7 * D, MO = 30 * D, Y = 365 * D\n\nconst INTERVALS: { ms: number; fmt: (d: Date) => string }[] = [\n { ms: S, fmt: fmtTime },\n { ms: 5 * S, fmt: fmtTime },\n { ms: 15 * S, fmt: fmtTime },\n { ms: 30 * S, fmt: fmtTime },\n { ms: M, fmt: fmtTime },\n { ms: 5 * M, fmt: fmtTime },\n { ms: 15 * M, fmt: fmtTime },\n { ms: H, fmt: fmtTime },\n { ms: 3 * H, fmt: fmtTime },\n { ms: 6 * H, fmt: fmtTime },\n { ms: 12 * H, fmt: fmtTime },\n { ms: D, fmt: fmtDate },\n { ms: W, fmt: fmtDate },\n { ms: MO, fmt: fmtMonthYear },\n { ms: 3 * MO, fmt: fmtMonthYear },\n { ms: 6 * MO, fmt: fmtMonthYear },\n { ms: Y, fmt: fmtYear },\n { ms: 5 * Y, fmt: fmtYear },\n { ms: 10 * Y, fmt: fmtYear },\n]\n\nexport function createTimeScale(opts?: TimeScaleOpts): Scale {\n let dMin = ts(opts?.domain?.[0] ?? 0)\n let dMax = ts(opts?.domain?.[1] ?? Date.now())\n let rMin = opts?.range?.[0] ?? 0\n let rMax = opts?.range?.[1] ?? 1\n const customFmt = opts?.format\n\n function map(value: number | string | Date): number {\n const v = ts(value)\n const span = dMax - dMin\n if (span === 0) return (rMin + rMax) / 2\n return rMin + ((v - dMin) / span) * (rMax - rMin)\n }\n\n function invert(px: number): number {\n const span = rMax - rMin\n if (span === 0) return (dMin + dMax) / 2\n return dMin + ((px - rMin) / span) * (dMax - dMin)\n }\n\n function ticks(count = 6): Tick[] {\n const span = dMax - dMin\n if (span <= 0) return []\n\n const target = span / count\n const interval = INTERVALS.find((i) => i.ms >= target) ?? INTERVALS[INTERVALS.length - 1]!\n const fmt = customFmt ?? interval.fmt\n const result: Tick[] = []\n const start = Math.ceil(dMin / interval.ms) * interval.ms\n\n for (let t = start; t <= dMax; t += interval.ms) {\n const d = new Date(t)\n result.push({ value: d, position: map(t), label: fmt(d) })\n }\n return result\n }\n\n return {\n map,\n invert,\n ticks,\n setDomain(min, max) { dMin = ts(min); dMax = ts(max) },\n setRange(min, max) { rMin = min; rMax = max },\n getDomain() { return [new Date(dMin), new Date(dMax)] },\n getRange() { return [rMin, rMax] },\n bandwidth() { return 0 },\n }\n}\n\nfunction ts(v: number | string | Date): number {\n return v instanceof Date ? v.getTime() : typeof v === 'string' ? new Date(v).getTime() : v\n}\n\nconst MONTHS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] as const\n\nfunction pad(n: number): string { return n < 10 ? `0${n}` : String(n) }\nfunction fmtTime(d: Date): string { return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\nfunction fmtDate(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getDate()}` }\nfunction fmtMonthYear(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getFullYear()}` }\nfunction fmtYear(d: Date): string { return String(d.getFullYear()) }\n"]}