@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
@@ -0,0 +1,81 @@
1
+ import { alignToPhysicalPixelCenter } from '../../../draw/pixelAlign'
2
+
3
+ export function createDashedLineRenderer() {
4
+ let offscreenCanvas: HTMLCanvasElement | null = null
5
+ let offscreenCtx: CanvasRenderingContext2D | null = null
6
+ let cachedDashedLinesKey = ''
7
+
8
+ function getOffscreenCanvas(width: number, height: number): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } {
9
+ if (!offscreenCanvas || offscreenCanvas.width !== width || offscreenCanvas.height !== height) {
10
+ offscreenCanvas = document.createElement('canvas')
11
+ offscreenCanvas.width = width
12
+ offscreenCanvas.height = height
13
+ offscreenCtx = offscreenCanvas.getContext('2d')!
14
+ cachedDashedLinesKey = ''
15
+ }
16
+ return { canvas: offscreenCanvas, ctx: offscreenCtx! }
17
+ }
18
+
19
+ function buildKey(
20
+ paneWidth: number,
21
+ paneHeight: number,
22
+ displayMin: number,
23
+ displayMax: number,
24
+ dpr: number
25
+ ): string {
26
+ return `${paneWidth}|${paneHeight}|${displayMin.toFixed(4)}|${displayMax.toFixed(4)}|${dpr}`
27
+ }
28
+
29
+ function renderToOffscreen(
30
+ ctx: CanvasRenderingContext2D,
31
+ paneWidth: number,
32
+ paneHeight: number,
33
+ displayMin: number,
34
+ displayMax: number,
35
+ dpr: number
36
+ ): void {
37
+ const displayValueRange = displayMax - displayMin || 1
38
+ const y80 = alignToPhysicalPixelCenter(paneHeight - (80 - displayMin) / displayValueRange * paneHeight, dpr)
39
+ const y20 = alignToPhysicalPixelCenter(paneHeight - (20 - displayMin) / displayValueRange * paneHeight, dpr)
40
+
41
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)
42
+ ctx.save()
43
+ ctx.scale(dpr, dpr)
44
+
45
+ ctx.strokeStyle = 'rgba(0, 0, 0, 0.1)'
46
+ ctx.lineWidth = 1
47
+ ctx.setLineDash([4, 4])
48
+ ctx.beginPath()
49
+ ctx.moveTo(0, y80)
50
+ ctx.lineTo(paneWidth, y80)
51
+ ctx.moveTo(0, y20)
52
+ ctx.lineTo(paneWidth, y20)
53
+ ctx.stroke()
54
+
55
+ ctx.restore()
56
+ }
57
+
58
+ function render(
59
+ ctx: CanvasRenderingContext2D,
60
+ paneWidth: number,
61
+ paneHeight: number,
62
+ displayMin: number,
63
+ displayMax: number,
64
+ dpr: number
65
+ ): void {
66
+ const key = buildKey(paneWidth, paneHeight, displayMin, displayMax, dpr)
67
+ if (cachedDashedLinesKey !== key) {
68
+ cachedDashedLinesKey = key
69
+ const { ctx: offCtx } = getOffscreenCanvas(
70
+ Math.ceil(paneWidth * dpr),
71
+ Math.ceil(paneHeight * dpr)
72
+ )
73
+ renderToOffscreen(offCtx, paneWidth, paneHeight, displayMin, displayMax, dpr)
74
+ }
75
+ if (offscreenCanvas) {
76
+ ctx.drawImage(offscreenCanvas, 0, 0, paneWidth, paneHeight)
77
+ }
78
+ }
79
+
80
+ return { render }
81
+ }
@@ -0,0 +1,52 @@
1
+ import type { PluginHost } from '../../../../plugin'
2
+ import type { KLineData } from '../../../../types/price'
3
+ import type { GetTitleInfoFn, TitleInfo } from '../../../indicators/indicatorMetadata'
4
+ import { resolveThemeColors } from '../../../../tokens'
5
+
6
+ interface SingleSeriesState {
7
+ timestamp: number
8
+ series: (number | undefined)[]
9
+ params?: Record<string, unknown>
10
+ }
11
+
12
+ interface SingleLineTitleInfoConfig {
13
+ createStateKey: (paneId: string) => string
14
+ name: string
15
+ label?: string
16
+ defaultPeriod?: number
17
+ getColor?: (colors: ReturnType<typeof resolveThemeColors>) => string
18
+ color?: string
19
+ getParams?: (stateParams: Record<string, unknown>) => number[]
20
+ }
21
+
22
+ export function createSingleLineTitleInfo(config: SingleLineTitleInfoConfig): GetTitleInfoFn {
23
+ const { createStateKey, name, label = name, defaultPeriod, getColor, color, getParams } = config
24
+
25
+ return (
26
+ _data: KLineData[],
27
+ index: number | null,
28
+ _params: Record<string, number | boolean | string>,
29
+ pluginHost: PluginHost,
30
+ paneId: string,
31
+ ): TitleInfo | null => {
32
+ if (index === null) return null
33
+
34
+ const stateKey = createStateKey(paneId)
35
+ const state = pluginHost.getSharedState<SingleSeriesState>(stateKey)
36
+ if (!state) return null
37
+
38
+ const val = state.series[index]
39
+ if (val === undefined) return null
40
+
41
+ const resolvedColor = color ?? (getColor ? getColor(resolveThemeColors('light')) : 'inherit')
42
+ const resolvedParams = getParams
43
+ ? getParams(state.params as Record<string, unknown>)
44
+ : defaultPeriod !== undefined ? [(_params.period as number) ?? defaultPeriod] : []
45
+
46
+ return {
47
+ name,
48
+ params: resolvedParams,
49
+ values: [{ label, value: val, color: resolvedColor }],
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,23 @@
1
+ import type { RenderContext } from '../../../../plugin'
2
+
3
+ export function getRgbaAlpha(color: string): number {
4
+ const match = color.match(/^rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)$/i)
5
+ if (!match) return 1
6
+ const alpha = Number(match[1])
7
+ return Number.isFinite(alpha) ? alpha : 1
8
+ }
9
+
10
+ export function toOpaqueRgba(color: string): string {
11
+ return color.replace(/,\s*[\d.]+\s*\)$/i, ', 1)')
12
+ }
13
+
14
+ export function compositeLineSurface(
15
+ context: RenderContext,
16
+ surface: NonNullable<RenderContext['lineWebGLSurface']>,
17
+ alpha = 1
18
+ ): void {
19
+ surface.compositeTo(context.ctx, {
20
+ alpha,
21
+ imageSmoothingEnabled: false,
22
+ })
23
+ }
@@ -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)