@363045841yyt/klinechart-core 0.8.8 → 0.8.9

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 (571) hide show
  1. package/dist/controllers/index.d.ts +1 -1
  2. package/dist/controllers/index.d.ts.map +1 -1
  3. package/dist/controllers/types.d.ts +2 -2
  4. package/dist/controllers/types.d.ts.map +1 -1
  5. package/dist/data-fetchers/dataBuffer.d.ts +6 -0
  6. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  7. package/dist/data-fetchers/dataBuffer.js +50 -3
  8. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  9. package/dist/engine/chart.d.ts +0 -1
  10. package/dist/engine/chart.d.ts.map +1 -1
  11. package/dist/engine/chart.js +0 -42
  12. package/dist/engine/chart.js.map +1 -1
  13. package/dist/engine/controller/interaction.d.ts +62 -0
  14. package/dist/engine/controller/interaction.d.ts.map +1 -1
  15. package/dist/engine/controller/interaction.js +158 -74
  16. package/dist/engine/controller/interaction.js.map +1 -1
  17. package/dist/engine/data/chartDataManager.d.ts +3 -0
  18. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  19. package/dist/engine/data/chartDataManager.js +13 -4
  20. package/dist/engine/data/chartDataManager.js.map +1 -1
  21. package/dist/engine/drawing/index.d.ts +2 -5
  22. package/dist/engine/drawing/index.d.ts.map +1 -1
  23. package/dist/engine/drawing/index.js +2 -33
  24. package/dist/engine/drawing/index.js.map +1 -1
  25. package/dist/engine/drawing/interaction.js +1 -1
  26. package/dist/engine/drawing/interaction.js.map +1 -1
  27. package/dist/engine/drawing/linearRegression.d.ts +6 -0
  28. package/dist/engine/drawing/linearRegression.d.ts.map +1 -0
  29. package/dist/engine/drawing/linearRegression.js +34 -0
  30. package/dist/engine/drawing/linearRegression.js.map +1 -0
  31. package/dist/engine/drawing/plugin.d.ts.map +1 -1
  32. package/dist/engine/drawing/plugin.js +104 -94
  33. package/dist/engine/drawing/plugin.js.map +1 -1
  34. package/dist/engine/indicators/calculators/_shared.d.ts +3 -0
  35. package/dist/engine/indicators/calculators/_shared.d.ts.map +1 -0
  36. package/dist/engine/indicators/calculators/_shared.js +45 -0
  37. package/dist/engine/indicators/calculators/_shared.js.map +1 -0
  38. package/dist/engine/indicators/calculators/bands.d.ts +44 -0
  39. package/dist/engine/indicators/calculators/bands.d.ts.map +1 -0
  40. package/dist/engine/indicators/calculators/bands.js +268 -0
  41. package/dist/engine/indicators/calculators/bands.js.map +1 -0
  42. package/dist/engine/indicators/calculators/index.d.ts +33 -0
  43. package/dist/engine/indicators/calculators/index.d.ts.map +1 -0
  44. package/dist/engine/indicators/calculators/index.js +19 -0
  45. package/dist/engine/indicators/calculators/index.js.map +1 -0
  46. package/dist/engine/indicators/calculators/movingAverages.d.ts +21 -0
  47. package/dist/engine/indicators/calculators/movingAverages.d.ts.map +1 -0
  48. package/dist/engine/indicators/calculators/movingAverages.js +143 -0
  49. package/dist/engine/indicators/calculators/movingAverages.js.map +1 -0
  50. package/dist/engine/indicators/calculators/oscillators.d.ts +29 -0
  51. package/dist/engine/indicators/calculators/oscillators.d.ts.map +1 -0
  52. package/dist/engine/indicators/calculators/oscillators.js +349 -0
  53. package/dist/engine/indicators/calculators/oscillators.js.map +1 -0
  54. package/dist/engine/indicators/calculators/patterns.d.ts +54 -0
  55. package/dist/engine/indicators/calculators/patterns.d.ts.map +1 -0
  56. package/dist/engine/indicators/calculators/patterns.js +214 -0
  57. package/dist/engine/indicators/calculators/patterns.js.map +1 -0
  58. package/dist/engine/indicators/calculators/volatility.d.ts +6 -0
  59. package/dist/engine/indicators/calculators/volatility.d.ts.map +1 -0
  60. package/dist/engine/indicators/calculators/volatility.js +114 -0
  61. package/dist/engine/indicators/calculators/volatility.js.map +1 -0
  62. package/dist/engine/indicators/calculators/volume.d.ts +21 -0
  63. package/dist/engine/indicators/calculators/volume.d.ts.map +1 -0
  64. package/dist/engine/indicators/calculators/volume.js +218 -0
  65. package/dist/engine/indicators/calculators/volume.js.map +1 -0
  66. package/dist/engine/indicators/calculators.d.ts +1 -361
  67. package/dist/engine/indicators/calculators.d.ts.map +1 -1
  68. package/dist/engine/indicators/calculators.js +1 -1787
  69. package/dist/engine/indicators/calculators.js.map +1 -1
  70. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  71. package/dist/engine/indicators/chartIndicatorManager.js +3 -44
  72. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  73. package/dist/engine/indicators/indicatorRegistry.d.ts +8 -0
  74. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  75. package/dist/engine/indicators/indicatorRegistry.js +16 -0
  76. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  77. package/dist/engine/indicators/indicatorRuntime.js +2 -2
  78. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  79. package/dist/engine/indicators/scheduler.d.ts +2 -2
  80. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  81. package/dist/engine/indicators/scheduler.js +15 -155
  82. package/dist/engine/indicators/scheduler.js.map +1 -1
  83. package/dist/engine/indicators/{atrState.d.ts → state/atrState.d.ts} +1 -1
  84. package/dist/engine/indicators/state/atrState.d.ts.map +1 -0
  85. package/dist/engine/indicators/{atrState.js → state/atrState.js} +1 -1
  86. package/dist/engine/indicators/state/atrState.js.map +1 -0
  87. package/dist/engine/indicators/{bollState.d.ts → state/bollState.d.ts} +4 -2
  88. package/dist/engine/indicators/state/bollState.d.ts.map +1 -0
  89. package/dist/engine/indicators/{bollState.js → state/bollState.js} +5 -3
  90. package/dist/engine/indicators/state/bollState.js.map +1 -0
  91. package/dist/engine/indicators/{cciState.d.ts → state/cciState.d.ts} +1 -1
  92. package/dist/engine/indicators/state/cciState.d.ts.map +1 -0
  93. package/dist/engine/indicators/{cciState.js → state/cciState.js} +1 -1
  94. package/dist/engine/indicators/state/cciState.js.map +1 -0
  95. package/dist/engine/indicators/{chaikinVolState.d.ts → state/chaikinVolState.d.ts} +1 -1
  96. package/dist/engine/indicators/state/chaikinVolState.d.ts.map +1 -0
  97. package/dist/engine/indicators/{chaikinVolState.js → state/chaikinVolState.js} +1 -1
  98. package/dist/engine/indicators/state/chaikinVolState.js.map +1 -0
  99. package/dist/engine/indicators/{cmfState.d.ts → state/cmfState.d.ts} +1 -1
  100. package/dist/engine/indicators/state/cmfState.d.ts.map +1 -0
  101. package/dist/engine/indicators/{cmfState.js → state/cmfState.js} +1 -1
  102. package/dist/engine/indicators/state/cmfState.js.map +1 -0
  103. package/dist/engine/indicators/{demaState.d.ts → state/demaState.d.ts} +1 -1
  104. package/dist/engine/indicators/state/demaState.d.ts.map +1 -0
  105. package/dist/engine/indicators/{demaState.js → state/demaState.js} +1 -1
  106. package/dist/engine/indicators/state/demaState.js.map +1 -0
  107. package/dist/engine/indicators/{donchianState.d.ts → state/donchianState.d.ts} +1 -1
  108. package/dist/engine/indicators/state/donchianState.d.ts.map +1 -0
  109. package/dist/engine/indicators/{donchianState.js → state/donchianState.js} +1 -1
  110. package/dist/engine/indicators/state/donchianState.js.map +1 -0
  111. package/dist/engine/indicators/{eneState.d.ts → state/eneState.d.ts} +4 -2
  112. package/dist/engine/indicators/state/eneState.d.ts.map +1 -0
  113. package/dist/engine/indicators/{eneState.js → state/eneState.js} +5 -3
  114. package/dist/engine/indicators/state/eneState.js.map +1 -0
  115. package/dist/engine/indicators/{expmaState.d.ts → state/expmaState.d.ts} +4 -2
  116. package/dist/engine/indicators/state/expmaState.d.ts.map +1 -0
  117. package/dist/engine/indicators/{expmaState.js → state/expmaState.js} +5 -3
  118. package/dist/engine/indicators/state/expmaState.js.map +1 -0
  119. package/dist/engine/indicators/{fastkState.d.ts → state/fastkState.d.ts} +1 -1
  120. package/dist/engine/indicators/state/fastkState.d.ts.map +1 -0
  121. package/dist/engine/indicators/{fastkState.js → state/fastkState.js} +1 -1
  122. package/dist/engine/indicators/state/fastkState.js.map +1 -0
  123. package/dist/engine/indicators/{fibState.d.ts → state/fibState.d.ts} +1 -1
  124. package/dist/engine/indicators/state/fibState.d.ts.map +1 -0
  125. package/dist/engine/indicators/{fibState.js → state/fibState.js} +1 -1
  126. package/dist/engine/indicators/state/fibState.js.map +1 -0
  127. package/dist/engine/indicators/{hmaState.d.ts → state/hmaState.d.ts} +1 -1
  128. package/dist/engine/indicators/state/hmaState.d.ts.map +1 -0
  129. package/dist/engine/indicators/{hmaState.js → state/hmaState.js} +1 -1
  130. package/dist/engine/indicators/state/hmaState.js.map +1 -0
  131. package/dist/engine/indicators/{hvState.d.ts → state/hvState.d.ts} +1 -1
  132. package/dist/engine/indicators/state/hvState.d.ts.map +1 -0
  133. package/dist/engine/indicators/{hvState.js → state/hvState.js} +1 -1
  134. package/dist/engine/indicators/state/hvState.js.map +1 -0
  135. package/dist/engine/indicators/{ichimokuState.d.ts → state/ichimokuState.d.ts} +1 -1
  136. package/dist/engine/indicators/state/ichimokuState.d.ts.map +1 -0
  137. package/dist/engine/indicators/{ichimokuState.js → state/ichimokuState.js} +1 -1
  138. package/dist/engine/indicators/state/ichimokuState.js.map +1 -0
  139. package/dist/engine/indicators/{kamaState.d.ts → state/kamaState.d.ts} +1 -1
  140. package/dist/engine/indicators/state/kamaState.d.ts.map +1 -0
  141. package/dist/engine/indicators/{kamaState.js → state/kamaState.js} +1 -1
  142. package/dist/engine/indicators/state/kamaState.js.map +1 -0
  143. package/dist/engine/indicators/{keltnerState.d.ts → state/keltnerState.d.ts} +1 -1
  144. package/dist/engine/indicators/state/keltnerState.d.ts.map +1 -0
  145. package/dist/engine/indicators/{keltnerState.js → state/keltnerState.js} +1 -1
  146. package/dist/engine/indicators/state/keltnerState.js.map +1 -0
  147. package/dist/engine/indicators/{kstState.d.ts → state/kstState.d.ts} +2 -2
  148. package/dist/engine/indicators/state/kstState.d.ts.map +1 -0
  149. package/dist/engine/indicators/{kstState.js → state/kstState.js} +1 -1
  150. package/dist/engine/indicators/state/kstState.js.map +1 -0
  151. package/dist/engine/indicators/{maState.d.ts → state/maState.d.ts} +1 -1
  152. package/dist/engine/indicators/state/maState.d.ts.map +1 -0
  153. package/dist/engine/indicators/{maState.js → state/maState.js} +1 -1
  154. package/dist/engine/indicators/state/maState.js.map +1 -0
  155. package/dist/engine/indicators/{macdState.d.ts → state/macdState.d.ts} +3 -19
  156. package/dist/engine/indicators/state/macdState.d.ts.map +1 -0
  157. package/dist/engine/indicators/state/macdState.js.map +1 -0
  158. package/dist/engine/indicators/{mfiState.d.ts → state/mfiState.d.ts} +1 -1
  159. package/dist/engine/indicators/state/mfiState.d.ts.map +1 -0
  160. package/dist/engine/indicators/{mfiState.js → state/mfiState.js} +1 -1
  161. package/dist/engine/indicators/state/mfiState.js.map +1 -0
  162. package/dist/engine/indicators/{momState.d.ts → state/momState.d.ts} +1 -1
  163. package/dist/engine/indicators/state/momState.d.ts.map +1 -0
  164. package/dist/engine/indicators/{momState.js → state/momState.js} +1 -1
  165. package/dist/engine/indicators/state/momState.js.map +1 -0
  166. package/dist/engine/indicators/{obvState.d.ts → state/obvState.d.ts} +1 -1
  167. package/dist/engine/indicators/state/obvState.d.ts.map +1 -0
  168. package/dist/engine/indicators/{obvState.js → state/obvState.js} +1 -1
  169. package/dist/engine/indicators/state/obvState.js.map +1 -0
  170. package/dist/engine/indicators/{parkinsonState.d.ts → state/parkinsonState.d.ts} +1 -1
  171. package/dist/engine/indicators/state/parkinsonState.d.ts.map +1 -0
  172. package/dist/engine/indicators/{parkinsonState.js → state/parkinsonState.js} +1 -1
  173. package/dist/engine/indicators/state/parkinsonState.js.map +1 -0
  174. package/dist/engine/indicators/{pivotState.d.ts → state/pivotState.d.ts} +1 -1
  175. package/dist/engine/indicators/state/pivotState.d.ts.map +1 -0
  176. package/dist/engine/indicators/{pivotState.js → state/pivotState.js} +1 -1
  177. package/dist/engine/indicators/state/pivotState.js.map +1 -0
  178. package/dist/engine/indicators/{pvtState.d.ts → state/pvtState.d.ts} +1 -1
  179. package/dist/engine/indicators/state/pvtState.d.ts.map +1 -0
  180. package/dist/engine/indicators/{pvtState.js → state/pvtState.js} +1 -1
  181. package/dist/engine/indicators/state/pvtState.js.map +1 -0
  182. package/dist/engine/indicators/{rocState.d.ts → state/rocState.d.ts} +1 -1
  183. package/dist/engine/indicators/state/rocState.d.ts.map +1 -0
  184. package/dist/engine/indicators/{rocState.js → state/rocState.js} +1 -1
  185. package/dist/engine/indicators/state/rocState.js.map +1 -0
  186. package/dist/engine/indicators/{rsiState.d.ts → state/rsiState.d.ts} +4 -1
  187. package/dist/engine/indicators/state/rsiState.d.ts.map +1 -0
  188. package/dist/engine/indicators/{rsiState.js → state/rsiState.js} +7 -4
  189. package/dist/engine/indicators/state/rsiState.js.map +1 -0
  190. package/dist/engine/indicators/{sarState.d.ts → state/sarState.d.ts} +1 -1
  191. package/dist/engine/indicators/state/sarState.d.ts.map +1 -0
  192. package/dist/engine/indicators/{sarState.js → state/sarState.js} +1 -1
  193. package/dist/engine/indicators/state/sarState.js.map +1 -0
  194. package/dist/engine/indicators/{stochState.d.ts → state/stochState.d.ts} +2 -2
  195. package/dist/engine/indicators/state/stochState.d.ts.map +1 -0
  196. package/dist/engine/indicators/{stochState.js → state/stochState.js} +1 -1
  197. package/dist/engine/indicators/state/stochState.js.map +1 -0
  198. package/dist/engine/indicators/{structureState.d.ts → state/structureState.d.ts} +1 -1
  199. package/dist/engine/indicators/state/structureState.d.ts.map +1 -0
  200. package/dist/engine/indicators/{structureState.js → state/structureState.js} +1 -1
  201. package/dist/engine/indicators/state/structureState.js.map +1 -0
  202. package/dist/engine/indicators/{supertrendState.d.ts → state/supertrendState.d.ts} +1 -1
  203. package/dist/engine/indicators/state/supertrendState.d.ts.map +1 -0
  204. package/dist/engine/indicators/{supertrendState.js → state/supertrendState.js} +1 -1
  205. package/dist/engine/indicators/state/supertrendState.js.map +1 -0
  206. package/dist/engine/indicators/{temaState.d.ts → state/temaState.d.ts} +1 -1
  207. package/dist/engine/indicators/state/temaState.d.ts.map +1 -0
  208. package/dist/engine/indicators/{temaState.js → state/temaState.js} +1 -1
  209. package/dist/engine/indicators/state/temaState.js.map +1 -0
  210. package/dist/engine/indicators/{trixState.d.ts → state/trixState.d.ts} +1 -1
  211. package/dist/engine/indicators/state/trixState.d.ts.map +1 -0
  212. package/dist/engine/indicators/{trixState.js → state/trixState.js} +1 -1
  213. package/dist/engine/indicators/state/trixState.js.map +1 -0
  214. package/dist/engine/indicators/{vmaState.d.ts → state/vmaState.d.ts} +1 -1
  215. package/dist/engine/indicators/state/vmaState.d.ts.map +1 -0
  216. package/dist/engine/indicators/{vmaState.js → state/vmaState.js} +1 -1
  217. package/dist/engine/indicators/state/vmaState.js.map +1 -0
  218. package/dist/engine/indicators/{volumeProfileState.d.ts → state/volumeProfileState.d.ts} +1 -1
  219. package/dist/engine/indicators/state/volumeProfileState.d.ts.map +1 -0
  220. package/dist/engine/indicators/{volumeProfileState.js → state/volumeProfileState.js} +1 -1
  221. package/dist/engine/indicators/state/volumeProfileState.js.map +1 -0
  222. package/dist/engine/indicators/{vwapState.d.ts → state/vwapState.d.ts} +1 -1
  223. package/dist/engine/indicators/state/vwapState.d.ts.map +1 -0
  224. package/dist/engine/indicators/{vwapState.js → state/vwapState.js} +1 -1
  225. package/dist/engine/indicators/state/vwapState.js.map +1 -0
  226. package/dist/engine/indicators/{wmaState.d.ts → state/wmaState.d.ts} +1 -1
  227. package/dist/engine/indicators/state/wmaState.d.ts.map +1 -0
  228. package/dist/engine/indicators/{wmaState.js → state/wmaState.js} +1 -1
  229. package/dist/engine/indicators/state/wmaState.js.map +1 -0
  230. package/dist/engine/indicators/{wmsrState.d.ts → state/wmsrState.d.ts} +1 -1
  231. package/dist/engine/indicators/state/wmsrState.d.ts.map +1 -0
  232. package/dist/engine/indicators/{wmsrState.js → state/wmsrState.js} +1 -1
  233. package/dist/engine/indicators/state/wmsrState.js.map +1 -0
  234. package/dist/engine/indicators/{zonesState.d.ts → state/zonesState.d.ts} +1 -1
  235. package/dist/engine/indicators/state/zonesState.d.ts.map +1 -0
  236. package/dist/engine/indicators/{zonesState.js → state/zonesState.js} +1 -1
  237. package/dist/engine/indicators/state/zonesState.js.map +1 -0
  238. package/dist/engine/indicators/stateComposer.d.ts +39 -39
  239. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  240. package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -1
  241. package/dist/engine/indicators/visibleStateComposers.js +192 -31
  242. package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
  243. package/dist/engine/layout/pane.js +2 -2
  244. package/dist/engine/layout/pane.js.map +1 -1
  245. package/dist/engine/paneRenderer.d.ts +2 -6
  246. package/dist/engine/paneRenderer.d.ts.map +1 -1
  247. package/dist/engine/paneRenderer.js.map +1 -1
  248. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  249. package/dist/engine/render/chartRenderer.js +7 -2
  250. package/dist/engine/render/chartRenderer.js.map +1 -1
  251. package/dist/engine/renderers/Indicator/atr.js +2 -2
  252. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  253. package/dist/engine/renderers/Indicator/cci.js +1 -1
  254. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  255. package/dist/engine/renderers/Indicator/chaikinVol.js +1 -1
  256. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  257. package/dist/engine/renderers/Indicator/cmf.js +1 -1
  258. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  259. package/dist/engine/renderers/Indicator/dema.js +1 -1
  260. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  261. package/dist/engine/renderers/Indicator/donchian.js +1 -1
  262. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  263. package/dist/engine/renderers/Indicator/fastk.js +1 -1
  264. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  265. package/dist/engine/renderers/Indicator/fib.js +1 -1
  266. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  267. package/dist/engine/renderers/Indicator/hma.js +1 -1
  268. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  269. package/dist/engine/renderers/Indicator/hv.js +2 -2
  270. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  271. package/dist/engine/renderers/Indicator/ichimoku.js +95 -92
  272. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  273. package/dist/engine/renderers/Indicator/kama.js +1 -1
  274. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  275. package/dist/engine/renderers/Indicator/keltner.js +1 -1
  276. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  277. package/dist/engine/renderers/Indicator/kst.js +2 -2
  278. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  279. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  280. package/dist/engine/renderers/Indicator/macd.js +1 -1
  281. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  282. package/dist/engine/renderers/Indicator/mfi.js +1 -1
  283. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  284. package/dist/engine/renderers/Indicator/mom.js +2 -2
  285. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  286. package/dist/engine/renderers/Indicator/obv.js +1 -1
  287. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  288. package/dist/engine/renderers/Indicator/parkinson.js +2 -2
  289. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  290. package/dist/engine/renderers/Indicator/pivot.js +1 -1
  291. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  292. package/dist/engine/renderers/Indicator/pvt.js +1 -1
  293. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  294. package/dist/engine/renderers/Indicator/roc.js +1 -1
  295. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  296. package/dist/engine/renderers/Indicator/rsi.js +1 -1
  297. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  298. package/dist/engine/renderers/Indicator/sar.js +1 -1
  299. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  300. package/dist/engine/renderers/Indicator/stoch.js +1 -1
  301. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  302. package/dist/engine/renderers/Indicator/structure.js +1 -1
  303. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  304. package/dist/engine/renderers/Indicator/supertrend.js +1 -1
  305. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  306. package/dist/engine/renderers/Indicator/tema.js +1 -1
  307. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  308. package/dist/engine/renderers/Indicator/trix.js +2 -2
  309. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  310. package/dist/engine/renderers/Indicator/vma.js +2 -2
  311. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  312. package/dist/engine/renderers/Indicator/volumeProfile.js +1 -1
  313. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  314. package/dist/engine/renderers/Indicator/vwap.js +1 -1
  315. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  316. package/dist/engine/renderers/Indicator/wma.js +1 -1
  317. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  318. package/dist/engine/renderers/Indicator/wmsr.js +1 -1
  319. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  320. package/dist/engine/renderers/Indicator/zones.js +1 -1
  321. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  322. package/dist/engine/renderers/candle.d.ts.map +1 -1
  323. package/dist/engine/renderers/candle.js +94 -60
  324. package/dist/engine/renderers/candle.js.map +1 -1
  325. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  326. package/dist/engine/renderers/extremaMarkers.js +5 -6
  327. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  328. package/dist/engine/renderers/gridLines.js +1 -1
  329. package/dist/engine/renderers/gridLines.js.map +1 -1
  330. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -1
  331. package/dist/engine/renderers/leftYAxis.js +24 -3
  332. package/dist/engine/renderers/leftYAxis.js.map +1 -1
  333. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  334. package/dist/engine/renderers/timeAxis.js +2 -0
  335. package/dist/engine/renderers/timeAxis.js.map +1 -1
  336. package/dist/engine/renderers/timeShare.js +1 -1
  337. package/dist/engine/renderers/timeShare.js.map +1 -1
  338. package/dist/engine/viewport/chartViewportManager.d.ts +34 -1
  339. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  340. package/dist/engine/viewport/chartViewportManager.js +57 -22
  341. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  342. package/dist/mcp/chartBridge.js +1 -1
  343. package/dist/mcp/chartBridge.js.map +1 -1
  344. package/dist/plugin/types.d.ts +4 -0
  345. package/dist/plugin/types.d.ts.map +1 -1
  346. package/dist/plugin/types.js.map +1 -1
  347. package/dist/utils/dateFormat.d.ts +2 -2
  348. package/dist/utils/dateFormat.d.ts.map +1 -1
  349. package/dist/utils/dateFormat.js +6 -6
  350. package/dist/utils/dateFormat.js.map +1 -1
  351. package/dist/utils/kLineDraw/axis.d.ts +4 -0
  352. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  353. package/dist/utils/kLineDraw/axis.js +2 -2
  354. package/dist/utils/kLineDraw/axis.js.map +1 -1
  355. package/dist/utils/volumePrice.d.ts.map +1 -1
  356. package/dist/utils/volumePrice.js +20 -3
  357. package/dist/utils/volumePrice.js.map +1 -1
  358. package/dist/version.d.ts +1 -1
  359. package/dist/version.js +1 -1
  360. package/package.json +1 -1
  361. package/src/controllers/createChartController.ts +2 -2
  362. package/src/controllers/index.ts +1 -1
  363. package/src/controllers/types.ts +2 -2
  364. package/src/data-fetchers/__tests__/dataBuffer.test.ts +135 -0
  365. package/src/data-fetchers/dataBuffer.ts +61 -9
  366. package/src/engine/chart.ts +0 -43
  367. package/src/engine/controller/interaction.ts +186 -76
  368. package/src/engine/data/chartDataManager.ts +16 -4
  369. package/src/engine/drawing/index.ts +2 -36
  370. package/src/engine/drawing/interaction.ts +1 -1
  371. package/src/engine/drawing/linearRegression.ts +36 -0
  372. package/src/engine/drawing/plugin.ts +160 -97
  373. package/src/engine/indicators/__tests__/calculators.test.ts +9 -1
  374. package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +10 -5
  375. package/src/engine/indicators/__tests__/scheduler.test.ts +12 -12
  376. package/src/engine/indicators/__tests__/soa.test.ts +46 -12
  377. package/src/engine/indicators/calculators/_shared.ts +44 -0
  378. package/src/engine/indicators/calculators/bands.ts +365 -0
  379. package/src/engine/indicators/calculators/index.ts +37 -0
  380. package/src/engine/indicators/calculators/movingAverages.ts +189 -0
  381. package/src/engine/indicators/calculators/oscillators.ts +446 -0
  382. package/src/engine/indicators/calculators/patterns.ts +287 -0
  383. package/src/engine/indicators/calculators/volatility.ts +150 -0
  384. package/src/engine/indicators/calculators/volume.ts +248 -0
  385. package/src/engine/indicators/calculators.ts +1 -2460
  386. package/src/engine/indicators/chartIndicatorManager.ts +3 -44
  387. package/src/engine/indicators/indicatorRegistry.ts +15 -0
  388. package/src/engine/indicators/indicatorRuntime.ts +2 -2
  389. package/src/engine/indicators/scheduler.ts +39 -154
  390. package/src/engine/indicators/{atrState.ts → state/atrState.ts} +2 -2
  391. package/src/engine/indicators/{bollState.ts → state/bollState.ts} +8 -5
  392. package/src/engine/indicators/{cciState.ts → state/cciState.ts} +2 -2
  393. package/src/engine/indicators/{chaikinVolState.ts → state/chaikinVolState.ts} +2 -2
  394. package/src/engine/indicators/{cmfState.ts → state/cmfState.ts} +2 -2
  395. package/src/engine/indicators/{demaState.ts → state/demaState.ts} +2 -2
  396. package/src/engine/indicators/{donchianState.ts → state/donchianState.ts} +2 -2
  397. package/src/engine/indicators/{eneState.ts → state/eneState.ts} +8 -5
  398. package/src/engine/indicators/{expmaState.ts → state/expmaState.ts} +8 -5
  399. package/src/engine/indicators/{fastkState.ts → state/fastkState.ts} +2 -2
  400. package/src/engine/indicators/{fibState.ts → state/fibState.ts} +2 -2
  401. package/src/engine/indicators/{hmaState.ts → state/hmaState.ts} +2 -2
  402. package/src/engine/indicators/{hvState.ts → state/hvState.ts} +2 -2
  403. package/src/engine/indicators/{ichimokuState.ts → state/ichimokuState.ts} +2 -2
  404. package/src/engine/indicators/{kamaState.ts → state/kamaState.ts} +2 -2
  405. package/src/engine/indicators/{keltnerState.ts → state/keltnerState.ts} +2 -2
  406. package/src/engine/indicators/{kstState.ts → state/kstState.ts} +3 -3
  407. package/src/engine/indicators/{maState.ts → state/maState.ts} +2 -2
  408. package/src/engine/indicators/{macdState.ts → state/macdState.ts} +3 -20
  409. package/src/engine/indicators/{mfiState.ts → state/mfiState.ts} +2 -2
  410. package/src/engine/indicators/{momState.ts → state/momState.ts} +2 -2
  411. package/src/engine/indicators/{obvState.ts → state/obvState.ts} +2 -2
  412. package/src/engine/indicators/{parkinsonState.ts → state/parkinsonState.ts} +2 -2
  413. package/src/engine/indicators/{pivotState.ts → state/pivotState.ts} +2 -2
  414. package/src/engine/indicators/{pvtState.ts → state/pvtState.ts} +2 -2
  415. package/src/engine/indicators/{rocState.ts → state/rocState.ts} +2 -2
  416. package/src/engine/indicators/{rsiState.ts → state/rsiState.ts} +9 -5
  417. package/src/engine/indicators/{sarState.ts → state/sarState.ts} +2 -2
  418. package/src/engine/indicators/{stochState.ts → state/stochState.ts} +3 -3
  419. package/src/engine/indicators/{structureState.ts → state/structureState.ts} +2 -2
  420. package/src/engine/indicators/{supertrendState.ts → state/supertrendState.ts} +2 -2
  421. package/src/engine/indicators/{temaState.ts → state/temaState.ts} +2 -2
  422. package/src/engine/indicators/{trixState.ts → state/trixState.ts} +2 -2
  423. package/src/engine/indicators/{vmaState.ts → state/vmaState.ts} +2 -2
  424. package/src/engine/indicators/{volumeProfileState.ts → state/volumeProfileState.ts} +2 -2
  425. package/src/engine/indicators/{vwapState.ts → state/vwapState.ts} +2 -2
  426. package/src/engine/indicators/{wmaState.ts → state/wmaState.ts} +2 -2
  427. package/src/engine/indicators/{wmsrState.ts → state/wmsrState.ts} +2 -2
  428. package/src/engine/indicators/{zonesState.ts → state/zonesState.ts} +2 -2
  429. package/src/engine/indicators/stateComposer.ts +39 -39
  430. package/src/engine/indicators/visibleStateComposers.ts +203 -30
  431. package/src/engine/layout/pane.ts +2 -2
  432. package/src/engine/paneRenderer.ts +2 -6
  433. package/src/engine/render/chartRenderer.ts +7 -2
  434. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +1 -1
  435. package/src/engine/renderers/Indicator/atr.ts +3 -3
  436. package/src/engine/renderers/Indicator/boll.ts +1 -1
  437. package/src/engine/renderers/Indicator/cci.ts +2 -2
  438. package/src/engine/renderers/Indicator/chaikinVol.ts +2 -2
  439. package/src/engine/renderers/Indicator/cmf.ts +2 -2
  440. package/src/engine/renderers/Indicator/dema.ts +2 -2
  441. package/src/engine/renderers/Indicator/donchian.ts +2 -2
  442. package/src/engine/renderers/Indicator/ene.ts +1 -1
  443. package/src/engine/renderers/Indicator/expma.ts +1 -1
  444. package/src/engine/renderers/Indicator/fastk.ts +2 -2
  445. package/src/engine/renderers/Indicator/fib.ts +2 -2
  446. package/src/engine/renderers/Indicator/hma.ts +2 -2
  447. package/src/engine/renderers/Indicator/hv.ts +3 -3
  448. package/src/engine/renderers/Indicator/ichimoku.ts +111 -85
  449. package/src/engine/renderers/Indicator/kama.ts +3 -3
  450. package/src/engine/renderers/Indicator/keltner.ts +4 -4
  451. package/src/engine/renderers/Indicator/kst.ts +5 -5
  452. package/src/engine/renderers/Indicator/ma.ts +2 -2
  453. package/src/engine/renderers/Indicator/macd.ts +40 -40
  454. package/src/engine/renderers/Indicator/mfi.ts +3 -3
  455. package/src/engine/renderers/Indicator/mom.ts +4 -4
  456. package/src/engine/renderers/Indicator/obv.ts +3 -3
  457. package/src/engine/renderers/Indicator/parkinson.ts +5 -5
  458. package/src/engine/renderers/Indicator/pivot.ts +4 -4
  459. package/src/engine/renderers/Indicator/pvt.ts +3 -3
  460. package/src/engine/renderers/Indicator/roc.ts +3 -3
  461. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  462. package/src/engine/renderers/Indicator/sar.ts +3 -3
  463. package/src/engine/renderers/Indicator/stoch.ts +4 -4
  464. package/src/engine/renderers/Indicator/structure.ts +24 -24
  465. package/src/engine/renderers/Indicator/supertrend.ts +4 -4
  466. package/src/engine/renderers/Indicator/tema.ts +3 -3
  467. package/src/engine/renderers/Indicator/trix.ts +34 -34
  468. package/src/engine/renderers/Indicator/vma.ts +3 -3
  469. package/src/engine/renderers/Indicator/volumeProfile.ts +28 -28
  470. package/src/engine/renderers/Indicator/vwap.ts +3 -3
  471. package/src/engine/renderers/Indicator/wma.ts +3 -3
  472. package/src/engine/renderers/Indicator/wmsr.ts +3 -3
  473. package/src/engine/renderers/Indicator/zones.ts +6 -6
  474. package/src/engine/renderers/__tests__/boll.renderer.test.ts +1 -1
  475. package/src/engine/renderers/__tests__/ene.renderer.test.ts +1 -1
  476. package/src/engine/renderers/__tests__/expma.renderer.test.ts +1 -1
  477. package/src/engine/renderers/__tests__/ma.renderer.test.ts +1 -1
  478. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +4 -4
  479. package/src/engine/renderers/candle.ts +112 -70
  480. package/src/engine/renderers/extremaMarkers.ts +5 -3
  481. package/src/engine/renderers/gridLines.ts +1 -1
  482. package/src/engine/renderers/leftYAxis.ts +26 -3
  483. package/src/engine/renderers/timeAxis.ts +2 -0
  484. package/src/engine/renderers/timeShare.ts +10 -10
  485. package/src/engine/viewport/chartViewportManager.ts +61 -26
  486. package/src/mcp/chartBridge.ts +1 -1
  487. package/src/plugin/types.ts +4 -0
  488. package/src/utils/__tests__/dateFormat.test.ts +164 -0
  489. package/src/utils/dateFormat.ts +12 -6
  490. package/src/utils/kLineDraw/axis.ts +6 -2
  491. package/src/utils/volumePrice.ts +19 -3
  492. package/src/version.ts +1 -1
  493. package/dist/engine/indicators/atrState.d.ts.map +0 -1
  494. package/dist/engine/indicators/atrState.js.map +0 -1
  495. package/dist/engine/indicators/bollState.d.ts.map +0 -1
  496. package/dist/engine/indicators/bollState.js.map +0 -1
  497. package/dist/engine/indicators/cciState.d.ts.map +0 -1
  498. package/dist/engine/indicators/cciState.js.map +0 -1
  499. package/dist/engine/indicators/chaikinVolState.d.ts.map +0 -1
  500. package/dist/engine/indicators/chaikinVolState.js.map +0 -1
  501. package/dist/engine/indicators/cmfState.d.ts.map +0 -1
  502. package/dist/engine/indicators/cmfState.js.map +0 -1
  503. package/dist/engine/indicators/demaState.d.ts.map +0 -1
  504. package/dist/engine/indicators/demaState.js.map +0 -1
  505. package/dist/engine/indicators/donchianState.d.ts.map +0 -1
  506. package/dist/engine/indicators/donchianState.js.map +0 -1
  507. package/dist/engine/indicators/eneState.d.ts.map +0 -1
  508. package/dist/engine/indicators/eneState.js.map +0 -1
  509. package/dist/engine/indicators/expmaState.d.ts.map +0 -1
  510. package/dist/engine/indicators/expmaState.js.map +0 -1
  511. package/dist/engine/indicators/fastkState.d.ts.map +0 -1
  512. package/dist/engine/indicators/fastkState.js.map +0 -1
  513. package/dist/engine/indicators/fibState.d.ts.map +0 -1
  514. package/dist/engine/indicators/fibState.js.map +0 -1
  515. package/dist/engine/indicators/hmaState.d.ts.map +0 -1
  516. package/dist/engine/indicators/hmaState.js.map +0 -1
  517. package/dist/engine/indicators/hvState.d.ts.map +0 -1
  518. package/dist/engine/indicators/hvState.js.map +0 -1
  519. package/dist/engine/indicators/ichimokuState.d.ts.map +0 -1
  520. package/dist/engine/indicators/ichimokuState.js.map +0 -1
  521. package/dist/engine/indicators/kamaState.d.ts.map +0 -1
  522. package/dist/engine/indicators/kamaState.js.map +0 -1
  523. package/dist/engine/indicators/keltnerState.d.ts.map +0 -1
  524. package/dist/engine/indicators/keltnerState.js.map +0 -1
  525. package/dist/engine/indicators/kstState.d.ts.map +0 -1
  526. package/dist/engine/indicators/kstState.js.map +0 -1
  527. package/dist/engine/indicators/maState.d.ts.map +0 -1
  528. package/dist/engine/indicators/maState.js.map +0 -1
  529. package/dist/engine/indicators/macdState.d.ts.map +0 -1
  530. package/dist/engine/indicators/macdState.js.map +0 -1
  531. package/dist/engine/indicators/mfiState.d.ts.map +0 -1
  532. package/dist/engine/indicators/mfiState.js.map +0 -1
  533. package/dist/engine/indicators/momState.d.ts.map +0 -1
  534. package/dist/engine/indicators/momState.js.map +0 -1
  535. package/dist/engine/indicators/obvState.d.ts.map +0 -1
  536. package/dist/engine/indicators/obvState.js.map +0 -1
  537. package/dist/engine/indicators/parkinsonState.d.ts.map +0 -1
  538. package/dist/engine/indicators/parkinsonState.js.map +0 -1
  539. package/dist/engine/indicators/pivotState.d.ts.map +0 -1
  540. package/dist/engine/indicators/pivotState.js.map +0 -1
  541. package/dist/engine/indicators/pvtState.d.ts.map +0 -1
  542. package/dist/engine/indicators/pvtState.js.map +0 -1
  543. package/dist/engine/indicators/rocState.d.ts.map +0 -1
  544. package/dist/engine/indicators/rocState.js.map +0 -1
  545. package/dist/engine/indicators/rsiState.d.ts.map +0 -1
  546. package/dist/engine/indicators/rsiState.js.map +0 -1
  547. package/dist/engine/indicators/sarState.d.ts.map +0 -1
  548. package/dist/engine/indicators/sarState.js.map +0 -1
  549. package/dist/engine/indicators/stochState.d.ts.map +0 -1
  550. package/dist/engine/indicators/stochState.js.map +0 -1
  551. package/dist/engine/indicators/structureState.d.ts.map +0 -1
  552. package/dist/engine/indicators/structureState.js.map +0 -1
  553. package/dist/engine/indicators/supertrendState.d.ts.map +0 -1
  554. package/dist/engine/indicators/supertrendState.js.map +0 -1
  555. package/dist/engine/indicators/temaState.d.ts.map +0 -1
  556. package/dist/engine/indicators/temaState.js.map +0 -1
  557. package/dist/engine/indicators/trixState.d.ts.map +0 -1
  558. package/dist/engine/indicators/trixState.js.map +0 -1
  559. package/dist/engine/indicators/vmaState.d.ts.map +0 -1
  560. package/dist/engine/indicators/vmaState.js.map +0 -1
  561. package/dist/engine/indicators/volumeProfileState.d.ts.map +0 -1
  562. package/dist/engine/indicators/volumeProfileState.js.map +0 -1
  563. package/dist/engine/indicators/vwapState.d.ts.map +0 -1
  564. package/dist/engine/indicators/vwapState.js.map +0 -1
  565. package/dist/engine/indicators/wmaState.d.ts.map +0 -1
  566. package/dist/engine/indicators/wmaState.js.map +0 -1
  567. package/dist/engine/indicators/wmsrState.d.ts.map +0 -1
  568. package/dist/engine/indicators/wmsrState.js.map +0 -1
  569. package/dist/engine/indicators/zonesState.d.ts.map +0 -1
  570. package/dist/engine/indicators/zonesState.js.map +0 -1
  571. /package/dist/engine/indicators/{macdState.js → state/macdState.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck - Test file with intentional type relaxations for mocking
2
2
  import { describe, it, expect, vi, beforeEach } from 'vitest'
3
3
  import { createENERendererPlugin } from '../Indicator/ene'
4
- import { ENE_STATE_KEY, type ENERenderState } from '@/core/indicators/eneState'
4
+ import { ENE_STATE_KEY, type ENERenderState } from '@/core/indicators/state/eneState'
5
5
  import type { PluginHost, RenderContext, RendererPluginWithHost } from '@/plugin'
6
6
 
7
7
  const ENE_COLORS = { BAND_FILL: 'rgba(69, 112, 249, 0.08)' } as const
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck - Test file with intentional type relaxations for mocking
2
2
  import { describe, it, expect, vi, beforeEach } from 'vitest'
3
3
  import { createEXPMARendererPlugin } from '../Indicator/expma'
4
- import { EXPMA_STATE_KEY, type EXPMARenderState } from '@/core/indicators/expmaState'
4
+ import { EXPMA_STATE_KEY, type EXPMARenderState } from '@/core/indicators/state/expmaState'
5
5
  import type { PluginHost, RenderContext, RendererPluginWithHost } from '@/plugin'
6
6
  import type { KLineData } from '@/types/price'
7
7
  import type { Pane } from '@/core/layout/pane'
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck - Test file with intentional type relaxations for mocking
2
2
  import { describe, it, expect, vi, beforeEach } from 'vitest'
3
3
  import { createMARendererPlugin } from '../Indicator/ma'
4
- import { MA_STATE_KEY, type MARenderState } from '@/core/indicators/maState'
4
+ import { MA_STATE_KEY, type MARenderState } from '@/core/indicators/state/maState'
5
5
  import type { PluginHost, RenderContext, RendererPluginWithHost } from '@/plugin'
6
6
  import type { KLineData } from '@/types/price'
7
7
  import type { Pane } from '@/core/layout/pane'
@@ -1,10 +1,10 @@
1
1
  // @ts-nocheck - Test file with intentional type relaxations for mocking
2
2
  import { describe, it, expect, vi, beforeEach } from 'vitest'
3
3
  import { createMainIndicatorLegendRendererPlugin } from '../Indicator/mainIndicatorLegend'
4
- import { MA_STATE_KEY, type MARenderState } from '@/core/indicators/maState'
5
- import { BOLL_STATE_KEY } from '@/core/indicators/bollState'
6
- import { EXPMA_STATE_KEY } from '@/core/indicators/expmaState'
7
- import { ENE_STATE_KEY } from '@/core/indicators/eneState'
4
+ import { MA_STATE_KEY, type MARenderState } from '@/core/indicators/state/maState'
5
+ import { BOLL_STATE_KEY } from '@/core/indicators/state/bollState'
6
+ import { EXPMA_STATE_KEY } from '@/core/indicators/state/expmaState'
7
+ import { ENE_STATE_KEY } from '@/core/indicators/state/eneState'
8
8
  import type { PluginHost, RenderContext, RendererPluginWithHost } from '@/plugin'
9
9
  import type { KLineData } from '@/types/price'
10
10
  import type { Pane } from '@/core/layout/pane'
@@ -1,17 +1,39 @@
1
1
  import type { RendererPlugin, RenderContext } from '../../plugin'
2
2
  import { RENDERER_PRIORITY } from '../../plugin'
3
3
  import type { KLineData } from '../../types/price'
4
- import { getKLineTrend, type kLineTrend } from '../../types/kLine'
5
- import { createAlignedKLineFromPx, createVerticalLineRect } from '../draw/pixelAlign'
4
+ import type { kLineTrend } from '../../types/kLine'
6
5
  import { resolveThemeColors, type VolumePriceColors } from '../../tokens'
7
- import { getPhysicalKLineConfig } from '../chart'
6
+ import { getPhysicalKLineConfig } from '../utils/klineConfig'
8
7
  import { VolumePriceRelation } from '../../types/volumePrice'
9
8
  import { analyzeVolumePriceRelationBatch, DEFAULT_VOLUME_PRICE_CONFIG } from '../../utils/volumePrice'
10
9
  import type { MarkerManager } from '../marker/registry'
11
10
 
11
+ // --- Float32Array buffer pool (reduces per-frame GC pressure) ---
12
+ let poolUpBody: Float32Array | null = null
13
+ let poolDownBody: Float32Array | null = null
14
+ let poolUpWick: Float32Array | null = null
15
+ let poolDownWick: Float32Array | null = null
16
+
17
+ function ensureBufferCapacity(pool: Float32Array | null, requiredFloats: number): Float32Array {
18
+ if (pool && pool.length >= requiredFloats) return pool
19
+ const newLen = Math.max(requiredFloats, Math.ceil((pool?.length ?? 0) * 1.5))
20
+ return new Float32Array(newLen)
21
+ }
22
+
23
+ type AlignedKLineResult = {
24
+ bodyRect: { x: number; y: number; width: number; height: number }
25
+ physBodyLeft: number
26
+ physBodyRight: number
27
+ physBodyWidth: number
28
+ physBodyCenter: number
29
+ physWickX: number
30
+ wickRect: { x: number; width: number }
31
+ isPerfectlyAligned: boolean
32
+ }
33
+
12
34
  type CandleRenderData = {
13
35
  i: number
14
- aligned: ReturnType<typeof createAlignedKLineFromPx>
36
+ aligned: AlignedKLineResult
15
37
  trend: kLineTrend
16
38
  openY: number
17
39
  closeY: number
@@ -99,10 +121,14 @@ function prepareCandles(args: {
99
121
  const upKLines: CandleRenderData[] = []
100
122
  const downKLines: CandleRenderData[] = []
101
123
  const maxRects = Math.max(1, range.end - range.start)
102
- const upBodyBuf = new Float32Array(maxRects * 4)
103
- const downBodyBuf = new Float32Array(maxRects * 4)
104
- const upWickBuf = new Float32Array(maxRects * 2 * 4)
105
- const downWickBuf = new Float32Array(maxRects * 2 * 4)
124
+ const upBodyBuf = ensureBufferCapacity(poolUpBody, maxRects * 4)
125
+ poolUpBody = upBodyBuf
126
+ const downBodyBuf = ensureBufferCapacity(poolDownBody, maxRects * 4)
127
+ poolDownBody = downBodyBuf
128
+ const upWickBuf = ensureBufferCapacity(poolUpWick, maxRects * 2 * 4)
129
+ poolUpWick = upWickBuf
130
+ const downWickBuf = ensureBufferCapacity(poolDownWick, maxRects * 2 * 4)
131
+ poolDownWick = downWickBuf
106
132
  let upBodyCount = 0
107
133
  let downBodyCount = 0
108
134
  let upWickCount = 0
@@ -121,10 +147,13 @@ function prepareCandles(args: {
121
147
  const scaleB = paddingTop + viewHeight
122
148
  fastPriceToY = (price: number) => scaleB - (price - minPrice) * scaleK
123
149
  } else {
124
- // 对数模式回退到标准方法
125
150
  fastPriceToY = (price: number) => pane.yAxis.priceToY(price)
126
151
  }
127
152
 
153
+ const invDpr = 1 / dpr
154
+ const wickWidth = 1 / dpr
155
+ const alignY = (logical: number) => Math.round(logical * dpr) * invDpr
156
+
128
157
  for (let i = range.start; i < range.end && i < data.length; i++) {
129
158
  const e = data[i]
130
159
  if (!e) continue
@@ -137,7 +166,6 @@ function prepareCandles(args: {
137
166
  const leftLogical = kLinePositions[i - range.start]
138
167
  if (leftLogical === undefined) continue
139
168
 
140
- const alignY = (logical: number) => Math.round(logical * dpr) / dpr
141
169
  const alignedOpenY = alignY(openY)
142
170
  const alignedCloseY = alignY(closeY)
143
171
  const alignedHighY = alignY(highY)
@@ -146,81 +174,95 @@ function prepareCandles(args: {
146
174
  const alignedRawRectH = Math.max(Math.abs(alignedOpenY - alignedCloseY), 1)
147
175
 
148
176
  const roundedLeftPx = Math.round(leftLogical * dpr)
149
- const aligned = createAlignedKLineFromPx(
150
- roundedLeftPx,
151
- alignedRawRectY,
152
- kWidthPx,
153
- alignedRawRectH,
154
- dpr
155
- )
156
-
157
- const trend: kLineTrend = getKLineTrend(e)
158
- const renderData: CandleRenderData = {
159
- i,
160
- aligned,
161
- trend,
162
- openY,
163
- closeY,
164
- highY,
165
- lowY,
166
- alignedHighY,
167
- alignedLowY,
168
- e,
169
- }
170
177
 
171
- const bodyRect = aligned.bodyRect
172
- const targetKLines = trend === 'up' ? upKLines : downKLines
173
- const isUp = trend === 'up'
174
-
175
- targetKLines.push(renderData)
178
+ // Inlined createAlignedKLineFromPx — no object allocation
179
+ const topPx = Math.round(alignedRawRectY * dpr)
180
+ const bottomPx = Math.round((alignedRawRectY + alignedRawRectH) * dpr)
181
+ const bodyHPx = Math.max(1, bottomPx - topPx)
182
+
183
+ const bodyX = roundedLeftPx * invDpr
184
+ const bodyY = topPx * invDpr
185
+ const bodyW = kWidthPx * invDpr
186
+ const bodyH = bodyHPx * invDpr
187
+ const wickCenterX = (roundedLeftPx + (kWidthPx - 1) / 2) * invDpr
188
+
189
+ const isUp = e.close >= e.open
190
+
191
+ if (showVolumePriceMarkers) {
192
+ const targetKLines = isUp ? upKLines : downKLines
193
+ targetKLines.push({
194
+ i,
195
+ aligned: {
196
+ bodyRect: { x: bodyX, y: bodyY, width: bodyW, height: bodyH },
197
+ physBodyLeft: roundedLeftPx,
198
+ physBodyRight: roundedLeftPx + kWidthPx,
199
+ physBodyWidth: kWidthPx,
200
+ physBodyCenter: wickCenterX,
201
+ physWickX: wickCenterX,
202
+ wickRect: { x: wickCenterX, width: 1 / dpr },
203
+ isPerfectlyAligned: kWidthPx % 2 === 1,
204
+ },
205
+ trend: isUp ? 'up' : 'down',
206
+ openY,
207
+ closeY,
208
+ highY,
209
+ lowY,
210
+ alignedHighY,
211
+ alignedLowY,
212
+ e,
213
+ })
214
+ }
176
215
 
177
216
  if (isUp) {
178
217
  const off = upBodyCount++ * 4
179
- upBodyBuf[off] = bodyRect.x
180
- upBodyBuf[off + 1] = bodyRect.y
181
- upBodyBuf[off + 2] = bodyRect.width
182
- upBodyBuf[off + 3] = bodyRect.height
218
+ upBodyBuf[off] = bodyX
219
+ upBodyBuf[off + 1] = bodyY
220
+ upBodyBuf[off + 2] = bodyW
221
+ upBodyBuf[off + 3] = bodyH
183
222
  } else {
184
223
  const off = downBodyCount++ * 4
185
- downBodyBuf[off] = bodyRect.x
186
- downBodyBuf[off + 1] = bodyRect.y
187
- downBodyBuf[off + 2] = bodyRect.width
188
- downBodyBuf[off + 3] = bodyRect.height
224
+ downBodyBuf[off] = bodyX
225
+ downBodyBuf[off + 1] = bodyY
226
+ downBodyBuf[off + 2] = bodyW
227
+ downBodyBuf[off + 3] = bodyH
189
228
  }
190
229
 
191
- const bodyTop = bodyRect.y
192
- const bodyBottom = bodyRect.y + bodyRect.height
193
- const bodyHigh = Math.max(e.open, e.close)
194
- const bodyLow = Math.min(e.open, e.close)
230
+ const bodyHigh = isUp ? e.close : e.open
231
+ const bodyLow = isUp ? e.open : e.close
195
232
 
233
+ // Inlined createVerticalLineRect for upper wick
196
234
  if (e.high > bodyHigh) {
197
- const wick = createVerticalLineRect(aligned.wickRect.x, alignedHighY, bodyTop, dpr)
198
- if (wick) {
199
- const buf = isUp ? upWickBuf : downWickBuf
200
- const idx = isUp ? upWickCount++ : downWickCount++
201
- const off = idx * 4
202
- buf[off] = wick.x
203
- buf[off + 1] = wick.y
204
- buf[off + 2] = wick.width
205
- buf[off + 3] = wick.height
206
- }
235
+ const top = Math.min(alignedHighY, bodyY)
236
+ const bottom = Math.max(alignedHighY, bodyY)
237
+ const physTop = Math.round(top * dpr)
238
+ const physBottom = Math.round(bottom * dpr)
239
+ const wickH = Math.max(1, physBottom - physTop) * invDpr
240
+ const buf = isUp ? upWickBuf : downWickBuf
241
+ const idx = isUp ? upWickCount++ : downWickCount++
242
+ const off = idx * 4
243
+ buf[off] = wickCenterX
244
+ buf[off + 1] = physTop * invDpr
245
+ buf[off + 2] = wickWidth
246
+ buf[off + 3] = wickH
207
247
  }
248
+ // Inlined createVerticalLineRect for lower wick
208
249
  if (e.low < bodyLow) {
209
- const wick = createVerticalLineRect(aligned.wickRect.x, bodyBottom, alignedLowY, dpr)
210
- if (wick) {
211
- const buf = isUp ? upWickBuf : downWickBuf
212
- const idx = isUp ? upWickCount++ : downWickCount++
213
- const off = idx * 4
214
- buf[off] = wick.x
215
- buf[off + 1] = wick.y
216
- buf[off + 2] = wick.width
217
- buf[off + 3] = wick.height
218
- }
250
+ const bodyBottom = bodyY + bodyH
251
+ const top = Math.min(bodyBottom, alignedLowY)
252
+ const bottom = Math.max(bodyBottom, alignedLowY)
253
+ const physTop = Math.round(top * dpr)
254
+ const physBottom = Math.round(bottom * dpr)
255
+ const wickH = Math.max(1, physBottom - physTop) * invDpr
256
+ const buf = isUp ? upWickBuf : downWickBuf
257
+ const idx = isUp ? upWickCount++ : downWickCount++
258
+ const off = idx * 4
259
+ buf[off] = wickCenterX
260
+ buf[off + 1] = physTop * invDpr
261
+ buf[off + 2] = wickWidth
262
+ buf[off + 3] = wickH
219
263
  }
220
264
  }
221
265
 
222
- const wickWidth = upKLines[0]?.aligned.wickRect.width ?? downKLines[0]?.aligned.wickRect.width ?? 1
223
-
224
266
  return {
225
267
  upKLines,
226
268
  downKLines,
@@ -154,6 +154,7 @@ export function createExtremaMarkersRendererPlugin(): RendererPlugin {
154
154
  max,
155
155
  dpr,
156
156
  paneWidth,
157
+ scrollLeft,
157
158
  ctx
158
159
  )
159
160
  if (maxMarker) markers.push(maxMarker)
@@ -164,6 +165,7 @@ export function createExtremaMarkersRendererPlugin(): RendererPlugin {
164
165
  min,
165
166
  dpr,
166
167
  paneWidth,
168
+ scrollLeft,
167
169
  ctx
168
170
  )
169
171
  if (minMarker) markers.push(minMarker)
@@ -186,14 +188,14 @@ function createMarkerData(
186
188
  price: number,
187
189
  dpr: number,
188
190
  paneWidth: number,
191
+ scrollLeft: number,
189
192
  ctx: CanvasRenderingContext2D
190
193
  ): MarkerData | null {
191
194
  const text = price.toFixed(2)
192
195
  const textWidth = measureTextWidth(ctx, text)
193
196
 
194
- const visibleX = x
195
- const rightEdge = visibleX + LINE_LENGTH + PADDING + textWidth
196
- const drawLeft = rightEdge > paneWidth
197
+ const screenX = x - scrollLeft
198
+ const drawLeft = screenX >= paneWidth / 2
197
199
 
198
200
  let lineStartX = x
199
201
  let lineEndX = drawLeft ? x - LINE_LENGTH : x + LINE_LENGTH
@@ -42,7 +42,7 @@ export function createGridLinesRendererPlugin(): RendererPlugin {
42
42
  }
43
43
  }
44
44
 
45
- const boundaries = findMonthBoundaries(klineData)
45
+ const boundaries = findMonthBoundaries(klineData, context.monthKeys)
46
46
 
47
47
  for (const idx of boundaries) {
48
48
  if (idx < range.start || idx >= range.end || idx >= klineData.length) continue
@@ -54,6 +54,13 @@ export function createLeftYAxisRendererPlugin(options: {
54
54
  const needsOwnValues = scaleType !== paneScaleType
55
55
  const crosshairPriceRange = pane.yAxis.getDisplayRange()
56
56
 
57
+ const formatTick = scaleType === 'percent'
58
+ ? (v: number) => {
59
+ const sign = v >= 0 ? '+' : ''
60
+ return sign + v.toFixed(2) + '%'
61
+ }
62
+ : (v: number) => v.toFixed(2)
63
+
57
64
  for (const tick of context.yAxisTicks) {
58
65
  let displayValue: number
59
66
  if (needsOwnValues) {
@@ -69,24 +76,40 @@ export function createLeftYAxisRendererPlugin(options: {
69
76
  } else {
70
77
  displayValue = tick.value
71
78
  }
72
- leftAxisCtx.fillText(displayValue.toFixed(2), textX, tick.y)
79
+ leftAxisCtx.fillText(formatTick(displayValue), textX, tick.y)
73
80
  }
74
81
 
75
82
  const crosshair = options.getCrosshair?.()
76
83
  if (!crosshair || crosshair.activePaneId !== pane.id || crosshair.price === null) return
77
84
 
85
+ const isCrosshairPercent = scaleType === 'percent'
86
+ const crosshairPrice = isCrosshairPercent ? pane.yAxis.toPercent(crosshair.price) : crosshair.price
87
+ const crosshairLabelRange: { minPrice: number; maxPrice: number } = isCrosshairPercent
88
+ ? (() => {
89
+ const p = pane.yAxis.getDisplayPercentRange()
90
+ return { minPrice: p.minPct, maxPrice: p.maxPct }
91
+ })()
92
+ : crosshairPriceRange
93
+ const formatCrosshairPrice = isCrosshairPercent
94
+ ? (v: number) => {
95
+ const sign = v >= 0 ? '+' : ''
96
+ return sign + v.toFixed(2) + '%'
97
+ }
98
+ : undefined
99
+
78
100
  drawCrosshairPriceLabel(leftAxisCtx, {
79
101
  x: 0,
80
102
  y: pane.top,
81
103
  width: axisWidth,
82
104
  height: pane.height,
83
105
  crosshairY: crosshair.y,
84
- priceRange: crosshairPriceRange,
106
+ priceRange: crosshairLabelRange,
85
107
  yPaddingPx: options.yPaddingPx,
86
108
  dpr,
87
109
  fontSize: 12,
88
110
  priceOffset: 0,
89
- price: crosshair.price,
111
+ price: crosshairPrice,
112
+ formatPrice: formatCrosshairPrice,
90
113
  }, context.theme, context.isAsiaMarket, context.colorPresetSettings)
91
114
  },
92
115
  }
@@ -59,6 +59,8 @@ export function createTimeAxisRendererPlugin(options: {
59
59
  drawTopBorder: false,
60
60
  drawBottomBorder: false,
61
61
  period: context.period,
62
+ monthKeys: context.monthKeys,
63
+ dayKeys: context.dayKeys,
62
64
  }, context.theme, context.isAsiaMarket, context.colorPresetSettings)
63
65
 
64
66
  // 绘制来自 xAxisRanges 的时间范围带(先于标签绘制)
@@ -51,7 +51,7 @@ export function createTimeShareRendererPlugin(): RendererPluginWithHost {
51
51
  xPositions.push(x)
52
52
  yPrices.push(pane.yAxis.priceToY(item.price))
53
53
  yAvgs.push(pane.yAxis.priceToY(item.average))
54
- volumes.push(item.volume)
54
+ volumes.push(item.volume ?? 0)
55
55
  maxVolume = Math.max(maxVolume, item.volume)
56
56
  }
57
57
 
@@ -86,8 +86,8 @@ function drawPreCloseLine(
86
86
  color: string,
87
87
  ): void {
88
88
  if (xPositions.length < 2) return
89
- const firstX = xPositions[0]
90
- const lastX = xPositions[xPositions.length - 1]
89
+ const firstX = xPositions[0]!
90
+ const lastX = xPositions[xPositions.length - 1]!
91
91
 
92
92
  ctx.save()
93
93
  ctx.strokeStyle = color
@@ -198,10 +198,10 @@ function drawSegmentLine(
198
198
  ctx.lineCap = 'round'
199
199
 
200
200
  ctx.beginPath()
201
- ctx.moveTo(xPositions[0], yPositions[0])
201
+ ctx.moveTo(xPositions[0]!, yPositions[0]!)
202
202
 
203
203
  for (let i = 1; i < xPositions.length; i++) {
204
- ctx.lineTo(xPositions[i], yPositions[i])
204
+ ctx.lineTo(xPositions[i]!, yPositions[i]!)
205
205
  }
206
206
 
207
207
  ctx.stroke()
@@ -228,7 +228,7 @@ function drawVolumeBars(
228
228
  const snappedBottom = Math.round(paneHeight * dpr) / dpr
229
229
 
230
230
  for (let i = 0; i < barRects.length; i++) {
231
- const volume = volumes[i]
231
+ const volume = volumes[i]!
232
232
  if (volume <= 0) continue
233
233
 
234
234
  const barHeight = (volume / maxVolume) * volumeAreaHeight
@@ -239,14 +239,14 @@ function drawVolumeBars(
239
239
 
240
240
  let barColor: string
241
241
  if (i > 0) {
242
- const price = data[idx].price
243
- const prevPrice = data[idx - 1].price
242
+ const price = data[idx]!.price
243
+ const prevPrice = data[idx - 1]!.price
244
244
  if (price > prevPrice) barColor = upColor
245
245
  else if (price < prevPrice) barColor = downColor
246
246
  else barColor = neutralColor
247
247
  } else {
248
- if (data[idx].price > preClose) barColor = upColor
249
- else if (data[idx].price < preClose) barColor = downColor
248
+ if (data[idx]!.price > preClose) barColor = upColor
249
+ else if (data[idx]!.price < preClose) barColor = downColor
250
250
  else barColor = neutralColor
251
251
  }
252
252
 
@@ -165,38 +165,76 @@ export class ChartViewportManager {
165
165
  }
166
166
 
167
167
  /**
168
- * 计算视口
168
+ * 计算视口(coordinator)
169
+ *
170
+ * 协调 4 个步骤:尺寸解析 → DPR 计算 → DOM 同步 → 状态推送。
171
+ * 每一子步骤均可独立测试。
169
172
  */
170
173
  computeViewport(): Viewport | null {
174
+ const dims = this.resolveViewportDimensions()
175
+ if (!dims) return null
176
+ const { viewWidth, viewHeight, plotWidth, plotHeight } = dims
177
+
178
+ const dpr = this.clampDpr(viewWidth, viewHeight)
179
+ const scrollLeft = Math.round(this.getLogicalScrollLeft() * dpr) / dpr
180
+
181
+ this.syncCanvasDom(dpr, viewWidth, viewHeight)
182
+ this.deps.resizeSharedWebGLSurface(plotWidth, plotHeight, dpr)
183
+
184
+ const vp: Viewport = { viewWidth, viewHeight, plotWidth, plotHeight, scrollLeft, dpr }
185
+ this.applyViewportState(vp)
186
+ return vp
187
+ }
188
+
189
+ /**
190
+ * 解析容器尺寸
191
+ *
192
+ * 优先使用 ResizeObserver 上报的 observedSize,
193
+ * fallback 到 DOM clientWidth/clientHeight。
194
+ * plotHeight 为 viewHeight 扣除底部轴高度。
195
+ */
196
+ private resolveViewportDimensions(): { viewWidth: number; viewHeight: number; plotWidth: number; plotHeight: number } | null {
171
197
  const container = this.deps.getDom().container
172
198
  if (!container) return null
173
199
 
174
- const observedWidth = this.observedSize.width
175
- const observedHeight = this.observedSize.height
176
- const viewWidth = observedWidth > 0
177
- ? observedWidth
200
+ const viewWidth = this.observedSize.width > 0
201
+ ? this.observedSize.width
178
202
  : Math.max(1, Math.round(container.clientWidth))
179
- const viewHeight = observedHeight > 0
180
- ? observedHeight
203
+ const viewHeight = this.observedSize.height > 0
204
+ ? this.observedSize.height
181
205
  : Math.max(1, Math.round(container.clientHeight))
182
-
183
206
  const plotWidth = Math.round(viewWidth)
184
207
  const plotHeight = Math.round(viewHeight - this.deps.getBottomAxisHeight())
185
208
 
186
- let dpr = this.getEffectiveDpr()
209
+ return { viewWidth, viewHeight, plotWidth, plotHeight }
210
+ }
187
211
 
212
+ /**
213
+ * DPR 计算与封顶
214
+ *
215
+ * 取 effectiveDpr,若总像素超 MAX_CANVAS_PIXELS(16M)则降级 dpr
216
+ * 以避免浏览器 canvas 创建失败。
217
+ */
218
+ private clampDpr(viewWidth: number, viewHeight: number): number {
188
219
  const MAX_CANVAS_PIXELS = 16 * 1024 * 1024
189
- const requestedPixels = viewWidth * dpr * (viewHeight * dpr)
190
- if (requestedPixels > MAX_CANVAS_PIXELS) {
220
+ let dpr = this.getEffectiveDpr()
221
+ if (viewWidth * dpr * (viewHeight * dpr) > MAX_CANVAS_PIXELS) {
191
222
  dpr = Math.sqrt(MAX_CANVAS_PIXELS / (viewWidth * viewHeight))
192
223
  }
224
+ return dpr
225
+ }
193
226
 
194
- // 对齐 scrollLeft,消除 translate 亚像素偏移
195
- const scrollLeft = Math.round(this.getLogicalScrollLeft() * dpr) / dpr
196
-
227
+ /**
228
+ * 同步 DOM canvas 尺寸
229
+ *
230
+ * 更新 canvasLayer 和 xAxisCanvas 的 width/height 属性与 CSS 尺寸,
231
+ * 确保物理像素与逻辑像素一致,消除亚像素偏移。
232
+ * 仅在实际值变化时写入,避免无意义回流。
233
+ */
234
+ private syncCanvasDom(dpr: number, viewWidth: number, viewHeight: number): void {
197
235
  const dom = this.deps.getDom()
198
-
199
236
  const dprRoundedViewWidth = Math.round(viewWidth * dpr) / dpr
237
+
200
238
  const canvasLayerWidth = `${dprRoundedViewWidth}px`
201
239
  if (dom.canvasLayer.style.width !== canvasLayerWidth) {
202
240
  dom.canvasLayer.style.width = canvasLayerWidth
@@ -226,17 +264,15 @@ export class ChartViewportManager {
226
264
  if (dom.xAxisCanvas.style.height !== xAxisCssHeight) {
227
265
  dom.xAxisCanvas.style.height = xAxisCssHeight
228
266
  }
267
+ }
229
268
 
230
- this.deps.resizeSharedWebGLSurface(plotWidth, plotHeight, dpr)
231
-
232
- const vp: Viewport = {
233
- viewWidth,
234
- viewHeight,
235
- plotWidth,
236
- plotHeight,
237
- scrollLeft,
238
- dpr,
239
- }
269
+ /**
270
+ * 应用视口状态
271
+ *
272
+ * 缓存 Viewport 对象并检测字段是否变化,
273
+ * 有变化时才写入 _viewportSignal 避免触发无关重绘。
274
+ */
275
+ private applyViewportState(vp: Viewport): void {
240
276
  const prevViewport = this._internalViewport
241
277
  const viewportChanged = !prevViewport
242
278
  || prevViewport.viewWidth !== vp.viewWidth
@@ -260,7 +296,6 @@ export class ChartViewportManager {
260
296
  kGap: current.kGap,
261
297
  })
262
298
  }
263
- return vp
264
299
  }
265
300
 
266
301
  /**
@@ -208,7 +208,7 @@ export class ChartBridge {
208
208
 
209
209
  this.reconnectTimer = setTimeout(() => {
210
210
  if (!this.destroyed) {
211
- this.connect()
211
+ this.connect().catch(() => {})
212
212
  }
213
213
  }, delay)
214
214
  }
@@ -338,6 +338,10 @@ export interface RenderContext {
338
338
  colorPresetSettings?: import('../tokens').ColorPresetSettings
339
339
  /** 预计算的 Y 轴刻度列表(统一像素均匀分布 → yToPrice 反算),所有 Y 轴渲染器共用 */
340
340
  yAxisTicks?: YAxisTick[]
341
+ /** 预计算的月份键值数组(year*12+month),与 data 长度一致,由 DataBuffer 在数据加载时计算 */
342
+ monthKeys?: Int32Array
343
+ /** 预计算的日期键值数组(year*366+dayOfYear),与 data 长度一致,由 DataBuffer 在数据加载时计算 */
344
+ dayKeys?: Int32Array
341
345
  }
342
346
 
343
347
  export type DrawingAnchor = {