@363045841yyt/klinechart-core 0.8.6 → 0.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/dist/config/chartSettings.d.ts +21 -2
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +9 -1
  4. package/dist/config/chartSettings.js.map +1 -1
  5. package/dist/controllers/createChartController.d.ts.map +1 -1
  6. package/dist/controllers/createChartController.js +49 -2
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/types.d.ts +34 -23
  9. package/dist/controllers/types.d.ts.map +1 -1
  10. package/dist/data-fetchers/baostock.d.ts +0 -3
  11. package/dist/data-fetchers/baostock.d.ts.map +1 -1
  12. package/dist/data-fetchers/baostock.js +0 -1
  13. package/dist/data-fetchers/baostock.js.map +1 -1
  14. package/dist/data-fetchers/dataBuffer.d.ts +13 -2
  15. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  16. package/dist/data-fetchers/dataBuffer.js +41 -7
  17. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  18. package/dist/data-fetchers/dataBufferTypes.d.ts +11 -0
  19. package/dist/data-fetchers/dataBufferTypes.d.ts.map +1 -0
  20. package/dist/data-fetchers/dataBufferTypes.js +2 -0
  21. package/dist/data-fetchers/dataBufferTypes.js.map +1 -0
  22. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts +4 -3
  23. package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
  24. package/dist/data-fetchers/fetcherDefinitionRegistry.js +9 -2
  25. package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
  26. package/dist/data-fetchers/gotdx/gotdx.d.ts +7 -0
  27. package/dist/data-fetchers/gotdx/gotdx.d.ts.map +1 -0
  28. package/dist/data-fetchers/gotdx/gotdx.js +7 -0
  29. package/dist/data-fetchers/gotdx/gotdx.js.map +1 -0
  30. package/dist/data-fetchers/gotdx.d.ts +0 -8
  31. package/dist/data-fetchers/gotdx.d.ts.map +1 -1
  32. package/dist/data-fetchers/gotdx.js +40 -3
  33. package/dist/data-fetchers/gotdx.js.map +1 -1
  34. package/dist/data-fetchers/hundred-mock.d.ts +0 -3
  35. package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
  36. package/dist/data-fetchers/hundred-mock.js +0 -1
  37. package/dist/data-fetchers/hundred-mock.js.map +1 -1
  38. package/dist/data-fetchers/index.d.ts +10 -8
  39. package/dist/data-fetchers/index.d.ts.map +1 -1
  40. package/dist/data-fetchers/index.js +8 -7
  41. package/dist/data-fetchers/index.js.map +1 -1
  42. package/dist/data-fetchers/router.d.ts +2 -0
  43. package/dist/data-fetchers/router.d.ts.map +1 -1
  44. package/dist/data-fetchers/router.js +8 -1
  45. package/dist/data-fetchers/router.js.map +1 -1
  46. package/dist/data-fetchers/thousand-mock.d.ts +0 -3
  47. package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
  48. package/dist/data-fetchers/thousand-mock.js +0 -1
  49. package/dist/data-fetchers/thousand-mock.js.map +1 -1
  50. package/dist/data-fetchers/timeShareBuffer.d.ts +27 -0
  51. package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -0
  52. package/dist/data-fetchers/timeShareBuffer.js +79 -0
  53. package/dist/data-fetchers/timeShareBuffer.js.map +1 -0
  54. package/dist/data-fetchers/tradingview.d.ts +0 -8
  55. package/dist/data-fetchers/tradingview.d.ts.map +1 -1
  56. package/dist/data-fetchers/tradingview.js +1 -2
  57. package/dist/data-fetchers/tradingview.js.map +1 -1
  58. package/dist/data-fetchers/types.d.ts +9 -1
  59. package/dist/data-fetchers/types.d.ts.map +1 -1
  60. package/dist/engine/chart.d.ts +29 -1
  61. package/dist/engine/chart.d.ts.map +1 -1
  62. package/dist/engine/chart.js +140 -5
  63. package/dist/engine/chart.js.map +1 -1
  64. package/dist/engine/chartTypes.d.ts +3 -0
  65. package/dist/engine/chartTypes.d.ts.map +1 -1
  66. package/dist/engine/controller/interaction.d.ts +6 -1
  67. package/dist/engine/controller/interaction.d.ts.map +1 -1
  68. package/dist/engine/controller/interaction.js +76 -28
  69. package/dist/engine/controller/interaction.js.map +1 -1
  70. package/dist/engine/data/chartDataManager.d.ts +38 -11
  71. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  72. package/dist/engine/data/chartDataManager.js +491 -188
  73. package/dist/engine/data/chartDataManager.js.map +1 -1
  74. package/dist/engine/draw/pixelAlign.d.ts +0 -27
  75. package/dist/engine/draw/pixelAlign.d.ts.map +1 -1
  76. package/dist/engine/draw/pixelAlign.js +1 -1
  77. package/dist/engine/draw/pixelAlign.js.map +1 -1
  78. package/dist/engine/indicators/calculators.d.ts +0 -104
  79. package/dist/engine/indicators/calculators.d.ts.map +1 -1
  80. package/dist/engine/indicators/calculators.js +57 -168
  81. package/dist/engine/indicators/calculators.js.map +1 -1
  82. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  83. package/dist/engine/indicators/chartIndicatorManager.js +3 -2
  84. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  85. package/dist/engine/indicators/macdState.d.ts +0 -5
  86. package/dist/engine/indicators/macdState.d.ts.map +1 -1
  87. package/dist/engine/indicators/macdState.js +1 -1
  88. package/dist/engine/indicators/macdState.js.map +1 -1
  89. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
  90. package/dist/engine/indicators/registerBuiltins.js +1 -0
  91. package/dist/engine/indicators/registerBuiltins.js.map +1 -1
  92. package/dist/engine/indicators/rsiState.d.ts +0 -4
  93. package/dist/engine/indicators/rsiState.d.ts.map +1 -1
  94. package/dist/engine/indicators/rsiState.js +1 -1
  95. package/dist/engine/indicators/rsiState.js.map +1 -1
  96. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  97. package/dist/engine/indicators/scheduler.js +1 -7
  98. package/dist/engine/indicators/scheduler.js.map +1 -1
  99. package/dist/engine/layout/chartPaneLayout.d.ts +2 -0
  100. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
  101. package/dist/engine/layout/chartPaneLayout.js +24 -6
  102. package/dist/engine/layout/chartPaneLayout.js.map +1 -1
  103. package/dist/engine/modes/kLineMode.d.ts +37 -0
  104. package/dist/engine/modes/kLineMode.d.ts.map +1 -0
  105. package/dist/engine/modes/kLineMode.js +22 -0
  106. package/dist/engine/modes/kLineMode.js.map +1 -0
  107. package/dist/engine/modes/timeShareMode.d.ts +37 -0
  108. package/dist/engine/modes/timeShareMode.d.ts.map +1 -0
  109. package/dist/engine/modes/timeShareMode.js +59 -0
  110. package/dist/engine/modes/timeShareMode.js.map +1 -0
  111. package/dist/engine/modes/types.d.ts +47 -0
  112. package/dist/engine/modes/types.d.ts.map +1 -0
  113. package/dist/engine/modes/types.js +2 -0
  114. package/dist/engine/modes/types.js.map +1 -0
  115. package/dist/engine/paneRenderer.d.ts +4 -0
  116. package/dist/engine/paneRenderer.d.ts.map +1 -1
  117. package/dist/engine/paneRenderer.js +27 -40
  118. package/dist/engine/paneRenderer.js.map +1 -1
  119. package/dist/engine/render/chartRenderer.d.ts +4 -23
  120. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  121. package/dist/engine/render/chartRenderer.js +87 -17
  122. package/dist/engine/render/chartRenderer.js.map +1 -1
  123. package/dist/engine/renderers/Indicator/atr.d.ts +1 -18
  124. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  125. package/dist/engine/renderers/Indicator/atr.js +3 -22
  126. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  127. package/dist/engine/renderers/Indicator/boll.d.ts +1 -4
  128. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  129. package/dist/engine/renderers/Indicator/boll.js +3 -18
  130. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  131. package/dist/engine/renderers/Indicator/cci.d.ts +1 -22
  132. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  133. package/dist/engine/renderers/Indicator/cci.js +8 -20
  134. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  135. package/dist/engine/renderers/Indicator/chaikinVol.d.ts +1 -7
  136. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  137. package/dist/engine/renderers/Indicator/chaikinVol.js +3 -16
  138. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  139. package/dist/engine/renderers/Indicator/cmf.d.ts +1 -7
  140. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  141. package/dist/engine/renderers/Indicator/cmf.js +3 -15
  142. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  143. package/dist/engine/renderers/Indicator/dema.d.ts +1 -7
  144. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  145. package/dist/engine/renderers/Indicator/dema.js +3 -17
  146. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  147. package/dist/engine/renderers/Indicator/donchian.d.ts +1 -8
  148. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  149. package/dist/engine/renderers/Indicator/donchian.js +2 -2
  150. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  151. package/dist/engine/renderers/Indicator/ene.d.ts +1 -12
  152. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  153. package/dist/engine/renderers/Indicator/ene.js +3 -18
  154. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  155. package/dist/engine/renderers/Indicator/expma.d.ts +1 -4
  156. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  157. package/dist/engine/renderers/Indicator/expma.js +2 -2
  158. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  159. package/dist/engine/renderers/Indicator/fastk.d.ts +1 -22
  160. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  161. package/dist/engine/renderers/Indicator/fastk.js +11 -64
  162. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  163. package/dist/engine/renderers/Indicator/fib.d.ts +1 -6
  164. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  165. package/dist/engine/renderers/Indicator/fib.js +2 -2
  166. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  167. package/dist/engine/renderers/Indicator/hma.d.ts +1 -7
  168. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  169. package/dist/engine/renderers/Indicator/hma.js +3 -17
  170. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  171. package/dist/engine/renderers/Indicator/hv.d.ts +1 -7
  172. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  173. package/dist/engine/renderers/Indicator/hv.js +3 -16
  174. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  175. package/dist/engine/renderers/Indicator/ichimoku.d.ts +1 -8
  176. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  177. package/dist/engine/renderers/Indicator/ichimoku.js +2 -2
  178. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  179. package/dist/engine/renderers/Indicator/kama.d.ts +1 -7
  180. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  181. package/dist/engine/renderers/Indicator/kama.js +3 -17
  182. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  183. package/dist/engine/renderers/Indicator/keltner.d.ts +1 -8
  184. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  185. package/dist/engine/renderers/Indicator/keltner.js +2 -2
  186. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  187. package/dist/engine/renderers/Indicator/kst.d.ts +1 -22
  188. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  189. package/dist/engine/renderers/Indicator/kst.js +2 -2
  190. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  191. package/dist/engine/renderers/Indicator/ma.d.ts +1 -4
  192. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  193. package/dist/engine/renderers/Indicator/ma.js +1 -1
  194. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  195. package/dist/engine/renderers/Indicator/macd.d.ts +1 -49
  196. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  197. package/dist/engine/renderers/Indicator/macd.js +2 -12
  198. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  199. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  200. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +114 -1
  201. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  202. package/dist/engine/renderers/Indicator/mfi.d.ts +1 -7
  203. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  204. package/dist/engine/renderers/Indicator/mfi.js +3 -15
  205. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  206. package/dist/engine/renderers/Indicator/mom.d.ts +1 -22
  207. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  208. package/dist/engine/renderers/Indicator/mom.js +8 -23
  209. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  210. package/dist/engine/renderers/Indicator/obv.d.ts +1 -7
  211. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  212. package/dist/engine/renderers/Indicator/obv.js +3 -14
  213. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  214. package/dist/engine/renderers/Indicator/parkinson.d.ts +1 -7
  215. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  216. package/dist/engine/renderers/Indicator/parkinson.js +3 -16
  217. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  218. package/dist/engine/renderers/Indicator/pivot.d.ts +1 -6
  219. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  220. package/dist/engine/renderers/Indicator/pivot.js +2 -2
  221. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  222. package/dist/engine/renderers/Indicator/pvt.d.ts +1 -7
  223. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  224. package/dist/engine/renderers/Indicator/pvt.js +3 -14
  225. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  226. package/dist/engine/renderers/Indicator/roc.d.ts +1 -8
  227. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  228. package/dist/engine/renderers/Indicator/roc.js +3 -15
  229. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  230. package/dist/engine/renderers/Indicator/rsi.d.ts +0 -32
  231. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  232. package/dist/engine/renderers/Indicator/rsi.js +3 -3
  233. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  234. package/dist/engine/renderers/Indicator/sar.d.ts +1 -8
  235. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  236. package/dist/engine/renderers/Indicator/sar.js +2 -2
  237. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  238. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +2 -0
  239. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
  240. package/dist/engine/renderers/Indicator/scale/indicator_scale.js +10 -6
  241. package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
  242. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts +4 -0
  243. package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts.map +1 -0
  244. package/dist/engine/renderers/Indicator/shared/dashedLines.js +50 -0
  245. package/dist/engine/renderers/Indicator/shared/dashedLines.js.map +1 -0
  246. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +14 -0
  247. package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -0
  248. package/dist/engine/renderers/Indicator/shared/titleInfo.js +25 -0
  249. package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -0
  250. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts +5 -0
  251. package/dist/engine/renderers/Indicator/shared/webglBand.d.ts.map +1 -0
  252. package/dist/engine/renderers/Indicator/shared/webglBand.js +17 -0
  253. package/dist/engine/renderers/Indicator/shared/webglBand.js.map +1 -0
  254. package/dist/engine/renderers/Indicator/stoch.d.ts +1 -22
  255. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  256. package/dist/engine/renderers/Indicator/stoch.js +5 -46
  257. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  258. package/dist/engine/renderers/Indicator/structure.d.ts +1 -7
  259. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  260. package/dist/engine/renderers/Indicator/structure.js +2 -2
  261. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  262. package/dist/engine/renderers/Indicator/supertrend.d.ts +1 -8
  263. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  264. package/dist/engine/renderers/Indicator/supertrend.js +2 -2
  265. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  266. package/dist/engine/renderers/Indicator/tema.d.ts +1 -7
  267. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  268. package/dist/engine/renderers/Indicator/tema.js +3 -17
  269. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  270. package/dist/engine/renderers/Indicator/trix.d.ts +1 -8
  271. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  272. package/dist/engine/renderers/Indicator/trix.js +2 -2
  273. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  274. package/dist/engine/renderers/Indicator/vma.d.ts +1 -7
  275. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  276. package/dist/engine/renderers/Indicator/vma.js +3 -15
  277. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  278. package/dist/engine/renderers/Indicator/volumeProfile.d.ts +1 -7
  279. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  280. package/dist/engine/renderers/Indicator/volumeProfile.js +2 -2
  281. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  282. package/dist/engine/renderers/Indicator/vwap.d.ts +1 -7
  283. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  284. package/dist/engine/renderers/Indicator/vwap.js +3 -14
  285. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  286. package/dist/engine/renderers/Indicator/wma.d.ts +1 -7
  287. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  288. package/dist/engine/renderers/Indicator/wma.js +3 -17
  289. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  290. package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -22
  291. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  292. package/dist/engine/renderers/Indicator/wmsr.js +8 -23
  293. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  294. package/dist/engine/renderers/Indicator/zones.d.ts +1 -6
  295. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  296. package/dist/engine/renderers/Indicator/zones.js +2 -2
  297. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  298. package/dist/engine/renderers/candle.d.ts +0 -16
  299. package/dist/engine/renderers/candle.d.ts.map +1 -1
  300. package/dist/engine/renderers/candle.js +1 -1
  301. package/dist/engine/renderers/candle.js.map +1 -1
  302. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  303. package/dist/engine/renderers/comparisonLine.js +2 -0
  304. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  305. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  306. package/dist/engine/renderers/extremaMarkers.js +2 -0
  307. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  308. package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
  309. package/dist/engine/renderers/lastPrice.js +7 -2
  310. package/dist/engine/renderers/lastPrice.js.map +1 -1
  311. package/dist/engine/renderers/leftYAxis.d.ts +11 -0
  312. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
  313. package/dist/engine/renderers/leftYAxis.js +67 -0
  314. package/dist/engine/renderers/leftYAxis.js.map +1 -0
  315. package/dist/engine/renderers/subVolume.d.ts +1 -13
  316. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  317. package/dist/engine/renderers/subVolume.js +1 -1
  318. package/dist/engine/renderers/subVolume.js.map +1 -1
  319. package/dist/engine/renderers/timeAxis.d.ts +0 -2
  320. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  321. package/dist/engine/renderers/timeAxis.js +4 -1
  322. package/dist/engine/renderers/timeAxis.js.map +1 -1
  323. package/dist/engine/renderers/timeShare.d.ts +3 -0
  324. package/dist/engine/renderers/timeShare.d.ts.map +1 -0
  325. package/dist/engine/renderers/timeShare.js +260 -0
  326. package/dist/engine/renderers/timeShare.js.map +1 -0
  327. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  328. package/dist/engine/renderers/yAxis.js +9 -1
  329. package/dist/engine/renderers/yAxis.js.map +1 -1
  330. package/dist/engine/scale/price.d.ts +0 -7
  331. package/dist/engine/scale/price.d.ts.map +1 -1
  332. package/dist/engine/scale/price.js +3 -2
  333. package/dist/engine/scale/price.js.map +1 -1
  334. package/dist/engine/theme/fonts.d.ts +0 -2
  335. package/dist/engine/theme/fonts.d.ts.map +1 -1
  336. package/dist/engine/theme/fonts.js +1 -1
  337. package/dist/engine/theme/fonts.js.map +1 -1
  338. package/dist/engine/utils/klineConfig.d.ts.map +1 -1
  339. package/dist/engine/utils/klineConfig.js +1 -5
  340. package/dist/engine/utils/klineConfig.js.map +1 -1
  341. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  342. package/dist/engine/viewport/chartViewportManager.js +6 -5
  343. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  344. package/dist/plugin/types.d.ts +1 -0
  345. package/dist/plugin/types.d.ts.map +1 -1
  346. package/dist/plugin/types.js.map +1 -1
  347. package/dist/semantic/types.d.ts +1 -1
  348. package/dist/semantic/types.d.ts.map +1 -1
  349. package/dist/tokens/theme-base.d.ts +5 -0
  350. package/dist/tokens/theme-base.d.ts.map +1 -0
  351. package/dist/tokens/theme-base.js +31 -0
  352. package/dist/tokens/theme-base.js.map +1 -0
  353. package/dist/tokens/theme-china.d.ts.map +1 -1
  354. package/dist/tokens/theme-china.js +3 -0
  355. package/dist/tokens/theme-china.js.map +1 -1
  356. package/dist/tokens/theme-dark.d.ts.map +1 -1
  357. package/dist/tokens/theme-dark.js +11 -30
  358. package/dist/tokens/theme-dark.js.map +1 -1
  359. package/dist/tokens/theme-light.d.ts.map +1 -1
  360. package/dist/tokens/theme-light.js +11 -30
  361. package/dist/tokens/theme-light.js.map +1 -1
  362. package/dist/tokens/types.d.ts +7 -0
  363. package/dist/tokens/types.d.ts.map +1 -1
  364. package/dist/types/price.d.ts +8 -0
  365. package/dist/types/price.d.ts.map +1 -1
  366. package/dist/types/price.js +4 -0
  367. package/dist/types/price.js.map +1 -1
  368. package/dist/utils/dateFormat.d.ts +5 -42
  369. package/dist/utils/dateFormat.d.ts.map +1 -1
  370. package/dist/utils/dateFormat.js +24 -4
  371. package/dist/utils/dateFormat.js.map +1 -1
  372. package/dist/utils/kLineDraw/axis.d.ts +9 -28
  373. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  374. package/dist/utils/kLineDraw/axis.js +33 -58
  375. package/dist/utils/kLineDraw/axis.js.map +1 -1
  376. package/dist/utils/volumePrice.d.ts +0 -40
  377. package/dist/utils/volumePrice.d.ts.map +1 -1
  378. package/dist/utils/volumePrice.js +2 -2
  379. package/dist/utils/volumePrice.js.map +1 -1
  380. package/dist/version.d.ts +1 -1
  381. package/dist/version.js +1 -1
  382. package/package.json +1 -1
  383. package/src/config/chartSettings.ts +9 -1
  384. package/src/controllers/createChartController.ts +52 -2
  385. package/src/controllers/types.ts +36 -17
  386. package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
  387. package/src/data-fetchers/baostock.ts +1 -1
  388. package/src/data-fetchers/dataBuffer.ts +48 -11
  389. package/src/data-fetchers/dataBufferTypes.ts +11 -0
  390. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
  391. package/src/data-fetchers/gotdx/gotdx.ts +6 -0
  392. package/src/data-fetchers/gotdx.ts +45 -7
  393. package/src/data-fetchers/hundred-mock.ts +1 -1
  394. package/src/data-fetchers/index.ts +10 -20
  395. package/src/data-fetchers/router.ts +12 -1
  396. package/src/data-fetchers/thousand-mock.ts +1 -1
  397. package/src/data-fetchers/timeShareBuffer.ts +92 -0
  398. package/src/data-fetchers/tradingview.ts +2 -2
  399. package/src/data-fetchers/types.ts +15 -2
  400. package/src/engine/__tests__/chart.dpr.test.ts +1 -0
  401. package/src/engine/chart.ts +157 -7
  402. package/src/engine/chartTypes.ts +3 -0
  403. package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
  404. package/src/engine/controller/interaction.ts +80 -28
  405. package/src/engine/data/chartDataManager.ts +557 -214
  406. package/src/engine/draw/pixelAlign.ts +1 -1
  407. package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
  408. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
  409. package/src/engine/indicators/calculators.ts +83 -233
  410. package/src/engine/indicators/chartIndicatorManager.ts +3 -2
  411. package/src/engine/indicators/macdState.ts +1 -1
  412. package/src/engine/indicators/registerBuiltins.ts +1 -0
  413. package/src/engine/indicators/rsiState.ts +1 -1
  414. package/src/engine/indicators/scheduler.ts +1 -7
  415. package/src/engine/layout/chartPaneLayout.ts +26 -6
  416. package/src/engine/modes/kLineMode.ts +57 -0
  417. package/src/engine/modes/timeShareMode.ts +95 -0
  418. package/src/engine/modes/types.ts +63 -0
  419. package/src/engine/paneRenderer.ts +37 -46
  420. package/src/engine/render/chartRenderer.ts +93 -20
  421. package/src/engine/renderers/Indicator/atr.ts +4 -29
  422. package/src/engine/renderers/Indicator/boll.ts +3 -24
  423. package/src/engine/renderers/Indicator/cci.ts +9 -27
  424. package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
  425. package/src/engine/renderers/Indicator/cmf.ts +3 -22
  426. package/src/engine/renderers/Indicator/dema.ts +5 -26
  427. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  428. package/src/engine/renderers/Indicator/ene.ts +3 -24
  429. package/src/engine/renderers/Indicator/expma.ts +2 -2
  430. package/src/engine/renderers/Indicator/fastk.ts +12 -95
  431. package/src/engine/renderers/Indicator/fib.ts +2 -2
  432. package/src/engine/renderers/Indicator/hma.ts +5 -26
  433. package/src/engine/renderers/Indicator/hv.ts +3 -23
  434. package/src/engine/renderers/Indicator/ichimoku.ts +3 -3
  435. package/src/engine/renderers/Indicator/kama.ts +5 -26
  436. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  437. package/src/engine/renderers/Indicator/kst.ts +3 -3
  438. package/src/engine/renderers/Indicator/ma.ts +1 -1
  439. package/src/engine/renderers/Indicator/macd.ts +4 -21
  440. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +127 -2
  441. package/src/engine/renderers/Indicator/mfi.ts +3 -22
  442. package/src/engine/renderers/Indicator/mom.ts +9 -30
  443. package/src/engine/renderers/Indicator/obv.ts +3 -21
  444. package/src/engine/renderers/Indicator/parkinson.ts +3 -23
  445. package/src/engine/renderers/Indicator/pivot.ts +2 -2
  446. package/src/engine/renderers/Indicator/pvt.ts +3 -21
  447. package/src/engine/renderers/Indicator/roc.ts +4 -23
  448. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  449. package/src/engine/renderers/Indicator/sar.ts +3 -3
  450. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
  451. package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
  452. package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
  453. package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
  454. package/src/engine/renderers/Indicator/stoch.ts +6 -71
  455. package/src/engine/renderers/Indicator/structure.ts +2 -2
  456. package/src/engine/renderers/Indicator/supertrend.ts +3 -3
  457. package/src/engine/renderers/Indicator/tema.ts +5 -26
  458. package/src/engine/renderers/Indicator/trix.ts +3 -3
  459. package/src/engine/renderers/Indicator/vma.ts +3 -22
  460. package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
  461. package/src/engine/renderers/Indicator/vwap.ts +3 -21
  462. package/src/engine/renderers/Indicator/wma.ts +5 -26
  463. package/src/engine/renderers/Indicator/wmsr.ts +9 -30
  464. package/src/engine/renderers/Indicator/zones.ts +2 -2
  465. package/src/engine/renderers/candle.ts +1 -1
  466. package/src/engine/renderers/comparisonLine.ts +1 -0
  467. package/src/engine/renderers/extremaMarkers.ts +1 -0
  468. package/src/engine/renderers/lastPrice.ts +5 -2
  469. package/src/engine/renderers/leftYAxis.ts +77 -0
  470. package/src/engine/renderers/subVolume.ts +3 -3
  471. package/src/engine/renderers/timeAxis.ts +16 -13
  472. package/src/engine/renderers/timeShare.ts +271 -0
  473. package/src/engine/renderers/yAxis.ts +9 -1
  474. package/src/engine/scale/price.ts +2 -2
  475. package/src/engine/theme/fonts.ts +1 -1
  476. package/src/engine/utils/klineConfig.ts +1 -5
  477. package/src/engine/viewport/chartViewportManager.ts +6 -5
  478. package/src/plugin/types.ts +1 -0
  479. package/src/semantic/types.ts +1 -1
  480. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +14 -0
  481. package/src/tokens/theme-base.ts +36 -0
  482. package/src/tokens/theme-china.ts +4 -0
  483. package/src/tokens/theme-dark.ts +12 -32
  484. package/src/tokens/theme-light.ts +13 -33
  485. package/src/tokens/types.ts +9 -0
  486. package/src/types/price.ts +13 -0
  487. package/src/utils/dateFormat.ts +27 -4
  488. package/src/utils/kLineDraw/axis.ts +40 -107
  489. package/src/utils/volumePrice.ts +2 -2
  490. package/src/version.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
