@363045841yyt/klinechart-core 0.9.0-alpha.2 → 0.9.0-alpha.4

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 (234) hide show
  1. package/dist/controllers/createChartController.d.ts.map +1 -1
  2. package/dist/controllers/createChartController.js +9 -8
  3. package/dist/controllers/createChartController.js.map +1 -1
  4. package/dist/controllers/index.d.ts +1 -0
  5. package/dist/controllers/index.d.ts.map +1 -1
  6. package/dist/controllers/index.js.map +1 -1
  7. package/dist/controllers/types.d.ts +5 -0
  8. package/dist/controllers/types.d.ts.map +1 -1
  9. package/dist/data/binance.d.ts +1 -1
  10. package/dist/data/binance.d.ts.map +1 -1
  11. package/dist/data/binance.js +1 -1
  12. package/dist/data/binance.js.map +1 -1
  13. package/dist/data/timeShareBuffer.d.ts +3 -0
  14. package/dist/data/timeShareBuffer.d.ts.map +1 -1
  15. package/dist/data/timeShareBuffer.js +13 -0
  16. package/dist/data/timeShareBuffer.js.map +1 -1
  17. package/dist/engine/chart.d.ts +9 -9
  18. package/dist/engine/chart.d.ts.map +1 -1
  19. package/dist/engine/chart.js +87 -101
  20. package/dist/engine/chart.js.map +1 -1
  21. package/dist/engine/chartTypes.d.ts +5 -0
  22. package/dist/engine/chartTypes.d.ts.map +1 -1
  23. package/dist/engine/controller/interaction.d.ts +4 -2
  24. package/dist/engine/controller/interaction.d.ts.map +1 -1
  25. package/dist/engine/controller/interaction.js +18 -10
  26. package/dist/engine/controller/interaction.js.map +1 -1
  27. package/dist/engine/data/chartDataManager.d.ts +14 -18
  28. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  29. package/dist/engine/data/chartDataManager.js +55 -37
  30. package/dist/engine/data/chartDataManager.js.map +1 -1
  31. package/dist/engine/data/incrementalLoadHint.d.ts +2 -4
  32. package/dist/engine/data/incrementalLoadHint.d.ts.map +1 -1
  33. package/dist/engine/data/incrementalLoadHint.js +5 -2
  34. package/dist/engine/data/incrementalLoadHint.js.map +1 -1
  35. package/dist/engine/data/scrollCompensator.d.ts +3 -13
  36. package/dist/engine/data/scrollCompensator.d.ts.map +1 -1
  37. package/dist/engine/data/scrollCompensator.js +13 -14
  38. package/dist/engine/data/scrollCompensator.js.map +1 -1
  39. package/dist/engine/indicators/chartIndicatorManager.d.ts +16 -17
  40. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  41. package/dist/engine/indicators/chartIndicatorManager.js +37 -37
  42. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  43. package/dist/engine/layout/chartPaneLayout.d.ts +11 -7
  44. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
  45. package/dist/engine/layout/chartPaneLayout.js +58 -16
  46. package/dist/engine/layout/chartPaneLayout.js.map +1 -1
  47. package/dist/engine/modes/timeShareMath.d.ts +56 -0
  48. package/dist/engine/modes/timeShareMath.d.ts.map +1 -0
  49. package/dist/engine/modes/timeShareMath.js +90 -0
  50. package/dist/engine/modes/timeShareMath.js.map +1 -0
  51. package/dist/engine/modes/timeShareMode.d.ts +5 -0
  52. package/dist/engine/modes/timeShareMode.d.ts.map +1 -1
  53. package/dist/engine/modes/timeShareMode.js +27 -27
  54. package/dist/engine/modes/timeShareMode.js.map +1 -1
  55. package/dist/engine/paneRenderer.d.ts +2 -0
  56. package/dist/engine/paneRenderer.d.ts.map +1 -1
  57. package/dist/engine/paneRenderer.js +15 -5
  58. package/dist/engine/paneRenderer.js.map +1 -1
  59. package/dist/engine/render/chartRenderer.d.ts +28 -22
  60. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  61. package/dist/engine/render/chartRenderer.js +143 -85
  62. package/dist/engine/render/chartRenderer.js.map +1 -1
  63. package/dist/engine/render/layers/leftYAxisLayer.d.ts +9 -2
  64. package/dist/engine/render/layers/leftYAxisLayer.d.ts.map +1 -1
  65. package/dist/engine/render/layers/leftYAxisLayer.js +11 -2
  66. package/dist/engine/render/layers/leftYAxisLayer.js.map +1 -1
  67. package/dist/engine/render/layers/mainIndicatorLegendLayer.d.ts +6 -4
  68. package/dist/engine/render/layers/mainIndicatorLegendLayer.d.ts.map +1 -1
  69. package/dist/engine/render/layers/mainIndicatorLegendLayer.js +6 -9
  70. package/dist/engine/render/layers/mainIndicatorLegendLayer.js.map +1 -1
  71. package/dist/engine/render/layers/mainIndicatorLegendLayer.test.d.ts +2 -0
  72. package/dist/engine/render/layers/mainIndicatorLegendLayer.test.d.ts.map +1 -0
  73. package/dist/engine/render/layers/mainIndicatorLegendLayer.test.js +19 -0
  74. package/dist/engine/render/layers/mainIndicatorLegendLayer.test.js.map +1 -0
  75. package/dist/engine/render/layers/yAxisLayer.d.ts +9 -2
  76. package/dist/engine/render/layers/yAxisLayer.d.ts.map +1 -1
  77. package/dist/engine/render/layers/yAxisLayer.js +11 -2
  78. package/dist/engine/render/layers/yAxisLayer.js.map +1 -1
  79. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts +7 -3
  80. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  81. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +234 -330
  82. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  83. package/dist/engine/renderers/Indicator/mainIndicatorLegendContext.d.ts +73 -0
  84. package/dist/engine/renderers/Indicator/mainIndicatorLegendContext.d.ts.map +1 -0
  85. package/dist/engine/renderers/Indicator/mainIndicatorLegendContext.js +182 -0
  86. package/dist/engine/renderers/Indicator/mainIndicatorLegendContext.js.map +1 -0
  87. package/dist/engine/renderers/leftYAxis.d.ts +15 -2
  88. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -1
  89. package/dist/engine/renderers/leftYAxis.js +56 -16
  90. package/dist/engine/renderers/leftYAxis.js.map +1 -1
  91. package/dist/engine/renderers/timeShare.d.ts.map +1 -1
  92. package/dist/engine/renderers/timeShare.js +20 -9
  93. package/dist/engine/renderers/timeShare.js.map +1 -1
  94. package/dist/engine/renderers/yAxis.d.ts +16 -6
  95. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  96. package/dist/engine/renderers/yAxis.js +49 -16
  97. package/dist/engine/renderers/yAxis.js.map +1 -1
  98. package/dist/engine/state/viewportState.d.ts +4 -1
  99. package/dist/engine/state/viewportState.d.ts.map +1 -1
  100. package/dist/engine/state/viewportState.js +40 -8
  101. package/dist/engine/state/viewportState.js.map +1 -1
  102. package/dist/engine/subPaneManager.d.ts +5 -3
  103. package/dist/engine/subPaneManager.d.ts.map +1 -1
  104. package/dist/engine/subPaneManager.js +3 -2
  105. package/dist/engine/subPaneManager.js.map +1 -1
  106. package/dist/engine/utils/chartZoomController.d.ts +9 -7
  107. package/dist/engine/utils/chartZoomController.d.ts.map +1 -1
  108. package/dist/engine/utils/chartZoomController.js +13 -12
  109. package/dist/engine/utils/chartZoomController.js.map +1 -1
  110. package/dist/engine/viewport/chartViewportManager.d.ts +5 -16
  111. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  112. package/dist/engine/viewport/chartViewportManager.js +7 -48
  113. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  114. package/dist/engine/viewport/viewport.d.ts +14 -0
  115. package/dist/engine/viewport/viewport.d.ts.map +1 -1
  116. package/dist/engine/viewport/viewport.js +10 -0
  117. package/dist/engine/viewport/viewport.js.map +1 -1
  118. package/dist/foundation/config/chartSettings.d.ts +0 -5
  119. package/dist/foundation/config/chartSettings.d.ts.map +1 -1
  120. package/dist/foundation/config/chartSettings.js +14 -0
  121. package/dist/foundation/config/chartSettings.js.map +1 -1
  122. package/dist/foundation/plugin/rendererPluginManager.test.js +15 -0
  123. package/dist/foundation/plugin/rendererPluginManager.test.js.map +1 -1
  124. package/dist/foundation/plugin/types.d.ts +3 -0
  125. package/dist/foundation/plugin/types.d.ts.map +1 -1
  126. package/dist/foundation/plugin/types.js.map +1 -1
  127. package/dist/foundation/reactivity/frameTransaction.d.ts +11 -0
  128. package/dist/foundation/reactivity/frameTransaction.d.ts.map +1 -1
  129. package/dist/foundation/reactivity/frameTransaction.js +17 -2
  130. package/dist/foundation/reactivity/frameTransaction.js.map +1 -1
  131. package/dist/foundation/utils/kLineDraw/axis.d.ts +3 -0
  132. package/dist/foundation/utils/kLineDraw/axis.d.ts.map +1 -1
  133. package/dist/foundation/utils/kLineDraw/axis.js +40 -9
  134. package/dist/foundation/utils/kLineDraw/axis.js.map +1 -1
  135. package/dist/foundation/utils/sessionTimeLabels.d.ts +59 -0
  136. package/dist/foundation/utils/sessionTimeLabels.d.ts.map +1 -0
  137. package/dist/foundation/utils/sessionTimeLabels.js +170 -0
  138. package/dist/foundation/utils/sessionTimeLabels.js.map +1 -0
  139. package/dist/foundation/utils/timeShareAxisLabels.d.ts +27 -0
  140. package/dist/foundation/utils/timeShareAxisLabels.d.ts.map +1 -0
  141. package/dist/foundation/utils/timeShareAxisLabels.js +45 -0
  142. package/dist/foundation/utils/timeShareAxisLabels.js.map +1 -0
  143. package/dist/rendering/render/Renderer.d.ts +58 -74
  144. package/dist/rendering/render/Renderer.d.ts.map +1 -1
  145. package/dist/rendering/render/Renderer.js +8 -18
  146. package/dist/rendering/render/Renderer.js.map +1 -1
  147. package/dist/rendering/render/createWebGPURenderer.d.ts.map +1 -1
  148. package/dist/rendering/render/createWebGPURenderer.js +30 -17
  149. package/dist/rendering/render/createWebGPURenderer.js.map +1 -1
  150. package/dist/rendering/render/createWebGPUSurfaceBackend.js +3 -3
  151. package/dist/rendering/render/createWebGPUSurfaceBackend.js.map +1 -1
  152. package/dist/rendering/render/physicalLine.d.ts +4 -0
  153. package/dist/rendering/render/physicalLine.d.ts.map +1 -0
  154. package/dist/rendering/render/physicalLine.js +37 -0
  155. package/dist/rendering/render/physicalLine.js.map +1 -0
  156. package/dist/rendering/render/physicalRegion.d.ts +14 -0
  157. package/dist/rendering/render/physicalRegion.d.ts.map +1 -0
  158. package/dist/rendering/render/physicalRegion.js +15 -0
  159. package/dist/rendering/render/physicalRegion.js.map +1 -0
  160. package/dist/rendering/scene/createLayerFromPlugin.d.ts.map +1 -1
  161. package/dist/rendering/scene/createLayerFromPlugin.js +8 -3
  162. package/dist/rendering/scene/createLayerFromPlugin.js.map +1 -1
  163. package/dist/rendering/scene/createScene.d.ts.map +1 -1
  164. package/dist/rendering/scene/createScene.js +4 -3
  165. package/dist/rendering/scene/createScene.js.map +1 -1
  166. package/dist/version.d.ts +1 -1
  167. package/dist/version.js +1 -1
  168. package/package.json +1 -1
  169. package/src/__tests__/stateKernel.test.ts +1 -0
  170. package/src/controllers/createChartController.ts +9 -8
  171. package/src/controllers/index.ts +11 -0
  172. package/src/controllers/types.ts +7 -0
  173. package/src/data/__tests__/timeShareBuffer.test.ts +45 -0
  174. package/src/data/binance.ts +1 -1
  175. package/src/data/timeShareBuffer.ts +15 -0
  176. package/src/engine/__tests__/chart.dpr.test.ts +31 -2
  177. package/src/engine/__tests__/paneRenderer.resize.test.ts +52 -54
  178. package/src/engine/__tests__/subPaneManager.test.ts +5 -3
  179. package/src/engine/chart.ts +105 -115
  180. package/src/engine/chartTypes.ts +5 -0
  181. package/src/engine/controller/__tests__/interaction.dpr.test.ts +39 -2
  182. package/src/engine/controller/interaction.ts +18 -10
  183. package/src/engine/data/__tests__/chartDataManager.incrementalLoad.test.ts +37 -17
  184. package/src/engine/data/__tests__/scrollCompensator.geometry.test.ts +87 -75
  185. package/src/engine/data/chartDataManager.ts +64 -59
  186. package/src/engine/data/incrementalLoadHint.ts +8 -7
  187. package/src/engine/data/scrollCompensator.ts +16 -24
  188. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +18 -26
  189. package/src/engine/indicators/chartIndicatorManager.ts +62 -62
  190. package/src/engine/layout/chartPaneLayout.ts +73 -21
  191. package/src/engine/modes/__tests__/timeShareMath.test.ts +185 -0
  192. package/src/engine/modes/__tests__/timeShareMode.test.ts +81 -0
  193. package/src/engine/modes/timeShareMath.ts +150 -0
  194. package/src/engine/modes/timeShareMode.ts +35 -28
  195. package/src/engine/paneRenderer.ts +17 -10
  196. package/src/engine/render/chartRenderer.ts +214 -145
  197. package/src/engine/render/layers/leftYAxisLayer.ts +29 -7
  198. package/src/engine/render/layers/mainIndicatorLegendLayer.test.ts +26 -0
  199. package/src/engine/render/layers/mainIndicatorLegendLayer.ts +13 -10
  200. package/src/engine/render/layers/yAxisLayer.ts +29 -7
  201. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +270 -403
  202. package/src/engine/renderers/Indicator/mainIndicatorLegendContext.ts +290 -0
  203. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +73 -2
  204. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +10 -6
  205. package/src/engine/renderers/leftYAxis.ts +60 -18
  206. package/src/engine/renderers/timeShare.ts +25 -9
  207. package/src/engine/renderers/yAxis.ts +57 -22
  208. package/src/engine/state/__tests__/settingsState.test.ts +9 -0
  209. package/src/engine/state/viewportState.ts +44 -8
  210. package/src/engine/subPaneManager.ts +8 -5
  211. package/src/engine/utils/chartZoomController.ts +22 -19
  212. package/src/engine/viewport/__tests__/visibleRange.clamp.test.ts +50 -0
  213. package/src/engine/viewport/chartViewportManager.ts +9 -60
  214. package/src/engine/viewport/viewport.ts +14 -0
  215. package/src/foundation/config/chartSettings.ts +13 -0
  216. package/src/foundation/plugin/rendererPluginManager.test.ts +18 -0
  217. package/src/foundation/plugin/types.ts +3 -0
  218. package/src/foundation/reactivity/frameTransaction.ts +20 -6
  219. package/src/foundation/utils/__tests__/sessionTimeLabels.test.ts +91 -0
  220. package/src/foundation/utils/kLineDraw/axis.ts +50 -9
  221. package/src/foundation/utils/sessionTimeLabels.ts +237 -0
  222. package/src/foundation/utils/timeShareAxisLabels.ts +94 -0
  223. package/src/rendering/render/Renderer.ts +69 -85
  224. package/src/rendering/render/__tests__/physicalLine.test.ts +51 -0
  225. package/src/rendering/render/__tests__/physicalRegion.test.ts +23 -0
  226. package/src/rendering/render/__tests__/webgpuRenderer.test.ts +31 -1
  227. package/src/rendering/render/__tests__/webgpuSurfaceBackend.test.ts +11 -0
  228. package/src/rendering/render/createWebGPURenderer.ts +30 -17
  229. package/src/rendering/render/createWebGPUSurfaceBackend.ts +3 -3
  230. package/src/rendering/render/physicalLine.ts +45 -0
  231. package/src/rendering/render/physicalRegion.ts +32 -0
  232. package/src/rendering/scene/createLayerFromPlugin.ts +8 -3
  233. package/src/rendering/scene/createScene.ts +4 -3
  234. package/src/version.ts +1 -1
