@baron1996/klinecharts-adapter 0.6.0 → 0.9.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/dist/adapter.d.ts +13 -4
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +203 -3
- package/dist/conversion/overlays.d.ts +1 -0
- package/dist/conversion/overlays.d.ts.map +1 -1
- package/dist/drawing/engine-port.d.ts +25 -1
- package/dist/drawing/engine-port.d.ts.map +1 -1
- package/dist/drawing/overlay-conversion.js +4 -4
- package/dist/time-series/adapter.d.ts +1 -0
- package/dist/time-series/adapter.d.ts.map +1 -1
- package/dist/time-series/adapter.js +58 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/adapter.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { ChartScene, Drawing, SceneIndicator, SceneOverlay } from '@baron1996/kline-scene-schema';
|
|
1
|
+
import type { ChartScene, Drawing, MarketData, SceneIndicator, SceneOverlay } from '@baron1996/kline-scene-schema';
|
|
2
2
|
import { SceneError } from '@baron1996/kline-scene-schema';
|
|
3
3
|
import { type OverlayDrawingSource } from './conversion/overlays.js';
|
|
4
|
-
import type { DrawingEnginePort, EngineDrawingEvent, EngineDrawingSnapshot, EngineDrawingStartRequest, EnginePixelCoordinate, EnginePointProjection } from './drawing/engine-port.js';
|
|
4
|
+
import type { DrawingEnginePort, EngineDrawingEvent, EngineDrawingSnapshot, EngineDrawingStartRequest, EngineHistoricalDataCommitResult, EngineHistoricalDataRequest, EnginePixelCoordinate, EnginePointProjection, HistoricalDataEnginePort } from './drawing/engine-port.js';
|
|
5
5
|
import { type MainSeriesPresentation, type MainSeriesPresentationPort, type MainSeriesPresentationResult } from './main-series-presentation.js';
|
|
6
6
|
import { type OverlayHitResult, type PixelCoordinate } from './interaction/hit-testing.js';
|
|
7
7
|
export type PriceScale = 'linear' | 'logarithmic';
|
|
@@ -94,17 +94,25 @@ export interface OverlayDrawingRequest extends OverlayDrawingSource {
|
|
|
94
94
|
* ChartScene 与 KLineCharts 之间的唯一边界。
|
|
95
95
|
* 引擎对象和内部 ID 永不从该类的公共接口泄露。
|
|
96
96
|
*/
|
|
97
|
-
export declare class KLineChartsSceneAdapter implements DrawingEnginePort, MainSeriesPresentationPort {
|
|
97
|
+
export declare class KLineChartsSceneAdapter implements DrawingEnginePort, HistoricalDataEnginePort, MainSeriesPresentationPort {
|
|
98
98
|
#private;
|
|
99
99
|
private constructor();
|
|
100
100
|
static create(container: HTMLElement, value: unknown): Promise<KLineChartsSceneAdapter>;
|
|
101
101
|
/** 显式 Workspace factory:非空 Legacy overlays 由工作区语义校验拒绝。 */
|
|
102
|
-
static createWorkspace(container: HTMLElement, value: unknown
|
|
102
|
+
static createWorkspace(container: HTMLElement, value: unknown, options?: {
|
|
103
|
+
readonly historicalDataLoading?: {
|
|
104
|
+
readonly hasMore: boolean;
|
|
105
|
+
};
|
|
106
|
+
}): Promise<KLineChartsSceneAdapter>;
|
|
103
107
|
subscribe(listener: AdapterSceneEventListener): () => void;
|
|
104
108
|
exportScene(): ChartScene;
|
|
105
109
|
setPriceScale(scale: PriceScale): Promise<ChartScene>;
|
|
106
110
|
/** 同结构场景替换:symbol/period/data/viewport 原子更新,失败恢复旧场景。 */
|
|
107
111
|
replaceScene(value: ChartScene): ChartScene;
|
|
112
|
+
configureHistoricalDataLoading(hasMore: boolean): void;
|
|
113
|
+
subscribeHistoricalDataRequests(listener: (request: EngineHistoricalDataRequest) => void): () => void;
|
|
114
|
+
commitHistoricalData(requestId: string, data: readonly MarketData[], hasMore: boolean): EngineHistoricalDataCommitResult;
|
|
115
|
+
rejectHistoricalData(requestId: string): boolean;
|
|
108
116
|
get sceneKind(): 'chart' | 'time-series';
|
|
109
117
|
restoreDrawings(drawings: readonly EngineDrawingSnapshot[]): void;
|
|
110
118
|
startDrawing(request: EngineDrawingStartRequest): string;
|
|
@@ -112,6 +120,7 @@ export declare class KLineChartsSceneAdapter implements DrawingEnginePort, MainS
|
|
|
112
120
|
getDrawing(id: string): EngineDrawingSnapshot | undefined;
|
|
113
121
|
updateDrawingStyles(id: string, styles: Drawing['styles']): EngineDrawingSnapshot;
|
|
114
122
|
updateDrawingText(id: string, text: string): EngineDrawingSnapshot;
|
|
123
|
+
updateDrawingLocked(id: string, locked: boolean): EngineDrawingSnapshot;
|
|
115
124
|
removeDrawing(id: string): boolean;
|
|
116
125
|
restoreDrawing(snapshot: EngineDrawingSnapshot): void;
|
|
117
126
|
selectDrawing(id: string | null): void;
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -118,6 +118,14 @@ export class KLineChartsSceneAdapter {
|
|
|
118
118
|
#workspaceSources = new Map();
|
|
119
119
|
/** 公共 Drawing 端口监听器。 */
|
|
120
120
|
#portListeners = new Set();
|
|
121
|
+
/** 更早行情请求监听器;仅传递纯数据请求。 */
|
|
122
|
+
#historicalDataListeners = new Set();
|
|
123
|
+
/** 历史行情加载开关及服务端是否仍可能存在更早数据。 */
|
|
124
|
+
#historicalDataLoading;
|
|
125
|
+
/** 当前唯一待完成的历史行情请求,防止重复并发前插。 */
|
|
126
|
+
#pendingHistoricalData;
|
|
127
|
+
/** 历史行情请求的单调序号。 */
|
|
128
|
+
#historicalDataSequence = 0;
|
|
121
129
|
/** 交互启用开关。 */
|
|
122
130
|
#mutationsEnabled = true;
|
|
123
131
|
/** 主序列回滚失败后的只能销毁终止态。 */
|
|
@@ -170,7 +178,7 @@ export class KLineChartsSceneAdapter {
|
|
|
170
178
|
}
|
|
171
179
|
}
|
|
172
180
|
/** 显式 Workspace factory:非空 Legacy overlays 由工作区语义校验拒绝。 */
|
|
173
|
-
static async createWorkspace(container, value) {
|
|
181
|
+
static async createWorkspace(container, value, options) {
|
|
174
182
|
const workspace = parseDrawableWorkspaceDocument(value);
|
|
175
183
|
if (workspace.scene.kind !== 'chart') {
|
|
176
184
|
throw new SceneError('INVALID_REFERENCE', '/scene/kind', 'KLineChartsSceneAdapter requires a chart Workspace Scene.');
|
|
@@ -188,6 +196,9 @@ export class KLineChartsSceneAdapter {
|
|
|
188
196
|
applyViewport(handle.chart, scene.viewport);
|
|
189
197
|
container.style.backgroundColor = scene.chart.layout.backgroundColor;
|
|
190
198
|
adapter.#workspaceMode = true;
|
|
199
|
+
if (options?.historicalDataLoading !== undefined) {
|
|
200
|
+
adapter.configureHistoricalDataLoading(options.historicalDataLoading.hasMore);
|
|
201
|
+
}
|
|
191
202
|
adapter.#restoreWorkspaceDrawings(workspace.drawings.drawings.map((drawing) => snapshotOfDrawing(drawing)));
|
|
192
203
|
return adapter;
|
|
193
204
|
}
|
|
@@ -263,6 +274,48 @@ export class KLineChartsSceneAdapter {
|
|
|
263
274
|
listener(structuredClone(event));
|
|
264
275
|
}
|
|
265
276
|
}
|
|
277
|
+
#historicalDataLoader(scene) {
|
|
278
|
+
const snapshot = structuredClone(scene.data);
|
|
279
|
+
return {
|
|
280
|
+
getBars: ({ type, timestamp, callback }) => {
|
|
281
|
+
if (type === 'init') {
|
|
282
|
+
callback(structuredClone(snapshot), {
|
|
283
|
+
forward: this.#historicalDataLoading?.hasMore ?? false,
|
|
284
|
+
backward: false,
|
|
285
|
+
});
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (type !== 'forward' ||
|
|
289
|
+
this.#historicalDataLoading?.hasMore !== true ||
|
|
290
|
+
timestamp === null) {
|
|
291
|
+
callback([], { forward: false, backward: false });
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (this.#pendingHistoricalData !== undefined) {
|
|
295
|
+
callback([], { forward: true, backward: false });
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const request = {
|
|
299
|
+
requestId: `historical-data-${++this.#historicalDataSequence}`,
|
|
300
|
+
beforeTimestamp: timestamp,
|
|
301
|
+
period: structuredClone(this.#scene.period),
|
|
302
|
+
dataCount: this.#scene.data.length,
|
|
303
|
+
};
|
|
304
|
+
this.#pendingHistoricalData = { request, callback };
|
|
305
|
+
for (const listener of this.#historicalDataListeners) {
|
|
306
|
+
listener(structuredClone(request));
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
#settlePendingHistoricalData(hasMore) {
|
|
312
|
+
const pending = this.#pendingHistoricalData;
|
|
313
|
+
if (pending === undefined) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
this.#pendingHistoricalData = undefined;
|
|
317
|
+
pending.callback([], { forward: hasMore, backward: false });
|
|
318
|
+
}
|
|
266
319
|
#restoreWorkspaceDrawings(drawings) {
|
|
267
320
|
for (const overlay of this.#workspaceOverlays) {
|
|
268
321
|
this.#chart.removeOverlay({ id: overlay.id });
|
|
@@ -367,6 +420,11 @@ export class KLineChartsSceneAdapter {
|
|
|
367
420
|
}
|
|
368
421
|
#overlayCallbacks(source, drawing = false) {
|
|
369
422
|
return {
|
|
423
|
+
onRightClick: ({ preventDefault }) => {
|
|
424
|
+
// KLineCharts 默认把右键命中 Overlay 解释为删除。Baron 的删除只能
|
|
425
|
+
// 由显式对象级操作触发,因此在引擎回调层阻止该默认行为。
|
|
426
|
+
preventDefault?.();
|
|
427
|
+
},
|
|
370
428
|
onDrawEnd: ({ overlay }) => {
|
|
371
429
|
if (drawing &&
|
|
372
430
|
this.#interactivePriceMeasurement?.source.id === source.id) {
|
|
@@ -435,6 +493,8 @@ export class KLineChartsSceneAdapter {
|
|
|
435
493
|
}
|
|
436
494
|
}
|
|
437
495
|
#installInteractionListeners() {
|
|
496
|
+
this.#container.addEventListener('mousedown', this.#handleRightMouseDown, true);
|
|
497
|
+
this.#container.addEventListener('contextmenu', this.#handleContextMenu, true);
|
|
438
498
|
this.#container.addEventListener('pointerdown', this.#handlePointerDown, true);
|
|
439
499
|
this.#container.addEventListener('pointermove', this.#handlePointerMove, true);
|
|
440
500
|
this.#container.addEventListener('pointerup', this.#handlePointerUp, true);
|
|
@@ -443,6 +503,8 @@ export class KLineChartsSceneAdapter {
|
|
|
443
503
|
window.addEventListener('blur', this.#handleWindowBlur);
|
|
444
504
|
}
|
|
445
505
|
#removeInteractionListeners() {
|
|
506
|
+
this.#container.removeEventListener('mousedown', this.#handleRightMouseDown, true);
|
|
507
|
+
this.#container.removeEventListener('contextmenu', this.#handleContextMenu, true);
|
|
446
508
|
this.#container.removeEventListener('pointerdown', this.#handlePointerDown, true);
|
|
447
509
|
this.#container.removeEventListener('pointermove', this.#handlePointerMove, true);
|
|
448
510
|
this.#container.removeEventListener('pointerup', this.#handlePointerUp, true);
|
|
@@ -450,6 +512,16 @@ export class KLineChartsSceneAdapter {
|
|
|
450
512
|
window.removeEventListener('keydown', this.#handleKeyDown);
|
|
451
513
|
window.removeEventListener('blur', this.#handleWindowBlur);
|
|
452
514
|
}
|
|
515
|
+
#handleRightMouseDown = (event) => {
|
|
516
|
+
if (event.button === 2) {
|
|
517
|
+
// 阻止事件到达 KLineCharts;不 preventDefault,保留浏览器原生右键菜单。
|
|
518
|
+
event.stopPropagation();
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
#handleContextMenu = (event) => {
|
|
522
|
+
// KLineCharts 会 preventDefault。捕获阶段截断传播,但 Baron 本身不拦截菜单。
|
|
523
|
+
event.stopPropagation();
|
|
524
|
+
};
|
|
453
525
|
#pointerCoordinate(event) {
|
|
454
526
|
const rect = this.#container.getBoundingClientRect();
|
|
455
527
|
return { x: event.clientX - rect.left, y: event.clientY - rect.top };
|
|
@@ -856,6 +928,8 @@ export class KLineChartsSceneAdapter {
|
|
|
856
928
|
}
|
|
857
929
|
const previous = this.#scene;
|
|
858
930
|
const previousBackground = this.#container.style.backgroundColor;
|
|
931
|
+
const previousHistoricalHasMore = this.#historicalDataLoading?.hasMore;
|
|
932
|
+
this.#settlePendingHistoricalData(false);
|
|
859
933
|
try {
|
|
860
934
|
this.#chart.setSymbol({
|
|
861
935
|
ticker: candidate.symbol.ticker,
|
|
@@ -864,7 +938,12 @@ export class KLineChartsSceneAdapter {
|
|
|
864
938
|
...(candidate.symbol.name === undefined ? {} : { name: candidate.symbol.name }),
|
|
865
939
|
});
|
|
866
940
|
this.#chart.setPeriod(structuredClone(candidate.period));
|
|
867
|
-
this.#
|
|
941
|
+
if (this.#historicalDataLoading !== undefined) {
|
|
942
|
+
this.#historicalDataLoading = { hasMore: true };
|
|
943
|
+
}
|
|
944
|
+
this.#chart.setDataLoader(this.#historicalDataLoading === undefined
|
|
945
|
+
? createStaticDataLoader(candidate.data)
|
|
946
|
+
: this.#historicalDataLoader(candidate));
|
|
868
947
|
this.#chart.resetData();
|
|
869
948
|
applyViewport(this.#chart, candidate.viewport);
|
|
870
949
|
this.#scene = candidate;
|
|
@@ -881,7 +960,13 @@ export class KLineChartsSceneAdapter {
|
|
|
881
960
|
...(previous.symbol.name === undefined ? {} : { name: previous.symbol.name }),
|
|
882
961
|
});
|
|
883
962
|
this.#chart.setPeriod(structuredClone(previous.period));
|
|
884
|
-
this.#
|
|
963
|
+
if (this.#historicalDataLoading !== undefined &&
|
|
964
|
+
previousHistoricalHasMore !== undefined) {
|
|
965
|
+
this.#historicalDataLoading = { hasMore: previousHistoricalHasMore };
|
|
966
|
+
}
|
|
967
|
+
this.#chart.setDataLoader(this.#historicalDataLoading === undefined
|
|
968
|
+
? createStaticDataLoader(previous.data)
|
|
969
|
+
: this.#historicalDataLoader(previous));
|
|
885
970
|
this.#chart.resetData();
|
|
886
971
|
applyViewport(this.#chart, previous.viewport);
|
|
887
972
|
this.#container.style.backgroundColor = previousBackground;
|
|
@@ -892,6 +977,76 @@ export class KLineChartsSceneAdapter {
|
|
|
892
977
|
throw error;
|
|
893
978
|
}
|
|
894
979
|
}
|
|
980
|
+
configureHistoricalDataLoading(hasMore) {
|
|
981
|
+
this.#assertActive();
|
|
982
|
+
if (!this.#workspaceMode) {
|
|
983
|
+
throw new SceneError('INVALID_REFERENCE', '/', 'Historical data loading requires the Workspace factory.');
|
|
984
|
+
}
|
|
985
|
+
this.#settlePendingHistoricalData(hasMore);
|
|
986
|
+
this.#historicalDataLoading = { hasMore };
|
|
987
|
+
this.#chart.setDataLoader(this.#historicalDataLoader(this.#scene));
|
|
988
|
+
this.#chart.resetData();
|
|
989
|
+
applyViewport(this.#chart, this.#scene.viewport);
|
|
990
|
+
}
|
|
991
|
+
subscribeHistoricalDataRequests(listener) {
|
|
992
|
+
this.#assertActive();
|
|
993
|
+
this.#historicalDataListeners.add(listener);
|
|
994
|
+
if (this.#pendingHistoricalData !== undefined) {
|
|
995
|
+
listener(structuredClone(this.#pendingHistoricalData.request));
|
|
996
|
+
}
|
|
997
|
+
return () => {
|
|
998
|
+
this.#historicalDataListeners.delete(listener);
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
1001
|
+
commitHistoricalData(requestId, data, hasMore) {
|
|
1002
|
+
this.#assertActive();
|
|
1003
|
+
const pending = this.#pendingHistoricalData;
|
|
1004
|
+
if (pending === undefined || pending.request.requestId !== requestId) {
|
|
1005
|
+
throw new SceneError('INVALID_REFERENCE', '/requestId', `Historical data request is not pending: ${requestId}.`);
|
|
1006
|
+
}
|
|
1007
|
+
if (data.length === 0 && hasMore) {
|
|
1008
|
+
throw new SceneError('INVALID_REFERENCE', '/data', 'An empty historical page cannot advertise more data.');
|
|
1009
|
+
}
|
|
1010
|
+
const page = structuredClone(data);
|
|
1011
|
+
const earliestTimestamp = this.#scene.data[0].timestamp;
|
|
1012
|
+
for (let index = 0; index < page.length; index += 1) {
|
|
1013
|
+
const current = page[index];
|
|
1014
|
+
const previous = page[index - 1];
|
|
1015
|
+
if (current.timestamp >= earliestTimestamp ||
|
|
1016
|
+
(previous !== undefined && current.timestamp <= previous.timestamp)) {
|
|
1017
|
+
throw new SceneError('INVALID_REFERENCE', `/data/${index}/timestamp`, 'Historical data must be strictly ascending and earlier than the current first bar.');
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
const candidate = parseChartScene({
|
|
1021
|
+
...structuredClone(this.#scene),
|
|
1022
|
+
data: [...page, ...structuredClone(this.#scene.data)],
|
|
1023
|
+
});
|
|
1024
|
+
this.#pendingHistoricalData = undefined;
|
|
1025
|
+
this.#historicalDataLoading = { hasMore };
|
|
1026
|
+
this.#scene = candidate;
|
|
1027
|
+
pending.callback(structuredClone(page), {
|
|
1028
|
+
forward: hasMore,
|
|
1029
|
+
backward: false,
|
|
1030
|
+
});
|
|
1031
|
+
return {
|
|
1032
|
+
scene: structuredClone(candidate),
|
|
1033
|
+
addedCount: page.length,
|
|
1034
|
+
hasMore,
|
|
1035
|
+
};
|
|
1036
|
+
}
|
|
1037
|
+
rejectHistoricalData(requestId) {
|
|
1038
|
+
this.#assertActive();
|
|
1039
|
+
const pending = this.#pendingHistoricalData;
|
|
1040
|
+
if (pending === undefined || pending.request.requestId !== requestId) {
|
|
1041
|
+
return false;
|
|
1042
|
+
}
|
|
1043
|
+
this.#pendingHistoricalData = undefined;
|
|
1044
|
+
pending.callback([], {
|
|
1045
|
+
forward: this.#historicalDataLoading?.hasMore ?? false,
|
|
1046
|
+
backward: false,
|
|
1047
|
+
});
|
|
1048
|
+
return true;
|
|
1049
|
+
}
|
|
895
1050
|
get sceneKind() {
|
|
896
1051
|
return 'chart';
|
|
897
1052
|
}
|
|
@@ -951,6 +1106,9 @@ export class KLineChartsSceneAdapter {
|
|
|
951
1106
|
styles: structuredClone(styles),
|
|
952
1107
|
};
|
|
953
1108
|
this.#workspaceSources.set(id, updated);
|
|
1109
|
+
this.#workspaceOverlays = this.#workspaceOverlays.map((candidate) => candidate.id === id
|
|
1110
|
+
? drawingToSceneOverlay(updated, candidate.paneId)
|
|
1111
|
+
: candidate);
|
|
954
1112
|
this.#emitPort({
|
|
955
1113
|
type: 'updated',
|
|
956
1114
|
id,
|
|
@@ -972,6 +1130,9 @@ export class KLineChartsSceneAdapter {
|
|
|
972
1130
|
}
|
|
973
1131
|
const updated = withDrawingText(structuredClone(source), text);
|
|
974
1132
|
this.#workspaceSources.set(id, updated);
|
|
1133
|
+
this.#workspaceOverlays = this.#workspaceOverlays.map((candidate) => candidate.id === id
|
|
1134
|
+
? drawingToSceneOverlay(updated, candidate.paneId)
|
|
1135
|
+
: candidate);
|
|
975
1136
|
this.#emitPort({
|
|
976
1137
|
type: 'updated',
|
|
977
1138
|
id,
|
|
@@ -980,6 +1141,33 @@ export class KLineChartsSceneAdapter {
|
|
|
980
1141
|
});
|
|
981
1142
|
return snapshotOfDrawing(updated);
|
|
982
1143
|
}
|
|
1144
|
+
updateDrawingLocked(id, locked) {
|
|
1145
|
+
this.#assertActive();
|
|
1146
|
+
this.#assertNotTerminated();
|
|
1147
|
+
const source = this.#workspaceSources.get(id);
|
|
1148
|
+
if (source === undefined) {
|
|
1149
|
+
throw new SceneError('INVALID_REFERENCE', `/drawings/${id}`, `Drawing ${id} does not exist.`);
|
|
1150
|
+
}
|
|
1151
|
+
if (!this.#chart.overrideOverlay({ id, lock: locked })) {
|
|
1152
|
+
throw new SceneError('RUNTIME_INIT_FAILED', `/drawings/${id}/locked`, `KLineCharts failed to update Drawing ${id} lock state.`);
|
|
1153
|
+
}
|
|
1154
|
+
const updated = {
|
|
1155
|
+
...structuredClone(source),
|
|
1156
|
+
locked,
|
|
1157
|
+
};
|
|
1158
|
+
this.#workspaceSources.set(id, updated);
|
|
1159
|
+
this.#workspaceOverlays = this.#workspaceOverlays.map((candidate) => candidate.id === id
|
|
1160
|
+
? drawingToSceneOverlay(updated, candidate.paneId)
|
|
1161
|
+
: candidate);
|
|
1162
|
+
const snapshot = snapshotOfDrawing(updated);
|
|
1163
|
+
this.#emitPort({
|
|
1164
|
+
type: 'updated',
|
|
1165
|
+
id,
|
|
1166
|
+
drawing: snapshot,
|
|
1167
|
+
editDimensions: { horizontal: false, vertical: false },
|
|
1168
|
+
});
|
|
1169
|
+
return snapshot;
|
|
1170
|
+
}
|
|
983
1171
|
removeDrawing(id) {
|
|
984
1172
|
this.#assertActive();
|
|
985
1173
|
this.#assertNotTerminated();
|
|
@@ -1359,6 +1547,8 @@ export class KLineChartsSceneAdapter {
|
|
|
1359
1547
|
this.#crosshairListeners.clear();
|
|
1360
1548
|
this.#listeners.clear();
|
|
1361
1549
|
this.#portListeners.clear();
|
|
1550
|
+
this.#historicalDataListeners.clear();
|
|
1551
|
+
this.#settlePendingHistoricalData(false);
|
|
1362
1552
|
this.#workspaceSources.clear();
|
|
1363
1553
|
this.#workspaceOverlays = [];
|
|
1364
1554
|
this.#engine.dispose(this.#container);
|
|
@@ -1370,9 +1560,13 @@ function snapshotOfDrawing(drawing) {
|
|
|
1370
1560
|
return {
|
|
1371
1561
|
id: drawing.id,
|
|
1372
1562
|
type: drawing.type,
|
|
1563
|
+
...(drawing.groupId === undefined ? {} : { groupId: drawing.groupId }),
|
|
1373
1564
|
target: structuredClone(drawing.target),
|
|
1374
1565
|
geometry: structuredClone(drawing.geometry),
|
|
1375
1566
|
styles: structuredClone(drawing.styles),
|
|
1567
|
+
...(drawing.metadata === undefined
|
|
1568
|
+
? {}
|
|
1569
|
+
: { metadata: structuredClone(drawing.metadata) }),
|
|
1376
1570
|
locked: drawing.locked,
|
|
1377
1571
|
visible: drawing.visible,
|
|
1378
1572
|
zLevel: drawing.zLevel,
|
|
@@ -1383,9 +1577,13 @@ function drawingFromSnapshot(snapshot) {
|
|
|
1383
1577
|
return {
|
|
1384
1578
|
id: snapshot.id,
|
|
1385
1579
|
type: snapshot.type,
|
|
1580
|
+
...(snapshot.groupId === undefined ? {} : { groupId: snapshot.groupId }),
|
|
1386
1581
|
target: structuredClone(snapshot.target),
|
|
1387
1582
|
geometry: structuredClone(snapshot.geometry),
|
|
1388
1583
|
styles: structuredClone(snapshot.styles),
|
|
1584
|
+
...(snapshot.metadata === undefined
|
|
1585
|
+
? {}
|
|
1586
|
+
: { metadata: structuredClone(snapshot.metadata) }),
|
|
1389
1587
|
visible: snapshot.visible,
|
|
1390
1588
|
locked: snapshot.locked,
|
|
1391
1589
|
zLevel: snapshot.zLevel,
|
|
@@ -1457,9 +1655,11 @@ function placeholderDrawing(request) {
|
|
|
1457
1655
|
return {
|
|
1458
1656
|
id: request.id,
|
|
1459
1657
|
type: request.type,
|
|
1658
|
+
...(request.groupId === undefined ? {} : { groupId: request.groupId }),
|
|
1460
1659
|
target: structuredClone(request.target),
|
|
1461
1660
|
geometry: placeholderGeometry(request.type),
|
|
1462
1661
|
styles: structuredClone(request.styles),
|
|
1662
|
+
metadata: structuredClone(request.metadata ?? {}),
|
|
1463
1663
|
visible: true,
|
|
1464
1664
|
locked: false,
|
|
1465
1665
|
zLevel: 0,
|
|
@@ -18,6 +18,7 @@ export interface OverlayDrawingSource extends OverlaySourceSnapshot {
|
|
|
18
18
|
}
|
|
19
19
|
export interface EngineOverlayCallbacks {
|
|
20
20
|
readonly onDrawEnd?: NonNullable<OverlayCreate['onDrawEnd']>;
|
|
21
|
+
readonly onRightClick?: NonNullable<OverlayCreate['onRightClick']>;
|
|
21
22
|
readonly onPressedMoveStart?: NonNullable<OverlayCreate['onPressedMoveStart']>;
|
|
22
23
|
readonly onPressedMoving?: NonNullable<OverlayCreate['onPressedMoving']>;
|
|
23
24
|
readonly onPressedMoveEnd?: NonNullable<OverlayCreate['onPressedMoveEnd']>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/conversion/overlays.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/conversion/overlays.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Drawing } from '@baron1996/kline-scene-schema';
|
|
1
|
+
import type { ChartScene, Drawing, MarketData } from '@baron1996/kline-scene-schema';
|
|
2
2
|
export interface EngineDrawingTarget {
|
|
3
3
|
readonly paneRole: string;
|
|
4
4
|
readonly yAxisRole: 'primary';
|
|
@@ -7,9 +7,11 @@ export interface EngineDrawingTarget {
|
|
|
7
7
|
export interface EngineDrawingSnapshot {
|
|
8
8
|
readonly id: string;
|
|
9
9
|
readonly type: Drawing['type'];
|
|
10
|
+
readonly groupId?: string;
|
|
10
11
|
readonly target: EngineDrawingTarget;
|
|
11
12
|
readonly geometry: Drawing['geometry'];
|
|
12
13
|
readonly styles: Drawing['styles'];
|
|
14
|
+
readonly metadata?: NonNullable<Drawing['metadata']>;
|
|
13
15
|
readonly text?: string;
|
|
14
16
|
readonly locked: boolean;
|
|
15
17
|
readonly visible: boolean;
|
|
@@ -19,8 +21,10 @@ export interface EngineDrawingSnapshot {
|
|
|
19
21
|
export interface EngineDrawingStartRequest {
|
|
20
22
|
readonly id: string;
|
|
21
23
|
readonly type: Drawing['type'];
|
|
24
|
+
readonly groupId?: string;
|
|
22
25
|
readonly target: EngineDrawingTarget;
|
|
23
26
|
readonly styles: Drawing['styles'];
|
|
27
|
+
readonly metadata?: NonNullable<Drawing['metadata']>;
|
|
24
28
|
readonly text?: string;
|
|
25
29
|
}
|
|
26
30
|
export type EngineDrawingEventType = 'created' | 'updated' | 'removed' | 'selected' | 'deselected' | 'edit-candidate';
|
|
@@ -43,6 +47,25 @@ export interface EnginePixelCoordinate {
|
|
|
43
47
|
readonly x: number;
|
|
44
48
|
readonly y: number;
|
|
45
49
|
}
|
|
50
|
+
/** 宿主加载更早行情所需的纯数据请求;不暴露 KLineCharts 的 forward 命名。 */
|
|
51
|
+
export interface EngineHistoricalDataRequest {
|
|
52
|
+
readonly requestId: string;
|
|
53
|
+
readonly beforeTimestamp: number;
|
|
54
|
+
readonly period: ChartScene['period'];
|
|
55
|
+
readonly dataCount: number;
|
|
56
|
+
}
|
|
57
|
+
export interface EngineHistoricalDataCommitResult {
|
|
58
|
+
readonly scene: ChartScene;
|
|
59
|
+
readonly addedCount: number;
|
|
60
|
+
readonly hasMore: boolean;
|
|
61
|
+
}
|
|
62
|
+
/** Chart Adapter 可选实现的历史行情端口。 */
|
|
63
|
+
export interface HistoricalDataEnginePort {
|
|
64
|
+
configureHistoricalDataLoading(hasMore: boolean): void;
|
|
65
|
+
subscribeHistoricalDataRequests(listener: (request: EngineHistoricalDataRequest) => void): () => void;
|
|
66
|
+
commitHistoricalData(requestId: string, data: readonly MarketData[], hasMore: boolean): EngineHistoricalDataCommitResult;
|
|
67
|
+
rejectHistoricalData(requestId: string): boolean;
|
|
68
|
+
}
|
|
46
69
|
/**
|
|
47
70
|
* 两个 Scene Adapter 共同实现的公共 Drawing 引擎端口。
|
|
48
71
|
* 所有 DTO 都是纯数据;端口调用方不能取得 Chart/Overlay 实例或引擎内部 ID。
|
|
@@ -55,6 +78,7 @@ export interface DrawingEnginePort {
|
|
|
55
78
|
getDrawing(id: string): EngineDrawingSnapshot | undefined;
|
|
56
79
|
updateDrawingStyles(id: string, styles: Drawing['styles']): EngineDrawingSnapshot;
|
|
57
80
|
updateDrawingText(id: string, text: string): EngineDrawingSnapshot;
|
|
81
|
+
updateDrawingLocked(id: string, locked: boolean): EngineDrawingSnapshot;
|
|
58
82
|
restoreDrawing(snapshot: EngineDrawingSnapshot): void;
|
|
59
83
|
removeDrawing(id: string): boolean;
|
|
60
84
|
selectDrawing(id: string | null): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-port.d.ts","sourceRoot":"","sources":["../../src/drawing/engine-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"engine-port.d.ts","sourceRoot":"","sources":["../../src/drawing/engine-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,OAAO,EACP,UAAU,EACV,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC9B;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,sBAAsB,GAC/B,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,GACZ,gBAAgB,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE;QACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC3B,CAAC;CACF;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,iCAAiC;AACjC,MAAM,WAAW,wBAAwB;IACxC,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACvD,+BAA+B,CAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,GACtD,MAAM,IAAI,CAAC;IACd,oBAAoB,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,UAAU,EAAE,EAC3B,OAAO,EAAE,OAAO,GACd,gCAAgC,CAAC;IACpC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,aAAa,CAAC;IAC5C,eAAe,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAClE,YAAY,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC;IACzD,YAAY,IAAI,SAAS,qBAAqB,EAAE,CAAC;IACjD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;IAC1D,mBAAmB,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GACvB,qBAAqB,CAAC;IACzB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAC;IACnE,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,qBAAqB,CAAC;IACxE,cAAc,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5D,cAAc,CACb,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAChE,QAAQ,EAAE,MAAM,GACd,qBAAqB,CAAC;IACzB,kBAAkB,CACjB,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,EAAE,MAAM,GACd,qBAAqB,CAAC;IACzB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,sBAAsB,CACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAC3C,MAAM,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CAChB"}
|
|
@@ -125,11 +125,11 @@ export function sceneOverlayToDrawing(overlay, source) {
|
|
|
125
125
|
styles: structuredClone(overlay.styles),
|
|
126
126
|
type: overlay.type,
|
|
127
127
|
};
|
|
128
|
-
if (
|
|
129
|
-
result.groupId =
|
|
128
|
+
if (source.groupId !== undefined) {
|
|
129
|
+
result.groupId = source.groupId;
|
|
130
130
|
}
|
|
131
|
-
if (
|
|
132
|
-
result.metadata = structuredClone(
|
|
131
|
+
if (source.metadata !== undefined) {
|
|
132
|
+
result.metadata = structuredClone(source.metadata);
|
|
133
133
|
}
|
|
134
134
|
switch (overlay.type) {
|
|
135
135
|
case 'horizontalStraightLine':
|
|
@@ -19,6 +19,7 @@ export declare class TimeSeriesChartsAdapter implements DrawingEnginePort {
|
|
|
19
19
|
getDrawing(id: string): EngineDrawingSnapshot | undefined;
|
|
20
20
|
updateDrawingStyles(id: string, styles: Drawing['styles']): EngineDrawingSnapshot;
|
|
21
21
|
updateDrawingText(id: string, text: string): EngineDrawingSnapshot;
|
|
22
|
+
updateDrawingLocked(id: string, locked: boolean): EngineDrawingSnapshot;
|
|
22
23
|
removeDrawing(id: string): boolean;
|
|
23
24
|
restoreDrawing(snapshot: EngineDrawingSnapshot): void;
|
|
24
25
|
selectDrawing(id: string | null): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/time-series/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,OAAO,EAEP,eAAe,EACf,eAAe,EAEf,MAAM,+BAA+B,CAAC;AAsCvC,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AAUnC,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,MAAM,kCAAkC,GAAG,CAChD,KAAK,EAAE,0BAA0B,KAC7B,IAAI,CAAC;AAoIV,+CAA+C;AAC/C,qBAAa,uBAAwB,YAAW,iBAAiB;;IA+ChE,OAAO;WA4Ba,MAAM,CACzB,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,uBAAuB,CAAC;IA8EnC,qDAAqD;WACjC,eAAe,CAClC,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/time-series/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,OAAO,EAEP,eAAe,EACf,eAAe,EAEf,MAAM,+BAA+B,CAAC;AAsCvC,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AAUnC,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,MAAM,kCAAkC,GAAG,CAChD,KAAK,EAAE,0BAA0B,KAC7B,IAAI,CAAC;AAoIV,+CAA+C;AAC/C,qBAAa,uBAAwB,YAAW,iBAAiB;;IA+ChE,OAAO;WA4Ba,MAAM,CACzB,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,uBAAuB,CAAC;IA8EnC,qDAAqD;WACjC,eAAe,CAClC,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,uBAAuB,CAAC;IA8wBnC,IAAW,SAAS,IAAI,OAAO,GAAG,aAAa,CAE9C;IAEM,eAAe,CACrB,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GACxC,IAAI;IAQA,YAAY,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM;IA6BxD,YAAY,IAAI,SAAS,qBAAqB,EAAE;IAQhD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAMzD,mBAAmB,CACzB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GACvB,qBAAqB;IAmCjB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAgClE,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,qBAAqB;IAiCvE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAKlC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAiCrD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKtC,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI;IAM3D,cAAc,CACpB,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAChE,SAAS,EAAE,MAAM,GACf,qBAAqB;IAKjB,kBAAkB,CACxB,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,MAAM,GACf,qBAAqB;IAKjB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK3C,sBAAsB,CAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAC3C,MAAM,IAAI;IAON,kBAAkB,CACxB,QAAQ,EAAE,kCAAkC,GAC1C,MAAM,IAAI;IAMN,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe;IAqCrE,WAAW,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe;IA2CrE,uDAAuD;IAChD,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe;IA6CrD,WAAW,IAAI,eAAe;IAK9B,OAAO,IAAI,IAAI;CAoBtB"}
|
|
@@ -444,6 +444,9 @@ export class TimeSeriesChartsAdapter {
|
|
|
444
444
|
}
|
|
445
445
|
#overlayCallbacks(source, drawing = false) {
|
|
446
446
|
return {
|
|
447
|
+
onRightClick: ({ preventDefault }) => {
|
|
448
|
+
preventDefault?.();
|
|
449
|
+
},
|
|
447
450
|
onDrawEnd: ({ overlay }) => {
|
|
448
451
|
if (drawing &&
|
|
449
452
|
this.#interactiveDrawing?.source.id === source.id) {
|
|
@@ -775,6 +778,8 @@ export class TimeSeriesChartsAdapter {
|
|
|
775
778
|
}
|
|
776
779
|
};
|
|
777
780
|
#installInteractionListeners() {
|
|
781
|
+
this.#container.addEventListener('mousedown', this.#handleRightMouseDown, true);
|
|
782
|
+
this.#container.addEventListener('contextmenu', this.#handleContextMenu, true);
|
|
778
783
|
this.#container.addEventListener('pointerdown', this.#handlePointerDown, true);
|
|
779
784
|
this.#container.addEventListener('pointermove', this.#handlePointerMove, true);
|
|
780
785
|
this.#container.addEventListener('pointerup', this.#handlePointerUp, true);
|
|
@@ -783,6 +788,8 @@ export class TimeSeriesChartsAdapter {
|
|
|
783
788
|
window.addEventListener('blur', this.#handleWindowBlur);
|
|
784
789
|
}
|
|
785
790
|
#removeInteractionListeners() {
|
|
791
|
+
this.#container.removeEventListener('mousedown', this.#handleRightMouseDown, true);
|
|
792
|
+
this.#container.removeEventListener('contextmenu', this.#handleContextMenu, true);
|
|
786
793
|
this.#container.removeEventListener('pointerdown', this.#handlePointerDown, true);
|
|
787
794
|
this.#container.removeEventListener('pointermove', this.#handlePointerMove, true);
|
|
788
795
|
this.#container.removeEventListener('pointerup', this.#handlePointerUp, true);
|
|
@@ -790,6 +797,14 @@ export class TimeSeriesChartsAdapter {
|
|
|
790
797
|
window.removeEventListener('keydown', this.#handleKeyDown);
|
|
791
798
|
window.removeEventListener('blur', this.#handleWindowBlur);
|
|
792
799
|
}
|
|
800
|
+
#handleRightMouseDown = (event) => {
|
|
801
|
+
if (event.button === 2) {
|
|
802
|
+
event.stopPropagation();
|
|
803
|
+
}
|
|
804
|
+
};
|
|
805
|
+
#handleContextMenu = (event) => {
|
|
806
|
+
event.stopPropagation();
|
|
807
|
+
};
|
|
793
808
|
#handleKeyDown = (event) => {
|
|
794
809
|
if (event.key === 'Escape') {
|
|
795
810
|
const interaction = this.#pointerInteraction;
|
|
@@ -860,6 +875,9 @@ export class TimeSeriesChartsAdapter {
|
|
|
860
875
|
styles: structuredClone(styles),
|
|
861
876
|
};
|
|
862
877
|
this.#workspaceSources.set(id, updated);
|
|
878
|
+
this.#drawings = this.#drawings.map((candidate) => candidate.id === id
|
|
879
|
+
? drawingToSceneOverlay(updated, TIME_SERIES_PANE_ID)
|
|
880
|
+
: candidate);
|
|
863
881
|
this.#emitPort({
|
|
864
882
|
type: 'updated',
|
|
865
883
|
id,
|
|
@@ -879,6 +897,9 @@ export class TimeSeriesChartsAdapter {
|
|
|
879
897
|
}
|
|
880
898
|
const updated = timeSeriesWithDrawingText(structuredClone(source), text);
|
|
881
899
|
this.#workspaceSources.set(id, updated);
|
|
900
|
+
this.#drawings = this.#drawings.map((candidate) => candidate.id === id
|
|
901
|
+
? drawingToSceneOverlay(updated, TIME_SERIES_PANE_ID)
|
|
902
|
+
: candidate);
|
|
882
903
|
this.#emitPort({
|
|
883
904
|
type: 'updated',
|
|
884
905
|
id,
|
|
@@ -887,6 +908,32 @@ export class TimeSeriesChartsAdapter {
|
|
|
887
908
|
});
|
|
888
909
|
return timeSeriesSnapshotOfDrawing(updated);
|
|
889
910
|
}
|
|
911
|
+
updateDrawingLocked(id, locked) {
|
|
912
|
+
this.#assertActive();
|
|
913
|
+
const source = this.#workspaceSources.get(id);
|
|
914
|
+
if (source === undefined) {
|
|
915
|
+
throw new TimeSeriesSceneError('TIME_SERIES_SCENE_SCHEMA_INVALID', `/drawings/${id}`, `Drawing ${id} does not exist.`);
|
|
916
|
+
}
|
|
917
|
+
if (!this.#chart.overrideOverlay({ id, lock: locked })) {
|
|
918
|
+
throw adapterError(`KLineCharts failed to update Drawing ${id} lock state.`);
|
|
919
|
+
}
|
|
920
|
+
const updated = {
|
|
921
|
+
...structuredClone(source),
|
|
922
|
+
locked,
|
|
923
|
+
};
|
|
924
|
+
this.#workspaceSources.set(id, updated);
|
|
925
|
+
this.#drawings = this.#drawings.map((candidate) => candidate.id === id
|
|
926
|
+
? drawingToSceneOverlay(updated, TIME_SERIES_PANE_ID)
|
|
927
|
+
: candidate);
|
|
928
|
+
const snapshot = timeSeriesSnapshotOfDrawing(updated);
|
|
929
|
+
this.#emitPort({
|
|
930
|
+
type: 'updated',
|
|
931
|
+
id,
|
|
932
|
+
drawing: snapshot,
|
|
933
|
+
editDimensions: { horizontal: false, vertical: false },
|
|
934
|
+
});
|
|
935
|
+
return snapshot;
|
|
936
|
+
}
|
|
890
937
|
removeDrawing(id) {
|
|
891
938
|
this.#assertActive();
|
|
892
939
|
return this.#chart.removeOverlay({ id });
|
|
@@ -1058,6 +1105,7 @@ export class TimeSeriesChartsAdapter {
|
|
|
1058
1105
|
return;
|
|
1059
1106
|
}
|
|
1060
1107
|
this.#disposed = true;
|
|
1108
|
+
this.#removeInteractionListeners();
|
|
1061
1109
|
this.#chart.unsubscribeAction('onCrosshairChange', this.#handleCrosshair);
|
|
1062
1110
|
this.#interactiveRoot.removeEventListener('pointerleave', this.#handlePointerLeave);
|
|
1063
1111
|
this.#crosshairListeners.clear();
|
|
@@ -1077,9 +1125,13 @@ function timeSeriesSnapshotOfDrawing(drawing) {
|
|
|
1077
1125
|
return {
|
|
1078
1126
|
id: drawing.id,
|
|
1079
1127
|
type: drawing.type,
|
|
1128
|
+
...(drawing.groupId === undefined ? {} : { groupId: drawing.groupId }),
|
|
1080
1129
|
target: structuredClone(drawing.target),
|
|
1081
1130
|
geometry: structuredClone(drawing.geometry),
|
|
1082
1131
|
styles: structuredClone(drawing.styles),
|
|
1132
|
+
...(drawing.metadata === undefined
|
|
1133
|
+
? {}
|
|
1134
|
+
: { metadata: structuredClone(drawing.metadata) }),
|
|
1083
1135
|
locked: drawing.locked,
|
|
1084
1136
|
visible: drawing.visible,
|
|
1085
1137
|
zLevel: drawing.zLevel,
|
|
@@ -1090,9 +1142,13 @@ function timeSeriesDrawingFromSnapshot(snapshot) {
|
|
|
1090
1142
|
return {
|
|
1091
1143
|
id: snapshot.id,
|
|
1092
1144
|
type: snapshot.type,
|
|
1145
|
+
...(snapshot.groupId === undefined ? {} : { groupId: snapshot.groupId }),
|
|
1093
1146
|
target: structuredClone(snapshot.target),
|
|
1094
1147
|
geometry: structuredClone(snapshot.geometry),
|
|
1095
1148
|
styles: structuredClone(snapshot.styles),
|
|
1149
|
+
...(snapshot.metadata === undefined
|
|
1150
|
+
? {}
|
|
1151
|
+
: { metadata: structuredClone(snapshot.metadata) }),
|
|
1096
1152
|
visible: snapshot.visible,
|
|
1097
1153
|
locked: snapshot.locked,
|
|
1098
1154
|
zLevel: snapshot.zLevel,
|
|
@@ -1164,9 +1220,11 @@ function timeSeriesPlaceholderDrawing(request) {
|
|
|
1164
1220
|
return {
|
|
1165
1221
|
id: request.id,
|
|
1166
1222
|
type: request.type,
|
|
1223
|
+
...(request.groupId === undefined ? {} : { groupId: request.groupId }),
|
|
1167
1224
|
target: structuredClone(request.target),
|
|
1168
1225
|
geometry: timeSeriesPlaceholderGeometry(request.type),
|
|
1169
1226
|
styles: structuredClone(request.styles),
|
|
1227
|
+
metadata: structuredClone(request.metadata ?? {}),
|
|
1170
1228
|
visible: true,
|
|
1171
1229
|
locked: false,
|
|
1172
1230
|
zLevel: 0,
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED