@363045841yyt/klinechart-core 0.8.6 → 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 (490) 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 +49 -2
  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 +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 +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 +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 +87 -17
  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/lastPrice.d.ts.map +1 -1
  309. package/dist/engine/renderers/lastPrice.js +7 -2
  310. package/dist/engine/renderers/lastPrice.js.map +1 -1
  311. package/dist/engine/renderers/leftYAxis.d.ts +11 -0
  312. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
  313. package/dist/engine/renderers/leftYAxis.js +67 -0
  314. package/dist/engine/renderers/leftYAxis.js.map +1 -0
  315. package/dist/engine/renderers/subVolume.d.ts +1 -13
  316. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  317. package/dist/engine/renderers/subVolume.js +1 -1
  318. package/dist/engine/renderers/subVolume.js.map +1 -1
  319. package/dist/engine/renderers/timeAxis.d.ts +0 -2
  320. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  321. package/dist/engine/renderers/timeAxis.js +4 -1
  322. package/dist/engine/renderers/timeAxis.js.map +1 -1
  323. package/dist/engine/renderers/timeShare.d.ts +3 -0
  324. package/dist/engine/renderers/timeShare.d.ts.map +1 -0
  325. package/dist/engine/renderers/timeShare.js +260 -0
  326. package/dist/engine/renderers/timeShare.js.map +1 -0
  327. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  328. package/dist/engine/renderers/yAxis.js +9 -1
  329. package/dist/engine/renderers/yAxis.js.map +1 -1
  330. package/dist/engine/scale/price.d.ts +0 -7
  331. package/dist/engine/scale/price.d.ts.map +1 -1
  332. package/dist/engine/scale/price.js +3 -2
  333. package/dist/engine/scale/price.js.map +1 -1
  334. package/dist/engine/theme/fonts.d.ts +0 -2
  335. package/dist/engine/theme/fonts.d.ts.map +1 -1
  336. package/dist/engine/theme/fonts.js +1 -1
  337. package/dist/engine/theme/fonts.js.map +1 -1
  338. package/dist/engine/utils/klineConfig.d.ts.map +1 -1
  339. package/dist/engine/utils/klineConfig.js +1 -5
  340. package/dist/engine/utils/klineConfig.js.map +1 -1
  341. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  342. package/dist/engine/viewport/chartViewportManager.js +6 -5
  343. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  344. package/dist/plugin/types.d.ts +1 -0
  345. package/dist/plugin/types.d.ts.map +1 -1
  346. package/dist/plugin/types.js.map +1 -1
  347. package/dist/semantic/types.d.ts +1 -1
  348. package/dist/semantic/types.d.ts.map +1 -1
  349. package/dist/tokens/theme-base.d.ts +5 -0
  350. package/dist/tokens/theme-base.d.ts.map +1 -0
  351. package/dist/tokens/theme-base.js +31 -0
  352. package/dist/tokens/theme-base.js.map +1 -0
  353. package/dist/tokens/theme-china.d.ts.map +1 -1
  354. package/dist/tokens/theme-china.js +3 -0
  355. package/dist/tokens/theme-china.js.map +1 -1
  356. package/dist/tokens/theme-dark.d.ts.map +1 -1
  357. package/dist/tokens/theme-dark.js +11 -30
  358. package/dist/tokens/theme-dark.js.map +1 -1
  359. package/dist/tokens/theme-light.d.ts.map +1 -1
  360. package/dist/tokens/theme-light.js +11 -30
  361. package/dist/tokens/theme-light.js.map +1 -1
  362. package/dist/tokens/types.d.ts +7 -0
  363. package/dist/tokens/types.d.ts.map +1 -1
  364. package/dist/types/price.d.ts +8 -0
  365. package/dist/types/price.d.ts.map +1 -1
  366. package/dist/types/price.js +4 -0
  367. package/dist/types/price.js.map +1 -1
  368. package/dist/utils/dateFormat.d.ts +5 -42
  369. package/dist/utils/dateFormat.d.ts.map +1 -1
  370. package/dist/utils/dateFormat.js +24 -4
  371. package/dist/utils/dateFormat.js.map +1 -1
  372. package/dist/utils/kLineDraw/axis.d.ts +9 -28
  373. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  374. package/dist/utils/kLineDraw/axis.js +33 -58
  375. package/dist/utils/kLineDraw/axis.js.map +1 -1
  376. package/dist/utils/volumePrice.d.ts +0 -40
  377. package/dist/utils/volumePrice.d.ts.map +1 -1
  378. package/dist/utils/volumePrice.js +2 -2
  379. package/dist/utils/volumePrice.js.map +1 -1
  380. package/dist/version.d.ts +1 -1
  381. package/dist/version.js +1 -1
  382. package/package.json +1 -1
  383. package/src/config/chartSettings.ts +9 -1
  384. package/src/controllers/createChartController.ts +52 -2
  385. package/src/controllers/types.ts +36 -17
  386. package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
  387. package/src/data-fetchers/baostock.ts +1 -1
  388. package/src/data-fetchers/dataBuffer.ts +48 -11
  389. package/src/data-fetchers/dataBufferTypes.ts +11 -0
  390. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
  391. package/src/data-fetchers/gotdx/gotdx.ts +6 -0
  392. package/src/data-fetchers/gotdx.ts +45 -7
  393. package/src/data-fetchers/hundred-mock.ts +1 -1
  394. package/src/data-fetchers/index.ts +10 -20
  395. package/src/data-fetchers/router.ts +12 -1
  396. package/src/data-fetchers/thousand-mock.ts +1 -1
  397. package/src/data-fetchers/timeShareBuffer.ts +92 -0
  398. package/src/data-fetchers/tradingview.ts +2 -2
  399. package/src/data-fetchers/types.ts +15 -2
  400. package/src/engine/__tests__/chart.dpr.test.ts +1 -0
  401. package/src/engine/chart.ts +157 -7
  402. package/src/engine/chartTypes.ts +3 -0
  403. package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
  404. package/src/engine/controller/interaction.ts +80 -28
  405. package/src/engine/data/chartDataManager.ts +557 -214
  406. package/src/engine/draw/pixelAlign.ts +1 -1
  407. package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
  408. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
  409. package/src/engine/indicators/calculators.ts +83 -233
  410. package/src/engine/indicators/chartIndicatorManager.ts +3 -2
  411. package/src/engine/indicators/macdState.ts +1 -1
  412. package/src/engine/indicators/registerBuiltins.ts +1 -0
  413. package/src/engine/indicators/rsiState.ts +1 -1
  414. package/src/engine/indicators/scheduler.ts +1 -7
  415. package/src/engine/layout/chartPaneLayout.ts +26 -6
  416. package/src/engine/modes/kLineMode.ts +57 -0
  417. package/src/engine/modes/timeShareMode.ts +95 -0
  418. package/src/engine/modes/types.ts +63 -0
  419. package/src/engine/paneRenderer.ts +37 -46
  420. package/src/engine/render/chartRenderer.ts +93 -20
  421. package/src/engine/renderers/Indicator/atr.ts +4 -29
  422. package/src/engine/renderers/Indicator/boll.ts +3 -24
  423. package/src/engine/renderers/Indicator/cci.ts +9 -27
  424. package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
  425. package/src/engine/renderers/Indicator/cmf.ts +3 -22
  426. package/src/engine/renderers/Indicator/dema.ts +5 -26
  427. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  428. package/src/engine/renderers/Indicator/ene.ts +3 -24
  429. package/src/engine/renderers/Indicator/expma.ts +2 -2
  430. package/src/engine/renderers/Indicator/fastk.ts +12 -95
  431. package/src/engine/renderers/Indicator/fib.ts +2 -2
  432. package/src/engine/renderers/Indicator/hma.ts +5 -26
  433. package/src/engine/renderers/Indicator/hv.ts +3 -23
  434. package/src/engine/renderers/Indicator/ichimoku.ts +3 -3
  435. package/src/engine/renderers/Indicator/kama.ts +5 -26
  436. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  437. package/src/engine/renderers/Indicator/kst.ts +3 -3
  438. package/src/engine/renderers/Indicator/ma.ts +1 -1
  439. package/src/engine/renderers/Indicator/macd.ts +4 -21
  440. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +127 -2
  441. package/src/engine/renderers/Indicator/mfi.ts +3 -22
  442. package/src/engine/renderers/Indicator/mom.ts +9 -30
  443. package/src/engine/renderers/Indicator/obv.ts +3 -21
  444. package/src/engine/renderers/Indicator/parkinson.ts +3 -23
  445. package/src/engine/renderers/Indicator/pivot.ts +2 -2
  446. package/src/engine/renderers/Indicator/pvt.ts +3 -21
  447. package/src/engine/renderers/Indicator/roc.ts +4 -23
  448. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  449. package/src/engine/renderers/Indicator/sar.ts +3 -3
  450. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
  451. package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
  452. package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
  453. package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
  454. package/src/engine/renderers/Indicator/stoch.ts +6 -71
  455. package/src/engine/renderers/Indicator/structure.ts +2 -2
  456. package/src/engine/renderers/Indicator/supertrend.ts +3 -3
  457. package/src/engine/renderers/Indicator/tema.ts +5 -26
  458. package/src/engine/renderers/Indicator/trix.ts +3 -3
  459. package/src/engine/renderers/Indicator/vma.ts +3 -22
  460. package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
  461. package/src/engine/renderers/Indicator/vwap.ts +3 -21
  462. package/src/engine/renderers/Indicator/wma.ts +5 -26
  463. package/src/engine/renderers/Indicator/wmsr.ts +9 -30
  464. package/src/engine/renderers/Indicator/zones.ts +2 -2
  465. package/src/engine/renderers/candle.ts +1 -1
  466. package/src/engine/renderers/comparisonLine.ts +1 -0
  467. package/src/engine/renderers/extremaMarkers.ts +1 -0
  468. package/src/engine/renderers/lastPrice.ts +5 -2
  469. package/src/engine/renderers/leftYAxis.ts +77 -0
  470. package/src/engine/renderers/subVolume.ts +3 -3
  471. package/src/engine/renderers/timeAxis.ts +16 -13
  472. package/src/engine/renderers/timeShare.ts +271 -0
  473. package/src/engine/renderers/yAxis.ts +9 -1
  474. package/src/engine/scale/price.ts +2 -2
  475. package/src/engine/theme/fonts.ts +1 -1
  476. package/src/engine/utils/klineConfig.ts +1 -5
  477. package/src/engine/viewport/chartViewportManager.ts +6 -5
  478. package/src/plugin/types.ts +1 -0
  479. package/src/semantic/types.ts +1 -1
  480. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +14 -0
  481. package/src/tokens/theme-base.ts +36 -0
  482. package/src/tokens/theme-china.ts +4 -0
  483. package/src/tokens/theme-dark.ts +12 -32
  484. package/src/tokens/theme-light.ts +13 -33
  485. package/src/tokens/types.ts +9 -0
  486. package/src/types/price.ts +13 -0
  487. package/src/utils/dateFormat.ts +27 -4
  488. package/src/utils/kLineDraw/axis.ts +40 -107
  489. package/src/utils/volumePrice.ts +2 -2
  490. package/src/version.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
