@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
@@ -2,8 +2,7 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../..
2
2
  import { RENDERER_PRIORITY } from '../../../plugin'
3
3
  import type { MFIRenderState } from '../../indicators/mfiState'
4
4
  import { createMFIStateKey, EMPTY_MFI_STATE } from '../../indicators/mfiState'
5
- import type { TitleInfo } from '../../indicators/indicatorMetadata'
6
- import type { KLineData } from '../../../types/price'
5
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
7
6
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
8
7
  import { createFixedRangeSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
9
8
  import { resolveStateKey } from '../../indicators/indicatorMetadata'
@@ -28,7 +27,7 @@ function getMFIStateKey(host: PluginHost | null, paneId: string): string | null
28
27
  return resolveStateKey(meta.stateKey, paneId)
29
28
  }
30
29
 
31
- export function createMFIRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
30
+ function createMFIRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
31
  const { paneId = 'sub_MFI' } = options
33
32
  let pluginHost: PluginHost | null = null
34
33
 
@@ -130,25 +129,7 @@ export function createMFIRendererPlugin(options: { paneId?: string } = {}): Rend
130
129
  }
131
130
  }
132
131
 
133
- export function getMFITitleInfo(
134
- _data: KLineData[],
135
- index: number | null,
136
- params: Record<string, number | boolean | string>,
137
- host: PluginHost,
138
- paneId: string,
139
- ): TitleInfo | null {
140
- if (index === null) return null
141
- const period = (params.period as number) ?? 14
142
- const state = host.getSharedState<MFIRenderState>(createMFIStateKey(paneId))
143
- const value = state?.series[index]
144
- if (value === undefined) return null
145
-
146
- return {
147
- name: 'MFI',
148
- params: [period],
149
- values: [{ label: 'MFI', value, color: MFI_COLOR }],
150
- }
151
- }
132
+ const getMFITitleInfo = createSingleLineTitleInfo({ createStateKey: createMFIStateKey, name: 'MFI', defaultPeriod: 14, color: MFI_COLOR })
152
133
 
