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