2
2
  import { RENDERER_PRIORITY } from '../../../plugin'
3
3
  import { resolveThemeColors } from '../../../tokens'
4
- import { alignToPhysicalPixelCenter } from '../../draw/pixelAlign'
4
+ import { createDashedLineRenderer } from './shared/dashedLines'
5
5
  import type { STOCHRenderState } from '../../indicators/stochState'
6
6
  import { createSTOCHStateKey, EMPTY_STOCH_STATE } from '../../indicators/stochState'
7
7
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
@@ -14,7 +14,7 @@ import type { KLineData } from '../../../types/price'
14
14
 
15
15
  type LinePoint = { x: number; y: number }
16
16
 
17
- export interface STOCHRendererOptions {
17
+ interface STOCHRendererOptions {
18
18
  /** 目标 pane ID(默认 'sub') */
19
19
  paneId?: string
20
20
  }
@@ -36,7 +36,7 @@ function getSTOCHStateKey(host: PluginHost | null, paneId: string): string | nul
36
36
  /**
37
37
  * 创建 STOCH 渲染器插件
38
38
  */
39
- export function createSTOCHRendererPlugin(options: STOCHRendererOptions = {}): RendererPluginWithHost {
39
+ function createSTOCHRendererPlugin(options: STOCHRendererOptions = {}): RendererPluginWithHost {
40
40
  const { paneId = 'sub' } = options
41
41
  let pluginHost: PluginHost | null = null
42
42
 
@@ -50,9 +50,7 @@ export function createSTOCHRendererPlugin(options: STOCHRendererOptions = {}): R
50
50
  let cachedDPoints: LinePoint[] = []
51
51
 
52
52
  // 离屏 Canvas 缓存虚线背景线 (80/20)
53
- let offscreenCanvas: HTMLCanvasElement | null = null
54
- let offscreenCtx: CanvasRenderingContext2D | null = null
55
- let cachedDashedLinesKey = ''
53
+ const dashedLines = createDashedLineRenderer()
56
54
 
57
55
  function clearLineCache() {
58
56
  cachedKey = ''
@@ -60,56 +58,6 @@ export function createSTOCHRendererPlugin(options: STOCHRendererOptions = {}): R
60
58
  cachedDPoints = []
61
59
  }
62
60
 
63
- function getOffscreenCanvas(width: number, height: number): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } {
64
- if (!offscreenCanvas || offscreenCanvas.width !== width || offscreenCanvas.height !== height) {
65
- offscreenCanvas = document.createElement('canvas')
66
- offscreenCanvas.width = width
67
- offscreenCanvas.height = height
68
- offscreenCtx = offscreenCanvas.getContext('2d')!
69
- cachedDashedLinesKey = ''
70
- }
71
- return { canvas: offscreenCanvas, ctx: offscreenCtx! }
72
- }
73
-
74
- function buildDashedLinesKey(
75
- paneWidth: number,
76
- paneHeight: number,
77
- displayMin: number,
78
- displayMax: number,
79
- dpr: number
80
- ): string {
81
- return `${paneWidth}|${paneHeight}|${displayMin.toFixed(4)}|${displayMax.toFixed(4)}|${dpr}`
82
- }
83
-
84
- function renderDashedLinesToOffscreen(
85
- ctx: CanvasRenderingContext2D,
86
- paneWidth: number,
87
- paneHeight: number,
88
- displayMin: number,
89
- displayMax: number,
90
- dpr: number
91
- ): void {
92
- const displayValueRange = displayMax - displayMin || 1
93
- const y80 = alignToPhysicalPixelCenter(paneHeight - (80 - displayMin) / displayValueRange * paneHeight, dpr)
94
- const y20 = alignToPhysicalPixelCenter(paneHeight - (20 - displayMin) / displayValueRange * paneHeight, dpr)
95
-
96
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)
97
- ctx.save()
98
- ctx.scale(dpr, dpr)
99
-
100
- ctx.strokeStyle = 'rgba(0, 0, 0, 0.1)'
101
- ctx.lineWidth = 1
102
- ctx.setLineDash([4, 4])
103
- ctx.beginPath()
104
- ctx.moveTo(0, y80)
105
- ctx.lineTo(paneWidth, y80)
106
- ctx.moveTo(0, y20)
107
- ctx.lineTo(paneWidth, y20)
108
- ctx.stroke()
109
-
110
- ctx.restore()
111
- }
112
-
113
61
  function buildSTOCHCacheKey(
114
62
  range: { start: number; end: number },
115
63
  kLineCenters: number[],
@@ -175,20 +123,7 @@ const { ctx, pane, range, scrollLeft, dpr, kLineCenters, lineWebGLSurface } = co
175
123
 
176
124
  const paneWidth = context.paneWidth
177
125
  const paneHeight = pane.height
178
- const dashedLinesKey = buildDashedLinesKey(paneWidth, paneHeight, displayMin, displayMax, dpr)
179
-
180
- if (cachedDashedLinesKey !== dashedLinesKey) {
181
- cachedDashedLinesKey = dashedLinesKey
182
- const { ctx: offCtx } = getOffscreenCanvas(
183
- Math.ceil(paneWidth * dpr),
184
- Math.ceil(paneHeight * dpr)
185
- )
186
- renderDashedLinesToOffscreen(offCtx, paneWidth, paneHeight, displayMin, displayMax, dpr)
187
- }
188
-
189
- if (offscreenCanvas) {
190
- ctx.drawImage(offscreenCanvas, 0, 0, paneWidth, paneHeight)
191
- }
126
+ dashedLines.render(ctx, paneWidth, paneHeight, displayMin, displayMax, dpr)
192
127
 
193
128
  // 确定绘制范围
194
129
  const drawStart = Math.max(range.start, params.n + params.m - 2)
@@ -319,7 +254,7 @@ function drawSTOCHLinesWithCanvas2D(
319
254
  /**
320
255
  * 获取 STOCH 标题信息(供 paneTitle 使用)
321
256
  */
322
- export function getSTOCHTitleInfo(
257
+ function getSTOCHTitleInfo(
323
258
  _data: KLineData[],
324
259
  index: number | null,
325
260
  params: Record<string, number | boolean | string>,
@@ -27,7 +27,7 @@ function getStructureStateKey(host: PluginHost | null, paneId: string): string |
27
27
  return resolveStateKey(meta.stateKey, paneId)
28
28
  }
29
29
 
30
- export function createStructureRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
30
+ function createStructureRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
31
31
  const { paneId = 'sub_Structure' } = options
32
32
  let pluginHost: PluginHost | null = null
33
33
 
@@ -113,7 +113,7 @@ export function createStructureRendererPlugin(options: { paneId?: string } = {})
113
113
  }
114
114
  }
115
115
 
116
- export function getStructureTitleInfo(
116
+ function getStructureTitleInfo(
117
117
  _data: KLineData[],
118
118
  index: number | null,
119
119
  params: Record<string, number | boolean | string>,
@@ -10,7 +10,7 @@ import type { IndicatorScheduler, SuperTrendSchedulerConfig } from '../../indica
10
10
  import { calcSuperTrendData } from '../../indicators/calculators'
11
11
  import { createValuePointVisibleStateComposer } from '../../indicators/visibleStateComposers'
12
12
 
13
- export interface SuperTrendRendererOptions {
13
+ interface SuperTrendRendererOptions {
14
14
  paneId?: string
15
15
  }
16
16
 
@@ -28,7 +28,7 @@ function getSuperTrendStateKey(host: PluginHost | null, paneId: string): string
28
28
  return resolveStateKey(meta.stateKey, paneId)
29
29
  }
30
30
 
31
- export function createSuperTrendRendererPlugin(options: SuperTrendRendererOptions = {}): RendererPluginWithHost {
31
+ function createSuperTrendRendererPlugin(options: SuperTrendRendererOptions = {}): RendererPluginWithHost {
32
32
  const { paneId = 'sub_SuperTrend' } = options
33
33
  let pluginHost: PluginHost | null = null
34
34
 
@@ -100,7 +100,7 @@ export function createSuperTrendRendererPlugin(options: SuperTrendRendererOption
100
100
  }
101
101
  }
102
102
 
103
- export function getSuperTrendTitleInfo(
103
+ function getSuperTrendTitleInfo(
104
104
  _data: KLineData[],
105
105
  index: number | null,
106
106
  params: Record<string, number | boolean | string>,
@@ -1,10 +1,10 @@
1
1
  import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
2
- import type { KLineData } from '../../../types/price'
2
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
3
3
  import { RENDERER_PRIORITY } from '../../../plugin'
4
4
  import type { TEMARenderState } from '../../indicators/temaState'
5
5
  import { createTEMAStateKey, EMPTY_TEMA_STATE } from '../../indicators/temaState'
6
6
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
7
- import { resolveStateKey, type TitleInfo, type TitleValueItem, type GetTitleInfoFn } from '../../indicators/indicatorMetadata'
7
+ import { resolveStateKey } from '../../indicators/indicatorMetadata'
8
8
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
9
9
  import type { IndicatorScheduler, TEMASchedulerConfig } from '../../indicators/scheduler'
10
10
  import { calcTEMAData } from '../../indicators/calculators'
@@ -13,7 +13,7 @@ const TEMA_COLOR = '#d946ef'
13
13
 
14
14
  type Point = { x: number; y: number }
15
15
 
16
- export interface TEMARendererOptions {
16
+ interface TEMARendererOptions {
17
17
  paneId?: string
18
18
  }
19
19
 
@@ -31,7 +31,7 @@ function getTEMAStateKey(host: PluginHost | null, paneId: string): string | null
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createTEMARendererPlugin(options: TEMARendererOptions = {}): RendererPluginWithHost {
34
+ function createTEMARendererPlugin(options: TEMARendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -122,28 +122,7 @@ export function createTEMARendererPlugin(options: TEMARendererOptions = {}): Ren
122
122
  }
123
123
  }
124
124
 
125
- export const getTEMATitleInfo: GetTitleInfoFn = (
126
- _data: KLineData[],
127
- index: number | null,
128
- _params: Record<string, number | boolean | string>,
129
- pluginHost: PluginHost,
130
- paneId: string,
131
- ): TitleInfo | null => {
132
- if (index === null) return null
133
-
134
- const stateKey = createTEMAStateKey(paneId)
135
- const state = pluginHost?.getSharedState<TEMARenderState>(stateKey)
136
- if (!state || state.visibleMin > state.visibleMax) return null
137
-
138
- const value = state.series[index]
139
- if (value === undefined) return null
140
-
141
- return {
142
- name: 'TEMA',
143
- params: [state.params.period],
144
- values: [{ label: 'TEMA', value, color: '#d946ef' }],
145
- }
146
- }
125
+ const getTEMATitleInfo = createSingleLineTitleInfo({ createStateKey: createTEMAStateKey, name: 'TEMA', getParams: (p) => [p.period as number], color: TEMA_COLOR })
147
126
 
148
127
  @Indicator({
149
128
  name: 'tema',
@@ -17,7 +17,7 @@ const SIGNAL_COLOR = '#f59e0b'
17
17
 
18
18
  type Point = { x: number; y: number }
19
19
 
20
- export interface TRIXRendererOptions { paneId?: string }
20
+ interface TRIXRendererOptions { paneId?: string }
21
21
 
22
22
  function getTRIXStateKey(host: PluginHost | null, paneId: string): string | null {
23
23
  const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
@@ -33,7 +33,7 @@ function getTRIXStateKey(host: PluginHost | null, paneId: string): string | null
33
33
  return resolveStateKey(meta.stateKey, paneId)
34
34
  }
35
35
 
36
- export function createTRIXRendererPlugin(options: TRIXRendererOptions = {}): RendererPluginWithHost {
36
+ function createTRIXRendererPlugin(options: TRIXRendererOptions = {}): RendererPluginWithHost {
37
37
  const { paneId = 'sub_TRIX' } = options
38
38
  let pluginHost: PluginHost | null = null
39
39
 
@@ -148,7 +148,7 @@ function drawLine(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
148
148
  ctx.stroke()
149
149
  }
150
150
 
151
- export function getTRIXTitleInfo(
151
+ function getTRIXTitleInfo(
152
152
  _data: KLineData[],
153
153
  index: number | null,
154
154
  params: Record<string, number | boolean | string>,
@@ -3,8 +3,7 @@ import { RENDERER_PRIORITY } from '../../../plugin'
3
3
  import type { VMARenderState } from '../../indicators/vmaState'
4
4
  import { createVMAStateKey } from '../../indicators/vmaState'
5
5
  import { EMPTY_VMA_STATE } from '../../indicators/vmaState'
6
- import type { TitleInfo } from '../../indicators/indicatorMetadata'
7
- import type { KLineData } from '../../../types/price'
6
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
8
7
  import { createNonNegativeSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
9
8
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
10
9
  import { resolveStateKey } from '../../indicators/indicatorMetadata'
@@ -29,7 +28,7 @@ function getVMAStateKey(host: PluginHost | null, paneId: string): string | null
29
28
  return resolveStateKey(meta.stateKey, paneId)
30
29
  }
31
30
 
32
- export function createVMARendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
31
+ function createVMARendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
33
32
  const { paneId = 'sub_VMA' } = options
34
33
  let pluginHost: PluginHost | null = null
35
34
 
@@ -113,25 +112,7 @@ export function createVMARendererPlugin(options: { paneId?: string } = {}): Rend
113
112
  }
114
113
  }
115
114
 
116
- export function getVMATitleInfo(
117
- _data: KLineData[],
118
- index: number | null,
119
- params: Record<string, number | boolean | string>,
120
- host: PluginHost,
121
- paneId: string,
122
- ): TitleInfo | null {
123
- if (index === null) return null
124
- const period = (params.period as number) ?? 5
125
- const state = host.getSharedState<VMARenderState>(createVMAStateKey(paneId))
126
- const value = state?.series[index]
127
- if (value === undefined) return null
128
-
129
- return {
130
- name: 'VMA',
131
- params: [period],
132
- values: [{ label: 'VMA', value, color: VMA_COLOR }],
133
- }
134
- }
115
+ const getVMATitleInfo = createSingleLineTitleInfo({ createStateKey: createVMAStateKey, name: 'VMA', defaultPeriod: 5, color: VMA_COLOR })
135
116
 
136
117
  @Indicator({
137
118
  name: 'vma',
@@ -31,7 +31,7 @@ function getVolumeProfileStateKey(host: PluginHost | null, paneId: string): stri
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createVolumeProfileRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
34
+ function createVolumeProfileRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
35
35
  const { paneId = 'sub_VolumeProfile' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -118,7 +118,7 @@ const VP_POC_COLOR = '#8b5cf6'
118
118
  const VP_VAH_COLOR = '#6366f1'
119
119
  const VP_VAL_COLOR = '#818cf8'
120
120
 
121
- export function getVolumeProfileTitleInfo(
121
+ function getVolumeProfileTitleInfo(
122
122
  _data: KLineData[],
123
123
  index: number | null,
124
124
  params: Record<string, number | boolean | string>,
@@ -7,8 +7,7 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
7
7
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
8
8
  import type { IndicatorScheduler, VWAPSchedulerConfig } from '../../indicators/scheduler'
9
9
  import { calcVWAPData } from '../../indicators/calculators'
10
- import type { TitleInfo } from '../../indicators/indicatorMetadata'
11
- import type { KLineData } from '../../../types/price'
10
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
12
11
 
13
12
  const VWAP_COLOR = '#ec4899'
14
13
 
@@ -28,7 +27,7 @@ function getVWAPStateKey(host: PluginHost | null, paneId: string): string | null
28
27
  return resolveStateKey(meta.stateKey, paneId)
29
28
  }
30
29
 
31
- export function createVWAPRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
30
+ function createVWAPRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
31
  const { paneId = 'sub_VWAP' } = options
33
32
  let pluginHost: PluginHost | null = null
34
33
 
@@ -111,24 +110,7 @@ export function createVWAPRendererPlugin(options: { paneId?: string } = {}): Ren
111
110
  }
112
111
  }
113
112
 
114
- export function getVWAPTitleInfo(
115
- _data: KLineData[],
116
- index: number | null,
117
- _params: Record<string, number | boolean | string>,
118
- host: PluginHost,
119
- paneId: string,
120
- ): TitleInfo | null {
121
- if (index === null) return null
122
- const state = host.getSharedState<VWAPRenderState>(createVWAPStateKey(paneId))
123
- const value = state?.series[index]
124
- if (value === undefined) return null
125
-
126
- return {
127
- name: 'VWAP',
128
- params: [],
129
- values: [{ label: 'VWAP', value, color: VWAP_COLOR }],
130
- }
131
- }
113
+ const getVWAPTitleInfo = createSingleLineTitleInfo({ createStateKey: createVWAPStateKey, name: 'VWAP', color: VWAP_COLOR })
132
114
 
133
115
  @Indicator({
134
116
  name: 'vwap',
@@ -1,10 +1,10 @@
1
1
  import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
2
- import type { KLineData } from '../../../types/price'
2
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
3
3
  import { RENDERER_PRIORITY } from '../../../plugin'
4
4
  import type { WMARenderState } from '../../indicators/wmaState'
5
5
  import { createWMAStateKey, EMPTY_WMA_STATE } from '../../indicators/wmaState'
6
6
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
7
- import { resolveStateKey, type TitleInfo, type TitleValueItem, type GetTitleInfoFn } from '../../indicators/indicatorMetadata'
7
+ import { resolveStateKey } from '../../indicators/indicatorMetadata'
8
8
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
9
9
  import type { IndicatorScheduler, WMASchedulerConfig } from '../../indicators/scheduler'
10
10
  import { calcWMAData } from '../../indicators/calculators'
@@ -13,7 +13,7 @@ const WMA_COLOR = '#10b981'
13
13
 
14
14
  type Point = { x: number; y: number }
15
15
 
16
- export interface WMARendererOptions {
16
+ interface WMARendererOptions {
17
17
  paneId?: string
18
18
  }
19
19
 
@@ -31,7 +31,7 @@ function getWMAStateKey(host: PluginHost | null, paneId: string): string | null
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createWMARendererPlugin(options: WMARendererOptions = {}): RendererPluginWithHost {
34
+ function createWMARendererPlugin(options: WMARendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -122,28 +122,7 @@ export function createWMARendererPlugin(options: WMARendererOptions = {}): Rende
122
122
  }
123
123
  }
124
124
 
125
- export const getWMATitleInfo: GetTitleInfoFn = (
126
- _data: KLineData[],
127
- index: number | null,
128
- _params: Record<string, number | boolean | string>,
129
- pluginHost: PluginHost,
130
- paneId: string,
131
- ): TitleInfo | null => {
132
- if (index === null) return null
133
-
134
- const stateKey = createWMAStateKey(paneId)
135
- const state = pluginHost?.getSharedState<WMARenderState>(stateKey)
136
- if (!state || state.visibleMin > state.visibleMax) return null
137
-
138
- const value = state.series[index]
139
- if (value === undefined) return null
140
-
141
- return {
142
- name: 'WMA',
143
- params: [state.params.period],
144
- values: [{ label: 'WMA', value, color: '#10b981' }],
145
- }
146
- }
125
+ const getWMATitleInfo = createSingleLineTitleInfo({ createStateKey: createWMAStateKey, name: 'WMA', getParams: (p) => [p.period as number], color: WMA_COLOR })
147
126
 
148
127
  @Indicator({
149
128
  name: 'wma',
@@ -10,11 +10,11 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
10
10
  import type { IndicatorScheduler, WMSRSchedulerConfig } from '../../indicators/scheduler'
11
11
  import { createWmsrScaleRendererPlugin } from './scale/wmsr_scale'
12
12
  import { calcWMSRData } from '../../indicators/calculators'
13
- import type { KLineData } from '../../../types/price'
13
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
14
14
 
15
15
  type LinePoint = { x: number; y: number }
16
16
 
17
- export interface WMSRRendererOptions {
17
+ interface WMSRRendererOptions {
18
18
  /** 目标 pane ID(默认 'sub') */
19
19
  paneId?: string
20
20
  }
@@ -36,7 +36,7 @@ function getWMSRStateKey(host: PluginHost | null, paneId: string): string | null
36
36
  /**
37
37
  * 创建 WMSR 渲染器插件
38
38
  */
39
- export function createWMSRRendererPlugin(options: WMSRRendererOptions = {}): RendererPluginWithHost {
39
+ function createWMSRRendererPlugin(options: WMSRRendererOptions = {}): RendererPluginWithHost {
40
40
  const { paneId = 'sub' } = options
41
41
  let pluginHost: PluginHost | null = null
42
42
 
@@ -290,33 +290,12 @@ function drawWMSRLineWithCanvas2D(
290
290
  ctx.restore()
291
291
  }
292
292
 
293
- /**
294
- * 获取 WMSR 标题信息(供 paneTitle 使用)
295
- */
296
- export function getWMSRTitleInfo(
297
- _data: KLineData[],
298
- index: number | null,
299
- params: Record<string, number | boolean | string>,
300
- pluginHost: PluginHost,
301
- paneId: string,
302
- ): { name: string; params: number[]; values: Array<{ label: string; value: number; color: string }> } | null {
303
- if (index === null) return null
304
- const period = (params.period as number) ?? 14
305
- const colors = resolveThemeColors('light')
306
- const state = pluginHost.getSharedState<WMSRRenderState>(createWMSRStateKey(paneId))
307
- if (!state) return null
308
-
309
- const wmsr = state.series[index]
310
- if (wmsr === undefined) return null
311
-
312
- return {
313
- name: 'WMSR',
314
- params: [period],
315
- values: [
316
- { label: 'WMSR', value: wmsr, color: colors.wmsr.wmsr },
317
- ],
318
- }
319
- }
293
+ const getWMSRTitleInfo = createSingleLineTitleInfo({
294
+ createStateKey: createWMSRStateKey,
295
+ name: 'WMSR',
296
+ defaultPeriod: 14,
297
+ getColor: (colors) => colors.wmsr.wmsr,
298
+ })
320
299
 
321
300
  @Indicator({
322
301
  name: 'wmsr',
@@ -23,7 +23,7 @@ function getZonesStateKey(host: PluginHost | null, paneId: string): string | nul
23
23
  return resolveStateKey(meta.stateKey, paneId)
24
24
  }
25
25
 
26
- export function createZonesRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
26
+ function createZonesRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
27
27
  const { paneId = 'main' } = options
28
28
  let pluginHost: PluginHost | null = null
29
29
 
@@ -90,7 +90,7 @@ export function createZonesRendererPlugin(options: { paneId?: string } = {}): Re
90
90
  }
91
91
  }
92
92
 
93
- export const getZonesTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
93
+ const getZonesTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
94
94
  if (index === null) return null
95
95
 
96
96
  const stateKey = createZonesStateKey(paneId)
@@ -342,7 +342,7 @@ function drawVolumePriceMarkers(
342
342
  * @param gap - 三角形与K线的间距,默认为4
343
343
  * @param dpr - 设备像素比
344
344
  */
345
- export function drawVolumePriceMarker(
345
+ function drawVolumePriceMarker(
346
346
  ctx: CanvasRenderingContext2D,
347
347
  x: number,
348
348
  y: number,
@@ -14,6 +14,7 @@ export function createComparisonLineRenderer(): RendererPlugin {
14
14
  priority: RENDERER_PRIORITY.MAIN + 2,
15
15
 
16
16
  draw(context: RenderContext) {
17
+ if (context.period === 'timeshare') return
17
18
  const mainData = context.data as KLineData[]
18
19
  const comparisonData = context.comparisonData
19
20
  const comparisonSymbols = context.comparisonSymbols ?? []
@@ -108,6 +108,7 @@ export function createExtremaMarkersRendererPlugin(): RendererPlugin {
108
108
  priority: RENDERER_PRIORITY.OVERLAY,
109
109
 
110
110
  draw(context: RenderContext) {
111
+ if (context.period === 'timeshare') return
111
112
  const { ctx, pane, data, range, scrollLeft, dpr, paneWidth, kLineCenters } = context
112
113
  const colors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
113
114
  const klineData = data as KLineData[]
@@ -35,6 +35,7 @@ export function createLastPriceLabelRegistrarPlugin(): RendererPlugin {
35
35
  priority: RENDERER_PRIORITY.LAST_PRICE_LABEL,
36
36
 
37
37
  draw(context: RenderContext) {
38
+ if (context.period === 'timeshare') return
38
39
  const colors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
39
40
  const info = getLastPriceInfo(context)
40
41
  if (!info) return
@@ -68,7 +69,8 @@ export function createLastPriceLineRendererPlugin(): RendererPlugin {
68
69
  priority: RENDERER_PRIORITY.LAST_PRICE_LABEL,
69
70
 
70
71
  draw(context: RenderContext) {
71
- const { ctx, scrollLeft, dpr, kLinePositions, paneWidth } = context
72
+ if (context.period === 'timeshare') return
73
+ const { ctx, scrollLeft, dpr, paneWidth } = context
72
74
  const colors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
73
75
  const info = getLastPriceInfo(context)
74
76
  if (!info) return
@@ -78,7 +80,8 @@ export function createLastPriceLineRendererPlugin(): RendererPlugin {
78
80
  ctx.save()
79
81
  ctx.translate(-scrollLeft, 0)
80
82
 
81
- const startX = kLinePositions[0] ?? 0
83
+ // 最新价水平线横贯整个视口(从左边缘到右边缘)
84
+ const startX = scrollLeft
82
85
  const endX = paneWidth + scrollLeft
83
86
 
84
87
  ctx.strokeStyle = colors.price.lastPrice
@@ -0,0 +1,77 @@
1
+ import type { RendererPlugin, RenderContext } from '../../plugin'
2
+ import { RENDERER_PRIORITY, GLOBAL_PANE_ID } from '../../plugin'
3
+ import { drawScaleTicks } from '../renderers/Indicator/scale/indicator_scale'
4
+ import { drawCrosshairPriceLabel } from '../../utils/kLineDraw/axis'
5
+ import { resolveThemeColors } from '../../tokens'
6
+ import type { ScaleType } from '../utils/tickPosition'
7
+
8
+ export function createLeftYAxisRendererPlugin(options: {
9
+ axisWidth: number
10
+ yPaddingPx: number
11
+ getCrosshair?: () => { y: number; price: number; activePaneId: string | null } | null
12
+ }): RendererPlugin {
13
+ return {
14
+ name: 'leftYAxis',
15
+ version: '1.0.0',
16
+ description: '左侧Y轴价格刻度渲染器',
17
+ debugName: '左侧Y轴',
18
+ paneId: GLOBAL_PANE_ID,
19
+ priority: RENDERER_PRIORITY.SYSTEM_YAXIS,
20
+
21
+ draw(context: RenderContext) {
22
+ const { leftAxisCtx, pane, dpr, period } = context
23
+ if (!leftAxisCtx) return
24
+
25
+ const axisWidth = leftAxisCtx.canvas ? (leftAxisCtx.canvas.width / dpr) : 0
26
+ if (axisWidth <= 0) return
27
+
28
+ // 分时模式始终显示左轴(线性),不受设置约束
29
+ if (period !== 'timeshare') {
30
+ const leftType = context.settings?.leftAxisType as string | undefined
31
+ if (!leftType || leftType === 'none') return
32
+ }
33
+
34
+ const tokenColors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
35
+ const displayRange = pane.yAxis.getDisplayRange()
36
+ const { minPrice, maxPrice } = displayRange
37
+
38
+ if (!pane.capabilities.showPriceAxisTicks) return
39
+
40
+ const scaleType: ScaleType = period === 'timeshare' ? 'linear' : ((context.settings?.leftAxisType as ScaleType) ?? 'linear')
41
+
42
+ drawScaleTicks({
43
+ tickColor: tokenColors.text.secondary,
44
+ ctx: leftAxisCtx,
45
+ dpr,
46
+ axisWidth,
47
+ height: pane.height,
48
+ paddingTop: pane.yAxis.getPaddingTop(),
49
+ paddingBottom: pane.yAxis.getPaddingBottom(),
50
+ valueMin: minPrice,
51
+ valueMax: maxPrice,
52
+ isMain: true,
53
+ decimals: 2,
54
+ hideEdgeTicks: false,
55
+ scaleType,
56
+ textAlign: 'center',
57
+ })
58
+
59
+ const crosshair = options.getCrosshair?.()
60
+ if (!crosshair || crosshair.activePaneId !== pane.id || crosshair.price === null) return
61
+
62
+ drawCrosshairPriceLabel(leftAxisCtx, {
63
+ x: 0,
64
+ y: pane.top,
65
+ width: axisWidth,
66
+ height: pane.height,
67
+ crosshairY: crosshair.y,
68
+ priceRange: displayRange,
69
+ yPaddingPx: options.yPaddingPx,
70
+ dpr,
71
+ fontSize: 12,
72
+ priceOffset: 0,
73
+ price: crosshair.price,
74
+ }, context.theme, context.isAsiaMarket, context.colorPresetSettings)
75
+ },
76
+ }
77
+ }
@@ -8,12 +8,12 @@ import { resolveStateKey } from '../indicators/indicatorMetadata'
8
8
  import type { IndicatorScheduler } from '../indicators/scheduler'
9
9
  import { createVolumeScaleRendererPlugin } from './Indicator/scale/volume_scale'
10
10
 
11
- export interface VolumeRendererOptions {
11
+ interface VolumeRendererOptions {
12
12
  /** 目标 pane ID(默认 'sub') */
13
13
  paneId?: string
14
14
  }
15
15
 
16
- export interface VolumeRenderState extends BaseIndicatorState {
16
+ interface VolumeRenderState extends BaseIndicatorState {
17
17
  valueMin: number
18
18
  valueMax: number
19
19
  }
@@ -35,7 +35,7 @@ function getVolumeStateKey(host: PluginHost | null, paneId: string): string | nu
35
35
  /**
36
36
  * 创建副图成交量渲染器插件
37
37
  */
38
- export function createVolumeRendererPlugin(options: VolumeRendererOptions = {}): RendererPluginWithHost {
38
+ function createVolumeRendererPlugin(options: VolumeRendererOptions = {}): RendererPluginWithHost {
39
39
  const { paneId = 'sub' } = options
40
40
  let pluginHost: PluginHost | null = null
41
41