@363045841yyt/klinechart-core 0.8.5 → 0.8.7

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 (517) hide show
  1. package/dist/config/chartSettings.d.ts +21 -2
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +9 -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 +50 -3
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/types.d.ts +34 -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 +29 -1
  61. package/dist/engine/chart.d.ts.map +1 -1
  62. package/dist/engine/chart.js +140 -5
  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 +12 -1
  67. package/dist/engine/controller/interaction.d.ts.map +1 -1
  68. package/dist/engine/controller/interaction.js +105 -14
  69. package/dist/engine/controller/interaction.js.map +1 -1
  70. package/dist/engine/data/chartDataManager.d.ts +38 -11
  71. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  72. package/dist/engine/data/chartDataManager.js +491 -188
  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 +77 -171
  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/ichimokuState.d.ts +2 -0
  86. package/dist/engine/indicators/ichimokuState.d.ts.map +1 -1
  87. package/dist/engine/indicators/ichimokuState.js.map +1 -1
  88. package/dist/engine/indicators/macdState.d.ts +0 -5
  89. package/dist/engine/indicators/macdState.d.ts.map +1 -1
  90. package/dist/engine/indicators/macdState.js +1 -1
  91. package/dist/engine/indicators/macdState.js.map +1 -1
  92. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
  93. package/dist/engine/indicators/registerBuiltins.js +1 -0
  94. package/dist/engine/indicators/registerBuiltins.js.map +1 -1
  95. package/dist/engine/indicators/rsiState.d.ts +0 -4
  96. package/dist/engine/indicators/rsiState.d.ts.map +1 -1
  97. package/dist/engine/indicators/rsiState.js +1 -1
  98. package/dist/engine/indicators/rsiState.js.map +1 -1
  99. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  100. package/dist/engine/indicators/scheduler.js +1 -7
  101. package/dist/engine/indicators/scheduler.js.map +1 -1
  102. package/dist/engine/indicators/visibleStateComposers.d.ts +14 -0
  103. package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -1
  104. package/dist/engine/indicators/visibleStateComposers.js +34 -0
  105. package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
  106. package/dist/engine/layout/chartPaneLayout.d.ts +2 -0
  107. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
  108. package/dist/engine/layout/chartPaneLayout.js +24 -6
  109. package/dist/engine/layout/chartPaneLayout.js.map +1 -1
  110. package/dist/engine/modes/kLineMode.d.ts +37 -0
  111. package/dist/engine/modes/kLineMode.d.ts.map +1 -0
  112. package/dist/engine/modes/kLineMode.js +22 -0
  113. package/dist/engine/modes/kLineMode.js.map +1 -0
  114. package/dist/engine/modes/timeShareMode.d.ts +37 -0
  115. package/dist/engine/modes/timeShareMode.d.ts.map +1 -0
  116. package/dist/engine/modes/timeShareMode.js +59 -0
  117. package/dist/engine/modes/timeShareMode.js.map +1 -0
  118. package/dist/engine/modes/types.d.ts +47 -0
  119. package/dist/engine/modes/types.d.ts.map +1 -0
  120. package/dist/engine/modes/types.js +2 -0
  121. package/dist/engine/modes/types.js.map +1 -0
  122. package/dist/engine/paneRenderer.d.ts +4 -0
  123. package/dist/engine/paneRenderer.d.ts.map +1 -1
  124. package/dist/engine/paneRenderer.js +27 -40
  125. package/dist/engine/paneRenderer.js.map +1 -1
  126. package/dist/engine/render/chartRenderer.d.ts +4 -23
  127. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  128. package/dist/engine/render/chartRenderer.js +87 -17
  129. package/dist/engine/render/chartRenderer.js.map +1 -1
  130. package/dist/engine/renderers/Indicator/atr.d.ts +1 -18
  131. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  132. package/dist/engine/renderers/Indicator/atr.js +3 -22
  133. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  134. package/dist/engine/renderers/Indicator/boll.d.ts +1 -4
  135. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  136. package/dist/engine/renderers/Indicator/boll.js +3 -18
  137. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  138. package/dist/engine/renderers/Indicator/cci.d.ts +1 -22
  139. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  140. package/dist/engine/renderers/Indicator/cci.js +8 -20
  141. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  142. package/dist/engine/renderers/Indicator/chaikinVol.d.ts +1 -7
  143. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  144. package/dist/engine/renderers/Indicator/chaikinVol.js +3 -16
  145. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  146. package/dist/engine/renderers/Indicator/cmf.d.ts +1 -7
  147. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  148. package/dist/engine/renderers/Indicator/cmf.js +3 -15
  149. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  150. package/dist/engine/renderers/Indicator/dema.d.ts +1 -7
  151. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  152. package/dist/engine/renderers/Indicator/dema.js +3 -17
  153. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  154. package/dist/engine/renderers/Indicator/donchian.d.ts +1 -8
  155. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  156. package/dist/engine/renderers/Indicator/donchian.js +2 -2
  157. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  158. package/dist/engine/renderers/Indicator/ene.d.ts +1 -12
  159. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  160. package/dist/engine/renderers/Indicator/ene.js +3 -18
  161. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  162. package/dist/engine/renderers/Indicator/expma.d.ts +1 -4
  163. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  164. package/dist/engine/renderers/Indicator/expma.js +2 -2
  165. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  166. package/dist/engine/renderers/Indicator/fastk.d.ts +1 -22
  167. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  168. package/dist/engine/renderers/Indicator/fastk.js +11 -64
  169. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  170. package/dist/engine/renderers/Indicator/fib.d.ts +1 -6
  171. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  172. package/dist/engine/renderers/Indicator/fib.js +2 -2
  173. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  174. package/dist/engine/renderers/Indicator/hma.d.ts +1 -7
  175. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  176. package/dist/engine/renderers/Indicator/hma.js +3 -17
  177. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  178. package/dist/engine/renderers/Indicator/hv.d.ts +1 -7
  179. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  180. package/dist/engine/renderers/Indicator/hv.js +3 -16
  181. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  182. package/dist/engine/renderers/Indicator/ichimoku.d.ts +1 -8
  183. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  184. package/dist/engine/renderers/Indicator/ichimoku.js +27 -5
  185. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  186. package/dist/engine/renderers/Indicator/kama.d.ts +1 -7
  187. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  188. package/dist/engine/renderers/Indicator/kama.js +3 -17
  189. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  190. package/dist/engine/renderers/Indicator/keltner.d.ts +1 -8
  191. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  192. package/dist/engine/renderers/Indicator/keltner.js +2 -2
  193. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  194. package/dist/engine/renderers/Indicator/kst.d.ts +1 -22
  195. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  196. package/dist/engine/renderers/Indicator/kst.js +2 -2
  197. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  198. package/dist/engine/renderers/Indicator/ma.d.ts +1 -4
  199. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  200. package/dist/engine/renderers/Indicator/ma.js +1 -1
  201. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  202. package/dist/engine/renderers/Indicator/macd.d.ts +1 -49
  203. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  204. package/dist/engine/renderers/Indicator/macd.js +2 -12
  205. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  206. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  207. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +205 -0
  208. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  209. package/dist/engine/renderers/Indicator/mfi.d.ts +1 -7
  210. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  211. package/dist/engine/renderers/Indicator/mfi.js +3 -15
  212. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  213. package/dist/engine/renderers/Indicator/mom.d.ts +1 -22
  214. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  215. package/dist/engine/renderers/Indicator/mom.js +8 -23
  216. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  217. package/dist/engine/renderers/Indicator/obv.d.ts +1 -7
  218. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  219. package/dist/engine/renderers/Indicator/obv.js +3 -14
  220. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  221. package/dist/engine/renderers/Indicator/parkinson.d.ts +1 -7
  222. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  223. package/dist/engine/renderers/Indicator/parkinson.js +3 -16
  224. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  225. package/dist/engine/renderers/Indicator/pivot.d.ts +1 -6
  226. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  227. package/dist/engine/renderers/Indicator/pivot.js +2 -2
  228. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  229. package/dist/engine/renderers/Indicator/pvt.d.ts +1 -7
  230. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  231. package/dist/engine/renderers/Indicator/pvt.js +3 -14
  232. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  233. package/dist/engine/renderers/Indicator/roc.d.ts +1 -8
  234. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  235. package/dist/engine/renderers/Indicator/roc.js +3 -15
  236. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  237. package/dist/engine/renderers/Indicator/rsi.d.ts +0 -32
  238. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  239. package/dist/engine/renderers/Indicator/rsi.js +3 -3
  240. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  241. package/dist/engine/renderers/Indicator/sar.d.ts +1 -8
  242. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  243. package/dist/engine/renderers/Indicator/sar.js +2 -2
  244. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  245. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +2 -0
  246. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
  247. package/dist/engine/renderers/Indicator/scale/indicator_scale.js +10 -6
  248. package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
  249. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts +4 -0
  250. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts.map +1 -0
  251. package/dist/engine/renderers/Indicator/shared/dashedLines.js +50 -0
  252. package/dist/engine/renderers/Indicator/shared/dashedLines.js.map +1 -0
  253. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +14 -0
  254. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -0
  255. package/dist/engine/renderers/Indicator/shared/titleInfo.js +25 -0
  256. package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -0
  257. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts +5 -0
  258. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts.map +1 -0
  259. package/dist/engine/renderers/Indicator/shared/webglBand.js +17 -0
  260. package/dist/engine/renderers/Indicator/shared/webglBand.js.map +1 -0
  261. package/dist/engine/renderers/Indicator/stoch.d.ts +1 -22
  262. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  263. package/dist/engine/renderers/Indicator/stoch.js +5 -46
  264. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  265. package/dist/engine/renderers/Indicator/structure.d.ts +1 -7
  266. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  267. package/dist/engine/renderers/Indicator/structure.js +2 -2
  268. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  269. package/dist/engine/renderers/Indicator/supertrend.d.ts +1 -8
  270. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  271. package/dist/engine/renderers/Indicator/supertrend.js +2 -2
  272. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  273. package/dist/engine/renderers/Indicator/tema.d.ts +1 -7
  274. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  275. package/dist/engine/renderers/Indicator/tema.js +3 -17
  276. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  277. package/dist/engine/renderers/Indicator/trix.d.ts +1 -8
  278. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  279. package/dist/engine/renderers/Indicator/trix.js +2 -2
  280. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  281. package/dist/engine/renderers/Indicator/vma.d.ts +1 -7
  282. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  283. package/dist/engine/renderers/Indicator/vma.js +3 -15
  284. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  285. package/dist/engine/renderers/Indicator/volumeProfile.d.ts +1 -7
  286. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  287. package/dist/engine/renderers/Indicator/volumeProfile.js +2 -2
  288. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  289. package/dist/engine/renderers/Indicator/vwap.d.ts +1 -7
  290. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  291. package/dist/engine/renderers/Indicator/vwap.js +3 -14
  292. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  293. package/dist/engine/renderers/Indicator/wma.d.ts +1 -7
  294. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  295. package/dist/engine/renderers/Indicator/wma.js +3 -17
  296. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  297. package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -22
  298. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  299. package/dist/engine/renderers/Indicator/wmsr.js +8 -23
  300. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  301. package/dist/engine/renderers/Indicator/zones.d.ts +1 -6
  302. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  303. package/dist/engine/renderers/Indicator/zones.js +2 -2
  304. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  305. package/dist/engine/renderers/candle.d.ts +0 -16
  306. package/dist/engine/renderers/candle.d.ts.map +1 -1
  307. package/dist/engine/renderers/candle.js +1 -1
  308. package/dist/engine/renderers/candle.js.map +1 -1
  309. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  310. package/dist/engine/renderers/comparisonLine.js +2 -0
  311. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  312. package/dist/engine/renderers/crosshair.js +1 -1
  313. package/dist/engine/renderers/crosshair.js.map +1 -1
  314. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  315. package/dist/engine/renderers/extremaMarkers.js +2 -0
  316. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  317. package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
  318. package/dist/engine/renderers/lastPrice.js +7 -2
  319. package/dist/engine/renderers/lastPrice.js.map +1 -1
  320. package/dist/engine/renderers/leftYAxis.d.ts +11 -0
  321. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
  322. package/dist/engine/renderers/leftYAxis.js +67 -0
  323. package/dist/engine/renderers/leftYAxis.js.map +1 -0
  324. package/dist/engine/renderers/subVolume.d.ts +1 -13
  325. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  326. package/dist/engine/renderers/subVolume.js +1 -1
  327. package/dist/engine/renderers/subVolume.js.map +1 -1
  328. package/dist/engine/renderers/timeAxis.d.ts +0 -2
  329. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  330. package/dist/engine/renderers/timeAxis.js +4 -1
  331. package/dist/engine/renderers/timeAxis.js.map +1 -1
  332. package/dist/engine/renderers/timeShare.d.ts +3 -0
  333. package/dist/engine/renderers/timeShare.d.ts.map +1 -0
  334. package/dist/engine/renderers/timeShare.js +260 -0
  335. package/dist/engine/renderers/timeShare.js.map +1 -0
  336. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  337. package/dist/engine/renderers/yAxis.js +9 -1
  338. package/dist/engine/renderers/yAxis.js.map +1 -1
  339. package/dist/engine/scale/price.d.ts +0 -7
  340. package/dist/engine/scale/price.d.ts.map +1 -1
  341. package/dist/engine/scale/price.js +3 -2
  342. package/dist/engine/scale/price.js.map +1 -1
  343. package/dist/engine/theme/fonts.d.ts +0 -2
  344. package/dist/engine/theme/fonts.d.ts.map +1 -1
  345. package/dist/engine/theme/fonts.js +1 -1
  346. package/dist/engine/theme/fonts.js.map +1 -1
  347. package/dist/engine/utils/klineConfig.d.ts.map +1 -1
  348. package/dist/engine/utils/klineConfig.js +1 -5
  349. package/dist/engine/utils/klineConfig.js.map +1 -1
  350. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  351. package/dist/engine/viewport/chartViewportManager.js +6 -5
  352. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  353. package/dist/index.d.ts +1 -0
  354. package/dist/index.d.ts.map +1 -1
  355. package/dist/index.js +1 -0
  356. package/dist/index.js.map +1 -1
  357. package/dist/mcp/chartBridge.d.ts.map +1 -1
  358. package/dist/mcp/chartBridge.js +2 -1
  359. package/dist/mcp/chartBridge.js.map +1 -1
  360. package/dist/plugin/types.d.ts +1 -0
  361. package/dist/plugin/types.d.ts.map +1 -1
  362. package/dist/plugin/types.js.map +1 -1
  363. package/dist/semantic/types.d.ts +1 -1
  364. package/dist/semantic/types.d.ts.map +1 -1
  365. package/dist/tokens/theme-base.d.ts +5 -0
  366. package/dist/tokens/theme-base.d.ts.map +1 -0
  367. package/dist/tokens/theme-base.js +31 -0
  368. package/dist/tokens/theme-base.js.map +1 -0
  369. package/dist/tokens/theme-china.d.ts.map +1 -1
  370. package/dist/tokens/theme-china.js +3 -0
  371. package/dist/tokens/theme-china.js.map +1 -1
  372. package/dist/tokens/theme-dark.d.ts.map +1 -1
  373. package/dist/tokens/theme-dark.js +12 -31
  374. package/dist/tokens/theme-dark.js.map +1 -1
  375. package/dist/tokens/theme-light.d.ts.map +1 -1
  376. package/dist/tokens/theme-light.js +11 -30
  377. package/dist/tokens/theme-light.js.map +1 -1
  378. package/dist/tokens/types.d.ts +7 -0
  379. package/dist/tokens/types.d.ts.map +1 -1
  380. package/dist/types/price.d.ts +8 -0
  381. package/dist/types/price.d.ts.map +1 -1
  382. package/dist/types/price.js +4 -0
  383. package/dist/types/price.js.map +1 -1
  384. package/dist/utils/dateFormat.d.ts +5 -42
  385. package/dist/utils/dateFormat.d.ts.map +1 -1
  386. package/dist/utils/dateFormat.js +24 -4
  387. package/dist/utils/dateFormat.js.map +1 -1
  388. package/dist/utils/kLineDraw/axis.d.ts +9 -28
  389. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  390. package/dist/utils/kLineDraw/axis.js +33 -58
  391. package/dist/utils/kLineDraw/axis.js.map +1 -1
  392. package/dist/utils/uuid.d.ts +2 -0
  393. package/dist/utils/uuid.d.ts.map +1 -0
  394. package/dist/utils/uuid.js +10 -0
  395. package/dist/utils/uuid.js.map +1 -0
  396. package/dist/utils/volumePrice.d.ts +0 -40
  397. package/dist/utils/volumePrice.d.ts.map +1 -1
  398. package/dist/utils/volumePrice.js +2 -2
  399. package/dist/utils/volumePrice.js.map +1 -1
  400. package/dist/version.d.ts +1 -1
  401. package/dist/version.js +1 -1
  402. package/package.json +1 -1
  403. package/src/config/chartSettings.ts +9 -1
  404. package/src/controllers/createChartController.ts +53 -3
  405. package/src/controllers/types.ts +36 -17
  406. package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
  407. package/src/data-fetchers/baostock.ts +1 -1
  408. package/src/data-fetchers/dataBuffer.ts +48 -11
  409. package/src/data-fetchers/dataBufferTypes.ts +11 -0
  410. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
  411. package/src/data-fetchers/gotdx/gotdx.ts +6 -0
  412. package/src/data-fetchers/gotdx.ts +45 -7
  413. package/src/data-fetchers/hundred-mock.ts +1 -1
  414. package/src/data-fetchers/index.ts +10 -20
  415. package/src/data-fetchers/router.ts +12 -1
  416. package/src/data-fetchers/thousand-mock.ts +1 -1
  417. package/src/data-fetchers/timeShareBuffer.ts +92 -0
  418. package/src/data-fetchers/tradingview.ts +2 -2
  419. package/src/data-fetchers/types.ts +15 -2
  420. package/src/engine/__tests__/chart.dpr.test.ts +1 -0
  421. package/src/engine/chart.ts +157 -7
  422. package/src/engine/chartTypes.ts +3 -0
  423. package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
  424. package/src/engine/controller/interaction.ts +115 -16
  425. package/src/engine/data/chartDataManager.ts +557 -214
  426. package/src/engine/draw/pixelAlign.ts +1 -1
  427. package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
  428. package/src/engine/indicators/__tests__/ichimoku.test.ts +3 -3
  429. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
  430. package/src/engine/indicators/calculators.ts +105 -236
  431. package/src/engine/indicators/chartIndicatorManager.ts +3 -2
  432. package/src/engine/indicators/ichimokuState.ts +2 -0
  433. package/src/engine/indicators/macdState.ts +1 -1
  434. package/src/engine/indicators/registerBuiltins.ts +1 -0
  435. package/src/engine/indicators/rsiState.ts +1 -1
  436. package/src/engine/indicators/scheduler.ts +1 -7
  437. package/src/engine/indicators/visibleStateComposers.ts +51 -0
  438. package/src/engine/layout/chartPaneLayout.ts +26 -6
  439. package/src/engine/modes/kLineMode.ts +57 -0
  440. package/src/engine/modes/timeShareMode.ts +95 -0
  441. package/src/engine/modes/types.ts +63 -0
  442. package/src/engine/paneRenderer.ts +37 -46
  443. package/src/engine/render/chartRenderer.ts +93 -20
  444. package/src/engine/renderers/Indicator/atr.ts +4 -29
  445. package/src/engine/renderers/Indicator/boll.ts +3 -24
  446. package/src/engine/renderers/Indicator/cci.ts +9 -27
  447. package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
  448. package/src/engine/renderers/Indicator/cmf.ts +3 -22
  449. package/src/engine/renderers/Indicator/dema.ts +5 -26
  450. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  451. package/src/engine/renderers/Indicator/ene.ts +3 -24
  452. package/src/engine/renderers/Indicator/expma.ts +2 -2
  453. package/src/engine/renderers/Indicator/fastk.ts +12 -95
  454. package/src/engine/renderers/Indicator/fib.ts +2 -2
  455. package/src/engine/renderers/Indicator/hma.ts +5 -26
  456. package/src/engine/renderers/Indicator/hv.ts +3 -23
  457. package/src/engine/renderers/Indicator/ichimoku.ts +26 -6
  458. package/src/engine/renderers/Indicator/kama.ts +5 -26
  459. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  460. package/src/engine/renderers/Indicator/kst.ts +3 -3
  461. package/src/engine/renderers/Indicator/ma.ts +1 -1
  462. package/src/engine/renderers/Indicator/macd.ts +4 -21
  463. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +228 -1
  464. package/src/engine/renderers/Indicator/mfi.ts +3 -22
  465. package/src/engine/renderers/Indicator/mom.ts +9 -30
  466. package/src/engine/renderers/Indicator/obv.ts +3 -21
  467. package/src/engine/renderers/Indicator/parkinson.ts +3 -23
  468. package/src/engine/renderers/Indicator/pivot.ts +2 -2
  469. package/src/engine/renderers/Indicator/pvt.ts +3 -21
  470. package/src/engine/renderers/Indicator/roc.ts +4 -23
  471. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  472. package/src/engine/renderers/Indicator/sar.ts +3 -3
  473. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
  474. package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
  475. package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
  476. package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
  477. package/src/engine/renderers/Indicator/stoch.ts +6 -71
  478. package/src/engine/renderers/Indicator/structure.ts +2 -2
  479. package/src/engine/renderers/Indicator/supertrend.ts +3 -3
  480. package/src/engine/renderers/Indicator/tema.ts +5 -26
  481. package/src/engine/renderers/Indicator/trix.ts +3 -3
  482. package/src/engine/renderers/Indicator/vma.ts +3 -22
  483. package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
  484. package/src/engine/renderers/Indicator/vwap.ts +3 -21
  485. package/src/engine/renderers/Indicator/wma.ts +5 -26
  486. package/src/engine/renderers/Indicator/wmsr.ts +9 -30
  487. package/src/engine/renderers/Indicator/zones.ts +2 -2
  488. package/src/engine/renderers/candle.ts +1 -1
  489. package/src/engine/renderers/comparisonLine.ts +1 -0
  490. package/src/engine/renderers/crosshair.ts +1 -1
  491. package/src/engine/renderers/extremaMarkers.ts +1 -0
  492. package/src/engine/renderers/lastPrice.ts +5 -2
  493. package/src/engine/renderers/leftYAxis.ts +77 -0
  494. package/src/engine/renderers/subVolume.ts +3 -3
  495. package/src/engine/renderers/timeAxis.ts +16 -13
  496. package/src/engine/renderers/timeShare.ts +271 -0
  497. package/src/engine/renderers/yAxis.ts +9 -1
  498. package/src/engine/scale/price.ts +2 -2
  499. package/src/engine/theme/fonts.ts +1 -1
  500. package/src/engine/utils/klineConfig.ts +1 -5
  501. package/src/engine/viewport/chartViewportManager.ts +6 -5
  502. package/src/index.ts +1 -0
  503. package/src/mcp/chartBridge.ts +2 -1
  504. package/src/plugin/types.ts +1 -0
  505. package/src/semantic/types.ts +1 -1
  506. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +15 -1
  507. package/src/tokens/theme-base.ts +36 -0
  508. package/src/tokens/theme-china.ts +4 -0
  509. package/src/tokens/theme-dark.ts +13 -33
  510. package/src/tokens/theme-light.ts +13 -33
  511. package/src/tokens/types.ts +9 -0
  512. package/src/types/price.ts +13 -0
  513. package/src/utils/dateFormat.ts +27 -4
  514. package/src/utils/kLineDraw/axis.ts +40 -107
  515. package/src/utils/uuid.ts +8 -0
  516. package/src/utils/volumePrice.ts +2 -2
  517. package/src/version.ts +1 -1
