@363045841yyt/klinechart-core 0.8.6 → 0.8.8

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 (501) hide show
  1. package/dist/config/chartSettings.d.ts +18 -2
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +8 -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 +56 -2
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/types.d.ts +36 -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 +32 -1
  61. package/dist/engine/chart.d.ts.map +1 -1
  62. package/dist/engine/chart.js +148 -7
  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 +39 -14
  71. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  72. package/dist/engine/data/chartDataManager.js +494 -202
  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 +113 -18
  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/gridLines.d.ts.map +1 -1
  309. package/dist/engine/renderers/gridLines.js +7 -35
  310. package/dist/engine/renderers/gridLines.js.map +1 -1
  311. package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
  312. package/dist/engine/renderers/lastPrice.js +7 -2
  313. package/dist/engine/renderers/lastPrice.js.map +1 -1
  314. package/dist/engine/renderers/leftYAxis.d.ts +11 -0
  315. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
  316. package/dist/engine/renderers/leftYAxis.js +79 -0
  317. package/dist/engine/renderers/leftYAxis.js.map +1 -0
  318. package/dist/engine/renderers/subVolume.d.ts +1 -13
  319. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  320. package/dist/engine/renderers/subVolume.js +1 -1
  321. package/dist/engine/renderers/subVolume.js.map +1 -1
  322. package/dist/engine/renderers/timeAxis.d.ts +0 -2
  323. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  324. package/dist/engine/renderers/timeAxis.js +4 -1
  325. package/dist/engine/renderers/timeAxis.js.map +1 -1
  326. package/dist/engine/renderers/timeShare.d.ts +3 -0
  327. package/dist/engine/renderers/timeShare.d.ts.map +1 -0
  328. package/dist/engine/renderers/timeShare.js +260 -0
  329. package/dist/engine/renderers/timeShare.js.map +1 -0
  330. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  331. package/dist/engine/renderers/yAxis.js +25 -23
  332. package/dist/engine/renderers/yAxis.js.map +1 -1
  333. package/dist/engine/scale/price.d.ts +0 -7
  334. package/dist/engine/scale/price.d.ts.map +1 -1
  335. package/dist/engine/scale/price.js +3 -2
  336. package/dist/engine/scale/price.js.map +1 -1
  337. package/dist/engine/theme/fonts.d.ts +0 -2
  338. package/dist/engine/theme/fonts.d.ts.map +1 -1
  339. package/dist/engine/theme/fonts.js +1 -1
  340. package/dist/engine/theme/fonts.js.map +1 -1
  341. package/dist/engine/utils/klineConfig.d.ts.map +1 -1
  342. package/dist/engine/utils/klineConfig.js +1 -5
  343. package/dist/engine/utils/klineConfig.js.map +1 -1
  344. package/dist/engine/utils/tickPosition.d.ts +12 -0
  345. package/dist/engine/utils/tickPosition.d.ts.map +1 -1
  346. package/dist/engine/utils/tickPosition.js +15 -0
  347. package/dist/engine/utils/tickPosition.js.map +1 -1
  348. package/dist/engine/viewport/chartViewportManager.d.ts +0 -4
  349. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  350. package/dist/engine/viewport/chartViewportManager.js +10 -13
  351. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  352. package/dist/plugin/types.d.ts +10 -0
  353. package/dist/plugin/types.d.ts.map +1 -1
  354. package/dist/plugin/types.js.map +1 -1
  355. package/dist/semantic/types.d.ts +1 -1
  356. package/dist/semantic/types.d.ts.map +1 -1
  357. package/dist/tokens/theme-base.d.ts +5 -0
  358. package/dist/tokens/theme-base.d.ts.map +1 -0
  359. package/dist/tokens/theme-base.js +31 -0
  360. package/dist/tokens/theme-base.js.map +1 -0
  361. package/dist/tokens/theme-china.d.ts.map +1 -1
  362. package/dist/tokens/theme-china.js +3 -0
  363. package/dist/tokens/theme-china.js.map +1 -1
  364. package/dist/tokens/theme-dark.d.ts.map +1 -1
  365. package/dist/tokens/theme-dark.js +11 -30
  366. package/dist/tokens/theme-dark.js.map +1 -1
  367. package/dist/tokens/theme-light.d.ts.map +1 -1
  368. package/dist/tokens/theme-light.js +11 -30
  369. package/dist/tokens/theme-light.js.map +1 -1
  370. package/dist/tokens/types.d.ts +7 -0
  371. package/dist/tokens/types.d.ts.map +1 -1
  372. package/dist/types/price.d.ts +8 -0
  373. package/dist/types/price.d.ts.map +1 -1
  374. package/dist/types/price.js +4 -0
  375. package/dist/types/price.js.map +1 -1
  376. package/dist/utils/dateFormat.d.ts +5 -42
  377. package/dist/utils/dateFormat.d.ts.map +1 -1
  378. package/dist/utils/dateFormat.js +24 -4
  379. package/dist/utils/dateFormat.js.map +1 -1
  380. package/dist/utils/kLineDraw/axis.d.ts +9 -28
  381. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  382. package/dist/utils/kLineDraw/axis.js +33 -58
  383. package/dist/utils/kLineDraw/axis.js.map +1 -1
  384. package/dist/utils/volumePrice.d.ts +0 -40
  385. package/dist/utils/volumePrice.d.ts.map +1 -1
  386. package/dist/utils/volumePrice.js +2 -2
  387. package/dist/utils/volumePrice.js.map +1 -1
  388. package/dist/version.d.ts +1 -1
  389. package/dist/version.js +1 -1
  390. package/package.json +1 -1
  391. package/src/config/chartSettings.ts +8 -1
  392. package/src/controllers/createChartController.ts +59 -2
  393. package/src/controllers/types.ts +38 -17
  394. package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
  395. package/src/data-fetchers/baostock.ts +1 -1
  396. package/src/data-fetchers/dataBuffer.ts +48 -11
  397. package/src/data-fetchers/dataBufferTypes.ts +11 -0
  398. package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
  399. package/src/data-fetchers/gotdx/gotdx.ts +6 -0
  400. package/src/data-fetchers/gotdx.ts +45 -7
  401. package/src/data-fetchers/hundred-mock.ts +1 -1
  402. package/src/data-fetchers/index.ts +10 -20
  403. package/src/data-fetchers/router.ts +12 -1
  404. package/src/data-fetchers/thousand-mock.ts +1 -1
  405. package/src/data-fetchers/timeShareBuffer.ts +92 -0
  406. package/src/data-fetchers/tradingview.ts +2 -2
  407. package/src/data-fetchers/types.ts +15 -2
  408. package/src/engine/__tests__/chart.dpr.test.ts +1 -0
  409. package/src/engine/chart.ts +167 -9
  410. package/src/engine/chartTypes.ts +3 -0
  411. package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
  412. package/src/engine/controller/interaction.ts +80 -28
  413. package/src/engine/data/chartDataManager.ts +560 -229
  414. package/src/engine/draw/pixelAlign.ts +1 -1
  415. package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
  416. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
  417. package/src/engine/indicators/calculators.ts +83 -233
  418. package/src/engine/indicators/chartIndicatorManager.ts +3 -2
  419. package/src/engine/indicators/macdState.ts +1 -1
  420. package/src/engine/indicators/registerBuiltins.ts +1 -0
  421. package/src/engine/indicators/rsiState.ts +1 -1
  422. package/src/engine/indicators/scheduler.ts +1 -7
  423. package/src/engine/layout/chartPaneLayout.ts +26 -6
  424. package/src/engine/modes/kLineMode.ts +57 -0
  425. package/src/engine/modes/timeShareMode.ts +95 -0
  426. package/src/engine/modes/types.ts +63 -0
  427. package/src/engine/paneRenderer.ts +37 -46
  428. package/src/engine/render/chartRenderer.ts +120 -22
  429. package/src/engine/renderers/Indicator/atr.ts +4 -29
  430. package/src/engine/renderers/Indicator/boll.ts +3 -24
  431. package/src/engine/renderers/Indicator/cci.ts +9 -27
  432. package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
  433. package/src/engine/renderers/Indicator/cmf.ts +3 -22
  434. package/src/engine/renderers/Indicator/dema.ts +5 -26
  435. package/src/engine/renderers/Indicator/donchian.ts +3 -3
  436. package/src/engine/renderers/Indicator/ene.ts +3 -24
  437. package/src/engine/renderers/Indicator/expma.ts +2 -2
  438. package/src/engine/renderers/Indicator/fastk.ts +12 -95
  439. package/src/engine/renderers/Indicator/fib.ts +2 -2
  440. package/src/engine/renderers/Indicator/hma.ts +5 -26
  441. package/src/engine/renderers/Indicator/hv.ts +3 -23
  442. package/src/engine/renderers/Indicator/ichimoku.ts +3 -3
  443. package/src/engine/renderers/Indicator/kama.ts +5 -26
  444. package/src/engine/renderers/Indicator/keltner.ts +3 -3
  445. package/src/engine/renderers/Indicator/kst.ts +3 -3
  446. package/src/engine/renderers/Indicator/ma.ts +1 -1
  447. package/src/engine/renderers/Indicator/macd.ts +4 -21
  448. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +127 -2
  449. package/src/engine/renderers/Indicator/mfi.ts +3 -22
  450. package/src/engine/renderers/Indicator/mom.ts +9 -30
  451. package/src/engine/renderers/Indicator/obv.ts +3 -21
  452. package/src/engine/renderers/Indicator/parkinson.ts +3 -23
  453. package/src/engine/renderers/Indicator/pivot.ts +2 -2
  454. package/src/engine/renderers/Indicator/pvt.ts +3 -21
  455. package/src/engine/renderers/Indicator/roc.ts +4 -23
  456. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  457. package/src/engine/renderers/Indicator/sar.ts +3 -3
  458. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
  459. package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
  460. package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
  461. package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
  462. package/src/engine/renderers/Indicator/stoch.ts +6 -71
  463. package/src/engine/renderers/Indicator/structure.ts +2 -2
  464. package/src/engine/renderers/Indicator/supertrend.ts +3 -3
  465. package/src/engine/renderers/Indicator/tema.ts +5 -26
  466. package/src/engine/renderers/Indicator/trix.ts +3 -3
  467. package/src/engine/renderers/Indicator/vma.ts +3 -22
  468. package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
  469. package/src/engine/renderers/Indicator/vwap.ts +3 -21
  470. package/src/engine/renderers/Indicator/wma.ts +5 -26
  471. package/src/engine/renderers/Indicator/wmsr.ts +9 -30
  472. package/src/engine/renderers/Indicator/zones.ts +2 -2
  473. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +30 -26
  474. package/src/engine/renderers/candle.ts +1 -1
  475. package/src/engine/renderers/comparisonLine.ts +1 -0
  476. package/src/engine/renderers/extremaMarkers.ts +1 -0
  477. package/src/engine/renderers/gridLines.ts +7 -36
  478. package/src/engine/renderers/lastPrice.ts +5 -2
  479. package/src/engine/renderers/leftYAxis.ts +93 -0
  480. package/src/engine/renderers/subVolume.ts +3 -3
  481. package/src/engine/renderers/timeAxis.ts +16 -13
  482. package/src/engine/renderers/timeShare.ts +271 -0
  483. package/src/engine/renderers/yAxis.ts +28 -24
  484. package/src/engine/scale/price.ts +2 -2
  485. package/src/engine/theme/fonts.ts +1 -1
  486. package/src/engine/utils/klineConfig.ts +1 -5
  487. package/src/engine/utils/tickPosition.ts +34 -0
  488. package/src/engine/viewport/chartViewportManager.ts +11 -15
  489. package/src/plugin/types.ts +11 -0
  490. package/src/semantic/types.ts +1 -1
  491. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +14 -0
  492. package/src/tokens/theme-base.ts +36 -0
  493. package/src/tokens/theme-china.ts +4 -0
  494. package/src/tokens/theme-dark.ts +12 -32
  495. package/src/tokens/theme-light.ts +13 -33
  496. package/src/tokens/types.ts +9 -0
  497. package/src/types/price.ts +13 -0
  498. package/src/utils/dateFormat.ts +27 -4
  499. package/src/utils/kLineDraw/axis.ts +40 -107
  500. package/src/utils/volumePrice.ts +2 -2
  501. package/src/version.ts +1 -1
