@363045841yyt/klinechart-core 0.8.13 → 0.8.14-alpha.1

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 (743) hide show
  1. package/dist/alerts/createAlertController.d.ts.map +1 -1
  2. package/dist/alerts/createAlertController.js +3 -3
  3. package/dist/alerts/createAlertController.js.map +1 -1
  4. package/dist/chartTypes/pointAndFigure.js +1 -1
  5. package/dist/chartTypes/pointAndFigure.js.map +1 -1
  6. package/dist/chartTypes/rangeBars.js +1 -1
  7. package/dist/chartTypes/rangeBars.js.map +1 -1
  8. package/dist/components/anchoredVwap/computeAnchoredVwap.d.ts.map +1 -1
  9. package/dist/components/anchoredVwap/computeAnchoredVwap.js.map +1 -1
  10. package/dist/components/anchoredVwap/createAnchoredVwapController.d.ts.map +1 -1
  11. package/dist/components/anchoredVwap/createAnchoredVwapController.js +4 -4
  12. package/dist/components/anchoredVwap/createAnchoredVwapController.js.map +1 -1
  13. package/dist/components/crosshairSync/createCrosshairSync.d.ts.map +1 -1
  14. package/dist/components/crosshairSync/createCrosshairSync.js +1 -1
  15. package/dist/components/crosshairSync/createCrosshairSync.js.map +1 -1
  16. package/dist/components/footprint/createFootprintController.d.ts.map +1 -1
  17. package/dist/components/footprint/createFootprintController.js +1 -1
  18. package/dist/components/footprint/createFootprintController.js.map +1 -1
  19. package/dist/components/mtfOverlay/createMtfController.d.ts.map +1 -1
  20. package/dist/components/mtfOverlay/createMtfController.js +1 -1
  21. package/dist/components/mtfOverlay/createMtfController.js.map +1 -1
  22. package/dist/components/orderBookHeatmap/createHeatmapController.d.ts.map +1 -1
  23. package/dist/components/orderBookHeatmap/createHeatmapController.js +3 -3
  24. package/dist/components/orderBookHeatmap/createHeatmapController.js.map +1 -1
  25. package/dist/components/orderBookHeatmap/createOrderBookState.d.ts.map +1 -1
  26. package/dist/components/orderBookHeatmap/createOrderBookState.js +1 -3
  27. package/dist/components/orderBookHeatmap/createOrderBookState.js.map +1 -1
  28. package/dist/components/orderBookHeatmap/deltaArchive.js +1 -1
  29. package/dist/components/orderBookHeatmap/deltaArchive.js.map +1 -1
  30. package/dist/components/orderBookHeatmap/logColorScale.d.ts.map +1 -1
  31. package/dist/components/orderBookHeatmap/logColorScale.js.map +1 -1
  32. package/dist/components/orderBookHeatmap/snapshotRing.d.ts.map +1 -1
  33. package/dist/components/orderBookHeatmap/snapshotRing.js.map +1 -1
  34. package/dist/components/volumeProfile/createVolumeProfileController.d.ts.map +1 -1
  35. package/dist/components/volumeProfile/createVolumeProfileController.js.map +1 -1
  36. package/dist/config/chartSettings.d.ts +19 -3
  37. package/dist/config/chartSettings.d.ts.map +1 -1
  38. package/dist/config/chartSettings.js +19 -1
  39. package/dist/config/chartSettings.js.map +1 -1
  40. package/dist/controllers/createChartController.d.ts.map +1 -1
  41. package/dist/controllers/createChartController.js +25 -3
  42. package/dist/controllers/createChartController.js.map +1 -1
  43. package/dist/controllers/createDrawingController.d.ts.map +1 -1
  44. package/dist/controllers/createDrawingController.js.map +1 -1
  45. package/dist/controllers/createIndicatorSelectorController.d.ts.map +1 -1
  46. package/dist/controllers/createIndicatorSelectorController.js +1 -1
  47. package/dist/controllers/createIndicatorSelectorController.js.map +1 -1
  48. package/dist/controllers/createToolbarController.d.ts.map +1 -1
  49. package/dist/controllers/createToolbarController.js.map +1 -1
  50. package/dist/controllers/types.d.ts +11 -7
  51. package/dist/controllers/types.d.ts.map +1 -1
  52. package/dist/data-fetchers/baostock.d.ts.map +1 -1
  53. package/dist/data-fetchers/baostock.js.map +1 -1
  54. package/dist/data-fetchers/binance.d.ts.map +1 -1
  55. package/dist/data-fetchers/binance.js.map +1 -1
  56. package/dist/data-fetchers/dataBuffer.d.ts +11 -28
  57. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  58. package/dist/data-fetchers/dataBuffer.effects.d.ts.map +1 -1
  59. package/dist/data-fetchers/dataBuffer.effects.js.map +1 -1
  60. package/dist/data-fetchers/dataBuffer.js +80 -172
  61. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  62. package/dist/data-fetchers/dataBufferTypes.d.ts +33 -2
  63. package/dist/data-fetchers/dataBufferTypes.d.ts.map +1 -1
  64. package/dist/data-fetchers/depthConnector.d.ts +1 -1
  65. package/dist/data-fetchers/depthConnector.d.ts.map +1 -1
  66. package/dist/data-fetchers/depthConnector.js.map +1 -1
  67. package/dist/data-fetchers/fetchScheduler.d.ts +12 -0
  68. package/dist/data-fetchers/fetchScheduler.d.ts.map +1 -0
  69. package/dist/data-fetchers/fetchScheduler.js +47 -0
  70. package/dist/data-fetchers/fetchScheduler.js.map +1 -0
  71. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts +5 -0
  72. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
  73. package/dist/data-fetchers/fetcherDefinitionRegistry.js +12 -2
  74. package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
  75. package/dist/data-fetchers/gotdx.js.map +1 -1
  76. package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
  77. package/dist/data-fetchers/hundred-mock.js.map +1 -1
  78. package/dist/data-fetchers/index.d.ts +1 -1
  79. package/dist/data-fetchers/index.d.ts.map +1 -1
  80. package/dist/data-fetchers/kLineDataStore.d.ts +21 -0
  81. package/dist/data-fetchers/kLineDataStore.d.ts.map +1 -0
  82. package/dist/data-fetchers/kLineDataStore.js +77 -0
  83. package/dist/data-fetchers/kLineDataStore.js.map +1 -0
  84. package/dist/data-fetchers/router.d.ts.map +1 -1
  85. package/dist/data-fetchers/router.js.map +1 -1
  86. package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
  87. package/dist/data-fetchers/thousand-mock.js.map +1 -1
  88. package/dist/data-fetchers/timeKeyIndex.d.ts +10 -0
  89. package/dist/data-fetchers/timeKeyIndex.d.ts.map +1 -0
  90. package/dist/data-fetchers/timeKeyIndex.js +34 -0
  91. package/dist/data-fetchers/timeKeyIndex.js.map +1 -0
  92. package/dist/data-fetchers/timeShareBuffer.d.ts +3 -4
  93. package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -1
  94. package/dist/data-fetchers/timeShareBuffer.js +5 -5
  95. package/dist/data-fetchers/timeShareBuffer.js.map +1 -1
  96. package/dist/data-fetchers/tradingview.js.map +1 -1
  97. package/dist/engine/chart.d.ts +7 -5
  98. package/dist/engine/chart.d.ts.map +1 -1
  99. package/dist/engine/chart.js +9 -3
  100. package/dist/engine/chart.js.map +1 -1
  101. package/dist/engine/controller/interaction.d.ts +1 -1
  102. package/dist/engine/controller/interaction.d.ts.map +1 -1
  103. package/dist/engine/controller/interaction.js +1 -1
  104. package/dist/engine/controller/interaction.js.map +1 -1
  105. package/dist/engine/controller/pinchTracker.js +2 -2
  106. package/dist/engine/controller/pinchTracker.js.map +1 -1
  107. package/dist/engine/data/chartDataManager.d.ts +23 -26
  108. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  109. package/dist/engine/data/chartDataManager.js +174 -414
  110. package/dist/engine/data/chartDataManager.js.map +1 -1
  111. package/dist/engine/data/comparisonManager.d.ts +36 -0
  112. package/dist/engine/data/comparisonManager.d.ts.map +1 -0
  113. package/dist/engine/data/comparisonManager.js +165 -0
  114. package/dist/engine/data/comparisonManager.js.map +1 -0
  115. package/dist/engine/data/fetchBatchScheduler.d.ts +12 -0
  116. package/dist/engine/data/fetchBatchScheduler.d.ts.map +1 -0
  117. package/dist/engine/data/fetchBatchScheduler.js +54 -0
  118. package/dist/engine/data/fetchBatchScheduler.js.map +1 -0
  119. package/dist/engine/data/incrementalLoadHint.d.ts +25 -0
  120. package/dist/engine/data/incrementalLoadHint.d.ts.map +1 -0
  121. package/dist/engine/data/incrementalLoadHint.js +91 -0
  122. package/dist/engine/data/incrementalLoadHint.js.map +1 -0
  123. package/dist/engine/data/scrollCompensator.d.ts +26 -0
  124. package/dist/engine/data/scrollCompensator.d.ts.map +1 -0
  125. package/dist/engine/data/scrollCompensator.js +80 -0
  126. package/dist/engine/data/scrollCompensator.js.map +1 -0
  127. package/dist/engine/drawing/AnchorCollector.d.ts +1 -1
  128. package/dist/engine/drawing/AnchorCollector.d.ts.map +1 -1
  129. package/dist/engine/drawing/AnchorCollector.js.map +1 -1
  130. package/dist/engine/drawing/DragHandler.d.ts +1 -1
  131. package/dist/engine/drawing/DragHandler.d.ts.map +1 -1
  132. package/dist/engine/drawing/DragHandler.js.map +1 -1
  133. package/dist/engine/drawing/DrawingState.d.ts +1 -1
  134. package/dist/engine/drawing/DrawingState.d.ts.map +1 -1
  135. package/dist/engine/drawing/HitTester.d.ts +1 -1
  136. package/dist/engine/drawing/HitTester.d.ts.map +1 -1
  137. package/dist/engine/drawing/HitTester.js +1 -1
  138. package/dist/engine/drawing/HitTester.js.map +1 -1
  139. package/dist/engine/drawing/PreviewRenderer.d.ts +1 -1
  140. package/dist/engine/drawing/PreviewRenderer.d.ts.map +1 -1
  141. package/dist/engine/drawing/PreviewRenderer.js.map +1 -1
  142. package/dist/engine/drawing/coordinateUtils.d.ts +1 -1
  143. package/dist/engine/drawing/coordinateUtils.d.ts.map +1 -1
  144. package/dist/engine/drawing/interaction.d.ts +1 -1
  145. package/dist/engine/drawing/interaction.d.ts.map +1 -1
  146. package/dist/engine/drawing/interaction.js +3 -3
  147. package/dist/engine/drawing/interaction.js.map +1 -1
  148. package/dist/engine/drawing/plugin.d.ts.map +1 -1
  149. package/dist/engine/drawing/plugin.js +1 -1
  150. package/dist/engine/drawing/plugin.js.map +1 -1
  151. package/dist/engine/indicators/calculators/bands.d.ts.map +1 -1
  152. package/dist/engine/indicators/calculators/bands.js.map +1 -1
  153. package/dist/engine/indicators/calculators/movingAverages.d.ts.map +1 -1
  154. package/dist/engine/indicators/calculators/movingAverages.js.map +1 -1
  155. package/dist/engine/indicators/calculators/oscillators.d.ts.map +1 -1
  156. package/dist/engine/indicators/calculators/oscillators.js.map +1 -1
  157. package/dist/engine/indicators/calculators/volatility.d.ts.map +1 -1
  158. package/dist/engine/indicators/calculators/volatility.js.map +1 -1
  159. package/dist/engine/indicators/chartIndicatorManager.d.ts +4 -4
  160. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  161. package/dist/engine/indicators/chartIndicatorManager.js +4 -4
  162. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  163. package/dist/engine/indicators/indicator.worker.js +1 -1
  164. package/dist/engine/indicators/indicator.worker.js.map +1 -1
  165. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +1 -1
  166. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  167. package/dist/engine/indicators/indicatorDefinitionRegistry.js +1 -1
  168. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  169. package/dist/engine/indicators/indicatorMetadata.d.ts +1 -1
  170. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  171. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  172. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  173. package/dist/engine/indicators/indicatorRegistry.js +2 -2
  174. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  175. package/dist/engine/indicators/indicatorRuntime.d.ts.map +1 -1
  176. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  177. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
  178. package/dist/engine/indicators/registerBuiltins.js.map +1 -1
  179. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  180. package/dist/engine/indicators/scheduler.js +21 -8
  181. package/dist/engine/indicators/scheduler.js.map +1 -1
  182. package/dist/engine/indicators/stateComposer.d.ts +29 -29
  183. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  184. package/dist/engine/indicators/stateComposer.js.map +1 -1
  185. package/dist/engine/indicators/visibleStateComposers.js +2 -2
  186. package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
  187. package/dist/engine/indicators/workerProtocol.d.ts.map +1 -1
  188. package/dist/engine/indicators/workerProtocol.js.map +1 -1
  189. package/dist/engine/layout/chartPaneLayout.d.ts +2 -2
  190. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
  191. package/dist/engine/layout/chartPaneLayout.js +1 -1
  192. package/dist/engine/layout/chartPaneLayout.js.map +1 -1
  193. package/dist/engine/layout/pane.d.ts +2 -2
  194. package/dist/engine/layout/pane.d.ts.map +1 -1
  195. package/dist/engine/layout/pane.js +1 -1
  196. package/dist/engine/layout/pane.js.map +1 -1
  197. package/dist/engine/marker/registry.js +2 -2
  198. package/dist/engine/marker/registry.js.map +1 -1
  199. package/dist/engine/modes/kLineMode.d.ts +2 -2
  200. package/dist/engine/modes/kLineMode.d.ts.map +1 -1
  201. package/dist/engine/modes/kLineMode.js.map +1 -1
  202. package/dist/engine/modes/timeShareMode.d.ts +2 -2
  203. package/dist/engine/modes/timeShareMode.d.ts.map +1 -1
  204. package/dist/engine/modes/timeShareMode.js +1 -1
  205. package/dist/engine/modes/timeShareMode.js.map +1 -1
  206. package/dist/engine/modes/types.d.ts +1 -1
  207. package/dist/engine/modes/types.d.ts.map +1 -1
  208. package/dist/engine/paneRenderer.d.ts +1 -1
  209. package/dist/engine/paneRenderer.d.ts.map +1 -1
  210. package/dist/engine/paneRenderer.js.map +1 -1
  211. package/dist/engine/render/chartRenderer.d.ts +7 -7
  212. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  213. package/dist/engine/render/chartRenderer.js +15 -15
  214. package/dist/engine/render/chartRenderer.js.map +1 -1
  215. package/dist/engine/render/layers/candleLayer.d.ts +1 -1
  216. package/dist/engine/render/layers/candleLayer.d.ts.map +1 -1
  217. package/dist/engine/render/layers/candleLayer.js.map +1 -1
  218. package/dist/engine/render/layers/comparisonLineLayer.d.ts +1 -1
  219. package/dist/engine/render/layers/comparisonLineLayer.d.ts.map +1 -1
  220. package/dist/engine/render/layers/comparisonLineLayer.js.map +1 -1
  221. package/dist/engine/render/layers/crosshairLayer.d.ts +1 -1
  222. package/dist/engine/render/layers/crosshairLayer.d.ts.map +1 -1
  223. package/dist/engine/render/layers/crosshairLayer.js.map +1 -1
  224. package/dist/engine/render/layers/customMarkersLayer.d.ts +1 -1
  225. package/dist/engine/render/layers/customMarkersLayer.d.ts.map +1 -1
  226. package/dist/engine/render/layers/customMarkersLayer.js.map +1 -1
  227. package/dist/engine/render/layers/extremaMarkersLayer.d.ts +1 -1
  228. package/dist/engine/render/layers/extremaMarkersLayer.d.ts.map +1 -1
  229. package/dist/engine/render/layers/extremaMarkersLayer.js.map +1 -1
  230. package/dist/engine/render/layers/gridLinesLayer.d.ts +1 -1
  231. package/dist/engine/render/layers/gridLinesLayer.d.ts.map +1 -1
  232. package/dist/engine/render/layers/gridLinesLayer.js.map +1 -1
  233. package/dist/engine/render/layers/lastPriceLabelLayer.d.ts +1 -1
  234. package/dist/engine/render/layers/lastPriceLabelLayer.d.ts.map +1 -1
  235. package/dist/engine/render/layers/lastPriceLabelLayer.js.map +1 -1
  236. package/dist/engine/render/layers/lastPriceLineLayer.d.ts +1 -1
  237. package/dist/engine/render/layers/lastPriceLineLayer.d.ts.map +1 -1
  238. package/dist/engine/render/layers/lastPriceLineLayer.js.map +1 -1
  239. package/dist/engine/render/layers/leftYAxisLayer.d.ts +1 -1
  240. package/dist/engine/render/layers/leftYAxisLayer.d.ts.map +1 -1
  241. package/dist/engine/render/layers/leftYAxisLayer.js.map +1 -1
  242. package/dist/engine/render/layers/mainIndicatorLegendLayer.d.ts +1 -1
  243. package/dist/engine/render/layers/mainIndicatorLegendLayer.d.ts.map +1 -1
  244. package/dist/engine/render/layers/mainIndicatorLegendLayer.js.map +1 -1
  245. package/dist/engine/render/layers/yAxisLayer.d.ts +1 -1
  246. package/dist/engine/render/layers/yAxisLayer.d.ts.map +1 -1
  247. package/dist/engine/render/layers/yAxisLayer.js.map +1 -1
  248. package/dist/engine/renderers/Indicator/atr.js +3 -3
  249. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  250. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  251. package/dist/engine/renderers/Indicator/boll.js +2 -2
  252. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  253. package/dist/engine/renderers/Indicator/cci.js +3 -3
  254. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  255. package/dist/engine/renderers/Indicator/chaikinVol.js +3 -3
  256. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  257. package/dist/engine/renderers/Indicator/cmf.js +4 -4
  258. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  259. package/dist/engine/renderers/Indicator/dema.js +3 -3
  260. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  261. package/dist/engine/renderers/Indicator/donchian.js +2 -2
  262. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  263. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  264. package/dist/engine/renderers/Indicator/ene.js +2 -2
  265. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  266. package/dist/engine/renderers/Indicator/expma.js +1 -1
  267. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  268. package/dist/engine/renderers/Indicator/fastk.js +4 -4
  269. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  270. package/dist/engine/renderers/Indicator/fib.js +2 -2
  271. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  272. package/dist/engine/renderers/Indicator/hma.js +3 -3
  273. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  274. package/dist/engine/renderers/Indicator/hv.js +3 -3
  275. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  276. package/dist/engine/renderers/Indicator/ichimoku.js +2 -2
  277. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  278. package/dist/engine/renderers/Indicator/kama.js +3 -3
  279. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  280. package/dist/engine/renderers/Indicator/keltner.js +2 -2
  281. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  282. package/dist/engine/renderers/Indicator/kst.js +3 -3
  283. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  284. package/dist/engine/renderers/Indicator/ma.js +2 -2
  285. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  286. package/dist/engine/renderers/Indicator/macd.js +2 -2
  287. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  288. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  289. package/dist/engine/renderers/Indicator/mfi.js +4 -4
  290. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  291. package/dist/engine/renderers/Indicator/mom.js +3 -3
  292. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  293. package/dist/engine/renderers/Indicator/obv.js +2 -2
  294. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  295. package/dist/engine/renderers/Indicator/parkinson.js +3 -3
  296. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  297. package/dist/engine/renderers/Indicator/pivot.js +2 -2
  298. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  299. package/dist/engine/renderers/Indicator/pvt.js +2 -2
  300. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  301. package/dist/engine/renderers/Indicator/roc.js +2 -2
  302. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  303. package/dist/engine/renderers/Indicator/rsi.js +3 -3
  304. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  305. package/dist/engine/renderers/Indicator/sar.js +2 -2
  306. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  307. package/dist/engine/renderers/Indicator/scale/atr_scale.d.ts.map +1 -1
  308. package/dist/engine/renderers/Indicator/scale/atr_scale.js.map +1 -1
  309. package/dist/engine/renderers/Indicator/scale/cci_scale.d.ts.map +1 -1
  310. package/dist/engine/renderers/Indicator/scale/cci_scale.js.map +1 -1
  311. package/dist/engine/renderers/Indicator/scale/fastk_scale.d.ts.map +1 -1
  312. package/dist/engine/renderers/Indicator/scale/fastk_scale.js.map +1 -1
  313. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
  314. package/dist/engine/renderers/Indicator/scale/indicator_scale.js +2 -2
  315. package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
  316. package/dist/engine/renderers/Indicator/scale/kst_scale.d.ts.map +1 -1
  317. package/dist/engine/renderers/Indicator/scale/kst_scale.js.map +1 -1
  318. package/dist/engine/renderers/Indicator/scale/macd_scale.d.ts.map +1 -1
  319. package/dist/engine/renderers/Indicator/scale/macd_scale.js.map +1 -1
  320. package/dist/engine/renderers/Indicator/scale/mom_scale.d.ts.map +1 -1
  321. package/dist/engine/renderers/Indicator/scale/mom_scale.js.map +1 -1
  322. package/dist/engine/renderers/Indicator/scale/rsi_scale.d.ts.map +1 -1
  323. package/dist/engine/renderers/Indicator/scale/rsi_scale.js.map +1 -1
  324. package/dist/engine/renderers/Indicator/scale/stoch_scale.d.ts.map +1 -1
  325. package/dist/engine/renderers/Indicator/scale/stoch_scale.js.map +1 -1
  326. package/dist/engine/renderers/Indicator/scale/volume_scale.d.ts.map +1 -1
  327. package/dist/engine/renderers/Indicator/scale/volume_scale.js.map +1 -1
  328. package/dist/engine/renderers/Indicator/scale/wmsr_scale.d.ts.map +1 -1
  329. package/dist/engine/renderers/Indicator/scale/wmsr_scale.js.map +1 -1
  330. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +1 -1
  331. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -1
  332. package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -1
  333. package/dist/engine/renderers/Indicator/stoch.js +4 -4
  334. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  335. package/dist/engine/renderers/Indicator/structure.js +4 -4
  336. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  337. package/dist/engine/renderers/Indicator/supertrend.js +2 -2
  338. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  339. package/dist/engine/renderers/Indicator/tema.js +3 -3
  340. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  341. package/dist/engine/renderers/Indicator/trix.js +3 -3
  342. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  343. package/dist/engine/renderers/Indicator/vma.js +4 -4
  344. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  345. package/dist/engine/renderers/Indicator/volumeProfile.js +3 -3
  346. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  347. package/dist/engine/renderers/Indicator/vwap.js +2 -2
  348. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  349. package/dist/engine/renderers/Indicator/wma.js +3 -3
  350. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  351. package/dist/engine/renderers/Indicator/wmsr.js +3 -3
  352. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  353. package/dist/engine/renderers/Indicator/zones.js +4 -4
  354. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  355. package/dist/engine/renderers/candle.js +1 -1
  356. package/dist/engine/renderers/candle.js.map +1 -1
  357. package/dist/engine/renderers/crosshair.js +1 -1
  358. package/dist/engine/renderers/crosshair.js.map +1 -1
  359. package/dist/engine/renderers/customMarkers.js.map +1 -1
  360. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  361. package/dist/engine/renderers/extremaMarkers.js +59 -13
  362. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  363. package/dist/engine/renderers/gridLines.js +2 -2
  364. package/dist/engine/renderers/gridLines.js.map +1 -1
  365. package/dist/engine/renderers/lastPrice.js.map +1 -1
  366. package/dist/engine/renderers/leftYAxis.js +2 -2
  367. package/dist/engine/renderers/leftYAxis.js.map +1 -1
  368. package/dist/engine/renderers/paneTitle.d.ts.map +1 -1
  369. package/dist/engine/renderers/paneTitle.js +1 -1
  370. package/dist/engine/renderers/paneTitle.js.map +1 -1
  371. package/dist/engine/renderers/subVolume.js.map +1 -1
  372. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  373. package/dist/engine/renderers/timeAxis.js +1 -1
  374. package/dist/engine/renderers/timeAxis.js.map +1 -1
  375. package/dist/engine/renderers/timeShare.js.map +1 -1
  376. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  377. package/dist/engine/renderers/yAxis.js +2 -2
  378. package/dist/engine/renderers/yAxis.js.map +1 -1
  379. package/dist/engine/scale/priceScale.d.ts +1 -1
  380. package/dist/engine/scale/priceScale.d.ts.map +1 -1
  381. package/dist/engine/scale/priceScale.js.map +1 -1
  382. package/dist/engine/subPaneManager.d.ts +4 -4
  383. package/dist/engine/subPaneManager.d.ts.map +1 -1
  384. package/dist/engine/subPaneManager.js +5 -5
  385. package/dist/engine/subPaneManager.js.map +1 -1
  386. package/dist/engine/utils/tickPosition.d.ts.map +1 -1
  387. package/dist/engine/utils/tickPosition.js +1 -1
  388. package/dist/engine/utils/tickPosition.js.map +1 -1
  389. package/dist/engine/viewport/chartViewportManager.d.ts +1 -1
  390. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  391. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  392. package/dist/input/gesture.d.ts.map +1 -1
  393. package/dist/input/gesture.js +1 -1
  394. package/dist/input/gesture.js.map +1 -1
  395. package/dist/input/keyboard.d.ts.map +1 -1
  396. package/dist/input/keyboard.js +1 -1
  397. package/dist/input/keyboard.js.map +1 -1
  398. package/dist/mcp/chartBridge.d.ts.map +1 -1
  399. package/dist/mcp/chartBridge.js +1 -1
  400. package/dist/mcp/chartBridge.js.map +1 -1
  401. package/dist/plugin/PluginHost.d.ts.map +1 -1
  402. package/dist/plugin/PluginHost.js +2 -2
  403. package/dist/plugin/PluginHost.js.map +1 -1
  404. package/dist/plugin/PluginRegistry.d.ts.map +1 -1
  405. package/dist/plugin/PluginRegistry.js +1 -1
  406. package/dist/plugin/PluginRegistry.js.map +1 -1
  407. package/dist/plugin/rendererPluginManager.d.ts +1 -1
  408. package/dist/plugin/rendererPluginManager.d.ts.map +1 -1
  409. package/dist/plugin/rendererPluginManager.js +1 -1
  410. package/dist/plugin/rendererPluginManager.js.map +1 -1
  411. package/dist/plugin/types.d.ts +1 -1
  412. package/dist/plugin/types.d.ts.map +1 -1
  413. package/dist/render/createWebGLRenderer.d.ts +2 -2
  414. package/dist/render/createWebGLRenderer.d.ts.map +1 -1
  415. package/dist/render/createWebGLRenderer.js.map +1 -1
  416. package/dist/render/createWebGLSurfaceBackend.d.ts +1 -1
  417. package/dist/render/createWebGLSurfaceBackend.d.ts.map +1 -1
  418. package/dist/render/createWebGLSurfaceBackend.js.map +1 -1
  419. package/dist/renderer-tier/detectRendererTier.d.ts.map +1 -1
  420. package/dist/renderer-tier/detectRendererTier.js.map +1 -1
  421. package/dist/renderer-tier/selectBackend.d.ts.map +1 -1
  422. package/dist/renderer-tier/selectBackend.js +1 -1
  423. package/dist/renderer-tier/selectBackend.js.map +1 -1
  424. package/dist/replay/createReplayController.d.ts.map +1 -1
  425. package/dist/replay/createReplayController.js +1 -1
  426. package/dist/replay/createReplayController.js.map +1 -1
  427. package/dist/scale/createPriceScale.d.ts.map +1 -1
  428. package/dist/scale/createPriceScale.js +1 -1
  429. package/dist/scale/createPriceScale.js.map +1 -1
  430. package/dist/scale/createTimeScale.d.ts.map +1 -1
  431. package/dist/scale/createTimeScale.js +1 -1
  432. package/dist/scale/createTimeScale.js.map +1 -1
  433. package/dist/scene/createLayerFromPlugin.d.ts.map +1 -1
  434. package/dist/scene/createLayerFromPlugin.js.map +1 -1
  435. package/dist/scene/createScene.d.ts.map +1 -1
  436. package/dist/scene/createScene.js +1 -1
  437. package/dist/scene/createScene.js.map +1 -1
  438. package/dist/scene/layerRegistry.js +1 -1
  439. package/dist/scene/layerRegistry.js.map +1 -1
  440. package/dist/scene/types.d.ts +1 -1
  441. package/dist/scene/types.d.ts.map +1 -1
  442. package/dist/scheduler/createFrameBudget.d.ts.map +1 -1
  443. package/dist/scheduler/createFrameBudget.js +1 -1
  444. package/dist/scheduler/createFrameBudget.js.map +1 -1
  445. package/dist/semantic/controller.d.ts +2 -2
  446. package/dist/semantic/controller.d.ts.map +1 -1
  447. package/dist/semantic/controller.js +2 -2
  448. package/dist/semantic/controller.js.map +1 -1
  449. package/dist/tokens/colorPresetSettings.d.ts +15 -2
  450. package/dist/tokens/colorPresetSettings.d.ts.map +1 -1
  451. package/dist/tokens/colorPresetSettings.js +16 -0
  452. package/dist/tokens/colorPresetSettings.js.map +1 -1
  453. package/dist/tokens/theme-china.d.ts +1 -1
  454. package/dist/tokens/theme-china.d.ts.map +1 -1
  455. package/dist/tokens/theme-china.js +2 -2
  456. package/dist/tokens/theme-china.js.map +1 -1
  457. package/dist/tokens/theme-dark.d.ts.map +1 -1
  458. package/dist/tokens/theme-dark.js.map +1 -1
  459. package/dist/tokens/theme-light.d.ts.map +1 -1
  460. package/dist/tokens/theme-light.js.map +1 -1
  461. package/dist/utils/kLineDraw/axis.d.ts +1 -1
  462. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  463. package/dist/utils/kLineDraw/axis.js +3 -3
  464. package/dist/utils/kLineDraw/axis.js.map +1 -1
  465. package/dist/version.d.ts +1 -1
  466. package/dist/version.d.ts.map +1 -1
  467. package/dist/version.js +1 -1
  468. package/dist/version.js.map +1 -1
  469. package/package.json +2 -1
  470. package/src/__bench__/indicators.bench.ts +7 -7
  471. package/src/__bench__/orderBookHeatmap.bench.ts +1 -0
  472. package/src/__bench__/scale.bench.ts +1 -0
  473. package/src/__bench__/signal.bench.ts +1 -0
  474. package/src/__bench__/volumeProfile.bench.ts +1 -0
  475. package/src/__tests__/depthPipeline.test.ts +3 -2
  476. package/src/__tests__/errors.test.ts +2 -2
  477. package/src/__tests__/signal.test.ts +1 -0
  478. package/src/alerts/__tests__/controller.test.ts +1 -0
  479. package/src/alerts/__tests__/predicates.test.ts +1 -0
  480. package/src/alerts/__tests__/ruleSchema.test.ts +1 -0
  481. package/src/alerts/createAlertController.ts +4 -3
  482. package/src/chartTypes/__tests__/heikinAshi.test.ts +2 -1
  483. package/src/chartTypes/__tests__/pointAndFigure.test.ts +1 -0
  484. package/src/chartTypes/__tests__/rangeBars.test.ts +1 -0
  485. package/src/chartTypes/__tests__/renko.test.ts +1 -0
  486. package/src/chartTypes/pointAndFigure.ts +1 -1
  487. package/src/chartTypes/rangeBars.ts +1 -1
  488. package/src/components/anchoredVwap/__tests__/computeAnchoredVwap.test.ts +1 -1
  489. package/src/components/anchoredVwap/__tests__/controller.test.ts +1 -1
  490. package/src/components/anchoredVwap/computeAnchoredVwap.ts +2 -1
  491. package/src/components/anchoredVwap/createAnchoredVwapController.ts +5 -4
  492. package/src/components/crosshairSync/createCrosshairSync.ts +1 -1
  493. package/src/components/footprint/__tests__/aggressor.test.ts +1 -0
  494. package/src/components/footprint/__tests__/controller.test.ts +1 -0
  495. package/src/components/footprint/__tests__/perBarStats.test.ts +1 -0
  496. package/src/components/footprint/createFootprintController.ts +2 -1
  497. package/src/components/mtfOverlay/__tests__/alignToBaseIndex.test.ts +1 -0
  498. package/src/components/mtfOverlay/__tests__/controller.test.ts +1 -0
  499. package/src/components/mtfOverlay/__tests__/resampleBars.test.ts +1 -0
  500. package/src/components/mtfOverlay/createMtfController.ts +2 -1
  501. package/src/components/orderBookHeatmap/createHeatmapController.ts +4 -3
  502. package/src/components/orderBookHeatmap/createOrderBookState.ts +3 -3
  503. package/src/components/orderBookHeatmap/deltaArchive.ts +1 -1
  504. package/src/components/orderBookHeatmap/logColorScale.ts +2 -1
  505. package/src/components/orderBookHeatmap/snapshotRing.ts +2 -1
  506. package/src/components/volumeProfile/__tests__/valueArea.test.ts +1 -1
  507. package/src/components/volumeProfile/createVolumeProfileController.ts +2 -1
  508. package/src/config/chartSettings.ts +36 -6
  509. package/src/controllers/__tests__/drawing.test.ts +1 -0
  510. package/src/controllers/__tests__/indicatorSelector.test.ts +1 -0
  511. package/src/controllers/__tests__/toolbar.test.ts +1 -0
  512. package/src/controllers/createChartController.ts +36 -13
  513. package/src/controllers/createDrawingController.ts +1 -0
  514. package/src/controllers/createIndicatorSelectorController.ts +2 -1
  515. package/src/controllers/createToolbarController.ts +1 -0
  516. package/src/controllers/types.ts +11 -6
  517. package/src/data-fetchers/__tests__/binance.test.ts +1 -0
  518. package/src/data-fetchers/__tests__/dataBuffer.test.ts +21 -15
  519. package/src/data-fetchers/__tests__/depthConnector.test.ts +2 -1
  520. package/src/data-fetchers/__tests__/fetcherRegistry.test.ts +2 -1
  521. package/src/data-fetchers/baostock.ts +2 -1
  522. package/src/data-fetchers/binance.ts +1 -0
  523. package/src/data-fetchers/dataBuffer.effects.ts +2 -1
  524. package/src/data-fetchers/dataBuffer.ts +107 -204
  525. package/src/data-fetchers/dataBufferTypes.ts +42 -2
  526. package/src/data-fetchers/depthConnector.ts +2 -1
  527. package/src/data-fetchers/fetchScheduler.ts +53 -0
  528. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -3
  529. package/src/data-fetchers/gotdx.ts +1 -0
  530. package/src/data-fetchers/hundred-mock.ts +1 -0
  531. package/src/data-fetchers/index.ts +1 -1
  532. package/src/data-fetchers/kLineDataStore.ts +96 -0
  533. package/src/data-fetchers/router.ts +2 -1
  534. package/src/data-fetchers/thousand-mock.ts +1 -0
  535. package/src/data-fetchers/timeKeyIndex.ts +39 -0
  536. package/src/data-fetchers/timeShareBuffer.ts +15 -12
  537. package/src/data-fetchers/tradingview.ts +2 -1
  538. package/src/engine/__tests__/chart.dpr.test.ts +3 -1
  539. package/src/engine/__tests__/paneRenderer.resize.test.ts +1 -0
  540. package/src/engine/__tests__/subPaneManager.test.ts +3 -2
  541. package/src/engine/chart.ts +24 -13
  542. package/src/engine/controller/__tests__/interaction.dpr.test.ts +1 -0
  543. package/src/engine/controller/interaction.ts +5 -3
  544. package/src/engine/controller/pinchTracker.ts +2 -2
  545. package/src/engine/data/chartDataManager.ts +189 -466
  546. package/src/engine/data/comparisonManager.ts +211 -0
  547. package/src/engine/data/fetchBatchScheduler.ts +82 -0
  548. package/src/engine/data/incrementalLoadHint.ts +105 -0
  549. package/src/engine/data/scrollCompensator.ts +93 -0
  550. package/src/engine/draw/__tests__/pixelAlign.spec.ts +1 -0
  551. package/src/engine/drawing/AnchorCollector.ts +1 -1
  552. package/src/engine/drawing/DragHandler.ts +2 -1
  553. package/src/engine/drawing/DrawingState.ts +1 -1
  554. package/src/engine/drawing/HitTester.ts +3 -2
  555. package/src/engine/drawing/PreviewRenderer.ts +2 -1
  556. package/src/engine/drawing/coordinateUtils.ts +1 -1
  557. package/src/engine/drawing/interaction.ts +4 -4
  558. package/src/engine/drawing/plugin.ts +3 -2
  559. package/src/engine/indicators/__tests__/__fixtures__/golden/index.ts +2 -2
  560. package/src/engine/indicators/__tests__/atr.test.ts +3 -1
  561. package/src/engine/indicators/__tests__/calculators.test.ts +3 -1
  562. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +2 -1
  563. package/src/engine/indicators/__tests__/cmf-mfi.test.ts +2 -0
  564. package/src/engine/indicators/__tests__/dema.test.ts +3 -1
  565. package/src/engine/indicators/__tests__/donchian.test.ts +2 -0
  566. package/src/engine/indicators/__tests__/hma.test.ts +3 -1
  567. package/src/engine/indicators/__tests__/ichimoku.test.ts +2 -0
  568. package/src/engine/indicators/__tests__/indicatorDefinitionRegistry.test.ts +1 -0
  569. package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +2 -1
  570. package/src/engine/indicators/__tests__/kama.test.ts +3 -1
  571. package/src/engine/indicators/__tests__/keltner.test.ts +2 -0
  572. package/src/engine/indicators/__tests__/pivot-fib.test.ts +2 -0
  573. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -0
  574. package/src/engine/indicators/__tests__/roc.test.ts +2 -0
  575. package/src/engine/indicators/__tests__/sar.test.ts +2 -0
  576. package/src/engine/indicators/__tests__/scheduler.test.ts +7 -5
  577. package/src/engine/indicators/__tests__/soa.test.ts +10 -8
  578. package/src/engine/indicators/__tests__/stateComposer.test.ts +3 -2
  579. package/src/engine/indicators/__tests__/structure.test.ts +4 -1
  580. package/src/engine/indicators/__tests__/supertrend.test.ts +2 -0
  581. package/src/engine/indicators/__tests__/tema.test.ts +3 -1
  582. package/src/engine/indicators/__tests__/trix.test.ts +2 -0
  583. package/src/engine/indicators/__tests__/volatility.test.ts +2 -0
  584. package/src/engine/indicators/__tests__/volume.test.ts +2 -0
  585. package/src/engine/indicators/__tests__/volumeProfile.test.ts +2 -0
  586. package/src/engine/indicators/__tests__/vwap.test.ts +2 -0
  587. package/src/engine/indicators/__tests__/wma.test.ts +3 -1
  588. package/src/engine/indicators/__tests__/zones.test.ts +4 -1
  589. package/src/engine/indicators/calculators/bands.ts +1 -0
  590. package/src/engine/indicators/calculators/movingAverages.ts +1 -0
  591. package/src/engine/indicators/calculators/oscillators.ts +1 -0
  592. package/src/engine/indicators/calculators/volatility.ts +1 -0
  593. package/src/engine/indicators/chartIndicatorManager.ts +13 -11
  594. package/src/engine/indicators/indicator.worker.ts +4 -3
  595. package/src/engine/indicators/indicatorDefinitionRegistry.ts +4 -3
  596. package/src/engine/indicators/indicatorMetadata.ts +2 -1
  597. package/src/engine/indicators/indicatorRegistry.ts +4 -3
  598. package/src/engine/indicators/indicatorRuntime.ts +1 -0
  599. package/src/engine/indicators/registerBuiltins.ts +1 -0
  600. package/src/engine/indicators/scheduler.ts +65 -46
  601. package/src/engine/indicators/stateComposer.ts +31 -30
  602. package/src/engine/indicators/visibleStateComposers.ts +2 -2
  603. package/src/engine/indicators/workerProtocol.ts +1 -0
  604. package/src/engine/layout/chartPaneLayout.ts +3 -2
  605. package/src/engine/layout/pane.ts +3 -3
  606. package/src/engine/marker/registry.ts +2 -2
  607. package/src/engine/modes/kLineMode.ts +3 -2
  608. package/src/engine/modes/timeShareMode.ts +4 -3
  609. package/src/engine/modes/types.ts +1 -1
  610. package/src/engine/paneRenderer.ts +1 -1
  611. package/src/engine/render/chartRenderer.ts +25 -23
  612. package/src/engine/render/layers/candleLayer.ts +1 -1
  613. package/src/engine/render/layers/comparisonLineLayer.ts +1 -1
  614. package/src/engine/render/layers/crosshairLayer.ts +1 -1
  615. package/src/engine/render/layers/customMarkersLayer.ts +1 -1
  616. package/src/engine/render/layers/extremaMarkersLayer.ts +1 -1
  617. package/src/engine/render/layers/gridLinesLayer.ts +1 -1
  618. package/src/engine/render/layers/lastPriceLabelLayer.ts +1 -1
  619. package/src/engine/render/layers/lastPriceLineLayer.ts +1 -1
  620. package/src/engine/render/layers/leftYAxisLayer.ts +1 -1
  621. package/src/engine/render/layers/mainIndicatorLegendLayer.ts +1 -1
  622. package/src/engine/render/layers/yAxisLayer.ts +1 -1
  623. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +2 -1
  624. package/src/engine/renderers/Indicator/atr.ts +5 -4
  625. package/src/engine/renderers/Indicator/boll.ts +4 -3
  626. package/src/engine/renderers/Indicator/cci.ts +5 -4
  627. package/src/engine/renderers/Indicator/chaikinVol.ts +6 -5
  628. package/src/engine/renderers/Indicator/cmf.ts +6 -5
  629. package/src/engine/renderers/Indicator/dema.ts +6 -5
  630. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  631. package/src/engine/renderers/Indicator/ene.ts +4 -3
  632. package/src/engine/renderers/Indicator/expma.ts +3 -3
  633. package/src/engine/renderers/Indicator/fastk.ts +6 -5
  634. package/src/engine/renderers/Indicator/fib.ts +3 -3
  635. package/src/engine/renderers/Indicator/hma.ts +6 -5
  636. package/src/engine/renderers/Indicator/hv.ts +5 -4
  637. package/src/engine/renderers/Indicator/ichimoku.ts +3 -3
  638. package/src/engine/renderers/Indicator/kama.ts +6 -5
  639. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  640. package/src/engine/renderers/Indicator/kst.ts +7 -5
  641. package/src/engine/renderers/Indicator/ma.ts +5 -5
  642. package/src/engine/renderers/Indicator/macd.ts +5 -4
  643. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +2 -2
  644. package/src/engine/renderers/Indicator/mfi.ts +6 -5
  645. package/src/engine/renderers/Indicator/mom.ts +5 -4
  646. package/src/engine/renderers/Indicator/obv.ts +5 -4
  647. package/src/engine/renderers/Indicator/parkinson.ts +5 -4
  648. package/src/engine/renderers/Indicator/pivot.ts +3 -3
  649. package/src/engine/renderers/Indicator/pvt.ts +5 -4
  650. package/src/engine/renderers/Indicator/roc.ts +5 -4
  651. package/src/engine/renderers/Indicator/rsi.ts +7 -5
  652. package/src/engine/renderers/Indicator/sar.ts +3 -3
  653. package/src/engine/renderers/Indicator/scale/atr_scale.ts +1 -0
  654. package/src/engine/renderers/Indicator/scale/cci_scale.ts +1 -0
  655. package/src/engine/renderers/Indicator/scale/fastk_scale.ts +1 -0
  656. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +2 -2
  657. package/src/engine/renderers/Indicator/scale/kst_scale.ts +1 -0
  658. package/src/engine/renderers/Indicator/scale/macd_scale.ts +1 -0
  659. package/src/engine/renderers/Indicator/scale/mom_scale.ts +1 -0
  660. package/src/engine/renderers/Indicator/scale/rsi_scale.ts +1 -0
  661. package/src/engine/renderers/Indicator/scale/stoch_scale.ts +1 -0
  662. package/src/engine/renderers/Indicator/scale/volume_scale.ts +1 -0
  663. package/src/engine/renderers/Indicator/scale/wmsr_scale.ts +1 -0
  664. package/src/engine/renderers/Indicator/shared/titleInfo.ts +1 -1
  665. package/src/engine/renderers/Indicator/stoch.ts +8 -6
  666. package/src/engine/renderers/Indicator/structure.ts +7 -7
  667. package/src/engine/renderers/Indicator/supertrend.ts +6 -6
  668. package/src/engine/renderers/Indicator/tema.ts +6 -5
  669. package/src/engine/renderers/Indicator/trix.ts +6 -6
  670. package/src/engine/renderers/Indicator/vma.ts +6 -5
  671. package/src/engine/renderers/Indicator/volumeProfile.ts +7 -7
  672. package/src/engine/renderers/Indicator/vwap.ts +5 -4
  673. package/src/engine/renderers/Indicator/wma.ts +6 -5
  674. package/src/engine/renderers/Indicator/wmsr.ts +5 -4
  675. package/src/engine/renderers/Indicator/zones.ts +5 -5
  676. package/src/engine/renderers/__tests__/boll.renderer.test.ts +3 -1
  677. package/src/engine/renderers/__tests__/ene.renderer.test.ts +2 -0
  678. package/src/engine/renderers/__tests__/expma.renderer.test.ts +3 -1
  679. package/src/engine/renderers/__tests__/ma.renderer.test.ts +3 -1
  680. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +6 -4
  681. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +1 -0
  682. package/src/engine/renderers/candle.ts +3 -3
  683. package/src/engine/renderers/crosshair.ts +1 -1
  684. package/src/engine/renderers/customMarkers.ts +2 -2
  685. package/src/engine/renderers/extremaMarkers.ts +85 -35
  686. package/src/engine/renderers/gridLines.ts +2 -2
  687. package/src/engine/renderers/lastPrice.ts +1 -1
  688. package/src/engine/renderers/leftYAxis.ts +2 -2
  689. package/src/engine/renderers/paneTitle.ts +4 -3
  690. package/src/engine/renderers/subVolume.ts +2 -1
  691. package/src/engine/renderers/timeAxis.ts +1 -1
  692. package/src/engine/renderers/timeShare.ts +1 -1
  693. package/src/engine/renderers/yAxis.ts +3 -4
  694. package/src/engine/scale/__tests__/logFormula.spec.ts +1 -0
  695. package/src/engine/scale/priceScale.ts +2 -1
  696. package/src/engine/subPaneManager.ts +14 -10
  697. package/src/engine/utils/__tests__/tickPosition.test.ts +1 -0
  698. package/src/engine/utils/tickPosition.ts +2 -1
  699. package/src/engine/viewport/chartViewportManager.ts +1 -1
  700. package/src/indicators/__tests__/maFamily.test.ts +4 -3
  701. package/src/indicators/__tests__/oscillators.test.ts +3 -2
  702. package/src/input/gesture.ts +1 -1
  703. package/src/input/keyboard.ts +1 -1
  704. package/src/mcp/chartBridge.ts +5 -2
  705. package/src/plugin/PluginHost.ts +6 -5
  706. package/src/plugin/PluginRegistry.ts +2 -1
  707. package/src/plugin/rendererPluginManager.ts +3 -2
  708. package/src/plugin/types.ts +1 -1
  709. package/src/render/__tests__/contract.test.ts +1 -0
  710. package/src/render/__tests__/webglRenderer.fallback.test.ts +1 -0
  711. package/src/render/__tests__/webglRenderer.test.ts +1 -0
  712. package/src/render/__tests__/webglSurfaceBackend.test.ts +1 -0
  713. package/src/render/createWebGLRenderer.ts +4 -3
  714. package/src/render/createWebGLSurfaceBackend.ts +2 -1
  715. package/src/renderer-tier/__tests__/selectBackend.test.ts +1 -1
  716. package/src/renderer-tier/detectRendererTier.ts +1 -0
  717. package/src/renderer-tier/selectBackend.ts +2 -1
  718. package/src/replay/__tests__/controller.test.ts +1 -0
  719. package/src/replay/__tests__/timeline.test.ts +1 -0
  720. package/src/replay/createReplayController.ts +2 -1
  721. package/src/scale/__tests__/anchoredZoom.test.ts +1 -0
  722. package/src/scale/__tests__/originShift.test.ts +1 -0
  723. package/src/scale/__tests__/priceScale.test.ts +1 -0
  724. package/src/scale/__tests__/timeScale.test.ts +1 -0
  725. package/src/scale/createPriceScale.ts +2 -1
  726. package/src/scale/createTimeScale.ts +2 -1
  727. package/src/scene/__tests__/layerFromPlugin.test.ts +2 -1
  728. package/src/scene/__tests__/layerRegistry.test.ts +1 -0
  729. package/src/scene/__tests__/scene.test.ts +2 -1
  730. package/src/scene/createLayerFromPlugin.ts +1 -0
  731. package/src/scene/createScene.ts +2 -1
  732. package/src/scene/layerRegistry.ts +1 -1
  733. package/src/scene/types.ts +1 -1
  734. package/src/scheduler/createFrameBudget.ts +1 -1
  735. package/src/semantic/__tests__/controller.test.ts +1 -0
  736. package/src/semantic/controller.ts +10 -6
  737. package/src/tokens/colorPresetSettings.ts +21 -2
  738. package/src/tokens/theme-china.ts +3 -3
  739. package/src/tokens/theme-dark.ts +1 -1
  740. package/src/tokens/theme-light.ts +1 -1
  741. package/src/utils/__tests__/dateFormat.test.ts +1 -0
  742. package/src/utils/kLineDraw/axis.ts +5 -5
  743. package/src/version.ts +1 -1