2
2
  import { RENDERER_PRIORITY } from '../../../plugin'
3
3
  import { resolveThemeColors } from '../../../tokens'
4
- import { alignToPhysicalPixelCenter } from '../../draw/pixelAlign'
4
+ import { createDashedLineRenderer } from './shared/dashedLines'
5
5
  import type { FASTKRenderState } from '../../indicators/fastkState'
6
6
  import { createFASTKStateKey, EMPTY_FASTK_STATE } from '../../indicators/fastkState'
7
7
  import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
@@ -10,11 +10,11 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
10
10
  import type { IndicatorScheduler, FASTKSchedulerConfig } from '../../indicators/scheduler'
11
11
  import { createFastkScaleRendererPlugin } from './scale/fastk_scale'
12
12
  import { calcFASTKData } 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 FASTKRendererOptions {
17
+ interface FASTKRendererOptions {
18
18
  /** 目标 pane ID(默认 'sub') */
19
19
  paneId?: string
20
20
  }
@@ -36,7 +36,7 @@ function getFASTKStateKey(host: PluginHost | null, paneId: string): string | nul
36
36
  /**
37
37
  * 创建 FASTK 渲染器插件
38
38
  */
39
- export function createFASTKRendererPlugin(options: FASTKRendererOptions = {}): RendererPluginWithHost {
39
+ function createFASTKRendererPlugin(options: FASTKRendererOptions = {}): RendererPluginWithHost {
40
40
  const { paneId = 'sub' } = options
41
41
  let pluginHost: PluginHost | null = null
42
42
 
@@ -49,65 +49,13 @@ export function createFASTKRendererPlugin(options: FASTKRendererOptions = {}): R
49
49
  let cachedFASTKPoints: LinePoint[] = []
50
50
 
51
51
  // 离屏 Canvas 缓存虚线背景线 (80/20)
52
- let offscreenCanvas: HTMLCanvasElement | null = null
53
- let offscreenCtx: CanvasRenderingContext2D | null = null
54
- let cachedDashedLinesKey = ''
52
+ const dashedLines = createDashedLineRenderer()
55
53
 
56
54
  function clearLineCache() {
57
55
  cachedKey = ''
58
56
  cachedFASTKPoints = []
59
57
  }
60
58
 
61
- function getOffscreenCanvas(width: number, height: number): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } {
62
- if (!offscreenCanvas || offscreenCanvas.width !== width || offscreenCanvas.height !== height) {
63
- offscreenCanvas = document.createElement('canvas')
64
- offscreenCanvas.width = width
65
- offscreenCanvas.height = height
66
- offscreenCtx = offscreenCanvas.getContext('2d')!
67
- cachedDashedLinesKey = ''
68
- }
69
- return { canvas: offscreenCanvas, ctx: offscreenCtx! }
70
- }
71
-
72
- function buildDashedLinesKey(
73
- paneWidth: number,
74
- paneHeight: number,
75
- displayMin: number,
76
- displayMax: number,
77
- dpr: number
78
- ): string {
79
- return `${paneWidth}|${paneHeight}|${displayMin.toFixed(4)}|${displayMax.toFixed(4)}|${dpr}`
80
- }
81
-
82
- function renderDashedLinesToOffscreen(
83
- ctx: CanvasRenderingContext2D,
84
- paneWidth: number,
85
- paneHeight: number,
86
- displayMin: number,
87
- displayMax: number,
88
- dpr: number
89
- ): void {
90
- const displayValueRange = displayMax - displayMin || 1
91
- const y80 = alignToPhysicalPixelCenter(paneHeight - (80 - displayMin) / displayValueRange * paneHeight, dpr)
92
- const y20 = alignToPhysicalPixelCenter(paneHeight - (20 - displayMin) / displayValueRange * paneHeight, dpr)
93
-
94
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)
95
- ctx.save()
96
- ctx.scale(dpr, dpr)
97
-
98
- ctx.strokeStyle = 'rgba(0, 0, 0, 0.1)'
99
- ctx.lineWidth = 1
100
- ctx.setLineDash([4, 4])
101
- ctx.beginPath()
102
- ctx.moveTo(0, y80)
103
- ctx.lineTo(paneWidth, y80)
104
- ctx.moveTo(0, y20)
105
- ctx.lineTo(paneWidth, y20)
106
- ctx.stroke()
107
-
108
- ctx.restore()
109
- }
110
-
111
59
  function buildFASTKCacheKey(
112
60
  range: { start: number; end: number },
113
61
  kLineCenters: number[],
@@ -171,20 +119,7 @@ const { ctx, pane, range, scrollLeft, dpr, kLineCenters, lineWebGLSurface } = co
171
119
 
172
120
  const paneWidth = context.paneWidth
173
121
  const paneHeight = pane.height
174
- const dashedLinesKey = buildDashedLinesKey(paneWidth, paneHeight, displayMin, displayMax, dpr)
175
-
176
- if (cachedDashedLinesKey !== dashedLinesKey) {
177
- cachedDashedLinesKey = dashedLinesKey
178
- const { ctx: offCtx } = getOffscreenCanvas(
179
- Math.ceil(paneWidth * dpr),
180
- Math.ceil(paneHeight * dpr)
181
- )
182
- renderDashedLinesToOffscreen(offCtx, paneWidth, paneHeight, displayMin, displayMax, dpr)
183
- }
184
-
185
- if (offscreenCanvas) {
186
- ctx.drawImage(offscreenCanvas, 0, 0, paneWidth, paneHeight)
187
- }
122
+ dashedLines.render(ctx, paneWidth, paneHeight, displayMin, displayMax, dpr)
188
123
 
189
124
  // 确定绘制范围
190
125
  const drawStart = Math.max(range.start, params.period - 1)
@@ -281,30 +216,12 @@ function drawFASTKLineWithCanvas2D(
281
216
  /**
282
217
  * 获取 FASTK 标题信息(供 paneTitle 使用)
283
218
  */
284
- export function getFASTKTitleInfo(
285
- _data: KLineData[],
286
- index: number | null,
287
- params: Record<string, number | boolean | string>,
288
- pluginHost: PluginHost,
289
- paneId: string,
290
- ): { name: string; params: number[]; values: Array<{ label: string; value: number; color: string }> } | null {
291
- if (index === null) return null
292
- const period = (params.period as number) ?? 9
293
- const colors = resolveThemeColors('light')
294
- const state = pluginHost.getSharedState<FASTKRenderState>(createFASTKStateKey(paneId))
295
- if (!state) return null
296
-
297
- const fastk = state.series[index]
298
- if (fastk === undefined) return null
299
-
300
- return {
301
- name: 'FASTK',
302
- params: [period],
303
- values: [
304
- { label: 'FASTK', value: fastk, color: colors.kdj.k },
305
- ],
306
- }
307
- }
219
+ const getFASTKTitleInfo = createSingleLineTitleInfo({
220
+ createStateKey: createFASTKStateKey,
221
+ name: 'FASTK',
222
+ defaultPeriod: 9,
223
+ getColor: (colors) => colors.kdj.k,
224
+ })
308
225
 
309
226
  @Indicator({
310
227
  name: 'fastk',
@@ -34,7 +34,7 @@ function getFibStateKey(host: PluginHost | null, paneId: string): string | null
34
34
  return resolveStateKey(meta.stateKey, paneId)
35
35
  }
36
36
 
37
- export function createFibRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
37
+ function createFibRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
38
38
  const { paneId = 'main' } = options
39
39
  let pluginHost: PluginHost | null = null
40
40
 
@@ -126,7 +126,7 @@ function drawLine(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
126
126
  ctx.stroke()
127
127
  }
128
128
 
129
- export const getFibTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
129
+ const getFibTitleInfo: GetTitleInfoFn = (_data, index, _params, host, paneId) => {
130
130
  if (index === null || index < 0) return null
131
131
 
132
132
  const stateKey = createFibStateKey(paneId)
@@ -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 { HMARenderState } from '../../indicators/hmaState'
5
5
  import { createHMAStateKey, EMPTY_HMA_STATE } from '../../indicators/hmaState'
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, HMASchedulerConfig } from '../../indicators/scheduler'
10
10
  import { calcHMAData } from '../../indicators/calculators'
@@ -13,7 +13,7 @@ const HMA_COLOR = '#f43f5e'
13
13
 
14
14
  type Point = { x: number; y: number }
15
15
 
16
- export interface HMARendererOptions {
16
+ interface HMARendererOptions {
17
17
  paneId?: string
18
18
  }
19
19
 
@@ -31,7 +31,7 @@ function getHMAStateKey(host: PluginHost | null, paneId: string): string | null
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createHMARendererPlugin(options: HMARendererOptions = {}): RendererPluginWithHost {
34
+ function createHMARendererPlugin(options: HMARendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -122,28 +122,7 @@ export function createHMARendererPlugin(options: HMARendererOptions = {}): Rende
122
122
  }
123
123
  }
124
124
 
125
- export const getHMATitleInfo: 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 = createHMAStateKey(paneId)
135
- const state = pluginHost?.getSharedState<HMARenderState>(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: 'HMA',
143
- params: [state.params.period],
144
- values: [{ label: 'HMA', value, color: '#f43f5e' }],
145
- }
146
- }
125
+ const getHMATitleInfo = createSingleLineTitleInfo({ createStateKey: createHMAStateKey, name: 'HMA', getParams: (p) => [p.period as number], color: HMA_COLOR })
147
126
 
148
127
  @Indicator({
149
128
  name: 'hma',
@@ -9,8 +9,7 @@ import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
9
9
  import { resolveStateKey } from '../../indicators/indicatorMetadata'
10
10
  import type { IndicatorScheduler, HVSchedulerConfig } from '../../indicators/scheduler'
11
11
  import { calcHVData } 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 HV_COLOR = '#7c3aed'
16
15
 
@@ -30,7 +29,7 @@ function getHVStateKey(host: PluginHost | null, paneId: string): string | null {
30
29
  return resolveStateKey(meta.stateKey, paneId)
31
30
  }
32
31
 
33
- export function createHVRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
32
+ function createHVRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
34
33
  const { paneId = 'sub_HV' } = options
35
34
  let pluginHost: PluginHost | null = null
36
35
 
@@ -114,26 +113,7 @@ export function createHVRendererPlugin(options: { paneId?: string } = {}): Rende
114
113
  }
115
114
  }
116
115
 
117
- export function getHVTitleInfo(
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<HVRenderState>(createHVStateKey(paneId))
128
- const value = state?.series[index]
129
- if (value === undefined) return null
130
-
131
- return {
132
- name: 'HV',
133
- params: [period, annualizationFactor],
134
- values: [{ label: 'HV', value, color: HV_COLOR }],
135
- }
136
- }
116
+ const getHVTitleInfo = createSingleLineTitleInfo({ createStateKey: createHVStateKey, name: 'HV', getParams: (p) => [(p.period as number) ?? 20, (p.annualizationFactor as number) ?? 252], color: HV_COLOR })
137
117
 
138
118
  @Indicator({
139
119
  name: 'hv',
@@ -19,7 +19,7 @@ const CHIKOU_COLOR = '#7c3aed'
19
19
 
20
20
  type Point = { x: number; y: number }
21
21
 
22
- export interface IchimokuRendererOptions {
22
+ interface IchimokuRendererOptions {
23
23
  paneId?: string
24
24
  }
25
25
 
@@ -37,7 +37,7 @@ function getIchimokuStateKey(host: PluginHost | null, paneId: string): string |
37
37
  return resolveStateKey(meta.stateKey, paneId)
38
38
  }
39
39
 
40
- export function createIchimokuRendererPlugin(options: IchimokuRendererOptions = {}): RendererPluginWithHost {
40
+ function createIchimokuRendererPlugin(options: IchimokuRendererOptions = {}): RendererPluginWithHost {
41
41
  const { paneId = 'main' } = options
42
42
  let pluginHost: PluginHost | null = null
43
43
 
@@ -194,7 +194,7 @@ function fillCloud(
194
194
  ctx.restore()
195
195
  }
196
196
 
197
- export function getIchimokuTitleInfo(
197
+ function getIchimokuTitleInfo(
198
198
  _data: KLineData[],
199
199
  index: number | null,
200
200
  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 { KAMARenderState } from '../../indicators/kamaState'
5
5
  import { createKAMAStateKey, EMPTY_KAMA_STATE } from '../../indicators/kamaState'
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, KAMASchedulerConfig } from '../../indicators/scheduler'
10
10
  import { calcKAMAData } from '../../indicators/calculators'
@@ -13,7 +13,7 @@ const KAMA_COLOR = '#0ea5e9'
13
13
 
14
14
  type Point = { x: number; y: number }
15
15
 
16
- export interface KAMARendererOptions {
16
+ interface KAMARendererOptions {
17
17
  paneId?: string
18
18
  }
19
19
 
@@ -31,7 +31,7 @@ function getKAMAStateKey(host: PluginHost | null, paneId: string): string | null
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createKAMARendererPlugin(options: KAMARendererOptions = {}): RendererPluginWithHost {
34
+ function createKAMARendererPlugin(options: KAMARendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -122,28 +122,7 @@ export function createKAMARendererPlugin(options: KAMARendererOptions = {}): Ren
122
122
  }
123
123
  }
124
124
 
125
- export const getKAMATitleInfo: 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 = createKAMAStateKey(paneId)
135
- const state = pluginHost?.getSharedState<KAMARenderState>(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: 'KAMA',
143
- params: [state.params.period, state.params.fastPeriod, state.params.slowPeriod],
144
- values: [{ label: 'KAMA', value, color: '#0ea5e9' }],
145
- }
146
- }
125
+ const getKAMATitleInfo = createSingleLineTitleInfo({ createStateKey: createKAMAStateKey, name: 'KAMA', getParams: (p) => [p.period as number, p.fastPeriod as number, p.slowPeriod as number], color: KAMA_COLOR })
147
126
 
148
127
  @Indicator({
149
128
  name: 'kama',
@@ -15,7 +15,7 @@ const KELTNER_LOWER_COLOR = '#7c3aed'
15
15
 
16
16
  type Point = { x: number; y: number }
17
17
 
18
- export interface KeltnerRendererOptions { paneId?: string }
18
+ interface KeltnerRendererOptions { paneId?: string }
19
19
 
20
20
  function getKeltnerStateKey(host: PluginHost | null, paneId: string): string | null {
21
21
  const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
@@ -31,7 +31,7 @@ function getKeltnerStateKey(host: PluginHost | null, paneId: string): string | n
31
31
  return resolveStateKey(meta.stateKey, paneId)
32
32
  }
33
33
 
34
- export function createKeltnerRendererPlugin(options: KeltnerRendererOptions = {}): RendererPluginWithHost {
34
+ function createKeltnerRendererPlugin(options: KeltnerRendererOptions = {}): RendererPluginWithHost {
35
35
  const { paneId = 'main' } = options
36
36
  let pluginHost: PluginHost | null = null
37
37
 
@@ -124,7 +124,7 @@ function drawLine(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
124
124
  ctx.stroke()
125
125
  }
126
126
 
127
- export function getKeltnerTitleInfo(
127
+ function getKeltnerTitleInfo(
128
128
  _data: KLineData[],
129
129
  index: number | null,
130
130
  params: Record<string, number | boolean | string>,
@@ -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 KSTRendererOptions {
17
+ interface KSTRendererOptions {
18
18
  /** 目标 pane ID(默认 'sub') */
19
19
  paneId?: string
20
20
  }
@@ -36,7 +36,7 @@ function getKSTStateKey(host: PluginHost | null, paneId: string): string | null
36
36
  /**
37
37
  * 创建 KST 渲染器插件
38
38
  */
39
- export function createKSTRendererPlugin(options: KSTRendererOptions = {}): RendererPluginWithHost {
39
+ function createKSTRendererPlugin(options: KSTRendererOptions = {}): RendererPluginWithHost {
40
40
  const { paneId = 'sub' } = options
41
41
  let pluginHost: PluginHost | null = null
42
42
 
@@ -260,7 +260,7 @@ function drawKSTLinesWithCanvas2D(
260
260
  /**
261
261
  * 获取 KST 标题信息(供 paneTitle 使用)
262
262
  */
263
- export function getKSTTitleInfo(
263
+ function getKSTTitleInfo(
264
264
  _data: KLineData[],
265
265
  index: number | null,
266
266
  params: Record<string, number | boolean | string>,
@@ -94,7 +94,7 @@ function getMAStateKey(host: PluginHost | null): string | null {
94
94
  return resolveStateKey(meta.stateKey)
95
95
  }
96
96
 
97
- export function getMATitleInfo(
97
+ function getMATitleInfo(
98
98
  _data: KLineData[],
99
99
  index: number | null,
100
100
  _params: Record<string, number | boolean | string>,
@@ -15,7 +15,7 @@ import { createMacdScaleRendererPlugin } from './scale/macd_scale'
15
15
 
16
16
  type LinePoint = { x: number; y: number }
17
17
 
18
- export interface MACDConfig {
18
+ interface MACDConfig {
19
19
  /** 快线周期(默认 12) */
20
20
  fastPeriod?: number
21
21
  /** 慢线周期(默认 26) */
@@ -30,7 +30,7 @@ export interface MACDConfig {
30
30
  showBAR?: boolean
31
31
  }
32
32
 
33
- export interface MACDRendererOptions {
33
+ interface MACDRendererOptions {
34
34
  /** 目标 pane ID(默认 'sub') */
35
35
  paneId?: string
36
36
  /** 初始配置 */
@@ -55,7 +55,7 @@ function getMACDStateKey(host: PluginHost | null, paneId: string): string | null
55
55
  * 创建 MACD 渲染器插件
56
56
  * 从 StateStore 读取 MACD 状态,不再内联计算
57
57
  */
58
- export function createMACDRendererPlugin(options: MACDRendererOptions = {}): RendererPluginWithHost {
58
+ function createMACDRendererPlugin(options: MACDRendererOptions = {}): RendererPluginWithHost {
59
59
  const { paneId = 'sub', config: initialConfig = {} } = options
60
60
 
61
61
  let pluginHost: PluginHost | null = null
@@ -416,28 +416,11 @@ function compositeMacdWebGL(ctx: CanvasRenderingContext2D, context: RenderContex
416
416
  surface.compositeTo(ctx)
417
417
  }
418
418
 
419
- /**
420
- * 计算指定索引处的 MACD 值(供图例使用)
421
- * 使用 calculators.ts 中的计算函数
422
- */
423
- export function calcMACDAtIndex(
424
- data: KLineData[],
425
- index: number,
426
- fastPeriod: number = 12,
427
- slowPeriod: number = 26,
428
- signalPeriod: number = 9
429
- ): { dif: number; dea: number; macd: number } | null {
430
- if (index < slowPeriod || index >= data.length) return null
431
-
432
- const macdData = calcMACDData(data, fastPeriod, slowPeriod, signalPeriod)
433
- return macdData[index] ?? null
434
- }
435
-
436
419
  /**
437
420
  * 获取 MACD 标题信息(供 paneTitle 使用)
438
421
  * 从 pluginHost 获取已计算好的数据,避免重复计算
439
422
  */
440
- export function getMACDTitleInfo(
423
+ function getMACDTitleInfo(
441
424
  _data: KLineData[],
442
425
  index: number | null,
443
426
  params: Record<string, number | boolean | string>,
@@ -1,6 +1,6 @@
1
1
  import type { RendererPluginWithHost, PluginHost, RenderContext } from '../../../plugin'
2
2
  import { RENDERER_PRIORITY } from '../../../plugin'
3
- import type { KLineData } from '../../../types/price'
3
+ import type { KLineData, TimeShareData } from '../../../types/price'
4
4
  import { resolveThemeColors } from '../../../tokens'
5
5
  import { getFont, setCanvasFont } from '../../theme/fonts'
6
6
  import type { IndicatorScheduler } from '../../indicators/scheduler'
@@ -81,9 +81,128 @@ export function createMainIndicatorLegendRendererPlugin(options: {
81
81
  const targetIndex = crosshairIndex ?? Math.min(range.end - 1, klineData.length - 1)
82
82
  const rows: Array<{ draw: (rowIndex: number) => void }> = []
83
83
 
84
+ // ── Timeshare legend ──
85
+ if (context.period === 'timeshare') {
86
+ const tsData = data as TimeShareData[]
87
+ const preClose = (context.settings?.preClose as number) ?? tsData[0]?.price ?? 0
88
+ const item = tsData[targetIndex]
89
+ if (item) {
90
+ const changeAmount = item.price - preClose
91
+ const changePercent = preClose !== 0 ? (changeAmount / preClose) * 100 : 0
92
+ const changeColor = changeAmount >= 0 ? colors.candleUpBody : colors.candleDownBody
93
+
94
+ if (context.paneWidth >= 400) {
95
+ rows.push({
96
+ draw: (rowIndex: number) => {
97
+ let x = legendX
98
+ const y = config.yPaddingPx / 2 + legendYOffset + rowIndex * lineHeight
99
+
100
+ overlayCtx.fillStyle = colors.text.primary
101
+ overlayCtx.fillText('现价 ', x, y)
102
+ x += measureTextWidth(overlayCtx, '现价 ')
103
+ overlayCtx.fillStyle = changeColor
104
+ overlayCtx.fillText(item.price.toFixed(2), x, y)
105
+ x += measureTextWidth(overlayCtx, item.price.toFixed(2)) + gap
106
+
107
+ overlayCtx.fillStyle = colors.text.primary
108
+ overlayCtx.fillText('均价 ', x, y)
109
+ x += measureTextWidth(overlayCtx, '均价 ')
110
+ overlayCtx.fillText(item.average.toFixed(2), x, y)
111
+ x += measureTextWidth(overlayCtx, item.average.toFixed(2)) + gap
112
+
113
+ overlayCtx.fillStyle = colors.text.primary
114
+ overlayCtx.fillText('涨跌 ', x, y)
115
+ x += measureTextWidth(overlayCtx, '涨跌 ')
116
+ overlayCtx.fillStyle = changeColor
117
+ const sign = changeAmount > 0 ? '+' : ''
118
+ overlayCtx.fillText(`${sign}${changeAmount.toFixed(2)}`, x, y)
119
+ x += measureTextWidth(overlayCtx, `${sign}${changeAmount.toFixed(2)}`) + gap
120
+
121
+ overlayCtx.fillStyle = colors.text.primary
122
+ overlayCtx.fillText('涨幅 ', x, y)
123
+ x += measureTextWidth(overlayCtx, '涨幅 ')
124
+ overlayCtx.fillStyle = changeColor
125
+ const pctSign = changePercent > 0 ? '+' : ''
126
+ overlayCtx.fillText(`${pctSign}${changePercent.toFixed(2)}%`, x, y)
127
+ x += measureTextWidth(overlayCtx, `${pctSign}${changePercent.toFixed(2)}%`) + gap
128
+
129
+ const volText = formatVolumeShort(item.volume)
130
+ overlayCtx.fillStyle = colors.text.tertiary
131
+ overlayCtx.fillText('成交量 ', x, y)
132
+ x += measureTextWidth(overlayCtx, '成交量 ')
133
+ overlayCtx.fillStyle = colors.text.primary
134
+ overlayCtx.fillText(volText, x, y)
135
+ x += measureTextWidth(overlayCtx, volText) + gap
136
+
137
+ const amtText = formatAmountShort(item.amount)
138
+ overlayCtx.fillStyle = colors.text.tertiary
139
+ overlayCtx.fillText('成交额 ', x, y)
140
+ x += measureTextWidth(overlayCtx, '成交额 ')
141
+ overlayCtx.fillStyle = colors.text.primary
142
+ overlayCtx.fillText(amtText, x, y)
143
+ },
144
+ })
145
+ } else {
146
+ rows.push({
147
+ draw: (rowIndex: number) => {
148
+ let x = legendX
149
+ const y = config.yPaddingPx / 2 + legendYOffset + rowIndex * lineHeight
150
+
151
+ overlayCtx.fillStyle = colors.text.primary
152
+ overlayCtx.fillText('现价 ', x, y)
153
+ x += measureTextWidth(overlayCtx, '现价 ')
154
+ overlayCtx.fillStyle = changeColor
155
+ overlayCtx.fillText(item.price.toFixed(2), x, y)
156
+ x += measureTextWidth(overlayCtx, item.price.toFixed(2)) + gap
157
+
158
+ overlayCtx.fillStyle = colors.text.primary
159
+ overlayCtx.fillText('均价 ', x, y)
160
+ x += measureTextWidth(overlayCtx, '均价 ')
161
+ overlayCtx.fillText(item.average.toFixed(2), x, y)
162
+ x += measureTextWidth(overlayCtx, item.average.toFixed(2)) + gap
163
+
164
+ overlayCtx.fillStyle = colors.text.tertiary
165
+ overlayCtx.fillText('成交量 ', x, y)
166
+ x += measureTextWidth(overlayCtx, '成交量 ')
167
+ overlayCtx.fillStyle = colors.text.primary
168
+ overlayCtx.fillText(formatVolumeShort(item.volume), x, y)
169
+ },
170
+ })
171
+ rows.push({
172
+ draw: (rowIndex: number) => {
173
+ let x = legendX
174
+ const y = config.yPaddingPx / 2 + legendYOffset + rowIndex * lineHeight
175
+
176
+ overlayCtx.fillStyle = colors.text.primary
177
+ overlayCtx.fillText('涨跌 ', x, y)
178
+ x += measureTextWidth(overlayCtx, '涨跌 ')
179
+ overlayCtx.fillStyle = changeColor
180
+ const sign = changeAmount > 0 ? '+' : ''
181
+ overlayCtx.fillText(`${sign}${changeAmount.toFixed(2)}`, x, y)
182
+ x += measureTextWidth(overlayCtx, `${sign}${changeAmount.toFixed(2)}`) + gap
183
+
184
+ overlayCtx.fillStyle = colors.text.primary
185
+ overlayCtx.fillText('涨幅 ', x, y)
186
+ x += measureTextWidth(overlayCtx, '涨幅 ')
187
+ overlayCtx.fillStyle = changeColor
188
+ const pctSign = changePercent > 0 ? '+' : ''
189
+ overlayCtx.fillText(`${pctSign}${changePercent.toFixed(2)}%`, x, y)
190
+ x += measureTextWidth(overlayCtx, `${pctSign}${changePercent.toFixed(2)}%`) + gap
191
+
192
+ overlayCtx.fillStyle = colors.text.tertiary
193
+ overlayCtx.fillText('成交额 ', x, y)
194
+ x += measureTextWidth(overlayCtx, '成交额 ')
195
+ overlayCtx.fillStyle = colors.text.primary
196
+ overlayCtx.fillText(formatAmountShort(item.amount), x, y)
197
+ },
198
+ })
199
+ }
200
+ }
201
+ }
202
+
84
203
  if (typeof crosshairIndex === 'number') {
85
204
  const k = klineData[targetIndex]
86
- if (k) {
205
+ if (k && typeof k.close === 'number') {
87
206
  const isUp = k.close >= k.open
88
207
  const volText = typeof k.volume === 'number' ? formatVolumeShort(k.volume) : null
89
208
  const upColor = isUp ? colors.candleUpBody : colors.candleDownBody
@@ -339,3 +458,9 @@ function formatVolumeShort(v: number): string {
339
458
  if (v >= 1e4) return (v / 1e4).toFixed(2) + '万'
340
459
  return v.toFixed(2)
341
460
  }
461
+
462
+ function formatAmountShort(v: number): string {
463
+ if (v >= 1e8) return (v / 1e8).toFixed(2) + '亿'
464
+ if (v >= 1e4) return (v / 1e4).toFixed(2) + '万'
465
+ return v.toFixed(2)
466
+ }