@@ -1,11 +1,11 @@
1
1
  import type { RendererPlugin, RenderContext } from '../../plugin'
2
2
  import { RENDERER_PRIORITY, GLOBAL_PANE_ID } from '../../plugin'
3
3
  import { drawCrosshairPriceLabel, drawAxisPriceLabel } from '../../utils/kLineDraw/axis'
4
- import { drawScaleTicks } from '../renderers/Indicator/scale/indicator_scale'
5
4
  import { resolveThemeColors } from '../../tokens'
5
+ import { getFont, setCanvasFont } from '../theme/fonts'
6
+ import { roundToPhysicalPixel } from '../draw/pixelAlign'
6
7
 
7
8
  import type { KLineData } from '../../types/price'
8
- import type { ScaleType } from '../utils/tickPosition'
9
9
 
10
10
  /**
11
11
  * 创建 Y 轴渲染器插件
@@ -25,7 +25,14 @@ export function createYAxisRendererPlugin(options: {
25
25
  priority: RENDERER_PRIORITY.SYSTEM_YAXIS,
26
26
 
27
27
  draw(context: RenderContext) {
28
- const { ctx, pane, dpr, yAxisCtx, data } = context
28
+ const { ctx, pane, dpr, yAxisCtx, data, period } = context
29
+
30
+ // 分时模式始终显示右轴,不受设置约束
31
+ if (period !== 'timeshare') {
32
+ const rightType = context.settings?.rightAxisType as string | undefined
33
+ if (rightType === 'none') return
34
+ }
35
+
29
36
  const tokenColors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings)
30
37
  const scaleType = pane.yAxis.getScaleType()
31
38
 
@@ -35,32 +42,28 @@ export function createYAxisRendererPlugin(options: {
35
42
 
36
43
  const isPercent = scaleType === 'percent' && pane.role === 'price'
37
44
 
38
- if (pane.capabilities.showPriceAxisTicks) {
39
- const tickValueMin = isPercent ? pane.yAxis.getDisplayPercentRange().minPct : displayRange.minPrice
40
- const tickValueMax = isPercent ? pane.yAxis.getDisplayPercentRange().maxPct : displayRange.maxPrice
41
- const formatLabel = isPercent
45
+ if (pane.capabilities.showPriceAxisTicks && context.yAxisTicks) {
46
+ targetCtx.clearRect(0, 0, axisWidth, pane.height)
47
+
48
+ const font = getFont(12)
49
+ setCanvasFont(targetCtx, font)
50
+ targetCtx.textBaseline = 'middle'
51
+ targetCtx.textAlign = 'center'
52
+ targetCtx.fillStyle = tokenColors.text.secondary
53
+
54
+ const format = isPercent
42
55
  ? (v: number) => {
43
56
  const sign = v >= 0 ? '+' : ''
44
57
  return sign + v.toFixed(2) + '%'
45
58
  }
46
- : undefined
59
+ : (v: number) => v.toFixed(2)
47
60
 
48
- drawScaleTicks({
49
- tickColor: tokenColors.text.secondary,
50
- ctx: targetCtx,
51
- dpr,
52
- axisWidth,
53
- height: pane.height,
54
- paddingTop: pane.yAxis.getPaddingTop(),
55
- paddingBottom: pane.yAxis.getPaddingBottom(),
56
- valueMin: tickValueMin,
57
- valueMax: tickValueMax,
58
- isMain: true,
59
- decimals: 2,
60
- hideEdgeTicks: false,
61
- scaleType: isPercent ? 'percent' : scaleType,
62
- formatLabel,
63
- })
61
+ const textX = roundToPhysicalPixel(axisWidth / 2, dpr)
62
+
63
+ for (const tick of context.yAxisTicks) {
64
+ const displayValue = isPercent ? pane.yAxis.toPercent(tick.value) : tick.value
65
+ targetCtx.fillText(format(displayValue), textX, tick.y)
66
+ }
64
67
  }
65
68
 
66
69
  // 绘制价格范围带(先于标签,使标签覆盖在范围带之上)
@@ -80,6 +83,7 @@ export function createYAxisRendererPlugin(options: {
80
83
  // 绘制来自 yAxisLabels 的标签(最新价格、极值点、绘图锚点等)
81
84
  if (context.yAxisLabels && pane.role === 'price') {
82
85
  for (const label of context.yAxisLabels) {
86
+ if (label.price == null || !Number.isFinite(label.price)) continue
83
87
  const isLastPrice = label.type === 'lastPrice'
84
88
  drawAxisPriceLabel(targetCtx, {
85
89
  x: 0,
@@ -2,7 +2,7 @@
2
2
 
3
3
  export type PriceRange = { maxPrice: number; minPrice: number }
4
4
 
5
- export function priceToY(
5
+ function priceToY(
6
6
  price: number,
7
7
  maxPrice: number,
8
8
  minPrice: number,
@@ -22,7 +22,7 @@ export function priceToY(
22
22
  * - y 是相对于绘图区顶部的逻辑像素坐标(不含额外 translate)
23
23
  * - paddingTop/paddingBottom 需与 priceToY 使用一致
24
24
  */
