@363045841yyt/klinechart-core 0.8.1-alpha.4 → 0.8.1

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 (110) hide show
  1. package/dist/controllers/createChartController.d.ts.map +1 -1
  2. package/dist/controllers/createChartController.js +21 -1
  3. package/dist/controllers/createChartController.js.map +1 -1
  4. package/dist/controllers/types.d.ts +6 -1
  5. package/dist/controllers/types.d.ts.map +1 -1
  6. package/dist/data-fetchers/baostock.js +3 -3
  7. package/dist/data-fetchers/baostock.js.map +1 -1
  8. package/dist/data-fetchers/dataBuffer.d.ts +5 -1
  9. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  10. package/dist/data-fetchers/dataBuffer.js +82 -48
  11. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  12. package/dist/data-fetchers/tradingview.d.ts.map +1 -1
  13. package/dist/data-fetchers/tradingview.js +4 -5
  14. package/dist/data-fetchers/tradingview.js.map +1 -1
  15. package/dist/engine/chart.d.ts +29 -367
  16. package/dist/engine/chart.d.ts.map +1 -1
  17. package/dist/engine/chart.js +239 -1842
  18. package/dist/engine/chart.js.map +1 -1
  19. package/dist/engine/chartContext.d.ts +24 -0
  20. package/dist/engine/chartContext.d.ts.map +1 -0
  21. package/dist/engine/chartContext.js +19 -0
  22. package/dist/engine/chartContext.js.map +1 -0
  23. package/dist/engine/chartTypes.d.ts +77 -0
  24. package/dist/engine/chartTypes.d.ts.map +1 -0
  25. package/dist/engine/chartTypes.js +2 -0
  26. package/dist/engine/chartTypes.js.map +1 -0
  27. package/dist/engine/data/chartDataManager.d.ts +102 -0
  28. package/dist/engine/data/chartDataManager.d.ts.map +1 -0
  29. package/dist/engine/data/chartDataManager.js +590 -0
  30. package/dist/engine/data/chartDataManager.js.map +1 -0
  31. package/dist/engine/indicators/chartIndicatorManager.d.ts +102 -0
  32. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -0
  33. package/dist/engine/indicators/chartIndicatorManager.js +437 -0
  34. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -0
  35. package/dist/engine/layout/chartPaneLayout.d.ts +53 -0
  36. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -0
  37. package/dist/engine/layout/chartPaneLayout.js +388 -0
  38. package/dist/engine/layout/chartPaneLayout.js.map +1 -0
  39. package/dist/engine/render/chartRenderer.d.ts +86 -0
  40. package/dist/engine/render/chartRenderer.d.ts.map +1 -0
  41. package/dist/engine/render/chartRenderer.js +438 -0
  42. package/dist/engine/render/chartRenderer.js.map +1 -0
  43. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  44. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +73 -7
  45. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  46. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  47. package/dist/engine/renderers/comparisonLine.js +25 -11
  48. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  49. package/dist/engine/subPaneManager.d.ts +27 -6
  50. package/dist/engine/subPaneManager.d.ts.map +1 -1
  51. package/dist/engine/subPaneManager.js +54 -56
  52. package/dist/engine/subPaneManager.js.map +1 -1
  53. package/dist/engine/utils/chartZoomController.d.ts +33 -0
  54. package/dist/engine/utils/chartZoomController.d.ts.map +1 -0
  55. package/dist/engine/utils/chartZoomController.js +66 -0
  56. package/dist/engine/utils/chartZoomController.js.map +1 -0
  57. package/dist/engine/viewport/chartViewportManager.d.ts +72 -0
  58. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -0
  59. package/dist/engine/viewport/chartViewportManager.js +249 -0
  60. package/dist/engine/viewport/chartViewportManager.js.map +1 -0
  61. package/dist/plugin/types.d.ts +1 -0
  62. package/dist/plugin/types.d.ts.map +1 -1
  63. package/dist/plugin/types.js.map +1 -1
  64. package/dist/tokens/theme-china.d.ts.map +1 -1
  65. package/dist/tokens/theme-china.js +0 -4
  66. package/dist/tokens/theme-china.js.map +1 -1
  67. package/dist/tokens/theme-dark.d.ts.map +1 -1
  68. package/dist/tokens/theme-dark.js +0 -4
  69. package/dist/tokens/theme-dark.js.map +1 -1
  70. package/dist/tokens/theme-light.d.ts.map +1 -1
  71. package/dist/tokens/theme-light.js +1 -5
  72. package/dist/tokens/theme-light.js.map +1 -1
  73. package/dist/tokens/types.d.ts +0 -4
  74. package/dist/tokens/types.d.ts.map +1 -1
  75. package/dist/types/price.d.ts +2 -0
  76. package/dist/types/price.d.ts.map +1 -1
  77. package/dist/types/price.js.map +1 -1
  78. package/dist/version.d.ts +1 -1
  79. package/dist/version.d.ts.map +1 -1
  80. package/dist/version.js +1 -1
  81. package/dist/version.js.map +1 -1
  82. package/package.json +1 -1
  83. package/src/controllers/createChartController.ts +39 -10
  84. package/src/controllers/types.ts +6 -1
  85. package/src/data-fetchers/baostock.ts +3 -3
  86. package/src/data-fetchers/dataBuffer.ts +64 -23
  87. package/src/data-fetchers/tradingview.ts +4 -5
  88. package/src/engine/__tests__/subPaneManager.test.ts +154 -0
  89. package/src/engine/chart.ts +252 -2250
  90. package/src/engine/chartContext.ts +34 -0
  91. package/src/engine/chartTypes.ts +88 -0
  92. package/src/engine/data/chartDataManager.ts +691 -0
  93. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +103 -0
  94. package/src/engine/indicators/chartIndicatorManager.ts +566 -0
  95. package/src/engine/layout/chartPaneLayout.ts +474 -0
  96. package/src/engine/render/chartRenderer.ts +579 -0
  97. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +99 -13
  98. package/src/engine/renderers/comparisonLine.ts +25 -11
  99. package/src/engine/subPaneManager.ts +75 -59
  100. package/src/engine/utils/chartZoomController.ts +104 -0
  101. package/src/engine/viewport/chartViewportManager.ts +310 -0
  102. package/src/plugin/types.ts +1 -0
  103. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +1 -9
  104. package/src/tokens/theme-china.ts +0 -4
  105. package/src/tokens/theme-dark.ts +0 -4
  106. package/src/tokens/theme-light.ts +2 -6
  107. package/src/tokens/types.ts +0 -4
  108. package/src/types/price.ts +2 -0
  109. package/src/version.ts +1 -1
  110. package/src/engine/chart.d.ts +0 -626
