@363045841yyt/klinechart-core 0.8.6 → 0.8.8

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 (501) hide show
  1. package/dist/config/chartSettings.d.ts +18 -2
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +8 -1
  4. package/dist/config/chartSettings.js.map +1 -1
  5. package/dist/controllers/createChartController.d.ts.map +1 -1
  6. package/dist/controllers/createChartController.js +56 -2
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/types.d.ts +36 -23
  9. package/dist/controllers/types.d.ts.map +1 -1
  10. package/dist/data-fetchers/baostock.d.ts +0 -3
  11. package/dist/data-fetchers/baostock.d.ts.map +1 -1
  12. package/dist/data-fetchers/baostock.js +0 -1
  13. package/dist/data-fetchers/baostock.js.map +1 -1
  14. package/dist/data-fetchers/dataBuffer.d.ts +13 -2
  15. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  16. package/dist/data-fetchers/dataBuffer.js +41 -7
  17. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  18. package/dist/data-fetchers/dataBufferTypes.d.ts +11 -0
  19. package/dist/data-fetchers/dataBufferTypes.d.ts.map +1 -0
  20. package/dist/data-fetchers/dataBufferTypes.js +2 -0
  21. package/dist/data-fetchers/dataBufferTypes.js.map +1 -0
  22. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts +4 -3
  23. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
  24. package/dist/data-fetchers/fetcherDefinitionRegistry.js +9 -2
  25. package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
  26. package/dist/data-fetchers/gotdx/gotdx.d.ts +7 -0
  27. package/dist/data-fetchers/gotdx/gotdx.d.ts.map +1 -0
  28. package/dist/data-fetchers/gotdx/gotdx.js +7 -0
  29. package/dist/data-fetchers/gotdx/gotdx.js.map +1 -0
  30. package/dist/data-fetchers/gotdx.d.ts +0 -8
  31. package/dist/data-fetchers/gotdx.d.ts.map +1 -1
  32. package/dist/data-fetchers/gotdx.js +40 -3
  33. package/dist/data-fetchers/gotdx.js.map +1 -1
  34. package/dist/data-fetchers/hundred-mock.d.ts +0 -3
  35. package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
  36. package/dist/data-fetchers/hundred-mock.js +0 -1
  37. package/dist/data-fetchers/hundred-mock.js.map +1 -1
  38. package/dist/data-fetchers/index.d.ts +10 -8
  39. package/dist/data-fetchers/index.d.ts.map +1 -1
  40. package/dist/data-fetchers/index.js +8 -7
  41. package/dist/data-fetchers/index.js.map +1 -1
  42. package/dist/data-fetchers/router.d.ts +2 -0
  43. package/dist/data-fetchers/router.d.ts.map +1 -1
  44. package/dist/data-fetchers/router.js +8 -1
  45. package/dist/data-fetchers/router.js.map +1 -1
  46. package/dist/data-fetchers/thousand-mock.d.ts +0 -3
  47. package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
  48. package/dist/data-fetchers/thousand-mock.js +0 -1
  49. package/dist/data-fetchers/thousand-mock.js.map +1 -1
  50. package/dist/data-fetchers/timeShareBuffer.d.ts +27 -0
  51. package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -0
  52. package/dist/data-fetchers/timeShareBuffer.js +79 -0
  53. package/dist/data-fetchers/timeShareBuffer.js.map +1 -0
  54. package/dist/data-fetchers/tradingview.d.ts +0 -8
  55. package/dist/data-fetchers/tradingview.d.ts.map +1 -1
  56. package/dist/data-fetchers/tradingview.js +1 -2
  57. package/dist/data-fetchers/tradingview.js.map +1 -1
  58. package/dist/data-fetchers/types.d.ts +9 -1
  59. package/dist/data-fetchers/types.d.ts.map +1 -1
  60. package/dist/engine/chart.d.ts +32 -1
  61. package/dist/engine/chart.d.ts.map +1 -1
  62. package/dist/engine/chart.js +148 -7
  63. package/dist/engine/chart.js.map +1 -1
  64. package/dist/engine/chartTypes.d.ts +3 -0
  65. package/dist/engine/chartTypes.d.ts.map +1 -1
  66. package/dist/engine/controller/interaction.d.ts +6 -1
  67. package/dist/engine/controller/interaction.d.ts.map +1 -1
  68. package/dist/engine/controller/interaction.js +76 -28
  69. package/dist/engine/controller/interaction.js.map +1 -1
  70. package/dist/engine/data/chartDataManager.d.ts +39 -14
  71. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  72. package/dist/engine/data/chartDataManager.js +494 -202
  73. package/dist/engine/data/chartDataManager.js.map +1 -1
  74. package/dist/engine/draw/pixelAlign.d.ts +0 -27
  75. package/dist/engine/draw/pixelAlign.d.ts.map +1 -1
  76. package/dist/engine/draw/pixelAlign.js +1 -1
  77. package/dist/engine/draw/pixelAlign.js.map +1 -1
  78. package/dist/engine/indicators/calculators.d.ts +0 -104
  79. package/dist/engine/indicators/calculators.d.ts.map +1 -1
  80. package/dist/engine/indicators/calculators.js +57 -168
  81. package/dist/engine/indicators/calculators.js.map +1 -1
  82. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  83. package/dist/engine/indicators/chartIndicatorManager.js +3 -2
  84. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  85. package/dist/engine/indicators/macdState.d.ts +0 -5
  86. package/dist/engine/indicators/macdState.d.ts.map +1 -1
  87. package/dist/engine/indicators/macdState.js +1 -1
  88. package/dist/engine/indicators/macdState.js.map +1 -1
  89. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
  90. package/dist/engine/indicators/registerBuiltins.js +1 -0
  91. package/dist/engine/indicators/registerBuiltins.js.map +1 -1
  92. package/dist/engine/indicators/rsiState.d.ts +0 -4
  93. package/dist/engine/indicators/rsiState.d.ts.map +1 -1
  94. package/dist/engine/indicators/rsiState.js +1 -1
  95. package/dist/engine/indicators/rsiState.js.map +1 -1
  96. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  97. package/dist/engine/indicators/scheduler.js +1 -7
  98. package/dist/engine/indicators/scheduler.js.map +1 -1
  99. package/dist/engine/layout/chartPaneLayout.d.ts +2 -0
  100. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
  101. package/dist/engine/layout/chartPaneLayout.js +24 -6
  102. package/dist/engine/layout/chartPaneLayout.js.map +1 -1
  103. package/dist/engine/modes/kLineMode.d.ts +37 -0
  104. package/dist/engine/modes/kLineMode.d.ts.map +1 -0
  105. package/dist/engine/modes/kLineMode.js +22 -0
  106. package/dist/engine/modes/kLineMode.js.map +1 -0
  107. package/dist/engine/modes/timeShareMode.d.ts +37 -0
  108. package/dist/engine/modes/timeShareMode.d.ts.map +1 -0
  109. package/dist/engine/modes/timeShareMode.js +59 -0
  110. package/dist/engine/modes/timeShareMode.js.map +1 -0
  111. package/dist/engine/modes/types.d.ts +47 -0
  112. package/dist/engine/modes/types.d.ts.map +1 -0
  113. package/dist/engine/modes/types.js +2 -0
  114. package/dist/engine/modes/types.js.map +1 -0
  115. package/dist/engine/paneRenderer.d.ts +4 -0
  116. package/dist/engine/paneRenderer.d.ts.map +1 -1
  117. package/dist/engine/paneRenderer.js +27 -40
  118. package/dist/engine/paneRenderer.js.map +1 -1
  119. package/dist/engine/render/chartRenderer.d.ts +4 -23
  120. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  121. package/dist/engine/render/chartRenderer.js +113 -18
  122. package/dist/engine/render/chartRenderer.js.map +1 -1
  123. package/dist/engine/renderers/Indicator/atr.d.ts +1 -18
  124. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  125. package/dist/engine/renderers/Indicator/atr.js +3 -22
  126. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  127. package/dist/engine/renderers/Indicator/boll.d.ts +1 -4
  128. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  129. package/dist/engine/renderers/Indicator/boll.js +3 -18
  130. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  131. package/dist/engine/renderers/Indicator/cci.d.ts +1 -22
  132. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  133. package/dist/engine/renderers/Indicator/cci.js +8 -20
  134. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  135. package/dist/engine/renderers/Indicator/chaikinVol.d.ts +1 -7
  136. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  137. package/dist/engine/renderers/Indicator/chaikinVol.js +3 -16
  138. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  139. package/dist/engine/renderers/Indicator/cmf.d.ts +1 -7
  140. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  141. package/dist/engine/renderers/Indicator/cmf.js +3 -15
  142. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  143. package/dist/engine/renderers/Indicator/dema.d.ts +1 -7
  144. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  145. package/dist/engine/renderers/Indicator/dema.js +3 -17
  146. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  147. package/dist/engine/renderers/Indicator/donchian.d.ts +1 -8
  148. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  149. package/dist/engine/renderers/Indicator/donchian.js +2 -2
  150. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  151. package/dist/engine/renderers/Indicator/ene.d.ts +1 -12
  152. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  153. package/dist/engine/renderers/Indicator/ene.js +3 -18
  154. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  155. package/dist/engine/renderers/Indicator/expma.d.ts +1 -4
  156. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  157. package/dist/engine/renderers/Indicator/expma.js +2 -2
  158. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  159. package/dist/engine/renderers/Indicator/fastk.d.ts +1 -22
  160. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  161. package/dist/engine/renderers/Indicator/fastk.js +11 -64
  162. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  163. package/dist/engine/renderers/Indicator/fib.d.ts +1 -6
  164. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  165. package/dist/engine/renderers/Indicator/fib.js +2 -2
  166. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  167. package/dist/engine/renderers/Indicator/hma.d.ts +1 -7
  168. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  169. package/dist/engine/renderers/Indicator/hma.js +3 -17
  170. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  171. package/dist/engine/renderers/Indicator/hv.d.ts +1 -7
  172. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  173. package/dist/engine/renderers/Indicator/hv.js +3 -16
  174. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  175. package/dist/engine/renderers/Indicator/ichimoku.d.ts +1 -8
  176. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  177. package/dist/engine/renderers/Indicator/ichimoku.js +2 -2
  178. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  179. package/dist/engine/renderers/Indicator/kama.d.ts +1 -7
  180. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  181. package/dist/engine/renderers/Indicator/kama.js +3 -17
  182. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  183. package/dist/engine/renderers/Indicator/keltner.d.ts +1 -8
  184. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  185. package/dist/engine/renderers/Indicator/keltner.js +2 -2
  186. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  187. package/dist/engine/renderers/Indicator/kst.d.ts +1 -22
  188. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  189. package/dist/engine/renderers/Indicator/kst.js +2 -2
  190. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  191. package/dist/engine/renderers/Indicator/ma.d.ts +1 -4
  192. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  193. package/dist/engine/renderers/Indicator/ma.js +1 -1
  194. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  195. package/dist/engine/renderers/Indicator/macd.d.ts +1 -49
  196. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  197. package/dist/engine/renderers/Indicator/macd.js +2 -12
  198. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  199. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  200. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +114 -1
  201. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  202. package/dist/engine/renderers/Indicator/mfi.d.ts +1 -7
  203. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  204. package/dist/engine/renderers/Indicator/mfi.js +3 -15
  205. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  206. package/dist/engine/renderers/Indicator/mom.d.ts +1 -22
  207. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  208. package/dist/engine/renderers/Indicator/mom.js +8 -23
  209. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  210. package/dist/engine/renderers/Indicator/obv.d.ts +1 -7
  211. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  212. package/dist/engine/renderers/Indicator/obv.js +3 -14
  213. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  214. package/dist/engine/renderers/Indicator/parkinson.d.ts +1 -7
  215. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  216. package/dist/engine/renderers/Indicator/parkinson.js +3 -16
  217. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  218. package/dist/engine/renderers/Indicator/pivot.d.ts +1 -6
  219. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  220. package/dist/engine/renderers/Indicator/pivot.js +2 -2
  221. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  222. package/dist/engine/renderers/Indicator/pvt.d.ts +1 -7
  223. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  224. package/dist/engine/renderers/Indicator/pvt.js +3 -14
  225. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  226. package/dist/engine/renderers/Indicator/roc.d.ts +1 -8
  227. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  228. package/dist/engine/renderers/Indicator/roc.js +3 -15
  229. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  230. package/dist/engine/renderers/Indicator/rsi.d.ts +0 -32
  231. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  232. package/dist/engine/renderers/Indicator/rsi.js +3 -3
  233. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  234. package/dist/engine/renderers/Indicator/sar.d.ts +1 -8
  235. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  236. package/dist/engine/renderers/Indicator/sar.js +2 -2
  237. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  238. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +2 -0
  239. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
  240. package/dist/engine/renderers/Indicator/scale/indicator_scale.js +10 -6
  241. package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
  242. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts +4 -0
  243. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts.map +1 -0
  244. package/dist/engine/renderers/Indicator/shared/dashedLines.js +50 -0
  245. package/dist/engine/renderers/Indicator/shared/dashedLines.js.map +1 -0
  246. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +14 -0
  247. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -0
  248. package/dist/engine/renderers/Indicator/shared/titleInfo.js +25 -0
  249. package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -0
  250. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts +5 -0
  251. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts.map +1 -0
  252. package/dist/engine/renderers/Indicator/shared/webglBand.js +17 -0
  253. package/dist/engine/renderers/Indicator/shared/webglBand.js.map +1 -0
  254. package/dist/engine/renderers/Indicator/stoch.d.ts +1 -22
  255. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  256. package/dist/engine/renderers/Indicator/stoch.js +5 -46
  257. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  258. package/dist/engine/renderers/Indicator/structure.d.ts +1 -7
  259. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  260. package/dist/engine/renderers/Indicator/structure.js +2 -2
  261. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  262. package/dist/engine/renderers/Indicator/supertrend.d.ts +1 -8
  263. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  264. package/dist/engine/renderers/Indicator/supertrend.js +2 -2
  265. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  266. package/dist/engine/renderers/Indicator/tema.d.ts +1 -7
  267. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  268. package/dist/engine/renderers/Indicator/tema.js +3 -17
  269. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  270. package/dist/engine/renderers/Indicator/trix.d.ts +1 -8
  271. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  272. package/dist/engine/renderers/Indicator/trix.js +2 -2
  273. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  274. package/dist/engine/renderers/Indicator/vma.d.ts +1 -7
  275. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  276. package/dist/engine/renderers/Indicator/vma.js +3 -15
  277. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  278. package/dist/engine/renderers/Indicator/volumeProfile.d.ts +1 -7
  279. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  280. package/dist/engine/renderers/Indicator/volumeProfile.js +2 -2
  281. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  282. package/dist/engine/renderers/Indicator/vwap.d.ts +1 -7
  283. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  284. package/dist/engine/renderers/Indicator/vwap.js +3 -14
  285. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  286. package/dist/engine/renderers/Indicator/wma.d.ts +1 -7
  287. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  288. package/dist/engine/renderers/Indicator/wma.js +3 -17
  289. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  290. package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -22
  291. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  292. package/dist/engine/renderers/Indicator/wmsr.js +8 -23
  293. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  294. package/dist/engine/renderers/Indicator/zones.d.ts +1 -6
  295. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  296. package/dist/engine/renderers/Indicator/zones.js +2 -2
  297. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  298. package/dist/engine/renderers/candle.d.ts +0 -16
  299. package/dist/engine/renderers/candle.d.ts.map +1 -1
  300. package/dist/engine/renderers/candle.js +1 -1
  301. package/dist/engine/renderers/candle.js.map +1 -1
  302. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  303. package/dist/engine/renderers/comparisonLine.js +2 -0
  304. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  305. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  306. package/dist/engine/renderers/extremaMarkers.js +2 -0
  307. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  308. package/dist/engine/renderers/gridLines.d.ts.map +1 -1
  309. package/dist/engine/renderers/gridLines.js +7 -35
  310. package/dist/engine/renderers/gridLines.js.map +1 -1
  311. package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
  312. package/dist/engine/renderers/lastPrice.js +7 -2
  313. package/dist/engine/renderers/lastPrice.js.map +1 -1
  314. package/dist/engine/renderers/leftYAxis.d.ts +11 -0
  315. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
  316. package/dist/engine/renderers/leftYAxis.js +79 -0
  317. package/dist/engine/renderers/leftYAxis.js.map +1 -0
  318. package/dist/engine/renderers/subVolume.d.ts +1 -13
  319. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  320. package/dist/engine/renderers/subVolume.js +1 -1
  321. package/dist/engine/renderers/subVolume.js.map +1 -1
  322. package/dist/engine/renderers/timeAxis.d.ts +0 -2
  323. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  324. package/dist/engine/renderers/timeAxis.js +4 -1
  325. package/dist/engine/renderers/timeAxis.js.map +1 -1
  326. package/dist/engine/renderers/timeShare.d.ts +3 -0
  327. package/dist/engine/renderers/timeShare.d.ts.map +1 -0
  328. package/dist/engine/renderers/timeShare.js +260 -0
  329. package/dist/engine/renderers/timeShare.js.map +1 -0
  330. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  331. package/dist/engine/renderers/yAxis.js +25 -23
  332. package/dist/engine/renderers/yAxis.js.map +1 -1
  333. package/dist/engine/scale/price.d.ts +0 -7
  334. package/dist/engine/scale/price.d.ts.map +1 -1
  335. package/dist/engine/scale/price.js +3 -2
  336. package/dist/engine/scale/price.js.map +1 -1
  337. package/dist/engine/theme/fonts.d.ts +0 -2
  338. package/dist/engine/theme/fonts.d.ts.map +1 -1
  339. package/dist/engine/theme/fonts.js +1 -1
  340. package/dist/engine/theme/fonts.js.map +1 -1
  341. package/dist/engine/utils/klineConfig.d.ts.map +1 -1
  342. package/dist/engine/utils/klineConfig.js +1 -5
  343. package/dist/engine/utils/klineConfig.js.map +1 -1
  344. package/dist/engine/utils/tickPosition.d.ts +12 -0
  345. package/dist/engine/utils/tickPosition.d.ts.map +1 -1
  346. package/dist/engine/utils/tickPosition.js +15 -0
  347. package/dist/engine/utils/tickPosition.js.map +1 -1
  348. package/dist/engine/viewport/chartViewportManager.d.ts +0 -4
  349. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  350. package/dist/engine/viewport/chartViewportManager.js +10 -13
  351. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  352. package/dist/plugin/types.d.ts +10 -0
  353. package/dist/plugin/types.d.ts.map +1 -1
  354. package/dist/plugin/types.js.map +1 -1
  355. package/dist/semantic/types.d.ts +1 -1
  356. package/dist/semantic/types.d.ts.map +1 -1
  357. package/dist/tokens/theme-base.d.ts +5 -0
  358. package/dist/tokens/theme-base.d.ts.map +1 -0
  359. package/dist/tokens/theme-base.js +31 -0
  360. package/dist/tokens/theme-base.js.map +1 -0
  361. package/dist/tokens/theme-china.d.ts.map +1 -1
  362. package/dist/tokens/theme-china.js +3 -0
  363. package/dist/tokens/theme-china.js.map +1 -1
  364. package/dist/tokens/theme-dark.d.ts.map +1 -1
  365. package/dist/tokens/theme-dark.js +11 -30
  366. package/dist/tokens/theme-dark.js.map +1 -1
  367. package/dist/tokens/theme-light.d.ts.map +1 -1
  368. package/dist/tokens/theme-light.js +11 -30
  369. package/dist/tokens/theme-light.js.map +1 -1
  370. package/dist/tokens/types.d.ts +7 -0
  371. package/dist/tokens/types.d.ts.map +1 -1
  372. package/dist/types/price.d.ts +8 -0
  373. package/dist/types/price.d.ts.map +1 -1
  374. package/dist/types/price.js +4 -0
  375. package/dist/types/price.js.map +1 -1
  376. package/dist/utils/dateFormat.d.ts +5 -42
  377. package/dist/utils/dateFormat.d.ts.map +1 -1
  378. package/dist/utils/dateFormat.js +24 -4
  379. package/dist/utils/dateFormat.js.map +1 -1
  380. package/dist/utils/kLineDraw/axis.d.ts +9 -28
  381. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  382. package/dist/utils/kLineDraw/axis.js +33 -58
  383. package/dist/utils/kLineDraw/axis.js.map +1 -1
  384. package/dist/utils/volumePrice.d.ts +0 -40
  385. package/dist/utils/volumePrice.d.ts.map +1 -1
  386. package/dist/utils/volumePrice.js +2 -2
  387. package/dist/utils/volumePrice.js.map +1 -1
  388. package/dist/version.d.ts +1 -1
  389. package/dist/version.js +1 -1
  390. package/package.json +1 -1
  391. package/src/config/chartSettings.ts +8 -1
  392. package/src/controllers/createChartController.ts +59 -2
  393. package/src/controllers/types.ts +38 -17
  394. package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
  395. package/src/data-fetchers/baostock.ts +1 -1
  396. package/src/data-fetchers/dataBuffer.ts +48 -11
  397. package/src/data-fetchers/dataBufferTypes.ts +11 -0
  398. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
  399. package/src/data-fetchers/gotdx/gotdx.ts +6 -0
  400. package/src/data-fetchers/gotdx.ts +45 -7
  401. package/src/data-fetchers/hundred-mock.ts +1 -1
  402. package/src/data-fetchers/index.ts +10 -20
  403. package/src/data-fetchers/router.ts +12 -1
  404. package/src/data-fetchers/thousand-mock.ts +1 -1
  405. package/src/data-fetchers/timeShareBuffer.ts +92 -0
  406. package/src/data-fetchers/tradingview.ts +2 -2
  407. package/src/data-fetchers/types.ts +15 -2
  408. package/src/engine/__tests__/chart.dpr.test.ts +1 -0
  409. package/src/engine/chart.ts +167 -9
  410. package/src/engine/chartTypes.ts +3 -0
  411. package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
  412. package/src/engine/controller/interaction.ts +80 -28
  413. package/src/engine/data/chartDataManager.ts +560 -229
  414. package/src/engine/draw/pixelAlign.ts +1 -1
  415. package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
  416. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
  417. package/src/engine/indicators/calculators.ts +83 -233
  418. package/src/engine/indicators/chartIndicatorManager.ts +3 -2
  419. package/src/engine/indicators/macdState.ts +1 -1
  420. package/src/engine/indicators/registerBuiltins.ts +1 -0
  421. package/src/engine/indicators/rsiState.ts +1 -1
  422. package/src/engine/indicators/scheduler.ts +1 -7
  423. package/src/engine/layout/chartPaneLayout.ts +26 -6
  424. package/src/engine/modes/kLineMode.ts +57 -0
  425. package/src/engine/modes/timeShareMode.ts +95 -0
  426. package/src/engine/modes/types.ts +63 -0
  427. package/src/engine/paneRenderer.ts +37 -46
  428. package/src/engine/render/chartRenderer.ts +120 -22
  429. package/src/engine/renderers/Indicator/atr.ts +4 -29
  430. package/src/engine/renderers/Indicator/boll.ts +3 -24
  431. package/src/engine/renderers/Indicator/cci.ts +9 -27
  432. package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
  433. package/src/engine/renderers/Indicator/cmf.ts +3 -22
  434. package/src/engine/renderers/Indicator/dema.ts +5 -26
  435. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  436. package/src/engine/renderers/Indicator/ene.ts +3 -24
  437. package/src/engine/renderers/Indicator/expma.ts +2 -2
  438. package/src/engine/renderers/Indicator/fastk.ts +12 -95
  439. package/src/engine/renderers/Indicator/fib.ts +2 -2
  440. package/src/engine/renderers/Indicator/hma.ts +5 -26
  441. package/src/engine/renderers/Indicator/hv.ts +3 -23
  442. package/src/engine/renderers/Indicator/ichimoku.ts +3 -3
  443. package/src/engine/renderers/Indicator/kama.ts +5 -26
  444. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  445. package/src/engine/renderers/Indicator/kst.ts +3 -3
  446. package/src/engine/renderers/Indicator/ma.ts +1 -1
  447. package/src/engine/renderers/Indicator/macd.ts +4 -21
  448. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +127 -2
  449. package/src/engine/renderers/Indicator/mfi.ts +3 -22
  450. package/src/engine/renderers/Indicator/mom.ts +9 -30
  451. package/src/engine/renderers/Indicator/obv.ts +3 -21
  452. package/src/engine/renderers/Indicator/parkinson.ts +3 -23
  453. package/src/engine/renderers/Indicator/pivot.ts +2 -2
  454. package/src/engine/renderers/Indicator/pvt.ts +3 -21
  455. package/src/engine/renderers/Indicator/roc.ts +4 -23
  456. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  457. package/src/engine/renderers/Indicator/sar.ts +3 -3
  458. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
  459. package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
  460. package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
  461. package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
  462. package/src/engine/renderers/Indicator/stoch.ts +6 -71
  463. package/src/engine/renderers/Indicator/structure.ts +2 -2
  464. package/src/engine/renderers/Indicator/supertrend.ts +3 -3
  465. package/src/engine/renderers/Indicator/tema.ts +5 -26
  466. package/src/engine/renderers/Indicator/trix.ts +3 -3
  467. package/src/engine/renderers/Indicator/vma.ts +3 -22
  468. package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
  469. package/src/engine/renderers/Indicator/vwap.ts +3 -21
  470. package/src/engine/renderers/Indicator/wma.ts +5 -26
  471. package/src/engine/renderers/Indicator/wmsr.ts +9 -30
  472. package/src/engine/renderers/Indicator/zones.ts +2 -2
  473. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +30 -26
  474. package/src/engine/renderers/candle.ts +1 -1
  475. package/src/engine/renderers/comparisonLine.ts +1 -0
  476. package/src/engine/renderers/extremaMarkers.ts +1 -0
  477. package/src/engine/renderers/gridLines.ts +7 -36
  478. package/src/engine/renderers/lastPrice.ts +5 -2
  479. package/src/engine/renderers/leftYAxis.ts +93 -0
  480. package/src/engine/renderers/subVolume.ts +3 -3
  481. package/src/engine/renderers/timeAxis.ts +16 -13
  482. package/src/engine/renderers/timeShare.ts +271 -0
  483. package/src/engine/renderers/yAxis.ts +28 -24
  484. package/src/engine/scale/price.ts +2 -2
  485. package/src/engine/theme/fonts.ts +1 -1
  486. package/src/engine/utils/klineConfig.ts +1 -5
  487. package/src/engine/utils/tickPosition.ts +34 -0
  488. package/src/engine/viewport/chartViewportManager.ts +11 -15
  489. package/src/plugin/types.ts +11 -0
  490. package/src/semantic/types.ts +1 -1
  491. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +14 -0
  492. package/src/tokens/theme-base.ts +36 -0
  493. package/src/tokens/theme-china.ts +4 -0
  494. package/src/tokens/theme-dark.ts +12 -32
  495. package/src/tokens/theme-light.ts +13 -33
  496. package/src/tokens/types.ts +9 -0
  497. package/src/types/price.ts +13 -0
  498. package/src/utils/dateFormat.ts +27 -4
  499. package/src/utils/kLineDraw/axis.ts +40 -107
  500. package/src/utils/volumePrice.ts +2 -2
  501. package/src/version.ts +1 -1