@@ -67,7 +67,8 @@ export class ChartIndicatorManager {
67
67
  ChartIndicatorManager._defaultMainParamsCache = {}
68
68
  for (const def of getRegisteredIndicatorDefinitions()) {
69
69
  if (def.category === 'main') {
70
- ChartIndicatorManager._defaultMainParamsCache[def.displayName.toUpperCase()] = (def.runtime?.defaultConfig ?? {}) as Record<string, number | boolean | string>
70
+ const key = def.name.toUpperCase()
71
+ ChartIndicatorManager._defaultMainParamsCache[key] = (def.runtime?.defaultConfig ?? {}) as Record<string, number | boolean | string>
71
72
  }
72
73
  }
73
74
  }
@@ -81,7 +82,7 @@ export class ChartIndicatorManager {
81
82
  if (ChartIndicatorManager._enableMainIndicatorsCache === null) {
82
83
  ChartIndicatorManager._enableMainIndicatorsCache = getRegisteredIndicatorDefinitions()
83
84
  .filter(d => d.category === 'main')
84
- .map(d => d.displayName.toUpperCase())
85
+ .map(d => d.name.toUpperCase())
85
86
  }
86
87
  return ChartIndicatorManager._enableMainIndicatorsCache
87
88
  }
@@ -10,6 +10,8 @@ import { createIndicatorStateKey } from '../../plugin/stateKeys'
10
10
  * - chikou (迟行线) = close[t+displacement],后置位移