25
- export function yToPrice(
25
+ function yToPrice(
26
26
  y: number,
27
27
  maxPrice: number,
28
28
  minPrice: number,
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  /** 数字和文本的标准字体栈 */
8
- export const FONT_FAMILY = '"Trebuchet MS", Roboto, Ubuntu, sans-serif'
8
+ const FONT_FAMILY = '"Trebuchet MS", Roboto, Ubuntu, sans-serif'
9
9
 
10
10
  /** 获取指定字号的字体字符串,用于 Canvas ctx.font */
11
11
  export function getFont(size: number, options?: { bold?: boolean }): string {
@@ -10,11 +10,7 @@
10
10
  * @returns 奇数化后的物理像素宽度
11
11
  */
12
12
  export function calcKWidthPx(kWidth: number, dpr: number): number {
13
- let kWidthPx = Math.round(kWidth * dpr)
14
- if (kWidthPx % 2 === 0) {
15
- kWidthPx += 1
16
- }
17
- return Math.max(1, kWidthPx)
13
+ return Math.max(1, Math.round(kWidth * dpr))
18
14
  }
19
15
 
20
16
  /**
@@ -206,6 +206,40 @@ function generatePixelUniformPercentTicks(options: {
206
206
  return positions
207
207
  }
208
208
 
209
+ /**
210
+ * 计算均匀像素 Y 位置的值(统一像素反算)
211
+ * 所有刻度类型都先确定像素均匀 Y 位置,再通过 yToPrice 反算该位置的值
212
+ */
213
+ export interface UniformPixelTick {
214
+ y: number
215
+ value: number
216
+ }
217
+
218
+ /**
219
+ * 在给定 Y 像素位置,按指定刻度类型反算价格/值
220
+ */
221
+ export function priceAtYForScaleType(
222
+ y: number,
223
+ valueMin: number,
224
+ valueMax: number,
225
+ scaleType: ScaleType,
226
+ height: number,
227
+ paddingTop: number,
228
+ paddingBottom: number,
229
+ ): number {
230
+ const viewH = Math.max(1, height - paddingTop - paddingBottom)
231
+ const ratio = 1 - (y - paddingTop) / viewH
232
+
233
+ if (scaleType === 'log') {
234
+ if (valueMin <= 0 || valueMax <= 0) return valueMin + ratio * (valueMax - valueMin)
235
+ const logMin = Math.log(valueMin)
236
+ const logMax = Math.log(valueMax)
237
+ return Math.exp(logMin + ratio * (logMax - logMin))
238
+ }
239
+
240
+ return valueMin + ratio * (valueMax - valueMin)
241
+ }
242
+
209
243
  // calculateValueTickPositions 缓存
210
244
  let _cvtpCacheKey = ''
211
245
  let _cvtpCacheResult: TickPositionWithValue[] = []
@@ -95,16 +95,6 @@ export class ChartViewportManager {
95
95
  this._pendingScrollLeft = v
96
96
  }
97
97
 
98
- /** 仅设置缓存 scrollLeft(由 DataManager 内部使用) */
99
- setCachedScrollLeft(v: number): void {
100
- this.cachedScrollLeft = v
101
- }
102
-
103
- /** 仅设置待写入 scrollLeft(由 DataManager 内部使用) */
104
- setPendingScrollLeft(v: number): void {
105
- this._pendingScrollLeft = v
106
- }
107
-
108
98
  /** 在 RAF 回调中应用待写入的 scrollLeft */
109
99
  applyPendingScrollLeft(container: HTMLElement): void {
110
100
  if (this._pendingScrollLeft !== null) {
@@ -206,7 +196,8 @@ export class ChartViewportManager {
206
196
 
207
197
  const dom = this.deps.getDom()
208
198
 
209
- const canvasLayerWidth = `${viewWidth}px`
199
+ const dprRoundedViewWidth = Math.round(viewWidth * dpr) / dpr
200
+ const canvasLayerWidth = `${dprRoundedViewWidth}px`
210
201
  if (dom.canvasLayer.style.width !== canvasLayerWidth) {
211
202
  dom.canvasLayer.style.width = canvasLayerWidth
212
203
  }
@@ -216,9 +207,9 @@ export class ChartViewportManager {
216
207
  dom.canvasLayer.style.height = canvasLayerHeight
217
208
  }
218
209
 
219
- const xAxisWidth = Math.round(plotWidth * dpr)
220
- if (dom.xAxisCanvas.width !== xAxisWidth) {
221
- dom.xAxisCanvas.width = xAxisWidth
210
+ const xAxisWidthPx = Math.round(dprRoundedViewWidth * dpr)
211
+ if (dom.xAxisCanvas.width !== xAxisWidthPx) {
212
+ dom.xAxisCanvas.width = xAxisWidthPx
222
213
  }
223
214
 
224
215
  const xAxisHeight = Math.round(this.deps.getBottomAxisHeight() * dpr)
@@ -226,7 +217,7 @@ export class ChartViewportManager {
226
217
  dom.xAxisCanvas.height = xAxisHeight
227
218
  }
228
219
 
229
- const xAxisCssWidth = `${xAxisWidth / dpr}px`
220
+ const xAxisCssWidth = `${dprRoundedViewWidth}px`
230
221
  if (dom.xAxisCanvas.style.width !== xAxisCssWidth) {
231
222
  dom.xAxisCanvas.style.width = xAxisCssWidth
232
223
  }
@@ -297,6 +288,11 @@ export class ChartViewportManager {
297
288
  this.observedSize.width = cssWidth
298
289
  this.observedSize.height = cssHeight
299
290
 
291
+ if (this.cachedScrollLeft === 0 && cssWidth > 0) {
292
+ this.cachedScrollLeft = cssWidth
293
+ this._pendingScrollLeft = cssWidth
294
+ }
295
+
300
296
  const pixelSize = entry.devicePixelContentBoxSize?.[0]
301
297
  const cssSize = entry.contentBoxSize?.[0]
302
298
  if (!pixelSize || !cssSize || cssSize.inlineSize <= 0) {
@@ -262,6 +262,14 @@ export interface XAxisRange {
262
262
  opacity: number
263
263
  }
264
264
 
265
+ /** Y轴刻度(位置+值),由 RenderContext 构建时预计算,所有 Y 轴渲染器共用 */
266
+ export interface YAxisTick {
267
+ /** Y像素位置(相对 pane 顶部,逻辑像素) */
268
+ y: number
269
+ /** 该Y位置通过 pane.yAxis.yToPrice 反算的价格值 */
270
+ value: number
271
+ }
272
+
265
273
  /** 渲染上下文 */
266
274
  /** MarkerManager 接口(用于 RenderContext) */
267
275
  export interface MarkerManagerLike {
@@ -294,6 +302,7 @@ export interface RenderContext {
294
302
  crosshairIndex?: number | null
295
303
  // 可选的其他 Canvas 上下文
296
304
  yAxisCtx?: CanvasRenderingContext2D
305
+ leftAxisCtx?: CanvasRenderingContext2D
297
306
  xAxisCtx?: CanvasRenderingContext2D
298
307
  borderCtx?: CanvasRenderingContext2D
299
308
  /** 覆盖层 Canvas 上下文(用于十字线、Tooltip 等动态内容) */
@@ -327,6 +336,8 @@ export interface RenderContext {
327
336
  isAsiaMarket?: boolean
328
337
  /** 用户颜色预设覆盖项 */
329
338
  colorPresetSettings?: import('../tokens').ColorPresetSettings
339
+ /** 预计算的 Y 轴刻度列表(统一像素均匀分布 → yToPrice 反算),所有 Y 轴渲染器共用 */
340
+ yAxisTicks?: YAxisTick[]
330
341
  }
331
342
 
332
343
  export type DrawingAnchor = {
@@ -31,7 +31,7 @@ export interface DataConfig {
31
31
  startDate: string
32
32
  /** 结束日期 YYYY-MM-DD */
33
33
  endDate: string
34
- period: 'daily' | 'weekly' | 'monthly' | '5min' | '15min' | '30min' | '60min'
34
+ period: 'daily' | 'weekly' | 'monthly' | '5min' | '15min' | '30min' | '60min' | 'timeshare'
35
35
  adjust: AdjustType
36
36
  }
37
37
 
@@ -14,6 +14,7 @@ exports[`theme baseline — dark > CSS declaration block (snapshot) 1`] = `
14
14
  --klc-color-candle-doji-border: #8A8F98;
15
15
  --klc-color-volume-up: #22D69B66;
16
16
  --klc-color-volume-down: #FF646466;
17
+ --klc-color-volume-neutral: #FFFFFF66;
17
18
  --klc-color-axis-text: #9AA0A6;
18
19
  --klc-color-axis-line: #2A2F36;
19
20
  --klc-color-axis-tick: #2A2F36;
@@ -41,6 +42,12 @@ exports[`theme baseline — dark > CSS declaration block (snapshot) 1`] = `
41
42
  --klc-color-avwap-line: #A78BFA;
42
43
  --klc-color-avwap-band: #A78BFA33;
43
44
  --klc-color-mtf-overlay: #38BDF8;
45
+ --klc-color-time-share-price-line: #60A5FA;
46
+ --klc-color-time-share-avg-line: #FBBF24;
47
+ --klc-color-time-share-area-up: rgba(34, 214, 155, 0.20);
48
+ --klc-color-time-share-area-down: rgba(255, 100, 100, 0.20);
49
+ --klc-color-time-share-pre-close: #9CA3AF;
50
+ --klc-color-time-share-volume: #60A5FA;
44
51
  --klc-color-palette-i1: #4A9EFF;
45
52
  --klc-color-palette-i2: #FFB95A;
46
53
  --klc-color-palette-i3: #22D69B;
@@ -207,6 +214,7 @@ exports[`theme baseline — light > CSS declaration block (snapshot) 1`] = `
207
214
  --klc-color-candle-doji-border: #6E6E6E;
208
215
  --klc-color-volume-up: #0F8B5C66;
209
216
  --klc-color-volume-down: #C2363B66;
217
+ --klc-color-volume-neutral: #00000066;
210
218
  --klc-color-axis-text: #5A5A5A;
211
219
  --klc-color-axis-line: #D0D0D0;
212
220
  --klc-color-axis-tick: #D0D0D0;
@@ -234,6 +242,12 @@ exports[`theme baseline — light > CSS declaration block (snapshot) 1`] = `
234
242
  --klc-color-avwap-line: #7C3AED;
235
243
  --klc-color-avwap-band: #7C3AED33;
236
244
  --klc-color-mtf-overlay: #0369A1;
245
+ --klc-color-time-share-price-line: #4A90D9;
246
+ --klc-color-time-share-avg-line: #F5A623;
247
+ --klc-color-time-share-area-up: rgba(15, 139, 92, 0.15);
248
+ --klc-color-time-share-area-down: rgba(213, 19, 26, 0.15);
249
+ --klc-color-time-share-pre-close: #888888;
250
+ --klc-color-time-share-volume: #4A90D9;
237
251
  --klc-color-palette-i1: #0072B2;
238
252
  --klc-color-palette-i2: #E69F00;
239
253
  --klc-color-palette-i3: #009E73;
@@ -0,0 +1,36 @@
1
+ import type { SpacingTokens, TypographyTokens, MotionTokens } from './types'
2
+
3
+ export const spacing: SpacingTokens = {
4
+ none: '0',
5
+ xxs: '2px',
6
+ xs: '4px',
7
+ sm: '8px',
8
+ md: '12px',
9
+ lg: '16px',
10
+ xl: '24px',
11
+ xxl: '32px',
12
+ xxxl: '64px',
13
+ }
14
+
15
+ export const typography: TypographyTokens = {
16
+ fontFamily:
17
+ "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
18
+ fontFamilyMono:
19
+ "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
20
+ fontSizeSm: '10px',
21
+ fontSizeMd: '12px',
22
+ fontSizeLg: '14px',
23
+ fontWeightRegular: 400,
24
+ fontWeightMedium: 500,
25
+ fontWeightBold: 700,
26
+ lineHeightTight: 1.2,
27
+ lineHeightStandard: 1.4,
28
+ }
29
+
30
+ export const motion: MotionTokens = {
31
+ durationInstant: '0ms',
32
+ durationFast: '120ms',
33
+ durationModerate: '200ms',
34
+ easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
35
+ easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
36
+ }
@@ -45,6 +45,10 @@ export function withAsiaMarketColors(theme: Theme): Theme {
45
45
  candleUpWick: theme.colors.candleDownWick,
46
46
  candleDownWick: theme.colors.candleUpWick,
47
47
 
48
+ // ── Time-share area fill ──
49
+ timeShareAreaUp: theme.colors.timeShareAreaDown,
50
+ timeShareAreaDown: theme.colors.timeShareAreaUp,
51
+
48
52
  // ── Volume bars ──
49
53
  volumeUp: theme.colors.volumeDown,
50
54
  volumeDown: theme.colors.volumeUp,
@@ -18,9 +18,13 @@
18
18
  */
19
19
 
20
20
  import type { Theme } from './types'
21
+ import { spacing, typography, motion } from './theme-base'
21
22
 
22
23
  export const darkTheme: Theme = {
23
24
  name: 'dark',
25
+ spacing,
26
+ typography,
27
+ motion,
24
28
  colors: {
25
29
  background: '#111827',
26
30
  foreground: '#E8EAED',
@@ -36,6 +40,7 @@ export const darkTheme: Theme = {
36
40
 
37
41
  volumeUp: '#22D69B66',
38
42
  volumeDown: '#FF646466',
43
+ volumeNeutral: '#FFFFFF66',
39
44
 
40
45
  axisText: '#9AA0A6',
41
46
  axisLine: '#2A2F36',
@@ -72,6 +77,13 @@ export const darkTheme: Theme = {
72
77
  avwapBand: '#A78BFA33',
73
78
  mtfOverlay: '#38BDF8',
74
79
 
80
+ timeSharePriceLine: '#60A5FA',
81
+ timeShareAvgLine: '#FBBF24',
82
+ timeShareAreaUp: 'rgba(34, 214, 155, 0.20)',
83
+ timeShareAreaDown: 'rgba(255, 100, 100, 0.20)',
84
+ timeSharePreClose: '#9CA3AF',
85
+ timeShareVolume: '#60A5FA',
86
+
75
87
  palette: {
76
88
  // Same hue ordering as light theme; values tuned for dark BG.
77
89
  i1: '#4A9EFF', // blue (brightened)
@@ -205,36 +217,4 @@ export const darkTheme: Theme = {
205
217
  },
206
218
  wmsrGrid: 'rgba(255, 255, 255, 0.1)',
207
219
  },
208
- spacing: {
209
- none: '0',
210
- xxs: '2px',
211
- xs: '4px',
212
- sm: '8px',
213
- md: '12px',
214
- lg: '16px',
215
- xl: '24px',
216
- xxl: '32px',
217
- xxxl: '64px',
218
- },
219
- typography: {
220
- fontFamily:
221
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
222
- fontFamilyMono:
223
- "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
224
- fontSizeSm: '10px',
225
- fontSizeMd: '12px',
226
- fontSizeLg: '14px',
227
- fontWeightRegular: 400,
228
- fontWeightMedium: 500,
229
- fontWeightBold: 700,
230
- lineHeightTight: 1.2,
231
- lineHeightStandard: 1.4,
232
- },
233
- motion: {
234
- durationInstant: '0ms',
235
- durationFast: '120ms',
236
- durationModerate: '200ms',
237
- easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
238
- easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
239
- },
240
220
  }
@@ -20,9 +20,13 @@
20
20
  */
21
21
 
22
22
  import type { Theme } from './types'
23
+ import { spacing, typography, motion } from './theme-base'
23
24
 
24
25
  export const lightTheme: Theme = {
25
26
  name: 'light',
27
+ spacing,
28
+ typography,
29
+ motion,
26
30
  colors: {
27
31
  background: '#FAFAFA',
28
32
  foreground: '#1F1F1F',
@@ -38,6 +42,7 @@ export const lightTheme: Theme = {
38
42
 
39
43
  volumeUp: '#0F8B5C66', // 40% alpha — paired with candleUp
40
44
  volumeDown: '#C2363B66',
45
+ volumeNeutral: '#00000066',
41
46
 
42
47
  axisText: '#5A5A5A',
43
48
  axisLine: '#D0D0D0',
@@ -78,6 +83,13 @@ export const lightTheme: Theme = {
78
83
  // #0369A1 → 4.59:1.
79
84
  mtfOverlay: '#0369A1',
80
85
 
86
+ timeSharePriceLine: '#4A90D9',
87
+ timeShareAvgLine: '#F5A623',
88
+ timeShareAreaUp: 'rgba(15, 139, 92, 0.15)',
89
+ timeShareAreaDown: 'rgba(213, 19, 26, 0.15)',
90
+ timeSharePreClose: '#888888',
91
+ timeShareVolume: '#4A90D9',
92
+
81
93
  palette: {
82
94
  // Okabe-Ito-derived qualitative scale, AA on #FAFAFA
83
95
  i1: '#0072B2', // strong blue
@@ -101,7 +113,7 @@ export const lightTheme: Theme = {
101
113
  weak: 'hsl(210, 7%, 65%)',
102
114
  white: 'rgba(255, 255, 255, 0.92)',
103
115
  },
104
- price: {
116
+ price: {
105
117
  lastPrice: 'rgba(230, 100, 115, 0.95)',
106
118
  },
107
119
  tagBg: {
@@ -211,36 +223,4 @@ price: {
211
223
  },
212
224
  wmsrGrid: 'rgba(0, 0, 0, 0.1)',
213
225
  },
214
- spacing: {
215
- none: '0',
216
- xxs: '2px',
217
- xs: '4px',
218
- sm: '8px',
219
- md: '12px',
220
- lg: '16px',
221
- xl: '24px',
222
- xxl: '32px',
223
- xxxl: '64px',
224
- },
225
- typography: {
226
- fontFamily:
227
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
228
- fontFamilyMono:
229
- "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
230
- fontSizeSm: '10px',
231
- fontSizeMd: '12px',
232
- fontSizeLg: '14px',
233
- fontWeightRegular: 400,
234
- fontWeightMedium: 500,
235
- fontWeightBold: 700,
236
- lineHeightTight: 1.2,
237
- lineHeightStandard: 1.4,
238
- },
239
- motion: {
240
- durationInstant: '0ms',
241
- durationFast: '120ms',
242
- durationModerate: '200ms',
243
- easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
244
- easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
245
- },
246
226
  }
@@ -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)