@@ -0,0 +1,92 @@
1
+ import { createSignal, type Signal } from '../reactivity/signal'
2
+ import type { SymbolSpec } from '../controllers/types'
3
+ import type { TimeShareData } from '../types/price'
4
+ import type { TimeShareFetcherFn } from './types'
5
+ import type { DataBufferLike } from './dataBufferTypes'
6
+ import type { DataWindow } from './dataBuffer'
7
+ import { routerTimeShareFetcher } from './router'
8
+
9
+ export class TimeShareBuffer implements DataBufferLike {
10
+ private _data: TimeShareData[] = []
11
+ private _dataSignal = createSignal<ReadonlyArray<TimeShareData>>([])
12
+ private _loadingSignal = createSignal<boolean>(false)
13
+ private _fetcher: TimeShareFetcherFn | null = null
14
+ private _queryDate = 0
15
+ private _requestSeq = 0
16
+ private _disposed = false
17
+
18
+ get data(): Signal<ReadonlyArray<unknown>> {
19
+ return this._dataSignal as Signal<ReadonlyArray<unknown>>
20
+ }
21
+
22
+ get loading(): Signal<boolean> {
23
+ return this._loadingSignal
24
+ }
25
+
26
+ get loadedWindow(): DataWindow | null {
27
+ if (this._data.length === 0) return null
28
+ return {
29
+ earliestTs: this._data[0]!.timestamp,
30
+ latestTs: this._data[this._data.length - 1]!.timestamp,
31
+ }
32
+ }
33
+
34
+ getRawData(): TimeShareData[] {
35
+ return this._data
36
+ }
37
+
38
+ setFetcher(fetcher: TimeShareFetcherFn | null): void {
39
+ this._fetcher = fetcher
40
+ }
41
+
42
+ setQueryDate(date: number): void {
43
+ this._queryDate = date
44
+ }
45
+
46
+ getFetcher(): TimeShareFetcherFn | null {
47
+ return this._fetcher
48
+ }
49
+
50
+ getQueryDate(): number {
51
+ return this._queryDate
52
+ }
53
+
54
+ async load(spec: SymbolSpec): Promise<void> {
55
+ if (this._disposed) return
56
+ const fetcher = this._fetcher ?? routerTimeShareFetcher
57
+ const requestSeq = ++this._requestSeq
58
+ this._loadingSignal.set(true)
59
+
60
+ try {
61
+ const data = await fetcher(spec.source ?? 'gotdx', {
62
+ symbol: spec.symbol,
63
+ exchange: spec.exchange,
64
+ date: this._queryDate || undefined,
65
+ })
66
+ this._queryDate = 0
67
+
68
+ if (requestSeq !== this._requestSeq) return
69
+ if (this._disposed) return
70
+
71
+ this._data = [...data]
72
+ this._dataSignal.set([...data])
73
+ } finally {
74
+ if (requestSeq === this._requestSeq) {
75
+ this._loadingSignal.set(false)
76
+ }
77
+ }
78
+ }
79
+
80
+ setInlineData(data: unknown[]): void {
81
+ if (this._disposed) return
82
+ this._data = data as TimeShareData[]
83
+ this._dataSignal.set([...(data as TimeShareData[])])
84
+ }
85
+
86
+ dispose(): void {
87
+ this._disposed = true
88
+ this._requestSeq++
89
+ this._data = []
90
+ this._loadingSignal.set(false)
91
+ }
92
+ }
@@ -66,9 +66,9 @@ async function fetchTradingview(
66
66
  version: '1.0.0',
67
67
  capabilities: ['daily', 'weekly', 'monthly', '5min', '15min', '30min', '60min'],
68
68
  })