11
11
  *
12
12
  * 任一字段都可能 undefined(数据不足或位移外)。
13
+ *
14
+ * series 长度 = data.length + displacement,末尾 displacement 槽位为未来云(仅 spanA/spanB)。
13
15
  */
14
16
  export interface IchimokuPoint {
15
17
  tenkan?: number
@@ -44,7 +44,7 @@ export interface MACDRenderState extends BaseIndicatorState {
44
44
  * MACD State 的命名空间 key
45
45
  * 格式: indicator:macd:{paneId}
46
46
  */
47
- export const MACD_STATE_KEY = 'indicator:macd'
47
+ const MACD_STATE_KEY = 'indicator:macd'
48
48
 
49
49
  /**
50
50
  * 创建 MACD State Key
@@ -6,6 +6,7 @@ export async function loadBuiltinIndicators(): Promise<void> {
6
6
  if (loaded) return
7
7
  await Promise.all([
8
8
  import('../renderers/subVolume'),
9
+ import('../renderers/timeShare'),
9
10
  import('../renderers/Indicator/atr'),
10
11
  import('../renderers/Indicator/boll'),
11
12
  import('../renderers/Indicator/cci'),
@@ -33,7 +33,7 @@ export interface RSIRenderState extends BaseIndicatorState {
33
33
  /**
34
34
  * RSI 状态的基础 StateStore 键名
35
35
  */
36
- export const RSI_STATE_KEY = 'indicator:rsi'
36
+ const RSI_STATE_KEY = 'indicator:rsi'
37
37
 
38
38
  /**
39
39
  * 创建 RSI 状态的 StateStore 键名
@@ -526,13 +526,7 @@ export class IndicatorScheduler {
526
526
  /**
527
527
  * 检查 state 中的 visibleMin/visibleMax 是否为 Infinity,如果是则输出 warning
528
528
  */
529
- private checkVisibleExtremes(state: { visibleMin: number; visibleMax: number }, indicatorName: string): void {
530
- if (!Number.isFinite(state.visibleMin) || !Number.isFinite(state.visibleMax)) {
531
- console.warn(`[IndicatorScheduler] ${indicatorName} state has non-finite visibleMin/visibleMax:`, {
532
- visibleMin: state.visibleMin,
533
- visibleMax: state.visibleMax,
534
- })
535
- }
529
+ private checkVisibleExtremes(_state: { visibleMin: number; visibleMax: number }, _indicatorName: string): void {
536
530
  }
537
531
 
538
532
  /** 遍历注册表中的所有指标,通过 applyResult 回调写入 StateStore */
@@ -542,6 +542,57 @@ export function createValuePointVisibleStateComposer<T extends object>(
542
542
  }
543
543
  }
544
544
 
545
+ /**
546
+ * 一目均衡表专用的 visible state composer。
547
+ * 与 createValuePointVisibleStateComposer 的区别:
548
+ * - 将 visibleRange 向后扩展 displacement 根,以确保未来云的极值计入 valueMin/valueMax
549
+ */
550
+ export function createIchimokuVisibleStateComposer<T extends object>(
551
+ bundleKey: string,
552
+ emptyState: {
553
+ timestamp: number
554
+ series: (T | undefined)[]
555
+ params: unknown
556
+ valueMin: number
557
+ valueMax: number
558
+ visibleMin: number
559
+ visibleMax: number
560
+ },
561
+ fields: readonly (keyof T)[],
562
+ ): IndicatorVisibleStateComposer {
563
+ return ({ bundle, visibleRange, timestamp, active }) => {
564
+ const source = getPointArraySeriesBundle<T>(bundle, bundleKey)
565
+ if (!active) {
566
+ return {
567
+ ...emptyState,
568
+ timestamp,
569
+ series: source.series,
570
+ params: source.params,
571
+ }
572
+ }
573
+
574
+ const displacement = (source.params as Record<string, unknown>)?.displacement as number ?? 26
575
+ const extendedRange = {
576
+ start: visibleRange.start,
577
+ end: Math.min(visibleRange.end + displacement, source.series.length),
578
+ }
579
+ const extremes = calcPointArrayExtremes(source.series, fields, extendedRange)
580
+ const bounds = computeMAFamilyBounds(
581
+ Number.isFinite(extremes.min) && Number.isFinite(extremes.max) ? extremes : null,
582
+ emptyState,
583
+ )
584
+ return {
585
+ timestamp,
586
+ series: source.series,
587
+ params: source.params,
588
+ valueMin: bounds.valueMin,
589
+ valueMax: bounds.valueMax,
590
+ visibleMin: extremes.min,
591
+ visibleMax: extremes.max,
592
+ }
593
+ }
594
+ }
595
+
545
596
  export function createBandVisibleStateComposer<T extends object>(
546
597
  bundleKey: string,
547
598
  emptyState: {
@@ -8,6 +8,7 @@ export interface PaneLayoutDependencies {
8
8
  getDom: () => ChartDom
9
9
  getOption: () => {
10
10
  rightAxisWidth: number
11
+ leftAxisWidth: number
11
12
  yPaddingPx: number
12
13
  priceLabelWidth?: number
13
14
  paneGap?: number
@@ -59,6 +60,15 @@ export class ChartPaneLayout {
59
60
  return index === 0 ? 'price' : 'indicator'
60
61
  }
61
62
 
63
+ private createAxisCanvas(spec: PaneSpec, pane: Pane, side: 'left' | 'right'): HTMLCanvasElement {
64
+ const canvas = document.createElement('canvas')
65
+ canvas.id = `${spec.id}-${side}Axis`
66
+ canvas.className = side === 'right' ? 'right-axis' : 'left-axis'
67
+ canvas.style.position = 'absolute'
68
+ canvas.style.left = '0'
69
+ return canvas
70
+ }
71
+
62
72
  private initPanes() {
63
73
  const prevScaleTypes = new Map<string, 'linear' | 'log' | 'percent'>()
64
74
  for (const r of this.paneRenderers) {
@@ -76,7 +86,7 @@ export class ChartPaneLayout {
76
86
 
77
87
  const mainCanvas = document.createElement('canvas')
78
88
  const overlayCanvas = document.createElement('canvas')
79
- const yAxisCanvas = document.createElement('canvas')
89
+ const yAxisCanvas = this.createAxisCanvas(spec, pane, 'right')
80
90
 
81
91
  const isMain = pane.role === 'price'
82
92
 
@@ -94,16 +104,14 @@ export class ChartPaneLayout {
94
104
  overlayCanvas.style.pointerEvents = 'none'
95
105
  overlayCanvas.style.backgroundColor = 'transparent'
96
106
 
97
- yAxisCanvas.id = `${spec.id}-yAxis`
98
- yAxisCanvas.className = 'right-axis'
99
- yAxisCanvas.style.position = 'absolute'
100
- yAxisCanvas.style.left = '0'
107
+ const leftYAxisCanvas = this.createAxisCanvas(spec, pane, 'left')
101
108
 
102
109
  const renderer = new PaneRenderer(
103
- { mainCanvas, overlayCanvas, yAxisCanvas },
110
+ { mainCanvas, overlayCanvas, yAxisCanvas, leftYAxisCanvas },
104
111
  pane,
105
112
  {
106
113
  rightAxisWidth: this.deps.getOption().rightAxisWidth,
114
+ leftAxisWidth: this.deps.getOption().leftAxisWidth ?? 0,
107
115
  yPaddingPx: this.deps.getOption().yPaddingPx,
108
116
  priceLabelWidth: this.deps.getOption().priceLabelWidth,
109
117
  },
@@ -116,6 +124,7 @@ export class ChartPaneLayout {
116
124
  const dom = this.deps.getDom()
117
125
  const canvasLayer = dom.canvasLayer
118
126
  const rightAxisLayer = dom.rightAxisLayer
127
+ const leftAxisLayer = dom.leftAxisLayer
119
128
  if (canvasLayer) {
120
129
  const existingCanvases = canvasLayer.querySelectorAll('canvas:not(.x-axis-canvas)')
121
130
  existingCanvases.forEach((canvas) => canvas.remove())
@@ -124,12 +133,19 @@ export class ChartPaneLayout {
124
133
  const existingAxisCanvases = rightAxisLayer.querySelectorAll('canvas.right-axis')
125
134
  existingAxisCanvases.forEach((canvas) => canvas.remove())
126
135
  }
136
+ if (leftAxisLayer) {
137
+ const existingLeftAxisCanvases = leftAxisLayer.querySelectorAll('canvas.left-axis')
138
+ existingLeftAxisCanvases.forEach((canvas) => canvas.remove())
139
+ }
127
140
 
128
141
  this.paneRenderers.forEach((renderer) => {
129
142
  const domEls = renderer.getDom()
130
143
  canvasLayer.appendChild(domEls.mainCanvas)
131
144
  canvasLayer.appendChild(domEls.overlayCanvas)
132
145
  rightAxisLayer.appendChild(domEls.yAxisCanvas)
146
+ if (leftAxisLayer && domEls.leftYAxisCanvas) {
147
+ leftAxisLayer.appendChild(domEls.leftYAxisCanvas)
148
+ }
133
149
  })
134
150
 
135
151
  this.deps.setKnownPaneIds(
@@ -290,6 +306,10 @@ export class ChartPaneLayout {
290
306
  domEls.overlayCanvas.style.top = `${y}px`
291
307
  domEls.yAxisCanvas.style.top = `${y}px`
292
308
  domEls.yAxisCanvas.style.left = '0px'
309
+ if (domEls.leftYAxisCanvas) {
310
+ domEls.leftYAxisCanvas.style.top = `${y}px`
311
+ domEls.leftYAxisCanvas.style.left = '0px'
312
+ }
293
313
 
294
314
  y += h + gap
295
315
  }
@@ -0,0 +1,57 @@
1
+ import type { ChartModeHandler } from './types'
2
+ import type { Pane, VisibleRange } from '../layout/pane'
3
+ import type { ChartDataManager } from '../data/chartDataManager'
4
+
5
+ export class KLineMode implements ChartModeHandler {
6
+ readonly debugName = 'KLine'
7
+
8
+ readonly allowPan = true
9
+ readonly allowZoom = true
10
+ readonly allowVerticalScroll = true
11
+ readonly allowRightAxisScale = true
12
+ readonly useIndicatorScheduler = true
13
+
14
+ computeContentWidth(
15
+ _dataLength: number,
16
+ _leftBufferWidth: number,
17
+ _viewWidth: number,
18
+ _opt: { kWidth: number; kGap: number },
19
+ _dpr: number,
20
+ ): number | null {
21
+ return null
22
+ }
23
+
24
+ computeKWidth(
25
+ _dataLength: number,
26
+ _viewWidth: number,
27
+ _dpr: number,
28
+ ): { kWidth: number; kGap: number } | null {
29
+ return null
30
+ }
31
+
32
+ updatePaneRange(
33
+ pane: Pane,
34
+ range: VisibleRange,
35
+ dm: ChartDataManager,
36
+ mergedIndicatorRange?: { min: number; max: number } | null,
37
+ ): void {
38
+ pane.updateRange(dm.getInternalData(), range, mergedIndicatorRange)
39
+ }
40
+
41
+ onActivate(_chart: {
42
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
43
+ disableMainIndicator: (id: string) => boolean
44
+ setRendererEnabled: (name: string, enabled: boolean) => void
45
+ dataManager: ChartDataManager
46
+ currentPeriod: string
47
+ }, _prev: ChartModeHandler | null): void {
48
+ }
49
+
50
+ onDeactivate(_chart: {
51
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
52
+ disableMainIndicator: (id: string) => boolean
53
+ setRendererEnabled: (name: string, enabled: boolean) => void
54
+ dataManager: ChartDataManager
55
+ }, _next: ChartModeHandler | null): void {
56
+ }
57
+ }
@@ -0,0 +1,95 @@
1
+ import type { ChartModeHandler } from './types'
2
+ import type { Pane, VisibleRange } from '../layout/pane'
3
+ import type { ChartDataManager } from '../data/chartDataManager'
4
+
5
+ export class TimeShareMode implements ChartModeHandler {
6
+ readonly debugName = 'TimeShare'
7
+
8
+ readonly allowPan = false
9
+ readonly allowZoom = false
10
+ readonly allowVerticalScroll = false
11
+ readonly allowRightAxisScale = false
12
+ readonly useIndicatorScheduler = false
13
+
14
+ computeContentWidth(
15
+ _dataLength: number,
16
+ leftBufferWidth: number,
17
+ viewWidth: number,
18
+ _opt: { kWidth: number; kGap: number },
19
+ _dpr: number,
20
+ ): number | null {
21
+ return leftBufferWidth + Math.max(viewWidth, 1)
22
+ }
23
+
24
+ computeKWidth(
25
+ dataLength: number,
26
+ viewWidth: number,
27
+ dpr: number,
28
+ ): { kWidth: number; kGap: number } | null {
29
+ if (dataLength <= 0 || viewWidth <= 0) return null
30
+
31
+ const kGapPx = 1
32
+ const totalGapPx = (dataLength + 1) * kGapPx
33
+ const availablePx = Math.max(1, viewWidth * dpr - totalGapPx)
34
+ let kWidthPx = Math.max(1, Math.floor(availablePx / dataLength))
35
+
36
+ return {
37
+ kWidth: kWidthPx / dpr,
38
+ kGap: kGapPx / dpr,
39
+ }
40
+ }
41
+
42
+ updatePaneRange(
43
+ pane: Pane,
44
+ range: VisibleRange,
45
+ dm: ChartDataManager,
46
+ _mergedIndicatorRange?: { min: number; max: number } | null,
47
+ ): void {
48
+ const tsData = dm.getTimeShareData()
49
+ const end = Math.min(range.end, tsData.length)
50
+ if (tsData.length === 0) return
51
+
52
+ const baseline = tsData[0]?.price ?? 0
53
+ if (baseline === 0) return
54
+
55
+ pane.yAxis.setScaleType('percent')
56
+ pane.yAxis.setBasePrice(baseline)
57
+
58
+ let maxAbsPct = 0
59
+ for (let i = Math.max(0, range.start); i < end; i++) {
60
+ const p = tsData[i]?.price
61
+ if (p !== undefined && Number.isFinite(p)) {
62
+ const pct = Math.abs((p - baseline) / baseline) * 100
63
+ if (pct > maxAbsPct) maxAbsPct = pct
64
+ }
65
+ }
66
+ if (maxAbsPct <= 0) return
67
+
68
+ const padding = Math.max(maxAbsPct * 0.1, 0.5)
69
+ const displayPct = maxAbsPct + padding
70
+ const minPrice = baseline * (1 - displayPct / 100)
71
+ const maxPrice = baseline * (1 + displayPct / 100)
72
+ pane.yAxis.setRange({ maxPrice, minPrice })
73
+ }
74
+
75
+ onActivate(chart: {
76
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
77
+ disableMainIndicator: (id: string) => boolean
78
+ setRendererEnabled: (name: string, enabled: boolean) => void
79
+ dataManager: ChartDataManager
80
+ currentPeriod: string
81
+ }, _prev: ChartModeHandler | null): void {
82
+ chart.enableMainIndicator('timeShare')
83
+ chart.setRendererEnabled('candle', false)
84
+ }
85
+
86
+ onDeactivate(chart: {
87
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
88
+ disableMainIndicator: (id: string) => boolean
89
+ setRendererEnabled: (name: string, enabled: boolean) => void
90
+ dataManager: ChartDataManager
91
+ }, _next: ChartModeHandler | null): void {
92
+ chart.disableMainIndicator('timeShare')
93
+ chart.setRendererEnabled('candle', true)
94
+ }
95
+ }
@@ -0,0 +1,63 @@
1
+ import type { Pane } from '../layout/pane'
2
+ import type { ChartDataManager } from '../data/chartDataManager'
3
+ import type { VisibleRange } from '../layout/pane'
4
+
5
+ export interface ChartModeHandler {
6
+ readonly debugName: string
7
+
8
+ /** 是否允许水平拖拽平移 */
9
+ readonly allowPan: boolean
10
+
11
+ /** 是否允许缩放(滚轮/捏合/API) */
12
+ readonly allowZoom: boolean
13
+
14
+ /** 是否允许主图垂直滚动 */
15
+ readonly allowVerticalScroll: boolean
16
+
17
+ /** 是否允许右轴价格缩放 */
18
+ readonly allowRightAxisScale: boolean
19
+
20
+ /** 是否使用指标调度器(计算 MA/BOLL 等技术指标) */
21
+ readonly useIndicatorScheduler: boolean
22
+
23
+ /** 计算内容宽度(CSS px)。返回 null 走标准可滚动计算 */
24
+ computeContentWidth(
25
+ dataLength: number,
26
+ leftBufferWidth: number,
27
+ viewWidth: number,
28
+ opt: { kWidth: number; kGap: number },
29
+ dpr: number,
30
+ ): number | null
31
+
32
+ /** 计算 K 线宽度/间距。返回 null 走标准缩放计算 */
33
+ computeKWidth(
34
+ dataLength: number,
35
+ viewWidth: number,
36
+ dpr: number,
37
+ ): { kWidth: number; kGap: number } | null
38
+
39
+ /** 更新 Pane 的价格范围 */
40
+ updatePaneRange(
41
+ pane: Pane,
42
+ range: VisibleRange,
43
+ dm: ChartDataManager,
44
+ mergedIndicatorRange?: { min: number; max: number } | null,
45
+ ): void
46
+
47
+ /** 激活时调用 */
48
+ onActivate(chart: {
49
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
50
+ disableMainIndicator: (id: string) => boolean
51
+ setRendererEnabled: (name: string, enabled: boolean) => void
52
+ dataManager: ChartDataManager
53
+ currentPeriod: string
54
+ }, prev: ChartModeHandler | null): void
55
+
56
+ /** 停用时调用 */
57
+ onDeactivate(chart: {
58
+ enableMainIndicator: (id: string, params?: Record<string, number | boolean | string>) => boolean
59
+ disableMainIndicator: (id: string) => boolean
60
+ setRendererEnabled: (name: string, enabled: boolean) => void
61
+ dataManager: ChartDataManager
62
+ }, next: ChartModeHandler | null): void
63
+ }
@@ -5,16 +5,19 @@ export type PaneRendererDom = {
5
5
  mainCanvas: HTMLCanvasElement // 主画布:K线、指标、网格
6
6
  overlayCanvas: HTMLCanvasElement // 覆盖层:十字线、Tooltip(透明)
7
7
  yAxisCanvas: HTMLCanvasElement // Y轴刻度
8
+ leftYAxisCanvas?: HTMLCanvasElement // 左侧Y轴刻度
8
9
  }
9
10
 
10
11
  export type PaneRendererContexts = {
11
12
  mainCtx: CanvasRenderingContext2D | null
12
13
  overlayCtx: CanvasRenderingContext2D | null
13
14
  yAxisCtx: CanvasRenderingContext2D | null
15
+ leftAxisCtx: CanvasRenderingContext2D | null
14
16
  }
15
17
 
16
18
  export type PaneRendererOptions = {
17
19
  rightAxisWidth: number
20
+ leftAxisWidth: number
18
21
  yPaddingPx: number
19
22
  priceLabelWidth?: number
20
23
  }
@@ -70,11 +73,34 @@ export class PaneRenderer {
70
73
  mainCtx: this.dom.mainCanvas.getContext('2d'),
71
74
  overlayCtx: this.dom.overlayCanvas.getContext('2d'),
72
75
  yAxisCtx: this.dom.yAxisCanvas.getContext('2d'),
76
+ leftAxisCtx: this.dom.leftYAxisCanvas?.getContext('2d') ?? null,
73
77
  }
74
78
  }
75
79
  return this.contexts
76
80
  }
77
81
 
82
+ private static resizeCanvas(
83
+ canvas: HTMLCanvasElement,
84
+ widthPx: number,
85
+ heightPx: number,
86
+ dpr: number,
87
+ ): void {
88
+ if (canvas.width !== widthPx) {
89
+ canvas.width = widthPx
90
+ }
91
+ if (canvas.height !== heightPx) {
92
+ canvas.height = heightPx
93
+ }
94
+ const cssW = `${widthPx / dpr}px`
95
+ if (canvas.style.width !== cssW) {
96
+ canvas.style.width = cssW
97
+ }
98
+ const cssH = `${heightPx / dpr}px`
99
+ if (canvas.style.height !== cssH) {
100
+ canvas.style.height = cssH
101
+ }
102
+ }
103
+
78
104
  getWebGL(): PaneRendererWebGLHandles {
79
105
  return this.webgl
80
106
  }
@@ -102,58 +128,23 @@ export class PaneRenderer {
102
128
 
103
129
  // Main Canvas
104
130
  const mainWidth = Math.round(width * dpr)
105
- if (mainCanvas.width !== mainWidth) {
106
- mainCanvas.width = mainWidth
107
- }
108
-
109
131
  const mainHeight = Math.round(height * dpr)
110
- if (mainCanvas.height !== mainHeight) {
111
- mainCanvas.height = mainHeight
112
- }
113
-
114
- const mainCssWidth = `${mainWidth / dpr}px`
115
- if (mainCanvas.style.width !== mainCssWidth) {
116
- mainCanvas.style.width = mainCssWidth
117
- }
118
-
119
- const mainCssHeight = `${mainHeight / dpr}px`
120
- if (mainCanvas.style.height !== mainCssHeight) {
121
- mainCanvas.style.height = mainCssHeight
122
- }
132
+ PaneRenderer.resizeCanvas(mainCanvas, mainWidth, mainHeight, dpr)
123
133
 
124
134
  // Overlay Canvas - 与 Main Canvas 相同尺寸
125
- if (overlayCanvas.width !== mainWidth) {
126
- overlayCanvas.width = mainWidth
127
- }
128
- if (overlayCanvas.height !== mainHeight) {
129
- overlayCanvas.height = mainHeight
130
- }
131
- if (overlayCanvas.style.width !== mainCssWidth) {
132
- overlayCanvas.style.width = mainCssWidth
133
- }
134
- if (overlayCanvas.style.height !== mainCssHeight) {
135
- overlayCanvas.style.height = mainCssHeight
136
- }
135
+ PaneRenderer.resizeCanvas(overlayCanvas, mainWidth, mainHeight, dpr)
137
136
 
138
137
  // YAxis Canvas
139
138
  const yAxisWidth = Math.round(canvasYAxisWidth * dpr)
140
- if (yAxisCanvas.width !== yAxisWidth) {
141
- yAxisCanvas.width = yAxisWidth
142
- }
143
-
144
- const yAxisHeight = Math.round(height * dpr)
145
- if (yAxisCanvas.height !== yAxisHeight) {
146
- yAxisCanvas.height = yAxisHeight
147
- }
148
-
149
- const yAxisCssWidth = `${yAxisWidth / dpr}px`
150
- if (yAxisCanvas.style.width !== yAxisCssWidth) {
151
- yAxisCanvas.style.width = yAxisCssWidth
152
- }
153
-
154
- const yAxisCssHeight = `${yAxisHeight / dpr}px`
155
- if (yAxisCanvas.style.height !== yAxisCssHeight) {
156
- yAxisCanvas.style.height = yAxisCssHeight
139
+ PaneRenderer.resizeCanvas(yAxisCanvas, yAxisWidth, Math.round(height * dpr), dpr)
140
+
141
+ // Left YAxis Canvas
142
+ const leftCanvas = this.dom.leftYAxisCanvas
143
+ if (leftCanvas) {
144
+ const fallbackLeftAxisWidth = this.opt.leftAxisWidth
145
+ const leftParentWidth = leftCanvas.parentElement?.clientWidth ?? 0
146
+ const canvasLeftAxisWidth = leftParentWidth > 0 ? leftParentWidth : fallbackLeftAxisWidth
147
+ PaneRenderer.resizeCanvas(leftCanvas, Math.round(Math.max(canvasLeftAxisWidth, 0) * dpr), Math.round(height * dpr), dpr)
157
148
  }
158
149
 
159
150
  this.webgl.candleSurface?.resize(width, height, dpr)