@@ -1,6 +1,14 @@
1
1
  import type { ChartDataManager } from '../data/chartDataManager'
2
2
  import type { Pane, VisibleRange } from '../layout/pane'
3
3
 
4
+ import type { MarketSessionConfig } from '../../foundation/utils/timeShareAxisLabels'
5
+ import { ASHARE_MARKET_SESSION } from '../../foundation/utils/timeShareAxisLabels'
6
+
7
+ import {
8
+ computeTimeShareBarMetrics,
9
+ computeTimeSharePriceRange,
10
+ resolveTimeShareBaseline,
11
+ } from './timeShareMath'
4
12
  import type { ChartModeHandler } from './types'
5
13
 
6
14
  export class TimeShareMode implements ChartModeHandler {
@@ -12,6 +20,17 @@ export class TimeShareMode implements ChartModeHandler {
12
20
  readonly allowRightAxisScale = false
13
21
  readonly useIndicatorScheduler = false
14
22
 
23
+ /** 市场 session;默认 A 股,可 setMarketSession 切换 */
24
+ private _marketSession: MarketSessionConfig = ASHARE_MARKET_SESSION
25
+
26
+ get marketSession(): MarketSessionConfig {
27
+ return this._marketSession
28
+ }
29
+
30
+ setMarketSession(config: MarketSessionConfig): void {
31
+ this._marketSession = config
32
+ }
33
+
15
34
  computeContentWidth(
16
35
  _dataLength: number,
17
36
  leftBufferWidth: number,
@@ -27,17 +46,7 @@ export class TimeShareMode implements ChartModeHandler {
27
46
  viewWidth: number,
28
47
  dpr: number,
29
48
  ): { kWidth: number; kGap: number } | null {
30
- if (dataLength <= 0 || viewWidth <= 0) return null
31
-
32
- const kGapPx = 1
33
- const totalGapPx = (dataLength + 1) * kGapPx
34
- const availablePx = Math.max(1, viewWidth * dpr - totalGapPx)
35
- const kWidthPx = Math.max(1, Math.floor(availablePx / dataLength))
36
-
37
- return {
38
- kWidth: kWidthPx / dpr,
39
- kGap: kGapPx / dpr,
40
- }
49
+ return computeTimeShareBarMetrics(dataLength, viewWidth, dpr, this._marketSession)
41
50
  }
42
51
 
43
52
  updatePaneRange(
@@ -47,30 +56,28 @@ export class TimeShareMode implements ChartModeHandler {
47
56
  _mergedIndicatorRange?: { min: number; max: number } | null,
48
57
  ): void {
49
58
  const tsData = dm.getTimeShareData()
50
- const end = Math.min(range.end, tsData.length)
51
59
  if (tsData.length === 0) return
52
60
 
53
- const baseline = tsData[0]?.price ?? 0
54
- if (baseline === 0) return
61
+ const end = Math.min(range.end, tsData.length)
62
+ const start = Math.max(0, range.start)
63
+ // 优先昨收;缺失时回退首笔价
64
+ const baseline = resolveTimeShareBaseline({
65
+ preClose: dm.getTimeSharePreClose(),
66
+ firstPrice: tsData[0]?.price,
67
+ })
68
+ if (baseline === null) return
55
69
 
56
70
  // scaleType 由 kernel.paneScaleTypes 投影(进入 timeshare 时写 percent);此处只设会话 basePrice
57
71
  pane.yAxis.setBasePrice(baseline)
58
72
 
59
- let maxAbsPct = 0
60
- for (let i = Math.max(0, range.start); i < end; i++) {
73
+ const prices: number[] = []
74
+ for (let i = start; i < end; i++) {
61
75
  const p = tsData[i]?.price
62
- if (p !== undefined && Number.isFinite(p)) {
63
- const pct = Math.abs((p - baseline) / baseline) * 100
64
- if (pct > maxAbsPct) maxAbsPct = pct
65
- }
76
+ if (p !== undefined) prices.push(p)
66
77
  }
67
- if (maxAbsPct <= 0) return
68
-
69
- const padding = Math.max(maxAbsPct * 0.1, 0.5)
70
- const displayPct = maxAbsPct + padding
71
- const minPrice = baseline * (1 - displayPct / 100)
72
- const maxPrice = baseline * (1 + displayPct / 100)
73
- pane.yAxis.setRange({ maxPrice, minPrice })
78
+ const priceRange = computeTimeSharePriceRange(prices, baseline)
79
+ if (!priceRange) return
80
+ pane.yAxis.setRange(priceRange)
74
81
  }
75
82
 
76
83
  onActivate(
@@ -103,6 +110,6 @@ export class TimeShareMode implements ChartModeHandler {
103
110
  _next: ChartModeHandler | null,
104
111
  ): void {
105
112
  chart.disableMainIndicator('timeShare')
106
- chart.setRendererEnabled('candle', true)
113
+ // candle 可见性由 Chart.setActiveMode 按进入前快照恢复,此处不强制 true
107
114
  }
108
115
  }
@@ -6,7 +6,9 @@ export type PaneRendererContexts = {
6
6
  mainCtx: CanvasRenderingContext2D | null
7
7
  overlayCtx: CanvasRenderingContext2D | null
8
8
  yAxisCtx: CanvasRenderingContext2D | null
9
+ yAxisOverlayCtx: CanvasRenderingContext2D | null
9
10
  leftAxisCtx: CanvasRenderingContext2D | null
11
+ leftAxisOverlayCtx: CanvasRenderingContext2D | null
10
12
  }
11
13
 
12
14
  export type PaneRendererOptions = {
@@ -17,7 +19,7 @@ export type PaneRendererOptions = {
17
19
  }
18
20
 
19
21
  /* PaneRenderer:负责单个 Pane 的 Canvas 管理与运行时状态持有
20
- 创建并管理 mainCanvas / overlayCanvas / yAxisCanvas
22
+ 创建并管理 main/overlay/yAxis/yAxisOverlay(及可选 left 轴)canvas
21
23
  持有 Pane 实例(布局、Y 轴、价格范围)
22
24
  响应 Chart 的 resize / layout 信号
23
25
  GPU 绘制经 ChartRenderer.sceneRenderer(SharedWebGLSurface),本类不再持有 per-pane surface */
@@ -52,7 +54,9 @@ export class PaneRenderer {
52
54
  mainCtx: this.dom.mainCanvas.getContext('2d'),
53
55
  overlayCtx: this.dom.overlayCanvas.getContext('2d'),
54
56
  yAxisCtx: this.dom.yAxisCanvas.getContext('2d'),
57
+ yAxisOverlayCtx: this.dom.yAxisOverlayCanvas.getContext('2d'),
55
58
  leftAxisCtx: this.dom.leftYAxisCanvas?.getContext('2d') ?? null,
59
+ leftAxisOverlayCtx: this.dom.leftYAxisOverlayCanvas?.getContext('2d') ?? null,
56
60
  }
57
61
  }
58
62
  return this.contexts
@@ -90,6 +94,7 @@ export class PaneRenderer {
90
94
  const mainCanvas = this.dom.mainCanvas
91
95
  const overlayCanvas = this.dom.overlayCanvas
92
96
  const yAxisCanvas = this.dom.yAxisCanvas
97
+ const yAxisOverlayCanvas = this.dom.yAxisOverlayCanvas
93
98
 
94
99
  // 先读取 parentClientWidth,避免在写入样式后读取触发强制回流
95
100
  const fallbackYAxisWidth = this.opt.rightAxisWidth + (this.opt.priceLabelWidth || 60)
@@ -104,22 +109,24 @@ export class PaneRenderer {
104
109
  // Overlay Canvas - 与 Main Canvas 相同尺寸
105
110
  PaneRenderer.resizeCanvas(overlayCanvas, mainWidth, mainHeight, dpr)
106
111
 
107
- // YAxis Canvas
112
+ // YAxis Canvas + overlay 轴(同尺寸)
108
113
  const yAxisWidth = Math.round(canvasYAxisWidth * dpr)
109
- PaneRenderer.resizeCanvas(yAxisCanvas, yAxisWidth, Math.round(height * dpr), dpr)
114
+ const yAxisHeight = Math.round(height * dpr)
115
+ PaneRenderer.resizeCanvas(yAxisCanvas, yAxisWidth, yAxisHeight, dpr)
116
+ PaneRenderer.resizeCanvas(yAxisOverlayCanvas, yAxisWidth, yAxisHeight, dpr)
110
117
 
111
- // Left YAxis Canvas
118
+ // Left YAxis Canvas + overlay
112
119
  const leftCanvas = this.dom.leftYAxisCanvas
120
+ const leftOverlayCanvas = this.dom.leftYAxisOverlayCanvas
113
121
  if (leftCanvas) {
114
122
  const fallbackLeftAxisWidth = this.opt.leftAxisWidth
115
123
  const leftParentWidth = leftCanvas.parentElement?.clientWidth ?? 0
116
124
  const canvasLeftAxisWidth = leftParentWidth > 0 ? leftParentWidth : fallbackLeftAxisWidth
117
- PaneRenderer.resizeCanvas(
118
- leftCanvas,
119
- Math.round(Math.max(canvasLeftAxisWidth, 0) * dpr),
120
- Math.round(height * dpr),
121
- dpr,
122
- )
125
+ const leftW = Math.round(Math.max(canvasLeftAxisWidth, 0) * dpr)
126
+ PaneRenderer.resizeCanvas(leftCanvas, leftW, yAxisHeight, dpr)
127
+ if (leftOverlayCanvas) {
128
+ PaneRenderer.resizeCanvas(leftOverlayCanvas, leftW, yAxisHeight, dpr)
129
+ }
123
130
  }
124
131
  }
125
132