@@ -1,9 +1,13 @@
1
- import { createSignal } from '../../reactivity/signal';
2
1
  import { DataBuffer } from '../../data-fetchers/dataBuffer';
3
2
  import { getPeriodDays } from '../../data-fetchers/dataBuffer.effects';
4
3
  import { TimeShareBuffer } from '../../data-fetchers/timeShareBuffer';
5
- import { getVisibleRange } from '../viewport/viewport';
4
+ import { createSignal } from '../../reactivity/signal';
6
5
  import { getPhysicalKLineConfig } from '../utils/klineConfig';
6
+ import { getVisibleRange } from '../viewport/viewport';
7
+ import { ComparisonManager } from './comparisonManager';
8
+ import { FetchBatchScheduler } from './fetchBatchScheduler';
9
+ import { IncrementalLoadHint } from './incrementalLoadHint';
10
+ import { ScrollCompensator } from './scrollCompensator';
7
11
  const COMPARISON_PALETTE = ['#f59e0b', '#8b5cf6', '#06b6d4', '#ec4899', '#84cc16', '#f97316'];
8
12
  const DEFAULT_COMPARISON_COLOR = '#f59e0b';
9
13
  const BUF_PRIMARY = 'main';
@@ -18,7 +22,8 @@ export class ChartDataManager {
18
22
  static TRAILING_SLOTS = 30;
19
23
  _dataFetcher = null;
20
24
  _timeShareFetcher = null;
21
- _buffers = new Map();
25
+ _klineBuffers = new Map();
26
+ _tsBuffers = new Map();
22
27
  _activeBufferKey = null;
23
28
  _activeBufferUnsub = null;
24
29
  _dataSignal = createSignal([]);
@@ -27,40 +32,52 @@ export class ChartDataManager {
27
32
  /** Available symbol catalog — consumed by UI pickers (e.g. TopToolbar) */
28
33
  _symbolCatalog = createSignal([]);
29
34
  _currentSpec = null;
30
- // Comparison-specific state (still needed for rendering pass-through)
31
- _comparisonSpecs = [];
32
- _comparisonData = new Map();
33
- _comparisonColors = new Map();
34
- _comparisonColorsSignal = createSignal(new Map());
35
- _comparisonLoadingSignal = createSignal(false);
36
- // Track loading per-comparison buffer (keyed by buffer key)
37
- _cmpLoadingUnsubs = new Map();
38
- _pendingFetches = [];
39
- _batchFlushScheduled = false;
40
- incrementalLoadHintEl = null;
41
- incrementalLoadHintTimer = null;
42
- pendingPrependedCount = 0;
35
+ _batchScheduler = new FetchBatchScheduler();
36
+ _scrollCompensator;
37
+ _comparisonManager;
38
+ _loadHint;
39
+ _savedScrollLeft = null;
40
+ _preCustomSpec = null;
43
41
  lastVisibleRange = { start: 0, end: 0 };
44
42
  lastRawVisibleRange = { start: 0, end: 0 };
45
43
  pendingIndicatorDataUpdate = false;
46
44
  deps;
47
45
  constructor(deps) {
48
46
  this.deps = deps;
47
+ this._scrollCompensator = new ScrollCompensator(deps);
48
+ this._loadHint = new IncrementalLoadHint(deps);
49
+ this._comparisonManager = new ComparisonManager({
50
+ createComparisonBuffer: (spec) => this._createCmpBuffer(spec),
51
+ disposeBuffer: (key) => this.disposeBuffer(key),
52
+ getKLineBuffer: (key) => this._klineBuffers.get(key),
53
+ hasKLineBuffer: (key) => this._klineBuffers.has(key),
54
+ getKLineBufferKeys: () => [...this._klineBuffers.keys()],
55
+ scheduleDraw: () => this.deps.scheduleDraw(),
56
+ });
49
57
  }
50
58
  // ── Buffer helpers ──
59
+ _lookupBuffer(key) {
60
+ if (key.startsWith(BUF_TIMESHARE))
61
+ return this._tsBuffers.get(key);
62
+ return this._klineBuffers.get(key);
63
+ }
64
+ _lookupKLineBuffer(key) {
65
+ return this._klineBuffers.get(key);
66
+ }
51
67
  activateBuffer(key) {
52
68
  if (this._activeBufferKey === key)
53
69
  return;
54
70
  this._activeBufferUnsub?.();
55
71
  this._activeBufferKey = key;
56
- const buf = this._buffers.get(key);
72
+ const buf = this._lookupBuffer(key);
57
73
  if (buf) {
58
- this._dataSignal.set([...buf.data.peek()]);
74
+ this._dataSignal.set([...buf.data.peek().data]);
59
75
  this._loadingSignal.set(buf.loading.peek());
60
76
  const unsubData = buf.data.subscribe(() => {
77
+ const change = buf.data.peek();
61
78
  const prevDataLength = this._dataSignal.peek().length;
62
- this._dataSignal.set([...buf.data.peek()]);
63
- this.onBufferDataChanged(key, prevDataLength);
79
+ this._dataSignal.set([...change.data]);
80
+ this.onBufferDataChanged(key, prevDataLength, change.prependedCount);
64
81
  });
65
82
  const unsubLoading = buf.loading.subscribe(() => {
66
83
  this._loadingSignal.set(buf.loading.peek());
@@ -77,78 +94,77 @@ export class ChartDataManager {
77
94
  }
78
95
  }
79
96
  disposeBuffer(key) {
80
- const buf = this._buffers.get(key);
97
+ const buf = this._lookupBuffer(key);
81
98
  if (!buf)
82
99
  return;
83
- const unsub = this._cmpLoadingUnsubs.get(key);
84
- unsub?.();
85
- const loadingUnsub = this._cmpLoadingUnsubs.get(`loading:${key}`);
86
- loadingUnsub?.();
87
- this._cmpLoadingUnsubs.delete(key);
88
- this._cmpLoadingUnsubs.delete(`loading:${key}`);
89
100
  buf.dispose();
90
- this._buffers.delete(key);
101
+ if (key.startsWith(BUF_TIMESHARE))
102
+ this._tsBuffers.delete(key);
103
+ else
104
+ this._klineBuffers.delete(key);
91
105
  }
92
106
  getActiveDataBuffer() {
93
- const buf = this._activeBufferKey ? this._buffers.get(this._activeBufferKey) : null;
94
- return buf instanceof DataBuffer ? buf : null;
107
+ return this._activeBufferKey && !this._activeBufferKey.startsWith(BUF_TIMESHARE)
108
+ ? (this._klineBuffers.get(this._activeBufferKey) ?? null)
109
+ : null;
95
110
  }
96
111
  getActiveTimeShareBuffer() {
97
- const buf = this._activeBufferKey ? this._buffers.get(this._activeBufferKey) : null;
98
- return buf instanceof TimeShareBuffer ? buf : null;
112
+ return this._activeBufferKey?.startsWith(BUF_TIMESHARE) === true
113
+ ? (this._tsBuffers.get(this._activeBufferKey) ?? null)
114
+ : null;
99
115
  }
100
116
  getPrimaryDataBuffer(symbol, period) {
101
117
  const key = bufKey(BUF_PRIMARY, symbol, period);
102
- let buf = this._buffers.get(key);
118
+ let buf = this._klineBuffers.get(key);
103
119
  if (!buf) {
104
- buf = new DataBuffer();
120
+ buf = this._createKLineBuffer();
105
121
  buf.setFetcher(this._dataFetcher);
106
122
  if (this._dataFetcher) {
107
- buf.setRequestFetch(this._createBatchHandler(this._dataFetcher));
123
+ buf.setRequestFetch(this._batchScheduler.createHandler());
108
124
  }
109
- this._buffers.set(key, buf);
125
+ this._klineBuffers.set(key, buf);
110
126
  }
111
127
  else {
112
128
  buf.setFetcher(this._dataFetcher);
113
129
  if (this._dataFetcher) {
114
- buf.setRequestFetch(this._createBatchHandler(this._dataFetcher));
130
+ buf.setRequestFetch(this._batchScheduler.createHandler());
115
131
  }
116
132
  }
117
133
  return buf;
118
134
  }
135
+ _createKLineBuffer() {
136
+ return new DataBuffer();
137
+ }
138
+ _createCmpBuffer(spec) {
139
+ const key = bufKey(BUF_COMPARISON, spec.symbol, spec.period);
140
+ const buffer = this._createKLineBuffer();
141
+ buffer.setFetcher(this._dataFetcher);
142
+ if (this._dataFetcher) {
143
+ buffer.setRequestFetch(this._batchScheduler.createHandler());
144
+ }
145
+ this._klineBuffers.set(key, buffer);
146
+ return { key, buffer };
147
+ }
119
148
  // ── Buffer data change handler ──
120
- onBufferDataChanged(key, prevDataLength) {
121
- const buf = this._buffers.get(key);
122
- if (!buf)
149
+ onBufferDataChanged(key, prevDataLength, prependedCount) {
150
+ if (key.startsWith(BUF_TIMESHARE)) {
151
+ this.onTimeShareBufferChanged();
123
152
  return;
124
- if (buf instanceof DataBuffer) {
125
- this.onKLineBufferChanged(key, buf, prevDataLength);
126
- }
127
- else if (buf instanceof TimeShareBuffer) {
128
- this.onTimeShareBufferChanged(key, buf);
129
153
  }
154
+ const buf = this._klineBuffers.get(key);
155
+ if (!buf)
156
+ return;
157
+ this.onKLineBufferChanged(key, buf, prevDataLength, prependedCount ?? 0);
130
158
  }
131
- onKLineBufferChanged(key, buf, prevDataLength) {
159
+ onKLineBufferChanged(key, buf, prevDataLength, prependedCount = 0) {
132
160
  if (!key.startsWith('main:'))
133
161
  return;
134
162
  const bufferData = buf.getRawData();
135
- const prependedCount = this.pendingPrependedCount;
136
- this.pendingPrependedCount = 0;
137
- if (prependedCount === 0 && this.deps.getCachedScrollLeft() < this.getLeftLoadBufferWidth()) {
138
- const scrollLeft = this.deps.getCachedScrollLeft();
139
- if (scrollLeft <= 0) {
140
- this.deps.setScrollLeft(this.getLeftLoadBufferWidth());
141
- }
142
- else {
143
- const dpr = this.deps.getEffectiveDpr();
144
- const opt = this.deps.getOption();
145
- const { unitPx, startXPx } = getPhysicalKLineConfig(opt.kWidth, opt.kGap, dpr);
146
- const totalDataWidth = (startXPx + bufferData.length * unitPx) / dpr;
147
- const leftBuffer = this.getLeftLoadBufferWidth();
148
- if (scrollLeft >= leftBuffer + totalDataWidth) {
149
- this.deps.setScrollLeft(leftBuffer);
150
- }
151
- }
163
+ if (prependedCount > 0) {
164
+ this._scrollCompensator.compensatePrepend(prependedCount);
165
+ }
166
+ else {
167
+ this._scrollCompensator.adjustScrollAfterDataChange(bufferData.length);
152
168
  }
153
169
  if ((prevDataLength ?? this._dataSignal.peek().length) === 0 && bufferData.length > 0) {
154
170
  this.scrollToRight();
@@ -171,15 +187,14 @@ export class ChartDataManager {
171
187
  if (indicatorsReady) {
172
188
  this.pendingIndicatorDataUpdate = false;
173
189
  this.deps.scheduleDraw();
174
- // Alert 管线入口:Chart 构造时绑定 → evaluateAlerts()
175
190
  this.deps.onDataProcessed?.(bufferData, this.lastVisibleRange);
176
191
  }
177
192
  else {
178
193
  this.pendingIndicatorDataUpdate = true;
179
194
  }
180
- this.showIncrementalLoadHint(prependedCount);
195
+ this._loadHint.show(prependedCount, this.getLeftLoadBufferWidth());
181
196
  }
182
- onTimeShareBufferChanged(_key, _buf) {
197
+ onTimeShareBufferChanged() {
183
198
  const data = this._dataSignal.peek();
184
199
  this.lastVisibleRange = { start: 0, end: data.length };
185
200
  this.lastRawVisibleRange = { start: 0, end: data.length };
@@ -187,18 +202,10 @@ export class ChartDataManager {
187
202
  this.deps.onTimeShareDataReady(data.length);
188
203
  }
189
204
  // ── Internal helpers ──
190
- getScrollContentHost() {
191
- return this.deps.getDom().scrollContent ?? this.deps.getDom().container ?? null;
192
- }
193
205
  getLeftLoadBufferWidth() {
194
206
  const buf = this.getActiveDataBuffer();
195
207
  const dataLength = buf ? buf.getRawData().length : 0;
196
- if (dataLength === 0)
197
- return 0;
198
- const plotWidth = this.deps.getViewport()?.plotWidth ??
199
- (this.deps.getObservedSize().width > 0 ? this.deps.getObservedSize().width : undefined) ??
200
- Math.round(this.deps.getDom().container?.clientWidth ?? 0);
201
- return Math.max(0, plotWidth);
208
+ return this._scrollCompensator.getLeftLoadBufferWidth(dataLength);
202
209
  }
203
210
  getActiveKLineLength() {
204
211
  const buf = this.getActiveDataBuffer();
@@ -215,72 +222,6 @@ export class ChartDataManager {
215
222
  const opt = this.deps.getOption();
216
223
  return getVisibleRange(vp.scrollLeft, vp.plotWidth, opt.kWidth, opt.kGap, dataLength, vp.dpr);
217
224
  }
218
- getTrailingSlotCount() {
219
- return 24;
220
- }
221
- clearIncrementalLoadHintTimer() {
222
- if (this.incrementalLoadHintTimer !== null) {
223
- window.clearTimeout(this.incrementalLoadHintTimer);
224
- this.incrementalLoadHintTimer = null;
225
- }
226
- }
227
- hideIncrementalLoadHint() {
228
- const hint = this.incrementalLoadHintEl;
229
- if (!hint)
230
- return;
231
- hint.style.opacity = '0';
232
- hint.style.filter = 'blur(10px)';
233
- }
234
- ensureIncrementalLoadHint() {
235
- const host = this.getScrollContentHost();
236
- if (!host)
237
- return null;
238
- if (this.incrementalLoadHintEl && this.incrementalLoadHintEl.isConnected) {
239
- return this.incrementalLoadHintEl;
240
- }
241
- const ownerDoc = host.ownerDocument;
242
- if (!ownerDoc)
243
- return null;
244
- const hint = ownerDoc.createElement('div');
245
- hint.className = 'klc-incremental-load-hint';
246
- hint.style.position = 'absolute';
247
- hint.style.top = '0';
248
- hint.style.height = '0px';
249
- hint.style.width = '0px';
250
- hint.style.pointerEvents = 'none';
251
- hint.style.opacity = '0';
252
- hint.style.filter = 'blur(10px)';
253
- hint.style.transition = 'opacity 420ms ease, filter 420ms ease';
254
- hint.style.background = 'rgba(71, 91, 132, 0.5)';
255
- hint.style.zIndex = '3';
256
- hint.style.willChange = 'opacity, filter, width';
257
- host.appendChild(hint);
258
- this.incrementalLoadHintEl = hint;
259
- return hint;
260
- }
261
- showIncrementalLoadHint(count) {
262
- if (count <= 0)
263
- return;
264
- const hint = this.ensureIncrementalLoadHint();
265
- if (!hint)
266
- return;
267
- this.clearIncrementalLoadHintTimer();
268
- const dpr = this.deps.getEffectiveDpr();
269
- const opt = this.deps.getOption();
270
- const { unitPx, startXPx } = getPhysicalKLineConfig(opt.kWidth, opt.kGap, dpr);
271
- hint.style.left = `${this.getLeftLoadBufferWidth()}px`;
272
- const width = (startXPx + count * unitPx) / dpr;
273
- hint.style.width = `${Math.max(0, width)}px`;
274
- hint.style.height = `${Math.max(0, this.deps.getViewport()?.viewHeight ?? this.deps.getDom().container?.clientHeight ?? 0)}px`;
275
- hint.getBoundingClientRect();
276
- hint.style.opacity = '1';
277
- hint.style.filter = 'blur(0px)';
278
- this.incrementalLoadHintTimer = window.setTimeout(() => {
279
- this.hideIncrementalLoadHint();
280
- this.incrementalLoadHintTimer = null;
281
- }, 900);
282
- }
283
- // ── Public accessors ──
284
225
  /** Unified data signal — always reflects the active buffer's data */
285
226
  get data() {
286
227
  return this._dataSignal;
@@ -303,7 +244,7 @@ export class ChartDataManager {
303
244
  const current = new Map(this._symbolCatalog.peek().map((s) => [s.code, s]));
304
245
  for (const info of infos)
305
246
  current.set(info.code, info);
306
- this._symbolCatalog.set(Array.from(current.values()));
247
+ this._symbolCatalog.set([...current.values()]);
307
248
  }
308
249
  /** Remove a symbol from the catalog by code. */
309
250
  unregisterSymbol(code) {
@@ -348,36 +289,31 @@ export class ChartDataManager {
348
289
  this._timeShareFetcher = fetcher;
349
290
  }
350
291
  getComparisonData() {
351
- return this._comparisonData;
292
+ return this._comparisonManager.data;
352
293
  }
353
294
  getComparisonSpecs() {
354
- return this._comparisonSpecs;
295
+ return this._comparisonManager.specs;
355
296
  }
356
297
  get dataBuffer() {
357
298
  const buf = this.getActiveDataBuffer();
358
299
  if (buf)
359
300
  return buf;
360
- // Fallback: create a primary buffer if none exists yet
361
301
  const key = bufKey(BUF_PRIMARY, '', 'daily');
362
- let fallback = this._buffers.get(key);
302
+ let fallback = this._klineBuffers.get(key);
363
303
  if (!fallback) {
364
- fallback = new DataBuffer();
365
- this._buffers.set(key, fallback);
304
+ fallback = this._createKLineBuffer();
305
+ this._klineBuffers.set(key, fallback);
366
306
  }
367
307
  return fallback;
368
308
  }
369
309
  get comparisonColors() {
370
- return this._comparisonColorsSignal;
310
+ return this._comparisonManager.colorsSignal;
371
311
  }
372
312
  get comparisonLoading() {
373
- return this._comparisonLoadingSignal;
313
+ return this._comparisonManager.loadingSignal;
374
314
  }
375
315
  getComparisonColors() {
376
- return this._comparisonColors;
377
- }
378
- recomputeComparisonLoading() {
379
- const anyLoading = Array.from(this._buffers.entries()).some(([k, b]) => k.startsWith(BUF_COMPARISON) && b instanceof DataBuffer && b.loading.peek());
380
- this._comparisonLoadingSignal.set(anyLoading);
316
+ return this._comparisonManager.getColors();
381
317
  }
382
318
  // ── Data updates (KLine) ──
383
319
  updateData(data) {
@@ -414,63 +350,16 @@ export class ChartDataManager {
414
350
  // ── Fetcher ──
415
351
  setDataFetcher(fetcher) {
416
352
  this._dataFetcher = fetcher;
353
+ this._batchScheduler.setFetcher(fetcher);
417
354
  if (!fetcher) {
418
- for (const [key, buf] of this._buffers) {
419
- if (buf instanceof DataBuffer) {
420
- const dataBuf = buf;
421
- dataBuf.setRequestFetch(null);
422
- }
355
+ for (const [, buf] of this._klineBuffers) {
356
+ buf.setRequestFetch(null);
423
357
  }
424
358
  return;
425
359
  }
426
- const handler = this._createBatchHandler(fetcher);
427
- for (const [key, buf] of this._buffers) {
428
- if (buf instanceof DataBuffer) {
429
- const dataBuf = buf;
430
- dataBuf.setRequestFetch(handler);
431
- }
432
- }
433
- }
434
- _createBatchHandler(fetcher) {
435
- return (spec, startTs, endTs) => new Promise((resolve, reject) => {
436
- if (!spec.source) {
437
- reject(new Error(`[DataFetcher] source is required but was not provided for symbol "${spec.symbol}"`));
438
- return;
439
- }
440
- this._pendingFetches.push({
441
- source: spec.source,
442
- spec,
443
- startTs,
444
- endTs,
445
- resolve,
446
- reject,
447
- });
448
- this._scheduleBatchFlush();
449
- });
450
- }
451
- _scheduleBatchFlush() {
452
- if (this._batchFlushScheduled)
453
- return;
454
- this._batchFlushScheduled = true;
455
- Promise.resolve().then(() => this._flushBatch());
456
- }
457
- async _flushBatch() {
458
- this._batchFlushScheduled = false;
459
- const batch = this._pendingFetches.splice(0);
460
- if (batch.length === 0 || !this._dataFetcher)
461
- return;
462
- const fetcher = this._dataFetcher;
463
- const CONCURRENCY = 4;
464
- for (let i = 0; i < batch.length; i += CONCURRENCY) {
465
- const chunk = batch.slice(i, i + CONCURRENCY);
466
- await Promise.allSettled(chunk.map(({ source, spec, startTs, endTs, resolve, reject }) => fetcher(source, {
467
- symbol: spec.symbol,
468
- startDate: batchFormatDate(startTs),
469
- endDate: batchFormatDate(endTs),
470
- period: spec.period ?? 'daily',
471
- adjust: spec.adjust ?? 'none',
472
- exchange: spec.exchange,
473
- }).then(resolve, reject)));
360
+ const handler = this._batchScheduler.createHandler();
361
+ for (const [, buf] of this._klineBuffers) {
362
+ buf.setRequestFetch(handler);
474
363
  }
475
364
  }
476
365
  checkVisibleRangeGap() {
@@ -501,149 +390,34 @@ export class ChartDataManager {
501
390
  }
502
391
  if (firstVisibleTs === undefined)
503
392
  return;
504
- for (const [key, b] of this._buffers) {
505
- if (key.startsWith(BUF_COMPARISON) && b instanceof DataBuffer) {
506
- b.ensureRange(firstVisibleTs, window.earliestTs);
507
- }
508
- }
393
+ this._comparisonManager.ensureRange(firstVisibleTs, window.earliestTs);
509
394
  }
510
395
  // ── Comparison management ──
511
396
  syncComparisonBuffers(specs) {
512
- this._comparisonSpecs = [...specs];
513
- const nextKeys = new Set(specs.map((spec) => spec.symbol));
514
- // Remove buffers for removed comparisons
515
- for (const [key, buf] of this._buffers) {
516
- if (!key.startsWith(BUF_COMPARISON))
517
- continue;
518
- const symbol = key.split(':')[1];
519
- if (nextKeys.has(symbol))
520
- continue;
521
- this.disposeBuffer(key);
522
- this._comparisonData.delete(symbol);
523
- }
524
- if (!this._dataFetcher)
525
- return;
526
397
  const primaryBuf = this.getActiveDataBuffer();
527
- for (const spec of specs) {
528
- const key = bufKey(BUF_COMPARISON, spec.symbol, spec.period);
529
- const symbol = spec.symbol;
530
- let buf = this._buffers.get(key);
531
- if (!buf) {
532
- const newBuffer = new DataBuffer();
533
- newBuffer.setFetcher(this._dataFetcher);
534
- if (this._dataFetcher) {
535
- newBuffer.setRequestFetch(this._createBatchHandler(this._dataFetcher));
536
- }
537
- this._buffers.set(key, newBuffer);
538
- const unsubscribe = newBuffer.data.subscribe(() => {
539
- this._comparisonData.set(symbol, [...newBuffer.getRawData()]);
540
- this.deps.scheduleDraw();
541
- });
542
- this._cmpLoadingUnsubs.set(key, unsubscribe);
543
- const unsubLoading = newBuffer.loading.subscribe(() => this.recomputeComparisonLoading());
544
- // Store loading unsubscribe with a special key
545
- this._cmpLoadingUnsubs.set(`loading:${key}`, unsubLoading);
546
- buf = newBuffer;
547
- }
548
- else {
549
- buf.setFetcher(this._dataFetcher);
550
- if (this._dataFetcher) {
551
- buf.setRequestFetch(this._createBatchHandler(this._dataFetcher));
552
- }
553
- }
554
- const mainEarliest = primaryBuf?.loadedWindow?.earliestTs;
555
- buf.setSymbol(spec, mainEarliest);
556
- }
398
+ this._comparisonManager.syncBuffers(specs, primaryBuf?.loadedWindow?.earliestTs);
557
399
  }
558
400
  clearComparisonBuffers() {
559
- for (const [key, buf] of this._buffers) {
560
- if (key.startsWith(BUF_COMPARISON)) {
561
- this.disposeBuffer(key);
562
- }
563
- }
564
- this._comparisonData.clear();
565
- this._comparisonColors.clear();
566
- this._comparisonColorsSignal.set(new Map());
567
- this._comparisonLoadingSignal.set(false);
568
- this._comparisonSpecs = [];
401
+ this._comparisonManager.clearAll();
569
402
  }
570
403
  addComparisonSymbol(spec) {
571
- const symbol = spec.symbol;
572
- const key = bufKey(BUF_COMPARISON, symbol, spec.period);
573
- // Check if already exists
574
- for (const k of this._buffers.keys()) {
575
- if (k.startsWith(BUF_COMPARISON) && k.split(':')[1] === symbol)
576
- return;
577
- }
578
- this._comparisonSpecs.push(spec);
579
- const color = COMPARISON_PALETTE[this._comparisonColors.size % COMPARISON_PALETTE.length] ??
580
- DEFAULT_COMPARISON_COLOR;
581
- this._comparisonColors.set(symbol, color);
582
- this._comparisonColorsSignal.set(new Map(this._comparisonColors));
583
- if (!this._dataFetcher)
584
- return;
585
- const newBuffer = new DataBuffer();
586
- newBuffer.setFetcher(this._dataFetcher);
587
- if (this._dataFetcher) {
588
- newBuffer.setRequestFetch(this._createBatchHandler(this._dataFetcher));
589
- }
590
- this._buffers.set(key, newBuffer);
591
- const unsubscribe = newBuffer.data.subscribe(() => {
592
- this._comparisonData.set(symbol, [...newBuffer.getRawData()]);
593
- this.deps.scheduleDraw();
404
+ this._comparisonManager.addSymbol(spec, () => {
405
+ const allSpecs = this._symbolsSignal.peek();
406
+ this._symbolsSignal.set([allSpecs[0], ...this._comparisonManager.specs]);
594
407
  });
595
- this._cmpLoadingUnsubs.set(key, unsubscribe);
596
- const unsubLoading = newBuffer.loading.subscribe(() => this.recomputeComparisonLoading());
597
- this._cmpLoadingUnsubs.set(`loading:${key}`, unsubLoading);
598
- const primaryBuf = this.getActiveDataBuffer();
599
- const mainEarliest = primaryBuf?.loadedWindow?.earliestTs;
600
- newBuffer.setSymbol(spec, mainEarliest);
601
- this._symbolsSignal.set([this._symbolsSignal.peek()[0], ...this._comparisonSpecs]);
602
408
  }
603
409
  setComparisonData(symbol, data) {
604
- const period = this.currentPeriod;
605
- const key = bufKey(BUF_COMPARISON, symbol, period);
606
- const existing = this._buffers.get(key);
607
- if (!existing) {
608
- const buffer = new DataBuffer();
609
- this._buffers.set(key, buffer);
610
- const unsub = buffer.data.subscribe(() => {
611
- this._comparisonData.set(symbol, [...buffer.getRawData()]);
612
- this.deps.scheduleDraw();
613
- });
614
- this._cmpLoadingUnsubs.set(key, unsub);
615
- const unsubLoading = buffer.loading.subscribe(() => this.recomputeComparisonLoading());
616
- this._cmpLoadingUnsubs.set(`loading:${key}`, unsubLoading);
617
- const color = COMPARISON_PALETTE[this._comparisonColors.size % COMPARISON_PALETTE.length] ??
618
- DEFAULT_COMPARISON_COLOR;
619
- this._comparisonColors.set(symbol, color);
620
- this._comparisonColorsSignal.set(new Map(this._comparisonColors));
621
- const spec = { symbol, period };
622
- this._comparisonSpecs.push(spec);
623
- const mainSpec = this._symbolsSignal.peek()[0];
624
- this._symbolsSignal.set(mainSpec ? [mainSpec, ...this._comparisonSpecs] : [...this._comparisonSpecs]);
625
- buffer.setInlineData(data);
626
- return;
627
- }
628
- existing.setInlineData(data);
410
+ this._comparisonManager.setData(symbol, data, (key) => {
411
+ this._symbolsSignal.set([
412
+ this._symbolsSignal.peek()[0],
413
+ ...this._comparisonManager.specs,
414
+ ]);
415
+ });
629
416
  }
630
417
  removeComparisonSymbol(symbol) {
631
- let found = false;
632
- for (const [key, buf] of this._buffers) {
633
- if (key.startsWith(BUF_COMPARISON) && key.split(':')[1] === symbol) {
634
- this.disposeBuffer(key);
635
- found = true;
636
- break;
637
- }
638
- }
639
- if (!found)
418
+ if (!this._comparisonManager.removeSymbol(symbol))
640
419
  return;
641
- this._comparisonData.delete(symbol);
642
- this._comparisonColors.delete(symbol);
643
- this._comparisonColorsSignal.set(new Map(this._comparisonColors));
644
- this._comparisonSpecs = this._comparisonSpecs.filter((s) => s.symbol !== symbol);
645
- this._symbolsSignal.set([this._symbolsSignal.peek()[0], ...this._comparisonSpecs]);
646
- this.recomputeComparisonLoading();
420
+ this._symbolsSignal.set([this._symbolsSignal.peek()[0], ...this._comparisonManager.specs]);
647
421
  this.deps.scheduleDraw();
648
422
  }
649
423
  // ── Symbol / Period ──
@@ -669,7 +443,7 @@ export class ChartDataManager {
669
443
  const spec = this._currentSpec;
670
444
  if (spec) {
671
445
  const key = bufKey(BUF_TIMESHARE, spec.symbol);
672
- this._buffers.set(key, tsBuf);
446
+ this._tsBuffers.set(key, tsBuf);
673
447
  this.activateBuffer(key);
674
448
  tsBuf.load(spec);
675
449
  }
@@ -682,17 +456,34 @@ export class ChartDataManager {
682
456
  return;
683
457
  }
684
458
  const next = { ...current, period };
685
- this.setSymbols([next, ...this._comparisonSpecs]);
459
+ this.setSymbols([next, ...this._comparisonManager.specs]);
460
+ }
461
+ /**
462
+ * 归一化 K 线周期别名,防止无效 period 进入引擎
463
+ * "day" → "daily",其余保持原值
464
+ */
465
+ static normalizePeriod(period) {
466
+ if (!period)
467
+ return 'daily';
468
+ const alias = period.toLowerCase().trim();
469
+ if (alias === 'day')
470
+ return 'daily';
471
+ return period;
686
472
  }
687
473
  applyCustomData(source) {
474
+ const plainData = source.data.map((d) => ({ ...d }));
475
+ // 首次调用时保存原始 spec,用于切回 Fetcher 时恢复
476
+ if (!this._preCustomSpec) {
477
+ this._preCustomSpec = { ...(this._currentSpec ?? this._symbolsSignal.peek()[0] ?? { symbol: '' }) };
478
+ }
479
+ // 每次都切到 custom 品种,注册到目录,填入数据
688
480
  const spec = {
689
- symbol: source.symbol ?? this._currentSpec?.symbol ?? '',
690
- period: source.period ?? this._currentSpec?.period ?? 'daily',
481
+ symbol: source.symbol ?? '',
482
+ period: ChartDataManager.normalizePeriod(source.period),
691
483
  incremental: false,
692
484
  source: source.source ?? 'custom',
693
485
  };
694
- this.setSymbols([spec, ...this._comparisonSpecs]);
695
- // Auto-register the custom symbol into the available catalog so it appears in UI pickers.
486
+ this.setSymbols([spec, ...this._comparisonManager.specs]);
696
487
  const symbolCode = spec.symbol;
697
488
  if (symbolCode) {
698
489
  this.registerSymbols([
@@ -704,10 +495,9 @@ export class ChartDataManager {
704
495
  },
705
496
  ]);
706
497
  }
707
- const plainData = source.data.map((d) => ({ ...d }));
708
498
  this.setData(plainData);
709
499
  if (source.comparisons) {
710
- for (const key of this._comparisonData.keys()) {
500
+ for (const key of this._comparisonManager.data.keys()) {
711
501
  if (!source.comparisons[key])
712
502
  this.removeComparisonSymbol(key);
713
503
  }
@@ -716,6 +506,19 @@ export class ChartDataManager {
716
506
  }
717
507
  }
718
508
  }
509
+ resetToFetcher(spec) {
510
+ if (this._activeBufferKey && !this._activeBufferKey.startsWith(BUF_TIMESHARE)) {
511
+ this.disposeBuffer(this._activeBufferKey);
512
+ }
513
+ this._dataSignal.set([]);
514
+ this.lastVisibleRange = { start: 0, end: 0 };
515
+ this.lastRawVisibleRange = { start: 0, end: 0 };
516
+ this._savedScrollLeft = null;
517
+ this.setSymbols([spec, ...this._comparisonManager.specs]);
518
+ }
519
+ getPreCustomSpec() {
520
+ return this._preCustomSpec;
521
+ }
719
522
  // ── Main symbol switching ──
720
523
  setSymbols(specs) {
721
524
  this._symbolsSignal.set(specs);
@@ -732,22 +535,20 @@ export class ChartDataManager {
732
535
  if (primary.period === 'timeshare') {
733
536
  // Switch to timeshare mode
734
537
  this.clearComparisonBuffers();
735
- // Dispose primary KLine buffer
736
- for (const [key, buf] of this._buffers) {
737
- if (key.startsWith(BUF_PRIMARY)) {
738
- this.disposeBuffer(key);
739
- }
740
- }
538
+ // Save scroll position so we can restore it when returning to K-line mode
539
+ this._savedScrollLeft = this.deps.getCachedScrollLeft();
540
+ // Keep primary KLine buffer in memory — don't dispose it,
541
+ // so data and scroll position are preserved when user returns
741
542
  this._dataSignal.set([]);
742
543
  this.lastVisibleRange = { start: 0, end: 0 };
743
544
  this.lastRawVisibleRange = { start: 0, end: 0 };
744
545
  // Get or create timeshare buffer
745
546
  const tsKey = bufKey(BUF_TIMESHARE, primary.symbol);
746
- let tsBuf = this._buffers.get(tsKey);
547
+ let tsBuf = this._tsBuffers.get(tsKey);
747
548
  if (!tsBuf) {
748
549
  tsBuf = new TimeShareBuffer();
749
550
  tsBuf.setFetcher(this._timeShareFetcher);
750
- this._buffers.set(tsKey, tsBuf);
551
+ this._tsBuffers.set(tsKey, tsBuf);
751
552
  }
752
553
  this.activateBuffer(tsKey);
753
554
  tsBuf.load(primary);
@@ -755,10 +556,8 @@ export class ChartDataManager {
755
556
  }
756
557
  // KLine mode
757
558
  // Dispose timeshare buffer
758
- for (const [key, buf] of this._buffers) {
759
- if (key.startsWith(BUF_TIMESHARE)) {
760
- this.disposeBuffer(key);
761
- }
559
+ for (const [key] of this._tsBuffers) {
560
+ this.disposeBuffer(key);
762
561
  }
763
562
  this.loadKLineSymbols(specs);
764
563
  }
@@ -782,22 +581,19 @@ export class ChartDataManager {
782
581
  incremental: spec.incremental ?? buf.currentSpec?.incremental ?? true,
783
582
  });
784
583
  this.deps.resetInteraction();
785
- this.scrollToRight();
584
+ if (this._savedScrollLeft !== null) {
585
+ this.deps.setScrollLeft(this._savedScrollLeft);
586
+ this._savedScrollLeft = null;
587
+ }
588
+ else {
589
+ this.scrollToRight();
590
+ }
786
591
  return;
787
592
  }
788
593
  if (!spec.source) {
789
594
  throw new Error(`[ChartDataManager] source is required for symbol "${spec.symbol}". ` +
790
595
  `Provide a source in SymbolSpec or use setData/applyCustomData for inline data.`);
791
596
  }
792
- buf.onPrepend = (count) => {
793
- this.pendingPrependedCount = count;
794
- const dpr = this.deps.getEffectiveDpr();
795
- const opt = this.deps.getOption();
796
- const { unitPx } = getPhysicalKLineConfig(opt.kWidth, opt.kGap, dpr);
797
- const compensation = (count * unitPx) / dpr;
798
- const nextScrollLeft = this.deps.getCachedScrollLeft() + compensation;
799
- this.deps.setScrollLeft(nextScrollLeft);
800
- };
801
597
  buf.setSymbol(spec);
802
598
  }
803
599
  // ── Content width ──
@@ -813,46 +609,17 @@ export class ChartDataManager {
813
609
  const dataLength = buf ? buf.getRawData().length : 0;
814
610
  if (dataLength === 0)
815
611
  return 0;
816
- const opt = this.deps.getOption();
817
- const viewWidth = this.deps.getViewport()?.plotWidth ?? 0;
818
- const dpr = this.deps.getEffectiveDpr();
819
- const { startXPx, unitPx } = getPhysicalKLineConfig(opt.kWidth, opt.kGap, dpr);
820
- const dataPlotWidth = (startXPx + (dataLength + ChartDataManager.TRAILING_SLOTS) * unitPx) / dpr;
821
- return this.getLeftLoadBufferWidth() + Math.max(dataPlotWidth, viewWidth);
612
+ return this._scrollCompensator.getContentWidth(dataLength);
822
613
  }
823
614
  scrollToRight() {
824
615
  const buf = this.getActiveDataBuffer();
825
616
  const dataLength = buf ? buf.getRawData().length : 0;
826
- if (dataLength === 0)
827
- return;
828
- const dpr = this.deps.getEffectiveDpr();
829
- const opt = this.deps.getOption();
830
- const { unitPx, startXPx } = getPhysicalKLineConfig(opt.kWidth, opt.kGap, dpr);
831
- const lastKLineEndPx = (startXPx + dataLength * unitPx) / dpr;
832
- const viewport = this.deps.getViewport();
833
- const clientWidth = viewport?.viewWidth ??
834
- (this.deps.getObservedSize().width > 0 ? this.deps.getObservedSize().width : undefined) ??
835
- Math.round(this.deps.getDom().container?.clientWidth ?? 0);
836
- if (clientWidth <= 0)
837
- return;
838
- const leftBuffer = this.getLeftLoadBufferWidth();
839
- let target;
840
- if (lastKLineEndPx <= clientWidth) {
841
- // 数据不足以填满一屏 → 右对齐:最后一根 K 线固定在右侧
842
- target = leftBuffer - (clientWidth - lastKLineEndPx);
843
- }
844
- else {
845
- target = leftBuffer + (lastKLineEndPx - clientWidth);
846
- }
847
- const contentWidth = this.getContentWidth();
848
- const maxScroll = Math.max(0, contentWidth - clientWidth);
849
- const scrollLeft = Math.round(Math.max(0, Math.min(target, maxScroll)) * dpr) / dpr;
850
- this.deps.setScrollLeft(scrollLeft);
617
+ this._scrollCompensator.scrollToRight(dataLength);
851
618
  this.deps.scheduleDraw();
852
619
  }
853
620
  // ── Comparison price range ──
854
621
  getComparisonEquivalentPriceRange(range) {
855
- if (this._comparisonSpecs.length === 0 || this._comparisonData.size === 0)
622
+ if (this._comparisonManager.specs.length === 0 || this._comparisonManager.data.size === 0)
856
623
  return null;
857
624
  const buf = this.getActiveDataBuffer();
858
625
  const internalData = buf ? buf.getRawData() : [];
@@ -864,8 +631,8 @@ export class ChartDataManager {
864
631
  const baseDate = baseItem.date ?? '';
865
632
  let min = Number.POSITIVE_INFINITY;
866
633
  let max = Number.NEGATIVE_INFINITY;
867
- for (const spec of this._comparisonSpecs) {
868
- const data = this._comparisonData.get(spec.symbol);
634
+ for (const spec of this._comparisonManager.specs) {
635
+ const data = this._comparisonManager.data.get(spec.symbol);
869
636
  if (!data?.length)
870
637
  continue;
871
638
  const baseline = baseDate
@@ -904,7 +671,7 @@ export class ChartDataManager {
904
671
  getLogicalSlotCount() {
905
672
  const buf = this.getActiveDataBuffer();
906
673
  const dataLength = buf ? buf.getRawData().length : 0;
907
- return dataLength + this.getTrailingSlotCount();
674
+ return dataLength + 24;
908
675
  }
909
676
  getTimestampAtLogicalIndex(index) {
910
677
  const buf = this.getActiveDataBuffer();
@@ -939,17 +706,17 @@ export class ChartDataManager {
939
706
  return index;
940
707
  }
941
708
  disposeAllBuffers() {
942
- for (const key of this._buffers.keys()) {
709
+ for (const key of this._klineBuffers.keys()) {
710
+ this.disposeBuffer(key);
711
+ }
712
+ for (const key of this._tsBuffers.keys()) {
943
713
  this.disposeBuffer(key);
944
714
  }
945
715
  }
946
716
  destroy() {
947
717
  this._activeBufferUnsub?.();
948
718
  this.disposeAllBuffers();
949
- this.clearIncrementalLoadHintTimer();
950
- this.incrementalLoadHintEl?.remove();
951
- this.incrementalLoadHintEl = null;
952
- this.pendingPrependedCount = 0;
719
+ this._loadHint.destroy();
953
720
  }
954
721
  }
955
722
  function findComparisonBaselineByDate(data, date) {
@@ -966,11 +733,4 @@ function findComparisonBaselineByTimestamp(data, timestamp) {
966
733
  }
967
734
  return null;
968
735
  }
969
- function batchFormatDate(ts) {
970
- const d = new Date(ts);
971
- const y = d.getFullYear();
972
- const m = String(d.getMonth() + 1).padStart(2, '0');
973
- const day = String(d.getDate()).padStart(2, '0');
974
- return `${y}-${m}-${day}`;
975
- }
976
736
  //# sourceMappingURL=chartDataManager.js.map