153
134
  @Indicator({
154
135
  name: 'mfi',
@@ -11,11 +11,11 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
11
11
  import type { IndicatorScheduler, MOMSchedulerConfig } from '../../indicators/scheduler'
12
12
  import { createMomScaleRendererPlugin } from './scale/mom_scale'
13
13
  import { calcMOMData } from '../../indicators/calculators'
14
- import type { KLineData } from '../../../types/price'
14
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
15
15
 
16
16
  type LinePoint = { x: number; y: number }
17
17
 
18
- export interface MOMRendererOptions {
18
+ interface MOMRendererOptions {
19
19
  /** 目标 pane ID(默认 'sub') */
20
20
  paneId?: string
21
21
  }
@@ -37,7 +37,7 @@ function getMOMStateKey(host: PluginHost | null, paneId: string): string | null
37
37
  /**
38
38
  * 创建 MOM 渲染器插件
39
39
  */
40
- export function createMOMRendererPlugin(options: MOMRendererOptions = {}): RendererPluginWithHost {
40
+ function createMOMRendererPlugin(options: MOMRendererOptions = {}): RendererPluginWithHost {
41
41
  const { paneId = 'sub' } = options
42
42
  let pluginHost: PluginHost | null = null
43
43
 
@@ -274,33 +274,12 @@ function drawMOMLineWithCanvas2D(
274
274
  ctx.restore()
275
275
  }
276
276
 
277
- /**
278
- * 获取 MOM 标题信息(供 paneTitle 使用)
279
- */
280
- export function getMOMTitleInfo(
281
- _data: KLineData[],
282
- index: number | null,
283
- params: Record<string, number | boolean | string>,
284
- pluginHost: PluginHost,
285
- paneId: string,
286
- ): { name: string; params: number[]; values: Array<{ label: string; value: number; color: string }> } | null {
287
- if (index === null) return null
288
- const period = (params.period as number) ?? 10
289
- const colors = resolveThemeColors('light')
290
- const state = pluginHost.getSharedState<MOMRenderState>(createMOMStateKey(paneId))
291
- if (!state) return null
292
-
293
- const mom = state.series[index]
294
- if (mom === undefined) return null
295
-
296
- return {
297
- name: 'MOM',
298
- params: [period],
299
- values: [
300
- { label: 'MOM', value: mom, color: colors.mom.mom },
301
- ],
302
- }
303
- }
277
+ const getMOMTitleInfo = createSingleLineTitleInfo({
278
+ createStateKey: createMOMStateKey,
279
+ name: 'MOM',
280
+ defaultPeriod: 10,
281
+ getColor: (colors) => colors.mom.mom,
282
+ })
304
283
 
305
284
  @Indicator({
306
285
  name: 'mom',
@@ -7,8 +7,7 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
7
7
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
8
8
  import type { IndicatorScheduler, OBVSchedulerConfig } from '../../indicators/scheduler'
9
9
  import { calcOBVData } 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 OBV_COLOR = '#16a34a'
14
13
 
@@ -28,7 +27,7 @@ function getOBVStateKey(host: PluginHost | null, paneId: string): string | null
28
27
  return resolveStateKey(meta.stateKey, paneId)
29
28
  }
30
29
 
31
- export function createOBVRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
30
+ function createOBVRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
31
  const { paneId = 'sub_OBV' } = options
33
32
  let pluginHost: PluginHost | null = null
34
33
 
@@ -111,24 +110,7 @@ export function createOBVRendererPlugin(options: { paneId?: string } = {}): Rend
111
110
  }
112
111
  }
113
112
 
114
- export function getOBVTitleInfo(
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<OBVRenderState>(createOBVStateKey(paneId))
123
- const value = state?.series[index]
124
- if (value === undefined) return null
125
-
126
- return {
127
- name: 'OBV',
128
- params: [],
129
- values: [{ label: 'OBV', value, color: OBV_COLOR }],
130
- }
131
- }
113
+ const getOBVTitleInfo = createSingleLineTitleInfo({ createStateKey: createOBVStateKey, name: 'OBV', color: OBV_COLOR })
132
114
 
133
115
  @Indicator({
134
116
  name: 'obv',
@@ -9,8 +9,7 @@ import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
9
9
  import { resolveStateKey } from '../../indicators/indicatorMetadata'
10
10
  import type { IndicatorScheduler, ParkinsonSchedulerConfig } from '../../indicators/scheduler'
11
11
  import { calcParkinsonData } from '../../indicators/calculators'
12
- import type { TitleInfo } from '../../indicators/indicatorMetadata'
13
- import type { KLineData } from '../../../types/price'
12
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
14
13
 
15
14
  const PARKINSON_COLOR = '#0891b2'
16
15
 
@@ -30,7 +29,7 @@ function getParkinsonStateKey(host: PluginHost | null, paneId: string): string |
30
29
  return resolveStateKey(meta.stateKey, paneId)
31
30
  }
32
31
 
33
- export function createParkinsonRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
+ function createParkinsonRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
34
33
  const { paneId = 'sub_Parkinson' } = options
35
34
  let pluginHost: PluginHost | null = null
36
35
 
@@ -114,26 +113,7 @@ export function createParkinsonRendererPlugin(options: { paneId?: string } = {})
114
113
  }
115
114
  }
116
115
 
117
- export function getParkinsonTitleInfo(
118
- _data: KLineData[],
119
- index: number | null,
120
- params: Record<string, number | boolean | string>,
121
- host: PluginHost,
122
- paneId: string,
123
- ): TitleInfo | null {
124
- if (index === null) return null
125
- const period = (params.period as number) ?? 20
126
- const annualizationFactor = (params.annualizationFactor as number) ?? 252
127
- const state = host.getSharedState<ParkinsonRenderState>(createParkinsonStateKey(paneId))
128
- const value = state?.series[index]
129
- if (value === undefined) return null
130
-
131
- return {
132
- name: 'Parkinson',
133
- params: [period, annualizationFactor],
134
- values: [{ label: 'Parkinson', value, color: PARKINSON_COLOR }],
135
- }
136
- }
116
+ const getParkinsonTitleInfo = createSingleLineTitleInfo({ createStateKey: createParkinsonStateKey, name: 'Parkinson', getParams: (p) => [(p.period as number) ?? 20, (p.annualizationFactor as number) ?? 252], color: PARKINSON_COLOR })
137
117
 
138
118
  @Indicator({
139
119
  name: 'parkinson',
@@ -28,7 +28,7 @@ function getPivotStateKey(host: PluginHost | null, paneId: string): string | nul
28
28
  return resolveStateKey(meta.stateKey, paneId)
29
29
  }
30
30
 
31
- export function createPivotRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
31
+ function createPivotRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
32
  const { paneId = 'main' } = options
33
33
  let pluginHost: PluginHost | null = null
34
34
 
@@ -116,7 +116,7 @@ function drawStep(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
116
116
  ctx.stroke()
117
117
  }
118
118
 
119
- export const getPivotTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
119
+ const getPivotTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
120
120
  if (index === null || index < 0) return null
121
121
 
122
122
  const stateKey = createPivotStateKey(paneId)
@@ -7,8 +7,7 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
7
7
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
8
8
  import type { IndicatorScheduler, PVTSchedulerConfig } from '../../indicators/scheduler'
9
9
  import { calcPVTData } 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 PVT_COLOR = '#a855f7'
14
13
 
@@ -28,7 +27,7 @@ function getPVTStateKey(host: PluginHost | null, paneId: string): string | null
28
27
  return resolveStateKey(meta.stateKey, paneId)
29
28
  }
30
29
 
31
- export function createPVTRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
30
+ function createPVTRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
31
  const { paneId = 'sub_PVT' } = options
33
32
  let pluginHost: PluginHost | null = null
34
33
 
@@ -111,24 +110,7 @@ export function createPVTRendererPlugin(options: { paneId?: string } = {}): Rend
111
110
  }
112
111
  }
113
112
 
114
- export function getPVTTitleInfo(
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<PVTRenderState>(createPVTStateKey(paneId))
123
- const value = state?.series[index]
124
- if (value === undefined) return null
125
-
126
- return {
127
- name: 'PVT',
128
- params: [],
129
- values: [{ label: 'PVT', value, color: PVT_COLOR }],
130
- }
131
- }
113
+ const getPVTTitleInfo = createSingleLineTitleInfo({ createStateKey: createPVTStateKey, name: 'PVT', color: PVT_COLOR })
132
114
 
133
115
  @Indicator({
134
116
  name: 'pvt',
@@ -8,14 +8,13 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
8
8
  import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
9
9
  import type { IndicatorScheduler, ROCSchedulerConfig } from '../../indicators/scheduler'
10
10
  import { calcROCData } from '../../indicators/calculators'
11
- import type { KLineData } from '../../../types/price'
12
- import type { TitleInfo } from '../../indicators/indicatorMetadata'
11
+ import { createSingleLineTitleInfo } from './shared/titleInfo'
13
12
 
14
13
  const ROC_COLOR = '#0ea5e9'
15
14
 
16
15
  type LinePoint = { x: number; y: number }
17
16
 
18
- export interface ROCRendererOptions { paneId?: string }
17
+ interface ROCRendererOptions { paneId?: string }
19
18
 
20
19
  function getROCStateKey(host: PluginHost | null, paneId: string): string | null {
21
20
  const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
@@ -31,7 +30,7 @@ function getROCStateKey(host: PluginHost | null, paneId: string): string | null
31
30
  return resolveStateKey(meta.stateKey, paneId)
32
31
  }
33
32
 
34
- export function createROCRendererPlugin(options: ROCRendererOptions = {}): RendererPluginWithHost {
33
+ function createROCRendererPlugin(options: ROCRendererOptions = {}): RendererPluginWithHost {
35
34
  const { paneId = 'sub_ROC' } = options
36
35
  let pluginHost: PluginHost | null = null
37
36
 
@@ -132,25 +131,7 @@ export function createROCRendererPlugin(options: ROCRendererOptions = {}): Rende
132
131
  }
133
132
  }
134
133
 
135
- export function getROCTitleInfo(
136
- _data: KLineData[],
137
- index: number | null,
138
- params: Record<string, number | boolean | string>,
139
- pluginHost: PluginHost,
140
- paneId: string,
141
- ): TitleInfo | null {
142
- if (index === null) return null
143
- const period = (params.period as number) ?? 12
144
- const state = pluginHost.getSharedState<ROCRenderState>(createROCStateKey(paneId))
145
- const value = state?.series[index]
146
- if (value === undefined) return null
147
-
148
- return {
149
- name: 'ROC',
150
- params: [period],
151
- values: [{ label: 'ROC', value, color: ROC_COLOR }],
152
- }
153
- }
134
+ const getROCTitleInfo = createSingleLineTitleInfo({ createStateKey: createROCStateKey, name: 'ROC', defaultPeriod: 12, color: ROC_COLOR })
154
135
 
155
136
  @Indicator({
156
137
  name: 'roc',
@@ -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 RSIRendererOptions {
17
+ interface RSIRendererOptions {
18
18
  /** 目标 pane ID(默认 'sub') */
19
19
  paneId?: string
20
20
  }
@@ -36,7 +36,7 @@ function getRSIStateKey(host: PluginHost | null, paneId: string): string | null
36
36
  /**
37
37
  * 创建 RSI 渲染器插件
38
38
  */
39
- export function createRSIRendererPlugin(options: RSIRendererOptions = {}): RendererPluginWithHost {
39
+ function createRSIRendererPlugin(options: RSIRendererOptions = {}): RendererPluginWithHost {
40
40
  const { paneId = 'sub' } = options
41
41
  let pluginHost: PluginHost | null = null
42
42
 
@@ -298,7 +298,7 @@ const { ctx, pane, range, scrollLeft, dpr, kLineCenters, lineWebGLSurface } = co
298
298
  * 获取 RSI 标题信息(供 paneTitle 使用)
299
299
  * 从 StateStore 读取已计算的 RSI 数据
300
300
  */
301
- export function drawRSILinesWithCanvas2D(
301
+ function drawRSILinesWithCanvas2D(
302
302
  ctx: CanvasRenderingContext2D,
303
303
  scrollLeft: number,
304
304
  rsi1Points: LinePoint[],
@@ -351,7 +351,7 @@ export function drawRSILinesWithCanvas2D(
351
351
  ctx.restore()
352
352
  }
353
353
 
354
- export function getRSITitleInfo(
354
+ function getRSITitleInfo(
355
355
  _data: KLineData[],
356
356
  index: number | null,
357
357
  params: Record<string, number | boolean | string>,
@@ -13,7 +13,7 @@ import { createValuePointVisibleStateComposer } from '../../indicators/visibleSt
13
13
  const DOT_RADIUS = 1.5
14
14
  const TAU = Math.PI * 2
15
15
 
16
- export interface SARRendererOptions {
16
+ interface SARRendererOptions {
17
17
  paneId?: string
18
18
  }
19
19
 
@@ -31,7 +31,7 @@ function getSARStateKey(host: PluginHost | null, paneId: string): string | null
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createSARRendererPlugin(options: SARRendererOptions = {}): RendererPluginWithHost {
34
+ function createSARRendererPlugin(options: SARRendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -99,7 +99,7 @@ export function createSARRendererPlugin(options: SARRendererOptions = {}): Rende
99
99
  }
100
100
  }
101
101
 
102
- export function getSARTitleInfo(
102
+ function getSARTitleInfo(
103
103
  _data: KLineData[],
104
104
  index: number | null,
105
105
  params: Record<string, number | boolean | string>,
@@ -57,6 +57,8 @@ export interface DrawScaleTicksOptions {
57
57
  hideEdgeTicks?: boolean
58
58
  scaleType?: ScaleType
59
59
  formatLabel?: (value: number) => string
60
+ /** 文字对齐方式,默认 'center'。左侧轴应使用 'right' */
61
+ textAlign?: CanvasTextAlign
60
62
  }
61
63
 
62
64
  const BASELINE_MIDDLE = 'middle' as const
@@ -77,6 +79,7 @@ export function drawScaleTicks(options: DrawScaleTicksOptions & { tickColor: str
77
79
  hideEdgeTicks = true,
78
80
  scaleType = 'linear',
79
81
  formatLabel,
82
+ textAlign = 'center',
80
83
  } = options
81
84
 
82
85
  ctx.clearRect(0, 0, axisWidth, height)
@@ -84,11 +87,15 @@ export function drawScaleTicks(options: DrawScaleTicksOptions & { tickColor: str
84
87
  const font = getFont(12)
85
88
  setCanvasFont(ctx, font)
86
89
  ctx.textBaseline = BASELINE_MIDDLE
87
- ctx.textAlign = ALIGN_CENTER
90
+ ctx.textAlign = textAlign as CanvasTextAlign
88
91
  ctx.fillStyle = options.tickColor
89
92
 
90
- const centerX = axisWidth / 2
91
- const centerXPx = roundToPhysicalPixel(centerX, dpr)
93
+ const alignTo = textAlign === 'center'
94
+ ? roundToPhysicalPixel(axisWidth / 2, dpr)
95
+ : textAlign === 'right'
96
+ ? roundToPhysicalPixel(axisWidth - 4, dpr)
97
+ : roundToPhysicalPixel(4, dpr)
98
+ const textX = alignTo
92
99
 
93
100
  const positions = calculateValueTickPositions({
94
101
  height,
@@ -106,7 +113,7 @@ export function drawScaleTicks(options: DrawScaleTicksOptions & { tickColor: str
106
113
 
107
114
  for (let i = 0; i < positions.length; i++) {
108
115
  const { y, value } = positions[i]!
109
- ctx.fillText(format(value), centerXPx, alignToPhysicalPixelCenter(y, dpr))
116
+ ctx.fillText(format(value), textX, y)
110
117
  }
111
118
  }
112
119
 
@@ -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
+ }