69
- export class TradingviewFetcher {
69
+ class TradingviewFetcher {
70
70
  static fetcher = fetchTradingview
71
71
  }
72
72
 
73
73
  /** @deprecated Use `TradingviewFetcher.fetcher` directly or rely on routerDataFetcher. */
74
- export const tradingviewDataFetcher = fetchTradingview
74
+ const tradingviewDataFetcher = fetchTradingview
@@ -1,4 +1,4 @@
1
- import type { KLineData } from '../controllers/types'
1
+ import type { KLineData, TimeShareData } from '../controllers/types'
2
2
 
3
3
  export type FetchConfig = {
4
4
  symbol: string
@@ -9,11 +9,23 @@ export type FetchConfig = {
9
9
  exchange?: string
10
10
  }
11
11
 
12
+ export type TimeShareFetchConfig = {
13
+ symbol: string
14
+ exchange?: string
15
+ /** YYYYMMDD format query date, e.g. 20260618 */
16
+ date?: number
17
+ }
18
+
12
19
  export type DataFetcherFn = (
13
20
  source: string,
14
21
  config: FetchConfig,
15
22
  ) => Promise<ReadonlyArray<KLineData>>
16
23
 
24
+ export type TimeShareFetcherFn = (
25
+ source: string,
26
+ config: TimeShareFetchConfig,
27
+ ) => Promise<ReadonlyArray<TimeShareData>>
28
+
17
29
  export interface DataFetcherDefinitionConfig {
18
30
  name: string
19
31
  displayName: string
@@ -24,4 +36,5 @@ export interface DataFetcherDefinitionConfig {
24
36
 
25
37
  export interface DataFetcherDefinition extends DataFetcherDefinitionConfig {
26
38
  fetcher: DataFetcherFn
27
- }
39
+ timeShareFetcher?: TimeShareFetcherFn
40
+ }
@@ -35,6 +35,7 @@ const defaultOptions: ChartOptions = {
35
35
  kGap: 2,
36
36
  yPaddingPx: 0,
37
37
  rightAxisWidth: 0,
38
+ leftAxisWidth: 0,
38
39
  bottomAxisHeight: 24,
39
40
  minKWidth: 2,
40
41
  maxKWidth: 50,
@@ -1,7 +1,7 @@
1
1
  import type { KLineData } from '../types/price'
2
2
  import type { ChartSettings } from '../config/chartSettings'
3
3
  import { createSignal, type Signal, type Computed } from '../reactivity/signal'
4
- import type { SymbolSpec } from '../controllers/types'
4
+ import type { SymbolSpec, CustomDataSource } from '../controllers/types'
5
5
  import { ChartDataManager } from './data/chartDataManager'
6
6
  import { ChartPaneLayout } from './layout/chartPaneLayout'
7
7
  import { UpdateLevel } from './layout/pane'
@@ -19,6 +19,9 @@ import { ChartIndicatorManager } from './indicators/chartIndicatorManager'
19
19
  import type { IndicatorScheduler } from './indicators/scheduler'
20
20
  import type { SubPaneEntry } from './subPaneManager'
21
21
  import { ChartRenderer } from './render/chartRenderer'
22
+ import { KLineMode } from './modes/kLineMode'
23
+ import { TimeShareMode } from './modes/timeShareMode'
24
+ import type { ChartModeHandler } from './modes/types'
22
25
 
23
26
  import {
24
27
  createPluginHost,
@@ -70,6 +73,19 @@ export class Chart {
70
73
  /** 渲染器 */
71
74
  private renderer: ChartRenderer
72
75
 
76
+ /** 当前活跃的模式处理器 */
77
+ private _activeMode: ChartModeHandler
78
+ private _kLineMode = new KLineMode()
79
+ private _timeShareMode = new TimeShareMode()
80
+
81
+ /** 模式切换时保存的渲染状态(退出分时时恢复) */
82
+ private _modeSavedKWidth = 0
83
+ private _modeSavedKGap = 0
84
+ private _modeSavedZoomLevel = 0
85
+
86
+ /** 分时模式激活前的 pane Y 轴刻度类型(退出分时时恢复) */
87
+ private _savedScaleTypes: Map<string, ScaleType> | undefined
88
+
73
89
  /**
74
90
  * 启用主图指标
75
91
  * @param indicatorId 指标ID
@@ -125,6 +141,7 @@ export class Chart {
125
141
  const { kWidth: _kWidth, kGap: _kGap, ...restOpt } = opt
126
142
  // Chart 不持有业务 SSOT,kWidth/kGap/zoomLevel 由外部通过 applyRenderState() 传入
127
143
  this.opt = { ...restOpt, kWidth: _kWidth ?? 0, kGap: _kGap ?? 0 }
144
+ this._activeMode = this._kLineMode
128
145
  this.interaction = new InteractionController(this)
129
146
  this.interaction.setOnInteractionChange((snapshot) => {
130
147
  this._interactionSignal.set(snapshot)
@@ -154,6 +171,7 @@ export class Chart {
154
171
  getDom: () => this.dom,
155
172
  getOption: () => ({
156
173
  rightAxisWidth: this.opt.rightAxisWidth,
174
+ leftAxisWidth: this.opt.leftAxisWidth,
157
175
  yPaddingPx: this.opt.yPaddingPx,
158
176
  priceLabelWidth: this.opt.priceLabelWidth,
159
177
  paneGap: this.opt.paneGap,
@@ -176,8 +194,7 @@ export class Chart {
176
194
  getEffectiveDpr: () => this.viewportManager.getEffectiveDpr(),
177
195
  getLogicalScrollLeft: () => this.viewportManager.getLogicalScrollLeft(),
178
196
  getCachedScrollLeft: () => this.viewportManager.getCachedScrollLeft(),
179
- setCachedScrollLeft: (v) => { this.viewportManager.setCachedScrollLeft(v) },
180
- setPendingScrollLeft: (v) => { this.viewportManager.setPendingScrollLeft(v) },
197
+ setScrollLeft: (v) => { this.viewportManager.setScrollLeft(v) },
181
198
  getDom: () => this.dom,
182
199
  getObservedSize: () => this.viewportManager.getObservedSize(),
183
200
  getViewport: () => this.viewportManager.getViewport(),
@@ -186,6 +203,20 @@ export class Chart {
186
203
  getIndicatorScheduler: () => this.indicatorManager.indicatorSchedulerAccessor,
187
204
  setPendingIndicatorDataUpdate: (v) => { this.dataManager.pendingIndicatorDataUpdate = v },
188
205
  isPointerDown: () => this.interaction.isPointerDown(),
206
+ onTimeShareDataReady: (dataLength) => {
207
+ const vp = this.viewportManager.computeViewport()
208
+ if (!vp || vp.plotWidth <= 0) return
209
+ const result = this._activeMode.computeKWidth(dataLength, vp.plotWidth, vp.dpr)
210
+ if (result) {
211
+ this.applyRenderState(result.kWidth, result.kGap)
212
+ const container = this.dom.container
213
+ if (container) {
214
+ const leftBuffer = this.dataManager.getLeftLoadBufferWidth()
215
+ this.viewportManager.setScrollLeft(leftBuffer)
216
+ this.viewportManager.applyPendingScrollLeft(container)
217
+ }
218
+ }
219
+ },
189
220
  })
190
221
 
191
222
  this.zoomController = new ChartZoomController({
@@ -248,6 +279,7 @@ export class Chart {
248
279
  getViewportManager: () => this.viewportManager,
249
280
  getDataManager: () => this.dataManager,
250
281
  getIndicatorManager: () => this.indicatorManager,
282
+ getActiveMode: () => this._activeMode,
251
283
  })
252
284
  this.renderer.registerDrawingPlugins()
253
285
  this.renderer.initCoreRenderers()
@@ -259,15 +291,73 @@ export class Chart {
259
291
  return this.viewportManager.getViewport()
260
292
  }
261
293
 
294
+ /** 获取当前活跃的模式处理器 */
295
+ get activeMode(): ChartModeHandler {
296
+ return this._activeMode
297
+ }
298
+
299
+ /** 切换模式处理器 */
300
+ setActiveMode(mode: ChartModeHandler): void {
301
+ if (this._activeMode === mode) return
302
+ const prev = this._activeMode
303
+
304
+ if (mode === this._timeShareMode) {
305
+ this._modeSavedKWidth = this.opt.kWidth
306
+ this._modeSavedKGap = this.opt.kGap
307
+ this._modeSavedZoomLevel = this.zoomController.currentZoomLevel
308
+ this._savedScaleTypes = new Map<string, ScaleType>()
309
+ for (const r of this.paneRenderers) {
310
+ this._savedScaleTypes.set(r.getPane().id, r.getPane().yAxis.getScaleType())
311
+ }
312
+ } else if (prev === this._timeShareMode) {
313
+ for (const renderer of this.paneRenderers) {
314
+ const p = renderer.getPane()
315
+ const saved = this._savedScaleTypes?.get(p.id) ?? 'linear'
316
+ p.yAxis.setScaleType(saved)
317
+ p.yAxis.setBasePrice(null)
318
+ }
319
+ this._savedScaleTypes = undefined
320
+ }
321
+
322
+ if (this._modeSavedKWidth > 0 && mode !== this._timeShareMode) {
323
+ this.applyRenderState(this._modeSavedKWidth, this._modeSavedKGap, this._modeSavedZoomLevel)
324
+ this._modeSavedKWidth = 0
325
+ }
326
+
327
+ prev.onDeactivate(
328
+ { enableMainIndicator: (id, p) => this.enableMainIndicator(id, p), disableMainIndicator: (id) => this.disableMainIndicator(id), setRendererEnabled: (n, e) => this.setRendererEnabled(n, e), dataManager: this.dataManager },
329
+ mode,
330
+ )
331
+ this._activeMode = mode
332
+ this._activeMode.onActivate(
333
+ { enableMainIndicator: (id, p) => this.enableMainIndicator(id, p), disableMainIndicator: (id) => this.disableMainIndicator(id), setRendererEnabled: (n, e) => this.setRendererEnabled(n, e), dataManager: this.dataManager, currentPeriod: this.dataManager.currentPeriod },
334
+ prev,
335
+ )
336
+ }
337
+
262
338
  getCurrentDpr(): number {
263
339
  return this.viewportManager.getEffectiveDpr()
264
340
  }
265
341
 
342
+ /** 获取当前周期 */
343
+ get currentPeriod(): string {
344
+ return this.dataManager.currentPeriod
345
+ }
346
+
266
347
  /** 获取缓存的 scrollLeft(避免读取 DOM 触发强制回流) */
267
348
  getCachedScrollLeft(): number {
268
349
  return this.viewportManager.getCachedScrollLeft()
269
350
  }
270
351
 
352
+ /** 同步程序性 scrollLeft 写入后的缓存,避免等待异步 scroll 事件 */
353
+ syncScrollLeft(scrollLeft: number): void {
354
+ this.viewportManager.setScrollLeft(scrollLeft)
355
+ }
356
+
357
+ setScrollLeft(v: number): void {
358
+ this.viewportManager.setScrollLeft(v)
359
+ }
360
+
271
361
  /** 获取逻辑 scrollLeft(减去左侧加载缓冲宽度,可为负值) */
272
362
  getLogicalScrollLeft(): number {
273
363
  return this.viewportManager.getLogicalScrollLeft()
@@ -318,14 +408,13 @@ export class Chart {
318
408
  this.renderer.updateSettings(settings)
319
409
  this.interaction.updateSettings(settings)
320
410
 
321
- // 同步刻度类型设置到所有 pane(百分比仅用于主图)
322
- if ('axisType' in settings) {
323
- const axisType = (settings.axisType as ScaleType) ?? 'linear'
324
- const currentType = this.paneRenderers[0]?.getPane().yAxis.getScaleType()
325
- if (axisType !== currentType) {
411
+ // 同步右轴刻度类型设置到所有 pane(百分比仅用于主图)
412
+ if ('rightAxisType' in settings) {
413
+ const axisType = settings.rightAxisType as string
414
+ if (axisType !== 'none') {
326
415
  for (const renderer of this.paneRenderers) {
327
416
  const pane = renderer.getPane()
328
- const scaleType = axisType === 'percent' && pane.role !== 'price' ? 'linear' : axisType
417
+ const scaleType = axisType === 'percent' && pane.role !== 'price' ? 'linear' : (axisType as ScaleType)
329
418
  pane.yAxis.setScaleType(scaleType)
330
419
  }
331
420
  }
@@ -631,6 +720,11 @@ export class Chart {
631
720
  return this.dataManager.getData()
632
721
  }
633
722
 
723
+ /** 获取渲染数据源(分时图下为 TimeShareData,K线图为 KLineData) */
724
+ getRenderData(): unknown[] {
725
+ return this.dataManager.getRenderData()
726
+ }
727
+
634
728
  /** 获取指标调度器(供外部控制器更新指标配置) */
635
729
  getIndicatorScheduler(): IndicatorScheduler {
636
730
  return this.indicatorManager.indicatorSchedulerAccessor
@@ -660,6 +754,11 @@ export class Chart {
660
754
  return this.dataManager.getContentWidth()
661
755
  }
662
756
 
757
+ /** 获取左侧加载缓冲宽度(视口宽度,用于计算 overlay 像素偏移) */
758
+ getLeftLoadBufferWidth(): number {
759
+ return this.dataManager.getLeftLoadBufferWidth()
760
+ }
761
+
663
762
  /** 滚动到最右侧(最新数据位置) */
664
763
  scrollToRight(): void {
665
764
  this.dataManager.scrollToRight()
@@ -667,6 +766,28 @@ export class Chart {
667
766
 
668
767
  /** 容器尺寸变化时调用 */
669
768
  resize() {
769
+ if (this._activeMode.debugName === 'TimeShare') {
770
+ const tsData = this.dataManager.getTimeShareData()
771
+ const vp = this.viewportManager.computeViewport()
772
+ if (!vp || vp.plotWidth <= 0) return
773
+ if (tsData.length > 0) {
774
+ const result = this._activeMode.computeKWidth(tsData.length, vp.plotWidth, vp.dpr)
775
+ if (result) {
776
+ this.applyRenderState(result.kWidth, result.kGap)
777
+ const container = this.dom.container
778
+ if (container) {
779
+ const leftBuffer = this.dataManager.getLeftLoadBufferWidth()
780
+ this.viewportManager.setScrollLeft(leftBuffer)
781
+ this.viewportManager.applyPendingScrollLeft(container)
782
+ }
783
+ }
784
+ }
785
+ this.renderer.clearCachedFrame()
786
+ this.layoutManager.layoutPanes()
787
+ this.viewportManager.updateViewportSignal()
788
+ this.scheduleDraw()
789
+ return
790
+ }
670
791
  const vp = this.viewportManager.computeViewport()
671
792
  // 防御性检查:容器尺寸无效时跳过布局
672
793
  if (!vp || vp.viewWidth < 10 || vp.viewHeight < 10) {
@@ -736,6 +857,11 @@ export class Chart {
736
857
  return this.dataManager.data
737
858
  }
738
859
 
860
+ /** 加载信号 */
861
+ get loading(): Signal<boolean> {
862
+ return this.dataManager.loading
863
+ }
864
+
739
865
  /** 符号信号 */
740
866
  get symbols(): Signal<ReadonlyArray<SymbolSpec>> {
741
867
  return this.dataManager.symbols
@@ -813,6 +939,10 @@ export class Chart {
813
939
  }
814
940
 
815
941
  setSymbols(specs: ReadonlyArray<SymbolSpec>): void {
942
+ const primaryPeriod = specs[0]?.period
943
+ if (primaryPeriod) {
944
+ this.setActiveMode(primaryPeriod === 'timeshare' ? this._timeShareMode : this._kLineMode)
945
+ }
816
946
  this.dataManager.setSymbols(specs)
817
947
  }
818
948
 
@@ -824,6 +954,29 @@ export class Chart {
824
954
  this.dataManager.removeComparisonSymbol(symbol)
825
955
  }
826
956
 
957
+ setComparisonData(symbol: string, data: KLineData[]): void {
958
+ this.dataManager.setComparisonData(symbol, data)
959
+ }
960
+
961
+ setCurrentSymbol(symbol: string): void {
962
+ this.dataManager.setCurrentSymbol(symbol)
963
+ }
964
+
965
+ setCurrentPeriod(period: string): void {
966
+ this.setActiveMode(period === 'timeshare' ? this._timeShareMode : this._kLineMode)
967
+ this.dataManager.setCurrentPeriod(period)
968
+ }
969
+
970
+ switchToTimeShareForDate(dateYYYYMMDD: number): void {
971
+ this.dataManager.setTimeShareQueryDate(dateYYYYMMDD)
972
+ this.setActiveMode(this._timeShareMode)
973
+ this.dataManager.setCurrentPeriod('timeshare')
974
+ }
975
+
976
+ applyCustomData(source: CustomDataSource): void {
977
+ this.dataManager.applyCustomData(source)
978
+ }
979
+
827
980
  // ---------- Theme ----------
828
981
 
829
982
  /**
@@ -841,6 +994,7 @@ export class Chart {
841
994
  * 计算并应用新的 render state,更新 viewport signal
842
995
  */
843
996
  zoomToLevel(level: number, anchorX?: number): void {
997
+ if (!this._activeMode.allowZoom) return
844
998
  this.zoomController.zoomToLevel(level, anchorX)
845
999
  }
846
1000
 
@@ -848,6 +1002,7 @@ export class Chart {
848
1002
  * 放大(高层 API)
849
1003
  */
850
1004
  zoomIn(anchorX?: number): void {
1005
+ if (!this._activeMode.allowZoom) return
851
1006
  this.zoomController.zoomIn(anchorX)
852
1007
  }
853
1008
 
@@ -855,6 +1010,7 @@ export class Chart {
855
1010
  * 缩小(高层 API)
856
1011
  */
857
1012
  zoomOut(anchorX?: number): void {
1013
+ if (!this._activeMode.allowZoom) return
858
1014
  this.zoomController.zoomOut(anchorX)
859
1015
  }
860
1016
 
@@ -931,6 +1087,7 @@ export class Chart {
931
1087
  * 使用 computeZoom 计算精确的 scrollLeft,更新 viewport signal
932
1088
  */
933
1089
  handleWheelEvent(e: WheelEvent): void {
1090
+ if (!this._activeMode.allowZoom) return
934
1091
  const rect = this.dom.container.getBoundingClientRect()
935
1092
  this.zoomController.handleWheel(e.deltaY, e.clientX - rect.left)
936
1093
  }
@@ -951,6 +1108,7 @@ export class Chart {
951
1108
  * @param centerClientX 捏合中心在视口中的 X 坐标
952
1109
  */
953
1110
  handlePinchZoom(delta: number, centerClientX: number): void {
1111
+ if (!this._activeMode.allowZoom) return
954
1112
  this.zoomController.handlePinch(delta, centerClientX)
955
1113
  }
956
1114
 
@@ -5,6 +5,7 @@ export type ChartDom = {
5
5
  scrollContent?: HTMLDivElement
6
6
  canvasLayer: HTMLDivElement
7
7
  rightAxisLayer: HTMLDivElement
8
+ leftAxisLayer?: HTMLDivElement
8
9
  xAxisCanvas: HTMLCanvasElement
9
10
  }
10
11
 
@@ -21,6 +22,7 @@ export type PaneRendererDom = {
21
22
  mainCanvas: HTMLCanvasElement
22
23
  overlayCanvas: HTMLCanvasElement
23
24
  yAxisCanvas: HTMLCanvasElement
25
+ leftYAxisCanvas?: HTMLCanvasElement
24
26
  }
25
27
 
26
28
  export type ChartOptions = {
@@ -28,6 +30,7 @@ export type ChartOptions = {
28
30
  kGap?: number
29
31
  yPaddingPx: number
30
32
  rightAxisWidth: number
33
+ leftAxisWidth: number
31
34
  bottomAxisHeight: number
32
35
  minKWidth: number
33
36
  maxKWidth: number
@@ -95,6 +95,8 @@ function createChartStub(args: {
95
95
  getMarkerManager: () => markerManager,
96
96
  getPaneRenderers: () => paneRenderers,
97
97
  getData: () => data,
98
+ getRenderData: () => data,
99
+ currentPeriod: 'daily',
98
100
  translatePrice: () => undefined,
99
101
  scheduleDraw: () => undefined,
100
102
  zoomAt: () => undefined,