@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 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): Promise<KLineChartsSceneAdapter>;
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;
@@ -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.#chart.setDataLoader(createStaticDataLoader(candidate.data));
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.#chart.setDataLoader(createStaticDataLoader(previous.data));
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":"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"}
1
+ {"version":3,"file":"engine-port.d.ts","sourceRoot":"","sources":["../../src/drawing/engine-port.ts"],"names":[],"mappings":"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"}
@@ -125,11 +125,11 @@ export function sceneOverlayToDrawing(overlay, source) {
125
125
  styles: structuredClone(overlay.styles),
126
126
  type: overlay.type,
127
127
  };
128
- if (overlay.groupId !== undefined) {
129
- result.groupId = overlay.groupId;
128
+ if (source.groupId !== undefined) {
129
+ result.groupId = source.groupId;
130
130
  }
131
- if (overlay.metadata !== undefined) {
132
- result.metadata = structuredClone(overlay.metadata);
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;IA6vBnC,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;IA8BjB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB;IA2BlE,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;CAmBtB"}
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
@@ -1,5 +1,5 @@
1
1
  /** Adapter 包版本。 */
2
- export declare const ADAPTER_PACKAGE_VERSION: "0.6.0";
2
+ export declare const ADAPTER_PACKAGE_VERSION: "0.9.2";
3
3
  /** 唯一允许加载的 KLineCharts 引擎版本。 */
4
4
  export declare const KLINECHARTS_ENGINE_VERSION: "10.0.0";
5
5
  /** 与 ChartScene 绑定的 Runtime 协议版本。 */
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Adapter 包版本。 */
2
- export const ADAPTER_PACKAGE_VERSION = '0.6.0';
2
+ export const ADAPTER_PACKAGE_VERSION = '0.9.2';
3
3
  /** 唯一允许加载的 KLineCharts 引擎版本。 */
4
4
  export const KLINECHARTS_ENGINE_VERSION = '10.0.0';
5
5
  /** 与 ChartScene 绑定的 Runtime 协议版本。 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baron1996/klinecharts-adapter",
3
- "version": "0.6.0",
3
+ "version": "0.9.2",
4
4
  "description": "Controlled ChartScene adapter for KLineCharts.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",