@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
@@ -251,6 +251,7 @@ export interface ColorTokens {
251
251
  // Volume bars (paired with candle bull/bear)
252
252
  readonly volumeUp: ColorValue
253
253
  readonly volumeDown: ColorValue
254
+ readonly volumeNeutral: ColorValue
254
255
 
255
256
  // Price + time axes
256
257
  readonly axisText: ColorValue
@@ -290,6 +291,14 @@ export interface ColorTokens {
290
291
  readonly alertTriggered: ColorValue
291
292
  readonly alertMuted: ColorValue
292
293
 
294
+ // Time-share (分时图) specific colors
295
+ readonly timeSharePriceLine: ColorValue
296
+ readonly timeShareAvgLine: ColorValue
297
+ readonly timeShareAreaUp: ColorValue
298
+ readonly timeShareAreaDown: ColorValue
299
+ readonly timeSharePreClose: ColorValue
300
+ readonly timeShareVolume: ColorValue
301
+
293
302
  // Anchored VWAP / MTF overlay accents
294
303
  readonly avwapLine: ColorValue
295
304
  readonly avwapBand: ColorValue
@@ -38,6 +38,19 @@ export interface KLineDailyDongCaiResponse extends KLineData {
38
38
  }
39
39
 
40
40
 
41
+ export interface TimeShareData {
42
+ timestamp: number
43
+ price: number
44
+ average: number
45
+ volume: number
46
+ amount: number
47
+ }
48
+
49
+ export function isTimeShareData(data: unknown[]): data is TimeShareData[] {
50
+ const first = data[0]
51
+ return data.length > 0 && first !== null && typeof first === 'object' && 'price' in (first as object) && 'average' in (first as object)
52
+ }
53
+
41
54
  export function toKLineData(arr: KLineDailyDongCaiResponse[]): KLineData[] {
42
55
  return arr
43
56
  .map((e) => ({
@@ -24,7 +24,7 @@ const ymdCache = new Map<number, string>()
24
24
  * @example
25
25
  * formatDateToYYYYMMDDNoDash(1736793600000) // "20250114"
26
26
  */
27
- export function formatDateToYYYYMMDDNoDash(timestamp: number): string {
27
+ function formatDateToYYYYMMDDNoDash(timestamp: number): string {
28
28
  const d = new Date(timestamp)
29
29
  const year = d.getFullYear()
30
30
  const month = String(d.getMonth() + 1).padStart(2, '0')
@@ -39,7 +39,7 @@ export function formatDateToYYYYMMDDNoDash(timestamp: number): string {
39
39
  * @example
40
40
  * getCurrentDateYYYYMMDD() // "20250114"(根据实际日期)
41
41
  */
42
- export function getCurrentDateYYYYMMDD(): string {
42
+ function getCurrentDateYYYYMMDD(): string {
43
43
  const d = new Date()
44
44
  const year = d.getFullYear()
45
45
  const month = String(d.getMonth() + 1).padStart(2, '0')
@@ -130,7 +130,7 @@ export function formatMonthOrYear(timestamp: number): { text: string; isYear: bo
130
130
  * @example
131
131
  * monthKey(1736793600000) // 24301 (2025*12 + 0)
132
132
  */
133
- export function monthKey(timestamp: number): number {
133
+ function monthKey(timestamp: number): number {
134
134
  const d = new Date(timestamp)
135
135
  return d.getFullYear() * 12 + d.getMonth()
136
136
  }
@@ -176,7 +176,7 @@ export function formatTimestamp(
176
176
  * @param ts - 时间戳(毫秒)
177
177
  * @returns 格式化后的日期字符串,例如 "2025-01-14"
178
178
  */
179
- export const formatShanghaiDate = formatDateToYYYYMMDD
179
+ const formatShanghaiDate = formatDateToYYYYMMDD
180
180
 
181
181
  /**
182
182
  * formatDateToYYYYMMDD 的别名,用于十字线日期标签显示
@@ -283,6 +283,29 @@ export function formatDay(timestamp: number): { text: string; isYear: boolean }
283
283
  return { text: `${month}-${day}`, isYear }
284
284
  }
285
285
 
286
+ // ========== 时分标签缓存 ==========
287
+ const TIME_LABEL_CACHE_SIZE = 256
288
+ const timeLabelCache = new Map<number, string>()
289
+
290
+ /**
291
+ * 将时间戳格式化为 "HH:mm" 格式(上海时区)
292
+ * 用于分时图底部时间轴标签显示
293
+ */
294
+ export function formatTimeLabel(timestamp: number): string {
295
+ const cached = timeLabelCache.get(timestamp)
296
+ if (cached !== undefined) return cached
297
+
298
+ const d = new Date(timestamp)
299
+ const hh = String(d.getHours()).padStart(2, '0')
300
+ const mm = String(d.getMinutes()).padStart(2, '0')
301
+ const result = `${hh}:${mm}`
302
+
303
+ if (timeLabelCache.size >= TIME_LABEL_CACHE_SIZE) timeLabelCache.clear()
304
+ timeLabelCache.set(timestamp, result)
305
+
306
+ return result
307
+ }
308
+
286
309
  // 兼容 getDayOfYear — fallback when not on Date prototype
287
310
  function getDayOfYear(date: Date): number {
288
311
  const start = new Date(date.getFullYear(), 0, 0)
@@ -1,7 +1,7 @@
1
1
  import type { KLineData } from '../../types/price'
2
2
  import { priceToY, yToPrice } from '../priceToY'
3
3
  import { alignToPhysicalPixelCenter, roundToPhysicalPixel } from '../../engine/draw/pixelAlign'
4
- import { formatYMDShanghai, formatMonthOrYear, formatDay, findMonthBoundaries, findDayBoundaries } from '../../utils/dateFormat'
4
+ import { formatYMDShanghai, formatTimeLabel, formatMonthOrYear, formatDay, findMonthBoundaries, findDayBoundaries } from '../../utils/dateFormat'
5
5
  import { resolveThemeColors } from '../../tokens'
6
6
  import type { ColorPresetSettings } from '../../tokens'
7
7
  import { getFont, setCanvasFont } from '../../engine/theme/fonts'
@@ -24,92 +24,6 @@ function measureTextWidth(ctx: CanvasRenderingContext2D, text: string): number {
24
24
  return width
25
25
  }
26
26
 
27
- export interface PriceAxisOptions {
28
- x: number
29
- y: number
30
- width: number
31
- height: number
32
- priceRange: { maxPrice: number; minPrice: number }
33
- yPaddingPx?: number
34
- dpr: number
35
- ticks?: number
36
- bgColor?: string
37
- textColor?: string
38
- lineColor?: string
39
- fontSize?: number
40
- paddingX?: number
41
- /** 是否绘制左侧边界竖线(默认 true) */
42
- drawLeftBorder?: boolean
43
- /** 是否绘制刻度短线(默认 true) */
44
- drawTickLines?: boolean
45
- /** 价格偏移量(用于价格轴平移时同步显示) */
46
- priceOffset?: number
47
- }
48
-
49
- /** 右侧价格轴(固定,不随 translate/scroll 变化) */
50
- export function drawPriceAxis(ctx: CanvasRenderingContext2D, opts: PriceAxisOptions, theme: 'light' | 'dark' = 'light', isAsiaMarket?: boolean, colorPresetSettings?: ColorPresetSettings) {
51
- const colors = resolveThemeColors(theme, isAsiaMarket, colorPresetSettings)
52
- const {
53
- x,
54
- y,
55
- width,
56
- height,
57
- priceRange,
58
- yPaddingPx = 0,
59
- dpr,
60
- ticks = 10,
61
- bgColor = colors.tagBg.transparent,
62
- textColor = colors.text.secondary,
63
- lineColor = colors.border.dark,
64
- fontSize = 16,
65
- drawLeftBorder = true,
66
- drawTickLines = true,
67
- priceOffset = 0,
68
- } = opts
69
-
70
- const wantPad = yPaddingPx
71
- const pad = Math.max(0, Math.min(wantPad, Math.floor(height / 2) - 1))
72
-
73
- const { maxPrice, minPrice } = priceRange
74
- const range = maxPrice - minPrice
75
- const step = range === 0 ? 0 : range / (Math.max(2, ticks) - 1)
76
-
77
- ctx.fillStyle = bgColor
78
- ctx.fillRect(x, y, width, height)
79
-
80
- if (drawLeftBorder) {
81
- ctx.strokeStyle = lineColor
82
- ctx.lineWidth = 1
83
- ctx.beginPath()
84
- ctx.moveTo(alignToPhysicalPixelCenter(x, dpr), y)
85
- ctx.lineTo(alignToPhysicalPixelCenter(x, dpr), y + height)
86
- ctx.stroke()
87
- }
88
-
89
- setCanvasFont(ctx, getFont(fontSize))
90
- ctx.textBaseline = 'middle'
91
- ctx.textAlign = 'center'
92
- ctx.strokeStyle = lineColor
93
- ctx.fillStyle = textColor
94
-
95
- const centerX = x + width / 2
96
-
97
- for (let i = 0; i < Math.max(2, ticks); i++) {
98
- const p = range === 0 ? maxPrice : maxPrice - step * i
99
- const yy = Math.round(priceToY(p, maxPrice, minPrice, height, pad, pad) + y)
100
-
101
- if (drawTickLines) {
102
- ctx.beginPath()
103
- const lineY = alignToPhysicalPixelCenter(yy, dpr)
104
- ctx.moveTo(x, lineY)
105
- ctx.lineTo(x + 4, lineY)
106
- ctx.stroke()
107
- }
108
-
109
- const displayPrice = p + priceOffset
110
- ctx.fillText(displayPrice.toFixed(2), roundToPhysicalPixel(centerX, dpr), alignToPhysicalPixelCenter(yy, dpr))
111
- }
112
- }
113
27
 
114
28
  export interface TimeAxisOptions {
115
29
  x: number
@@ -135,6 +49,10 @@ export interface TimeAxisOptions {
135
49
  drawBottomBorder?: boolean
136
50
  /** K线级别,如 'daily'、'5min'、'15min' */
137
51
  period: string
52
+ /** K 线中心点 x 坐标(逻辑像素),由 calcKLinePositions 预计算 */
53
+ kLineCenters: number[]
54
+ /** 数据索引可见范围 { start, end } */
55
+ visibleRange: { start: number; end: number }
138
56
  }
139
57
 
140
58
  export interface LastPriceLineOptions {
@@ -197,6 +115,8 @@ export interface CrosshairTimeLabelOptions {
197
115
  fontSize?: number
198
116
  paddingX?: number
199
117
  paddingY?: number
118
+ /** 周期类型,分时图显示 HH:mm 格式 */
119
+ period?: string
200
120
  }
201
121
 
202
122
  export function drawCrosshairTimeLabel(ctx: CanvasRenderingContext2D, opts: CrosshairTimeLabelOptions, theme: 'light' | 'dark' = 'light', isAsiaMarket?: boolean, colorPresetSettings?: ColorPresetSettings) {
@@ -211,9 +131,10 @@ export function drawCrosshairTimeLabel(ctx: CanvasRenderingContext2D, opts: Cros
211
131
  dpr,
212
132
  fontSize = 16,
213
133
  paddingX = 8,
134
+ period,
214
135
  } = opts
215
136
 
216
- const text = formatYMDShanghai(timestamp)
137
+ const text = period === 'timeshare' ? formatTimeLabel(timestamp) : formatYMDShanghai(timestamp)
217
138
 
218
139
  ctx.save()
219
140
  setCanvasFont(ctx, getFont(fontSize))
@@ -306,7 +227,7 @@ export function drawCrosshairPriceLabel(ctx: CanvasRenderingContext2D, opts: Cro
306
227
  }
307
228
 
308
229
  /** 绘制"最新价水平虚线"(画在 plotCanvas 的 world 坐标系:需在 translate(-scrollLeft,0) 之后调用) */
309
- export function drawLastPriceDashedLine(ctx: CanvasRenderingContext2D, opts: LastPriceLineOptions, theme: 'light' | 'dark' = 'light', isAsiaMarket?: boolean, colorPresetSettings?: ColorPresetSettings) {
230
+ function drawLastPriceDashedLine(ctx: CanvasRenderingContext2D, opts: LastPriceLineOptions, theme: 'light' | 'dark' = 'light', isAsiaMarket?: boolean, colorPresetSettings?: ColorPresetSettings) {
310
231
  const colors = resolveThemeColors(theme, isAsiaMarket, colorPresetSettings)
311
232
  const {
312
233
  plotWidth,
@@ -356,11 +277,11 @@ export function drawTimeAxis(ctx: CanvasRenderingContext2D, opts: TimeAxisOption
356
277
  height,
357
278
  data,
358
279
  scrollLeft,
359
- kWidth,
360
- kGap,
361
280
  startIndex,
362
281
  endIndex,
363
282
  dpr,
283
+ kLineCenters,
284
+ visibleRange,
364
285
  bgColor = colors.tagBg.transparent,
365
286
  textColor = colors.text.secondary,
366
287
  lineColor = colors.border.dark,
@@ -370,16 +291,6 @@ export function drawTimeAxis(ctx: CanvasRenderingContext2D, opts: TimeAxisOption
370
291
  drawBottomBorder = true,
371
292
  } = opts
372
293
 
373
- const physKWidth = Math.round(kWidth * dpr)
374
- const alignedPhysKWidth = physKWidth % 2 === 0 ? physKWidth + 1 : physKWidth
375
- const physKGap = Math.round(kGap * dpr)
376
- const unitPx = alignedPhysKWidth + physKGap
377
- const startXPx = physKGap
378
-
379
- const unit = unitPx / dpr
380
- const startX = startXPx / dpr
381
- const alignedKWidth = alignedPhysKWidth / dpr
382
-
383
294
  ctx.fillStyle = bgColor
384
295
  ctx.fillRect(x, y, width, height)
385
296
 
@@ -408,13 +319,34 @@ export function drawTimeAxis(ctx: CanvasRenderingContext2D, opts: TimeAxisOption
408
319
  const regularFont = getFont(fontSize)
409
320
  const boldFont = getFont(fontSize, { bold: true })
410
321
 
411
- const isMinuteData = opts.period.includes('min')
412
- const showOnlyYear = !isMinuteData && opts.period !== 'daily'
413
- const boundaries = isMinuteData ? findDayBoundaries(data) : findMonthBoundaries(data)
322
+ const isTimeShare = opts.period === 'timeshare'
323
+ const isMinuteData = !isTimeShare && opts.period.includes('min')
324
+ const showOnlyYear = !isMinuteData && !isTimeShare && opts.period !== 'daily'
325
+
326
+ let boundaries: number[]
327
+ let labelFn: (ts: number) => { text: string; isYear: boolean }
328
+
329
+ if (isTimeShare) {
330
+ const visibleCount = endIndex - startIndex
331
+ const maxLabels = Math.max(2, Math.min(8, Math.floor(visibleCount / 2) || 1))
332
+ const step = Math.max(1, Math.floor(visibleCount / maxLabels))
333
+ boundaries = []
334
+ for (let i = 0; i <= maxLabels; i++) {
335
+ const idx = startIndex + Math.min(i * step, Math.max(0, visibleCount - 1))
336
+ boundaries.push(idx)
337
+ }
338
+ labelFn = (ts) => ({ text: formatTimeLabel(ts), isYear: false })
339
+ } else if (isMinuteData) {
340
+ boundaries = findDayBoundaries(data)
341
+ labelFn = formatDay
342
+ } else {
343
+ boundaries = findMonthBoundaries(data)
344
+ labelFn = formatMonthOrYear
345
+ }
346
+
414
347
  const visibleBoundaries = boundaries.filter((idx: number) => idx >= startIndex && idx < endIndex)
415
348
 
416
349
  let lastBold: boolean | null = null
417
- const labelFn = isMinuteData ? formatDay : formatMonthOrYear
418
350
 
419
351
  for (const idx of visibleBoundaries) {
420
352
  const k = data[idx]
@@ -423,8 +355,9 @@ export function drawTimeAxis(ctx: CanvasRenderingContext2D, opts: TimeAxisOption
423
355
  const { text, isYear } = labelFn(k.timestamp)
424
356
  if (showOnlyYear && !isYear) continue
425
357
 
426
- const worldX = startX + idx * unit + alignedKWidth / 2
427
- const screenX = worldX - scrollLeft
358
+ const centerX = kLineCenters[idx - visibleRange.start]
359
+ if (centerX === undefined) continue
360
+ const screenX = centerX - scrollLeft
428
361
 
429
362
  const minX = paddingX
430
363
  const maxX = Math.max(paddingX, width - paddingX)
@@ -8,7 +8,7 @@ export { DEFAULT_VOLUME_PRICE_CONFIG }
8
8
  * 成交量前缀和计算器
9
9
  * 用于优化成交量移动平均的计算,避免重复遍历
10
10
  */
11
- export class VolumePrefixSum {
11
+ class VolumePrefixSum {
12
12
  private prefixSum: number[] = []
13
13
  private dataLength: number = 0
14
14
 
@@ -93,7 +93,7 @@ function getPrefixSum(data: KLineData[]): VolumePrefixSum {
93
93
  * @param config - 量价关系计算配置
94
94
  * @returns 量价关系类型
95
95
  */
96
- export function analyzeVolumePriceRelation(
96
+ function analyzeVolumePriceRelation(
97
97
  data: KLineData[],
98
98
  index: number,
99
99
  config: VolumePriceConfig
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.8.6"
1
+ export const VERSION = "0.8.7"