@@ -1,626 +0,0 @@
1
- import type { KLineData } from '@/types/price';
2
- import type { ChartSettings } from '@/config/chartSettings';
3
- import { type Signal } from '../../packages/core/src/reactivity/signal';
4
- import { type VisibleRange, UpdateLevel } from '@/core/layout/pane';
5
- import { InteractionController, type InteractionSnapshot } from '@/core/controller/interaction';
6
- export type { InteractionSnapshot };
7
- import { PaneRenderer } from '@/core/paneRenderer';
8
- import { MarkerManager, type CustomMarkerEntity } from './marker/registry';
9
- import { getPhysicalKLineConfig, calcKWidthPx } from '@/core/utils/klineConfig';
10
- import { IndicatorScheduler } from '@/core/indicators/scheduler';
11
- import { type SubPaneEntry } from '@/core/subPaneManager';
12
- import { type PluginHostImpl, type RendererPlugin, type RendererPluginWithHost, type PaneRole, type PaneCapabilities } from '@/plugin';
13
- import { type SubIndicatorType } from '@/core/renderers/Indicator';
14
- export { getPhysicalKLineConfig, calcKWidthPx };
15
- /**
16
- * 图表 DOM 元素引用
17
- * @property container 图表容器 div
18
- * @property canvasLayer Canvas 层容器 div(包含所有绘制 canvas)
19
- */
20
- /**
21
- * 图表 DOM 元素引用
22
- * @property container 图表容器 div
23
- * @property scrollContent 滚动内容容器 div
24
- * @property canvasLayer Canvas 层容器 div(包含所有绘制 canvas)
25
- * @property xAxisCanvas X 轴时间轴 canvas
26
- */
27
- export type ChartDom = {
28
- container: HTMLDivElement;
29
- scrollContent?: HTMLDivElement;
30
- canvasLayer: HTMLDivElement;
31
- rightAxisLayer: HTMLDivElement;
32
- xAxisCanvas: HTMLCanvasElement;
33
- };
34
- /**
35
- * Pane 面板配置
36
- * @property id Pane 标识符
37
- * @property ratio Pane 高度占比
38
- * @property visible 是否可见(默认 true)
39
- */
40
- export type PaneSpec = {
41
- id: string;
42
- ratio: number;
43
- visible?: boolean;
44
- minHeightPx?: number;
45
- role?: PaneRole;
46
- capabilities?: Partial<PaneCapabilities>;
47
- };
48
- export type PaneRendererDom = {
49
- mainCanvas: HTMLCanvasElement;
50
- overlayCanvas: HTMLCanvasElement;
51
- yAxisCanvas: HTMLCanvasElement;
52
- };
53
- export type ChartOptions = {
54
- /** K 线宽度(可选,由 zoomLevel 派生) */
55
- kWidth?: number;
56
- /** K 线间隙(可选,由 DPR 计算) */
57
- kGap?: number;
58
- yPaddingPx: number;
59
- rightAxisWidth: number;
60
- bottomAxisHeight: number;
61
- minKWidth: number;
62
- maxKWidth: number;
63
- panes: PaneSpec[];
64
- /** pane 之间的真实分隔空隙(逻辑像素) */
65
- paneGap?: number;
66
- /** 价格标签额外宽度(用于显示涨跌幅,默认 60px) */
67
- priceLabelWidth?: number;
68
- /** pane 最小高度(逻辑像素,默认 60) */
69
- defaultPaneMinHeightPx?: number;
70
- /**
71
- * 缩放级别数量(默认 10)
72
- * - 将 minKWidth ~ maxKWidth 划分为多少个离散级别
73
- * - 例如 10 表示有 10 个缩放级别(1-10)
74
- */
75
- zoomLevels?: number;
76
- /**
77
- * 初始缩放级别(1 ~ zoomLevels,默认 1)
78
- * 未指定时默认为最小级别
79
- */
80
- initialZoomLevel?: number;
81
- };
82
- /** K 线起始 x 坐标数组,positions[i] 表示第 i 根 K 线的起始 x 坐标(逻辑像素) */
83
- export type KLinePositions = number[];
84
- export type Viewport = {
85
- viewWidth: number;
86
- viewHeight: number;
87
- plotWidth: number;
88
- plotHeight: number;
89
- scrollLeft: number;
90
- dpr: number;
91
- };
92
- type ResolvedChartOptions = Omit<ChartOptions, 'kWidth' | 'kGap'> & {
93
- kWidth: number;
94
- kGap: number;
95
- };
96
- export declare class Chart {
97
- private dom;
98
- private opt;
99
- private _internalData;
100
- private raf;
101
- private pendingUpdateLevel;
102
- private _internalViewport;
103
- private paneRenderers;
104
- private markerManager;
105
- private drawingStore;
106
- readonly interaction: InteractionController;
107
- /** 插件宿主 */
108
- private pluginHost;
109
- /** 渲染器插件管理器 */
110
- private rendererPluginManager;
111
- /** 精确 DPR(来自 ResizeObserver 的 devicePixelContentBoxSize) */
112
- private preciseDpr;
113
- /** 统一监听容器尺寸与 DPR 变化 */
114
- private resizeObserver?;
115
- /** scroll 事件处理器引用(用于 cleanup) */
116
- private onScroll?;
117
- /** 最近一次观测到的容器尺寸 */
118
- private observedSize;
119
- /** 缓存的 scrollLeft(通过 scroll 事件同步,避免每帧读取 DOM 触发强制回流) */
120
- private cachedScrollLeft;
121
- /** 待写入 DOM 的 scrollLeft(在 RAF 回调中应用) */
122
- private _pendingScrollLeft;
123
- /** overlay 上一帧是否有十字线(用于判断何时需要清除) */
124
- private overlayHadCrosshair;
125
- /** 用户设置配置(传递给渲染器) */
126
- private settings;
127
- /** pane ratio 状态(按 paneId 维护,sum=1 仅对可见 pane) */
128
- private _internalPaneRatios;
129
- /** 视口变化回调(供外部同步 DPR/尺寸) */
130
- private onViewportChange?;
131
- /** 共享 X 轴上下文缓存 */
132
- private xAxisCtx;
133
- /** Chart 级共享 WebGL canvas/context */
134
- private sharedWebGLSurface;
135
- /** pane 布局回流回调(Chart -> UI 单向) */
136
- private onPaneLayoutChange?;
137
- /** 数据变化回调(供外部同步 dataLength) */
138
- private onDataChange?;
139
- /** 当前缩放级别(1 ~ zoomLevelCount) */
140
- private currentZoomLevel;
141
- /** 缩放级别总数 */
142
- private readonly zoomLevelCount;
143
- /** 指标调度器(负责计算 MA 等指标并写入 StateStore)
144
- * TODO: 阶段5迁移为插件注册,Scheduler 通过事件监听 data/viewport 变更,Chart 不直接持有
145
- */
146
- private indicatorScheduler;
147
- /** 上次可见范围(用于检测视口变化) */
148
- private lastVisibleRange;
149
- /** Overlay 帧复用的最近主渲染结果 */
150
- private cachedDrawFrame;
151
- /** 副图管理器 */
152
- private subPaneManager;
153
- /** 当前激活的主图指标列表(如 ['boll', 'ma']) */
154
- private activeMainIndicators;
155
- /** 主图指标参数配置 */
156
- private mainIndicatorParams;
157
- /**
158
- * 启用主图指标
159
- * @param indicatorId 指标ID
160
- * @param params 可选的指标参数
161
- * @returns 是否成功启用
162
- */
163
- enableMainIndicator(indicatorId: string, params?: Record<string, number | boolean | string>): boolean;
164
- /**
165
- * 禁用主图指标
166
- * @param indicatorId 指标ID
167
- * @returns 是否成功禁用
168
- */
169
- disableMainIndicator(indicatorId: string): boolean;
170
- /**
171
- * 切换主图指标启用状态
172
- * @param indicatorId 指标ID
173
- * @param enabled 是否启用
174
- */
175
- toggleMainIndicator(indicatorId: string, enabled: boolean): void;
176
- /**
177
- * 获取当前激活的主图指标列表
178
- * @returns 激活的指标ID数组
179
- */
180
- getActiveMainIndicators(): string[];
181
- /**
182
- * 检查主图指标是否激活
183
- * @param indicatorId 指标ID
184
- */
185
- isMainIndicatorActive(indicatorId: string): boolean;
186
- /**
187
- * 更新主图指标参数
188
- * @param indicatorId 指标ID
189
- * @param params 参数对象
190
- */
191
- updateMainIndicatorParams(indicatorId: string, params: Record<string, number | boolean | string>): void;
192
- /**
193
- * 获取主图指标参数
194
- * @param indicatorId 指标ID
195
- */
196
- getMainIndicatorParams(indicatorId: string): Record<string, number | boolean | string> | null;
197
- /**
198
- * 清除所有主图指标
199
- */
200
- clearMainIndicators(): void;
201
- /**
202
- * 启用主图指标渲染器(内部方法)
203
- */
204
- private enableMainIndicatorRenderer;
205
- /**
206
- * 禁用主图指标渲染器(内部方法)
207
- */
208
- private disableMainIndicatorRenderer;
209
- /**
210
- * 更新调度器配置(内部方法)
211
- */
212
- private updateIndicatorSchedulerConfig;
213
- /**
214
- * @deprecated 使用 enableMainIndicator/disableMainIndicator 替代
215
- */
216
- setActiveMainIndicators(indicators: string[]): void;
217
- /**
218
- * 创建图表实例
219
- * @param dom 由 Vue 组件传入的 DOM 句柄
220
- * @param opt 初始配置
221
- */
222
- constructor(dom: ChartDom, opt: ChartOptions);
223
- private initCoreRenderers;
224
- private initResizeObserver;
225
- private updateObservedMetrics;
226
- private getEffectiveDpr;
227
- getViewport(): Viewport | null;
228
- getCurrentDpr(): number;
229
- /** 获取缓存的 scrollLeft(避免读取 DOM 触发强制回流) */
230
- getCachedScrollLeft(): number;
231
- /** 获取逻辑 scrollLeft(减去左侧加载缓冲宽度,可为负值) */
232
- getLogicalScrollLeft(): number;
233
- /** 获取插件宿主 */
234
- get plugin(): PluginHostImpl;
235
- /** 安装渲染器插件 */
236
- useRenderer(plugin: RendererPlugin | RendererPluginWithHost, config?: Record<string, unknown>): void;
237
- /** 移除渲染器插件 */
238
- removeRenderer(name: string): void;
239
- /** 获取渲染器插件 */
240
- getRenderer<T extends RendererPlugin = RendererPlugin>(name: string): T | undefined;
241
- /** 更新渲染器配置(自动重绘) */
242
- updateRendererConfig(name: string, config: Record<string, unknown>): void;
243
- /** 启用/禁用渲染器 */
244
- setRendererEnabled(name: string, enabled: boolean): void;
245
- /** 获取所有渲染器 */
246
- getAllRenderers(): RendererPlugin[];
247
- /** 更新用户设置(触发重绘) */
248
- updateSettings(settings: ChartSettings): void;
249
- /**
250
- * 绘制一帧
251
- * @param level 更新级别,决定渲染哪些层
252
- */
253
- draw(level?: UpdateLevel): void;
254
- private prepareFrameData;
255
- private renderPanes;
256
- private renderXAxis;
257
- /**
258
- * 应用渲染状态(由 Vue/Store 层在状态更新后调用)
259
- * Chart 不拥有业务 SSOT,只负责接收参数并渲染
260
- * 这是写入 opt.kWidth/kGap 和 currentZoomLevel 的唯一入口
261
- */
262
- applyRenderState(kWidth: number, kGap: number, zoomLevel?: number): void;
263
- /** 获取总缩放级别数 */
264
- getZoomLevelCount(): number;
265
- /** 注册视口变化回调 */
266
- setOnViewportChange(cb: (viewport: Viewport) => void): void;
267
- /** 注册 pane 布局回流回调 */
268
- setOnPaneLayoutChange(cb: (panes: PaneSpec[]) => void): void;
269
- /** 注册数据变化回调 */
270
- setOnDataChange(cb: (data: KLineData[]) => void): void;
271
- /** 获取所有 PaneRenderer */
272
- getPaneRenderers(): PaneRenderer[];
273
- /** 获取 MarkerManager(供 InteractionController 使用) */
274
- getMarkerManager(): MarkerManager;
275
- /** 更新自定义标记 */
276
- updateCustomMarkers(markers: CustomMarkerEntity[]): void;
277
- /** 清除自定义标记 */
278
- clearCustomMarkers(): void;
279
- /** 获取 ChartDom(供 InteractionController 使用) */
280
- getDom(): ChartDom;
281
- /** 获取当前 ChartOptions(返回内部当前快照) */
282
- getOption(): ResolvedChartOptions;
283
- /**
284
- * 计算 K 线起始 x 坐标数组,与 candle.ts 的像素对齐方式保持一致
285
- * @param range 可见 K 线索引范围
286
- * @returns x 坐标数组(逻辑像素,经过物理像素对齐)
287
- */
288
- calcKLinePositions(range: VisibleRange): KLinePositions;
289
- /**
290
- * 更新配置并触发布局/重绘
291
- * @param partial 部分配置项
292
- */
293
- updateOptions(partial: Partial<ChartOptions>): void;
294
- /** 更新 pane 布局配置
295
- * @param panes 新的 pane 配置数组
296
- *
297
- * 显式整盘替换:清空之前 user-resize 留下的 paneRatios 缓存,让 spec 中的 ratio
298
- * 真正生效。`addPane`/`upsertPane`/`removePaneDefinition` 走 `applyPaneLayoutSpecs`
299
- * 时仍保留 prev 值以记住用户拖拽过的高度——只有显式的 layout replacement 才重置。
300
- */
301
- updatePaneLayout(panes: PaneSpec[]): void;
302
- setPaneDefinitions(defs: PaneSpec[]): void;
303
- upsertPane(def: PaneSpec): void;
304
- removePaneDefinition(paneId: string): void;
305
- bindIndicatorToPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
306
- /** 更新绘图对象 */
307
- setDrawings(drawings: import('@/plugin').DrawingObject[]): void;
308
- /** 更新选中的绘图 ID */
309
- setSelectedDrawingId(id: string | null): void;
310
- /** 获取当前 pane 布局快照(含 ratio) */
311
- getPaneLayoutSpecs(): PaneSpec[];
312
- private emitPaneLayoutChange;
313
- private applyPaneLayoutSpecs;
314
- /**
315
- * 调整相邻 pane 边界(支持连锁挤压)
316
- * @param upperPaneId 上方 pane ID(边界位于此 pane 与其下方邻居之间)
317
- * @param deltaY Y 方向位移(逻辑像素,正数表示边界向下,upper 增大;负数表示向上,upper 减小)
318
- */
319
- resizePaneBoundary(upperPaneId: string, deltaY: number): boolean;
320
- private resolvePaneRole;
321
- addPane(paneId: string): void;
322
- /**
323
- * 动态移除 pane
324
- * @param paneId pane 标识符
325
- */
326
- removePane(paneId: string): void;
327
- /**
328
- * 检查 pane 是否存在
329
- * @param paneId pane 标识符
330
- */
331
- hasPane(paneId: string): boolean;
332
- /**
333
- * 创建副图面板并注册指标渲染器
334
- * @param paneId 副图实例标识符(如 'RSI_0', 'MACD_0')
335
- * @param indicatorId 指标类型
336
- * @param params 指标参数
337
- * @returns 是否创建成功
338
- */
339
- createSubPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): boolean;
340
- /**
341
- * 移除副图面板及其渲染器
342
- * @param paneId 副图实例标识符
343
- */
344
- removeSubPane(paneId: string): void;
345
- /**
346
- * 替换副图的指标类型
347
- * @param paneId 副图实例标识符
348
- * @param newIndicatorId 新的指标类型
349
- * @param params 新指标参数
350
- */
351
- replaceSubPaneIndicator(paneId: string, newIndicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
352
- /**
353
- * 更新副图指标参数
354
- * @param paneId 副图实例标识符
355
- * @param params 新参数
356
- */
357
- updateSubPaneParams(paneId: string, params: Record<string, unknown>): void;
358
- /**
359
- * 清除所有副图面板
360
- */
361
- clearSubPanes(): void;
362
- /**
363
- * 获取当前所有副图指标类型
364
- * @deprecated 使用 getSubPaneEntries 获取完整信息
365
- */
366
- getSubPaneIndicators(): SubIndicatorType[];
367
- /**
368
- * 获取所有副图条目
369
- */
370
- getSubPaneEntries(): SubPaneEntry[];
371
- /**
372
- * 根据 paneId 获取副图条目
373
- * @param paneId 副图实例标识符
374
- */
375
- getSubPaneEntry(paneId: string): SubPaneEntry | undefined;
376
- private getDefaultSubPaneParams;
377
- /** 副图渲染器名称前缀(保留向后兼容) */
378
- private static readonly SUB_PANE_PREFIX;
379
- /**
380
- * 平移价格轴(用于主图区域上下拖动)
381
- * @param paneId 目标 pane ID
382
- * @param deltaY Y轴像素偏移(正数向下拖动)
383
- */
384
- translatePrice(paneId: string, deltaY: number): void;
385
- /**
386
- * 重置价格轴垂直偏移
387
- * @param paneId 目标 pane ID
388
- */
389
- resetPriceOffset(paneId: string): void;
390
- resetPriceTransform(paneId: string): void;
391
- /**
392
- * 缩放价格轴(用于右侧刻度栏上下拖动)
393
- * @param paneId 目标 pane ID
394
- * @param deltaY Y轴像素偏移(向上拖动放大,向下拖动缩小)
395
- */
396
- scalePrice(paneId: string, deltaY: number): void;
397
- /**
398
- * 更新数据并请求重绘
399
- * @param data K 线数据数组
400
- */
401
- updateData(data: KLineData[]): void;
402
- /** 获取当前数据源(供 renderers 和 interaction 使用) */
403
- getData(): KLineData[];
404
- /** 获取指标调度器(供外部控制器更新指标配置) */
405
- getIndicatorScheduler(): IndicatorScheduler;
406
- private getTrailingSlotCount;
407
- getLogicalSlotCount(): number;
408
- getTimestampAtLogicalIndex(index: number): number | null;
409
- /** 根据视口内 X 坐标反查逻辑索引(允许超出最后一根 K 线) */
410
- getLogicalIndexAtX(mouseX: number): number | null;
411
- /** 根据视口内 X 坐标反查数据索引(用于绘图落点) */
412
- getDataIndexAtX(mouseX: number): number | null;
413
- /** 获取内容总宽度(用于外部 scroll-content 撑开 scrollWidth) */
414
- getContentWidth(): number;
415
- /** 滚动到最右侧(最新数据位置) */
416
- scrollToRight(): void;
417
- /** 容器尺寸变化时调用 */
418
- resize(): void;
419
- /**
420
- * 请求下一帧重绘(RAF 合并,支持分层更新)
421
- * @param level 更新级别,默认为 All
422
- */
423
- scheduleDraw(level?: UpdateLevel): void;
424
- /** 销毁图表实例 */
425
- destroy(): Promise<void>;
426
- /** 初始化所有 pane */
427
- private initPanes;
428
- private syncPaneRatiosFromSpecs;
429
- private syncPaneRatiosToSpecs;
430
- private normalizeVisiblePaneRatios;
431
- private getPaneMinHeight;
432
- private computePaneHeightsByRatio;
433
- /** 计算每个 pane 的布局(top 和 height) */
434
- private layoutPanes;
435
- private computeViewport;
436
- private _viewportSignal;
437
- private _dataSignal;
438
- private _themeSignal;
439
- private _indicatorsSignal;
440
- private _subPanesSignal;
441
- private _drawingToolSignal;
442
- private _drawingsSignal;
443
- private _paneRatiosSignal;
444
- private _interactionSignal;
445
- /** 视口状态信号 */
446
- get viewport(): Signal<ViewportState>;
447
- /** 数据信号 */
448
- get data(): Signal<ReadonlyArray<KLineData>>;
449
- /** 主题信号 */
450
- get theme(): Signal<'light' | 'dark'>;
451
- /** 指标实例列表信号 */
452
- get indicators(): Signal<ReadonlyArray<IndicatorInstance>>;
453
- /** 子图信息信号 */
454
- get subPanes(): Signal<ReadonlyArray<SubPaneInfo>>;
455
- /** 当前绘图工具信号 */
456
- get drawingTool(): Signal<DrawingToolType | null>;
457
- /** 绘图对象列表信号 */
458
- get drawings(): Signal<ReadonlyArray<import('@/plugin').DrawingObject>>;
459
- /** 面板比例信号 */
460
- get paneRatios(): Signal<Readonly<Record<string, number>>>;
461
- /** 交互状态信号 */
462
- get interactionState(): Signal<InteractionSnapshot>;
463
- /**
464
- * 设置数据(高层 API)
465
- * 内部调用 updateData,并更新 data signal
466
- */
467
- setData(data: KLineData[]): void;
468
- /**
469
- * 追加数据(高层 API)
470
- * 合并现有数据并更新
471
- */
472
- appendData(newData: KLineData[]): void;
473
- /**
474
- * 设置主题(高层 API)
475
- */
476
- setTheme(theme: 'light' | 'dark'): void;
477
- /**
478
- * 缩放到指定级别(高层 API)
479
- * 计算并应用新的 render state,更新 viewport signal
480
- */
481
- zoomToLevel(level: number, anchorX?: number): void;
482
- /**
483
- * 放大(高层 API)
484
- */
485
- zoomIn(anchorX?: number): void;
486
- /**
487
- * 缩小(高层 API)
488
- */
489
- zoomOut(anchorX?: number): void;
490
- /**
491
- * 内部缩放实现
492
- * 使用 computeZoom 纯函数计算精确的 scrollLeft
493
- */
494
- private applyZoom;
495
- /**
496
- * 统一指针事件处理(零配置)
497
- * 自动判断区域并分发给 interaction controller
498
- *
499
- * @param e 指针事件
500
- * @param drawingController 可选的绘图控制器,如果提供,会优先让绘图控制器处理事件
501
- * @returns 是否被处理(如果 drawingController 处理了返回 true,否则返回 false)
502
- */
503
- handlePointerEvent(e: PointerEvent, drawingController?: {
504
- onPointerDown?: (e: PointerEvent, container: HTMLElement) => boolean;
505
- onPointerMove?: (e: PointerEvent, container: HTMLElement) => boolean;
506
- onPointerUp?: (e: PointerEvent, container: HTMLElement) => boolean;
507
- }): boolean;
508
- /**
509
- * 滚轮事件处理(高层 API)
510
- * 使用 computeZoom 计算精确的 scrollLeft,更新 viewport signal
511
- */
512
- handleWheelEvent(e: WheelEvent): void;
513
- /**
514
- * 滚动事件处理(高层 API)
515
- * 更新缓存的 scrollLeft 并触发交互 controller
516
- */
517
- handleScrollEvent(): void;
518
- /**
519
- * 双指捏合缩放处理(高层 API)
520
- * @param delta 缩放增量(+1 放大 / -1 缩小)
521
- * @param centerClientX 捏合中心在视口中的 X 坐标
522
- */
523
- handlePinchZoom(delta: number, centerClientX: number): void;
524
- /**
525
- * 更新 viewport signal(用于滚动事件)
526
- */
527
- private updateViewportSignal;
528
- /**
529
- * 添加指标(高层 API,显式指定 role)
530
- * @param definitionId 指标定义 ID(如 'MA', 'MACD')
531
- * @param role 'main' 主图指标 或 'sub' 副图指标
532
- * @param params 指标参数
533
- * @returns 实例 ID(成功)或 null(失败)
534
- */
535
- addIndicator(definitionId: string, role: 'main' | 'sub', params?: Record<string, unknown>): string | null;
536
- /**
537
- * 移除指标(高层 API)
538
- * @param instanceId 指标实例 ID
539
- * @returns 是否成功移除
540
- */
541
- removeIndicator(instanceId: string): boolean;
542
- /**
543
- * 更新指标参数(高层 API)
544
- * @param instanceId 指标实例 ID
545
- * @param params 新参数
546
- * @returns 是否成功更新
547
- */
548
- updateIndicatorParams(instanceId: string, params: Record<string, unknown>): boolean;
549
- /**
550
- * 重新排序指标(高层 API)
551
- * @param orderedInstanceIds 排序后的指标实例 ID 数组
552
- * @returns 是否成功
553
- */
554
- reorderIndicators(orderedInstanceIds: string[]): boolean;
555
- /**
556
- * 同步 indicators signal
557
- */
558
- private syncIndicatorsSignal;
559
- /**
560
- * 同步 sub panes signal
561
- */
562
- private syncSubPanesSignal;
563
- /**
564
- * 调整子图大小(高层 API)
565
- * @param paneId 面板 ID
566
- * @param deltaY 垂直偏移量
567
- * @returns 是否成功
568
- */
569
- resizeSubPane(paneId: string, deltaY: number): boolean;
570
- /**
571
- * 设置当前绘图工具(高层 API)
572
- * @param tool 工具类型或 null 取消选择
573
- */
574
- setDrawingTool(tool: DrawingToolType | null): void;
575
- /**
576
- * 移除绘图(高层 API)
577
- * @param drawingId 绘图 ID
578
- */
579
- removeDrawing(drawingId: string): void;
580
- /**
581
- * 清除所有绘图(高层 API)
582
- */
583
- clearDrawings(): void;
584
- /**
585
- * 更新设置(高层 API)
586
- * 代理到现有的 updateSettings
587
- */
588
- updateSettingsFacade(settings: Record<string, unknown>): void;
589
- /**
590
- * 更新选项(高层 API)
591
- * 代理到现有的 updateOptions
592
- */
593
- updateOptionsFacade(options: Partial<ChartOptions>): void;
594
- }
595
- export type ViewportState = {
596
- zoomLevel: number;
597
- plotWidth: number;
598
- plotHeight: number;
599
- dpr: number;
600
- visibleFrom: number;
601
- visibleTo: number;
602
- kWidth: number;
603
- kGap: number;
604
- };
605
- export type IndicatorRole = 'main' | 'sub';
606
- export interface IndicatorInstance {
607
- id: string;
608
- definitionId: string;
609
- label: string;
610
- name: string;
611
- role: IndicatorRole;
612
- paneId?: string;
613
- params: Record<string, unknown>;
614
- }
615
- export interface SubPaneInfo {
616
- paneId: string;
617
- indicatorId: string;
618
- params: Record<string, unknown>;
619
- ratio: number;
620
- }
621
- export type DrawingToolType = 'trendline' | 'horizontal' | 'fib' | 'rectangle' | 'arrow';
622
- export interface DrawingObject {
623
- id: string;
624
- type: DrawingToolType;
625
- }
626
- //# sourceMappingURL=chart.d.ts.map