@baron1996/klinecharts-runtime 0.9.11 → 0.9.13

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 CHANGED
@@ -4,7 +4,7 @@ Browser editing runtime and standard annotation toolbar for deterministic KLineC
4
4
  ChartScene files.
5
5
 
6
6
  ```bash
7
- npm install --save-exact @baron1996/kline-scene-schema@0.9.11 @baron1996/klinecharts-runtime@0.9.11
7
+ npm install --save-exact @baron1996/kline-scene-schema@0.9.13 @baron1996/klinecharts-runtime@0.9.13
8
8
  ```
9
9
 
10
10
  ```ts
@@ -0,0 +1,69 @@
1
+ import type { ChartScene, Drawing, DrawingDocument, DrawableWorkspaceDocument, MarketData } from '@baron1996/kline-scene-schema';
2
+ import type { EmptyChartRuntimeBootstrap, EngineDrawingSnapshot, EngineHistoricalDataCommitResult, MainSeriesPresentation } from '@baron1996/klinecharts-adapter';
3
+ import type { RuntimeCapabilityDescriptor } from './runtime-capability-descriptor.js';
4
+ import { type WorkspaceRuntimeListener } from './workspace-events.js';
5
+ import { DrawableWorkspaceRuntime, type DrawableWorkspaceRuntimeOptions } from './workspace-runtime.js';
6
+ export type ProgressiveWorkspaceRuntimeState = 'empty' | 'loading-history' | 'error' | 'ready';
7
+ export interface EmptyDrawableWorkspaceBootstrap extends EmptyChartRuntimeBootstrap {
8
+ /** Drawing 的业务身份;只用于首份 Scene 就绪后创建空文档,不进入空 Scene。 */
9
+ readonly scopeKey: string;
10
+ readonly drawingMetadata?: DrawingDocument['metadata'];
11
+ }
12
+ export interface EmptyDrawableWorkspaceRuntimeOptions extends DrawableWorkspaceRuntimeOptions {
13
+ readonly emptyStateText?: string;
14
+ readonly loadingStateText?: string;
15
+ }
16
+ export interface ProgressiveRuntimeStateCapability {
17
+ getRuntimeState(): ProgressiveWorkspaceRuntimeState;
18
+ subscribeRuntimeState(listener: (state: ProgressiveWorkspaceRuntimeState) => void): () => void;
19
+ }
20
+ /**
21
+ * 浏览器专用渐进 Runtime。空阶段只有真实的 KLineCharts 容器和网格,
22
+ * 不存在可序列化 Scene/Workspace,也不会构造占位行情。
23
+ */
24
+ export declare class ProgressiveDrawableWorkspaceRuntime implements ProgressiveRuntimeStateCapability {
25
+ #private;
26
+ private constructor();
27
+ static create(container: HTMLElement, bootstrap: EmptyDrawableWorkspaceBootstrap, options: EmptyDrawableWorkspaceRuntimeOptions): Promise<ProgressiveDrawableWorkspaceRuntime>;
28
+ get commitMode(): DrawableWorkspaceRuntimeOptions['commitMode'];
29
+ getRuntimeState(): ProgressiveWorkspaceRuntimeState;
30
+ subscribeRuntimeState(listener: (state: ProgressiveWorkspaceRuntimeState) => void): () => void;
31
+ setLoadingState(state: Exclude<ProgressiveWorkspaceRuntimeState, 'ready'>, message?: string): void;
32
+ installInitialScene(value: ChartScene): ChartScene;
33
+ installDrawingDocument(value: unknown): DrawingDocument;
34
+ replaceDrawingDocumentProjection(value: unknown): DrawingDocument;
35
+ startDrawing(type: Drawing['type'], options?: Parameters<DrawableWorkspaceRuntime['startDrawing']>[1]): string;
36
+ listDrawings(): readonly EngineDrawingSnapshot[];
37
+ getDrawing(id: string): EngineDrawingSnapshot | undefined;
38
+ updateDrawingStyles(id: string, styles: Drawing['styles']): EngineDrawingSnapshot;
39
+ updateDrawingText(id: string, text: string): EngineDrawingSnapshot;
40
+ updateDrawingLocked(id: string, locked: boolean): EngineDrawingSnapshot;
41
+ removeDrawing(id: string): boolean;
42
+ requestDrawingDelete(id: string): void;
43
+ selectDrawing(id: string | null): void;
44
+ getSelectedDrawingId(): string | undefined;
45
+ hitTestDrawing(point: {
46
+ readonly x: number;
47
+ readonly y: number;
48
+ }): string | null;
49
+ getDrawingMutationState(): 'ready' | 'busy';
50
+ subscribeDrawingChanges(listener: () => void): () => void;
51
+ subscribe(listener: WorkspaceRuntimeListener): () => void;
52
+ getRuntimeCapabilityDescriptor(options?: Parameters<DrawableWorkspaceRuntime['getRuntimeCapabilityDescriptor']>[0]): RuntimeCapabilityDescriptor;
53
+ exportDrawingDocument(): DrawingDocument;
54
+ exportWorkspace(): DrawableWorkspaceDocument;
55
+ exportArtifact(fileName?: string): ReturnType<DrawableWorkspaceRuntime['exportArtifact']>;
56
+ setValueAxisScale(scale: 'linear' | 'logarithmic'): Promise<ChartScene>;
57
+ setMainSeriesPresentation(presentation: MainSeriesPresentation): {
58
+ readonly activeType: string;
59
+ };
60
+ replaceScene(scene: ChartScene): ChartScene;
61
+ commitHistoricalData(requestId: string, data: readonly MarketData[], hasMore: boolean): EngineHistoricalDataCommitResult;
62
+ rejectHistoricalData(requestId: string, message: string): boolean;
63
+ commitDrawingChange(requestId: string, canonicalHash: string): boolean;
64
+ rejectDrawingChange(requestId: string): boolean;
65
+ requestHostAction(actionId: string, drawingId?: string | null): void;
66
+ destroy(): void;
67
+ }
68
+ export declare function createEmptyDrawableWorkspaceRuntime(container: HTMLElement, bootstrap: EmptyDrawableWorkspaceBootstrap, options: EmptyDrawableWorkspaceRuntimeOptions): Promise<ProgressiveDrawableWorkspaceRuntime>;
69
+ //# sourceMappingURL=progressive-workspace-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressive-workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/drawing/progressive-workspace-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ import { STANDARD_CLOSE_LINE_PRESENTATION, SUPPORTED_OVERLAYS, } from '@baron1996/klinecharts-adapter';
2
+ import { runRuntimeTeardowns } from '../lifecycle.js';
3
+ import { getSceneRuntime } from './scene-runtime-factory.js';
4
+ import { deepFreeze, WORKSPACE_EVENT_PROTOCOL, WORKSPACE_EVENT_PROTOCOL_VERSION, } from './workspace-events.js';
5
+ import { DrawableWorkspaceRuntime, } from './workspace-runtime.js';
6
+ const EMPTY_RUNTIME_STYLES = `
7
+ .baron-progressive-runtime-state {
8
+ position: absolute;
9
+ inset: 0;
10
+ z-index: 2;
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ padding: 24px;
15
+ color: rgba(120, 123, 134, 1);
16
+ font: 500 13px/1.5 system-ui, sans-serif;
17
+ text-align: center;
18
+ pointer-events: none;
19
+ }
20
+ .baron-progressive-runtime-state[hidden] { display: none; }
21
+ `;
22
+ /**
23
+ * 浏览器专用渐进 Runtime。空阶段只有真实的 KLineCharts 容器和网格,
24
+ * 不存在可序列化 Scene/Workspace,也不会构造占位行情。
25
+ */
26
+ export class ProgressiveDrawableWorkspaceRuntime {
27
+ #container;
28
+ #bootstrap;
29
+ #options;
30
+ #adapter;
31
+ #listeners = new Set();
32
+ #stateListeners = new Set();
33
+ #runtimeId = `progressive-workspace-${Math.random().toString(36).slice(2)}`;
34
+ #stateElement;
35
+ #stateStyle;
36
+ #originalPosition;
37
+ #inner;
38
+ #state = 'empty';
39
+ #sequence = 0;
40
+ #destroyed = false;
41
+ constructor(container, bootstrap, options, adapter) {
42
+ this.#container = container;
43
+ this.#bootstrap = structuredClone(bootstrap);
44
+ this.#options = options;
45
+ this.#adapter = adapter;
46
+ this.#originalPosition = container.style.position;
47
+ if (getComputedStyle(container).position === 'static') {
48
+ container.style.position = 'relative';
49
+ }
50
+ this.#stateStyle = document.createElement('style');
51
+ this.#stateStyle.dataset.baronProgressiveRuntimeStyles = '';
52
+ this.#stateStyle.textContent = EMPTY_RUNTIME_STYLES;
53
+ this.#stateElement = document.createElement('div');
54
+ this.#stateElement.className = 'baron-progressive-runtime-state';
55
+ this.#stateElement.dataset.runtimeState = 'empty';
56
+ this.#stateElement.setAttribute('role', 'status');
57
+ this.#stateElement.setAttribute('aria-live', 'polite');
58
+ this.#stateElement.textContent = options.emptyStateText ?? '暂无历史 K 线';
59
+ container.append(this.#stateStyle, this.#stateElement);
60
+ if (options.onEvent !== undefined) {
61
+ this.#listeners.add(options.onEvent);
62
+ }
63
+ }
64
+ static async create(container, bootstrap, options) {
65
+ const registration = getSceneRuntime('chart');
66
+ if (registration.createEmptyAdapter === undefined) {
67
+ throw new Error('EMPTY_RUNTIME_UNSUPPORTED: chart Adapter has no empty Runtime factory.');
68
+ }
69
+ const adapter = await registration.createEmptyAdapter(container, bootstrap, {
70
+ ...(options.displayTimezone === undefined
71
+ ? {}
72
+ : { displayTimezone: options.displayTimezone }),
73
+ ...(options.drawingInteraction === undefined
74
+ ? {}
75
+ : { drawingInteraction: options.drawingInteraction }),
76
+ });
77
+ return new ProgressiveDrawableWorkspaceRuntime(container, bootstrap, options, adapter);
78
+ }
79
+ get commitMode() {
80
+ return this.#options.commitMode;
81
+ }
82
+ getRuntimeState() {
83
+ return this.#state;
84
+ }
85
+ subscribeRuntimeState(listener) {
86
+ this.#stateListeners.add(listener);
87
+ return () => this.#stateListeners.delete(listener);
88
+ }
89
+ setLoadingState(state, message) {
90
+ this.#assertAlive();
91
+ if (this.#inner !== undefined) {
92
+ throw new Error('EMPTY_RUNTIME_ALREADY_READY: loading state cannot replace an installed Scene.');
93
+ }
94
+ this.#stateElement.textContent = message ?? (state === 'loading-history'
95
+ ? this.#options.loadingStateText ?? '正在加载历史 K 线…'
96
+ : state === 'error'
97
+ ? '历史 K 线加载失败,可重试'
98
+ : this.#options.emptyStateText ?? '暂无历史 K 线');
99
+ this.#setState(state);
100
+ }
101
+ installInitialScene(value) {
102
+ this.#assertAlive();
103
+ if (this.#inner !== undefined) {
104
+ throw new Error('EMPTY_RUNTIME_ALREADY_READY: initial Scene can only be installed once.');
105
+ }
106
+ const scene = this.#adapter.installInitialScene(value);
107
+ const candlePane = scene.panes.find((pane) => pane.kind === 'candle');
108
+ const primaryAxis = candlePane?.yAxes.find((axis) => axis.role === 'primary');
109
+ if (candlePane === undefined || primaryAxis === undefined) {
110
+ throw new Error('EMPTY_RUNTIME_INVALID_SCENE: candle primary axis is required.');
111
+ }
112
+ const drawings = {
113
+ schema: '@baron1996/drawing-document',
114
+ version: 1,
115
+ scopeKey: this.#bootstrap.scopeKey,
116
+ coordinateSystem: {
117
+ timezone: scene.chart.timezone,
118
+ valueAxes: [{
119
+ paneRole: 'candle',
120
+ yAxisRole: 'primary',
121
+ valuePrecision: scene.symbol.pricePrecision,
122
+ }],
123
+ },
124
+ drawings: [],
125
+ metadata: structuredClone(this.#bootstrap.drawingMetadata ?? {}),
126
+ };
127
+ const workspace = {
128
+ schema: '@baron1996/drawable-workspace',
129
+ version: 1,
130
+ runtime: {
131
+ engine: 'klinecharts',
132
+ engineVersion: '10.0.0',
133
+ workspaceRuntimeVersion: '1.0.0',
134
+ },
135
+ scene: { kind: 'chart', document: structuredClone(scene) },
136
+ drawings,
137
+ binding: {
138
+ scopeKey: drawings.scopeKey,
139
+ timezone: drawings.coordinateSystem.timezone,
140
+ valueAxes: structuredClone(drawings.coordinateSystem.valueAxes),
141
+ },
142
+ metadata: {},
143
+ };
144
+ this.#inner = DrawableWorkspaceRuntime.createFromEmptyAdapter(this.#container, workspace, this.#adapter, {
145
+ commitMode: this.#options.commitMode,
146
+ onEvent: (event) => this.#dispatch(event),
147
+ ...(this.#options.hostActions === undefined
148
+ ? {}
149
+ : { hostActions: this.#options.hostActions }),
150
+ ...(this.#options.historicalDataLoading === undefined
151
+ ? {}
152
+ : { historicalDataLoading: this.#options.historicalDataLoading }),
153
+ ...(this.#options.displayTimezone === undefined
154
+ ? {}
155
+ : { displayTimezone: this.#options.displayTimezone }),
156
+ ...(this.#options.drawingInteraction === undefined
157
+ ? {}
158
+ : { drawingInteraction: this.#options.drawingInteraction }),
159
+ });
160
+ this.#stateElement.hidden = true;
161
+ this.#setState('ready');
162
+ return structuredClone(scene);
163
+ }
164
+ installDrawingDocument(value) {
165
+ return this.#requireReady().installDrawingDocument(value);
166
+ }
167
+ replaceDrawingDocumentProjection(value) {
168
+ return this.#requireReady().replaceDrawingDocumentProjection(value);
169
+ }
170
+ startDrawing(type, options) {
171
+ return this.#requireReady().startDrawing(type, options);
172
+ }
173
+ listDrawings() {
174
+ return this.#inner?.listDrawings() ?? [];
175
+ }
176
+ getDrawing(id) {
177
+ return this.#inner?.getDrawing(id);
178
+ }
179
+ updateDrawingStyles(id, styles) {
180
+ return this.#requireReady().updateDrawingStyles(id, styles);
181
+ }
182
+ updateDrawingText(id, text) {
183
+ return this.#requireReady().updateDrawingText(id, text);
184
+ }
185
+ updateDrawingLocked(id, locked) {
186
+ return this.#requireReady().updateDrawingLocked(id, locked);
187
+ }
188
+ removeDrawing(id) {
189
+ return this.#requireReady().removeDrawing(id);
190
+ }
191
+ requestDrawingDelete(id) {
192
+ this.#requireReady().requestDrawingDelete(id);
193
+ }
194
+ selectDrawing(id) {
195
+ this.#requireReady().selectDrawing(id);
196
+ }
197
+ getSelectedDrawingId() {
198
+ return this.#inner?.getSelectedDrawingId();
199
+ }
200
+ hitTestDrawing(point) {
201
+ return this.#requireReady().hitTestDrawing(point);
202
+ }
203
+ getDrawingMutationState() {
204
+ return this.#inner?.getDrawingMutationState() ?? 'busy';
205
+ }
206
+ subscribeDrawingChanges(listener) {
207
+ return this.#requireReady().subscribeDrawingChanges(listener);
208
+ }
209
+ subscribe(listener) {
210
+ this.#listeners.add(listener);
211
+ return () => this.#listeners.delete(listener);
212
+ }
213
+ getRuntimeCapabilityDescriptor(options = {}) {
214
+ if (this.#inner !== undefined) {
215
+ return this.#inner.getRuntimeCapabilityDescriptor(options);
216
+ }
217
+ return {
218
+ drawingTypes: SUPPORTED_OVERLAYS,
219
+ valueAxis: {
220
+ supportedScales: ['linear', 'logarithmic'],
221
+ activeScale: this.#bootstrap.panes
222
+ .find((pane) => pane.kind === 'candle')
223
+ ?.yAxes.find((axis) => axis.role === 'primary')?.scale ?? 'linear',
224
+ mutable: true,
225
+ },
226
+ exportArtifact: {
227
+ kind: 'drawable-workspace',
228
+ mediaType: 'application/json',
229
+ defaultFileName: 'drawable-workspace.json',
230
+ },
231
+ mainSeriesPresentation: {
232
+ presentations: [
233
+ { type: 'candle_solid' },
234
+ { type: 'candle_stroke' },
235
+ { type: 'candle_up_stroke' },
236
+ { type: 'candle_down_stroke' },
237
+ { type: 'ohlc' },
238
+ STANDARD_CLOSE_LINE_PRESENTATION,
239
+ ],
240
+ activeType: this.#bootstrap.chart.candle.type,
241
+ mutable: true,
242
+ },
243
+ hostActions: options.hostActions ?? [],
244
+ };
245
+ }
246
+ exportDrawingDocument() {
247
+ return this.#requireReady().exportDrawingDocument();
248
+ }
249
+ exportWorkspace() {
250
+ return this.#requireReady().exportWorkspace();
251
+ }
252
+ exportArtifact(fileName) {
253
+ return this.#requireReady().exportArtifact(fileName);
254
+ }
255
+ setValueAxisScale(scale) {
256
+ return this.#requireReady().setValueAxisScale(scale);
257
+ }
258
+ setMainSeriesPresentation(presentation) {
259
+ return this.#requireReady().setMainSeriesPresentation(presentation);
260
+ }
261
+ replaceScene(scene) {
262
+ return this.#requireReady().replaceScene(scene);
263
+ }
264
+ commitHistoricalData(requestId, data, hasMore) {
265
+ return this.#requireReady().commitHistoricalData(requestId, data, hasMore);
266
+ }
267
+ rejectHistoricalData(requestId, message) {
268
+ return this.#requireReady().rejectHistoricalData(requestId, message);
269
+ }
270
+ commitDrawingChange(requestId, canonicalHash) {
271
+ return this.#requireReady().commitDrawingChange(requestId, canonicalHash);
272
+ }
273
+ rejectDrawingChange(requestId) {
274
+ return this.#requireReady().rejectDrawingChange(requestId);
275
+ }
276
+ requestHostAction(actionId, drawingId) {
277
+ if (this.#inner !== undefined) {
278
+ this.#inner.requestHostAction(actionId, drawingId);
279
+ return;
280
+ }
281
+ this.#emit({
282
+ type: 'host-action-requested',
283
+ actionId,
284
+ drawingId: drawingId ?? null,
285
+ });
286
+ }
287
+ destroy() {
288
+ if (this.#destroyed) {
289
+ return;
290
+ }
291
+ this.#destroyed = true;
292
+ runRuntimeTeardowns(this);
293
+ if (this.#inner !== undefined) {
294
+ this.#inner.destroy();
295
+ }
296
+ else {
297
+ this.#adapter.dispose();
298
+ }
299
+ this.#stateElement.remove();
300
+ this.#stateStyle.remove();
301
+ this.#container.style.position = this.#originalPosition;
302
+ this.#listeners.clear();
303
+ this.#stateListeners.clear();
304
+ }
305
+ #requireReady() {
306
+ this.#assertAlive();
307
+ if (this.#inner === undefined) {
308
+ throw new Error('EMPTY_RUNTIME_NOT_READY: install a non-empty ChartScene first.');
309
+ }
310
+ return this.#inner;
311
+ }
312
+ #assertAlive() {
313
+ if (this.#destroyed) {
314
+ throw new Error('DRAWABLE_WORKSPACE_RUNTIME_DESTROYED');
315
+ }
316
+ }
317
+ #setState(state) {
318
+ this.#state = state;
319
+ this.#stateElement.dataset.runtimeState = state;
320
+ for (const listener of this.#stateListeners) {
321
+ listener(state);
322
+ }
323
+ }
324
+ #dispatch(event) {
325
+ for (const listener of this.#listeners) {
326
+ listener(structuredClone(event));
327
+ }
328
+ }
329
+ #emit(event) {
330
+ const envelope = deepFreeze({
331
+ protocol: WORKSPACE_EVENT_PROTOCOL,
332
+ protocolVersion: WORKSPACE_EVENT_PROTOCOL_VERSION,
333
+ runtimeId: this.#runtimeId,
334
+ sequence: ++this.#sequence,
335
+ ...event,
336
+ });
337
+ this.#dispatch(envelope);
338
+ }
339
+ }
340
+ export async function createEmptyDrawableWorkspaceRuntime(container, bootstrap, options) {
341
+ return ProgressiveDrawableWorkspaceRuntime.create(container, bootstrap, options);
342
+ }
@@ -1,9 +1,10 @@
1
1
  import type { ChartScene, DrawableWorkspaceDocument, TimeSeriesScene } from '@baron1996/kline-scene-schema';
2
- import { type DrawingInteractionOptions, type DrawingEnginePort, type DrawingProjectionPolicy } from '@baron1996/klinecharts-adapter';
2
+ import { type DrawingInteractionOptions, type DrawingEnginePort, type DrawingProjectionPolicy, type EmptyChartEnginePort, type EmptyChartRuntimeBootstrap } from '@baron1996/klinecharts-adapter';
3
3
  export interface SceneRuntimeRegistration {
4
4
  readonly sceneKind: 'chart' | 'time-series';
5
5
  parseScene(value: unknown): ChartScene | TimeSeriesScene;
6
6
  createAdapter(container: HTMLElement, workspace: DrawableWorkspaceDocument, options?: SceneRuntimeAdapterOptions): Promise<DrawingEnginePort>;
7
+ createEmptyAdapter?(container: HTMLElement, bootstrap: EmptyChartRuntimeBootstrap, options?: SceneRuntimeAdapterOptions): Promise<EmptyChartEnginePort>;
7
8
  createPolicy(): DrawingProjectionPolicy;
8
9
  readonly defaultTarget: {
9
10
  readonly paneRole: string;
@@ -1 +1 @@
1
- {"version":3,"file":"scene-runtime-factory.d.ts","sourceRoot":"","sources":["../../src/drawing/scene-runtime-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,yBAAyB,EACzB,eAAe,EACf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAKN,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,aAAa,CAAC;IAC5C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IACzD,aAAa,CACZ,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,yBAAyB,EACpC,OAAO,CAAC,EAAE,0BAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,YAAY,IAAI,uBAAuB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;KAC9B,CAAC;CACF;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,qBAAqB,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,iDAAiD;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;CACxD;AAID,wBAAgB,oBAAoB,CACnC,YAAY,EAAE,wBAAwB,GACpC,IAAI,CAEN;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,OAAO,GAAG,aAAa,GAC3B,wBAAwB,CAM1B"}
1
+ {"version":3,"file":"scene-runtime-factory.d.ts","sourceRoot":"","sources":["../../src/drawing/scene-runtime-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,yBAAyB,EACzB,eAAe,EACf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAKN,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,aAAa,CAAC;IAC5C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IACzD,aAAa,CACZ,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,yBAAyB,EACpC,OAAO,CAAC,EAAE,0BAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,kBAAkB,CAAC,CAClB,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,0BAA0B,EACrC,OAAO,CAAC,EAAE,0BAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjC,YAAY,IAAI,uBAAuB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;KAC9B,CAAC;CACF;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,qBAAqB,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,iDAAiD;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;CACxD;AAID,wBAAgB,oBAAoB,CACnC,YAAY,EAAE,wBAAwB,GACpC,IAAI,CAEN;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,OAAO,GAAG,aAAa,GAC3B,wBAAwB,CAM1B"}
@@ -15,6 +15,7 @@ registerSceneRuntime({
15
15
  sceneKind: 'chart',
16
16
  parseScene: (value) => parseChartScene(value),
17
17
  createAdapter: (container, workspace, options) => KLineChartsSceneAdapter.createWorkspace(container, workspace, options),
18
+ createEmptyAdapter: (container, bootstrap, options) => KLineChartsSceneAdapter.createEmptyWorkspace(container, bootstrap, options),
18
19
  createPolicy: () => new KLineDrawingProjectionPolicy(),
19
20
  defaultTarget: { paneRole: 'candle', yAxisRole: 'primary' },
20
21
  });
@@ -1,5 +1,5 @@
1
1
  import type { ChartScene, DrawableWorkspaceDocument, Drawing, DrawingDocument, MarketData, TimeSeriesScene } from '@baron1996/kline-scene-schema';
2
- import type { DrawingInteractionOptions, EngineDrawingSnapshot, EngineHistoricalDataCommitResult, MainSeriesPresentation } from '@baron1996/klinecharts-adapter';
2
+ import type { DrawingInteractionOptions, DrawingEnginePort, EngineDrawingSnapshot, EngineHistoricalDataCommitResult, MainSeriesPresentation } from '@baron1996/klinecharts-adapter';
3
3
  import type { DrawingRuntimeCapability, HistoricalDataRuntimeCapability, RuntimeAuxiliaryCapability } from './capabilities.js';
4
4
  import type { HostActionDescriptor, RuntimeCapabilityDescriptor } from './runtime-capability-descriptor.js';
5
5
  import { DrawingSessionController } from './session-controller.js';
@@ -26,6 +26,8 @@ export declare class DrawableWorkspaceRuntime implements DrawableWorkspaceRuntim
26
26
  #private;
27
27
  private constructor();
28
28
  static create(container: HTMLElement, value: unknown, options: DrawableWorkspaceRuntimeOptions): Promise<DrawableWorkspaceRuntime>;
29
+ /** 复用空运行态已经创建的 Adapter,不重新初始化图表容器。 */
30
+ static createFromEmptyAdapter(container: HTMLElement, value: unknown, engine: DrawingEnginePort, options: DrawableWorkspaceRuntimeOptions): DrawableWorkspaceRuntime;
29
31
  /** 跨周期等宿主编排只能连接显式 host-confirmed Runtime。 */
30
32
  get commitMode(): DrawableWorkspaceRuntimeOptions['commitMode'];
31
33
  /** 只暴露公共会话状态,不暴露 Adapter 或 Chart。 */
@@ -57,6 +59,10 @@ export declare class DrawableWorkspaceRuntime implements DrawableWorkspaceRuntim
57
59
  readonly hostActions?: readonly HostActionDescriptor[];
58
60
  }): RuntimeCapabilityDescriptor;
59
61
  exportDrawingDocument(): DrawingDocument;
62
+ /** 在首份正式 Scene 建立坐标系后,独立安装宿主加载的 DrawingDocument。 */
63
+ installDrawingDocument(value: unknown): DrawingDocument;
64
+ /** 在无交互事务时刷新宿主派生的 Drawing 投影,不产生保存候选。 */
65
+ replaceDrawingDocumentProjection(value: unknown): DrawingDocument;
60
66
  exportWorkspace(): DrawableWorkspaceDocument;
61
67
  exportArtifact(fileName?: string): {
62
68
  readonly bytes: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/drawing/workspace-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,yBAAyB,EACzB,OAAO,EACP,eAAe,EACf,UAAU,EACV,eAAe,EACf,MAAM,+BAA+B,CAAC;AAOvC,OAAO,KAAK,EAEX,yBAAyB,EAEzB,qBAAqB,EACrB,gCAAgC,EAEhC,sBAAsB,EACtB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EACX,wBAAwB,EACxB,+BAA+B,EAC/B,0BAA0B,EAC1B,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EACX,oBAAoB,EACpB,2BAA2B,EAC3B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACN,wBAAwB,EAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAKN,KAAK,wBAAwB,EAC7B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,QAAQ,CAAC,qBAAqB,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,6CAA6C;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;CACxD;AAED,MAAM,WAAW,8BAChB,SAAQ,wBAAwB,EAAE,+BAA+B,EAAE,0BAA0B;CAAG;AAsCjG;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,8BAA8B;;IAkB9E,OAAO;WA0Ca,MAAM,CACzB,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,+BAA+B,GACtC,OAAO,CAAC,wBAAwB,CAAC;IA6BpC,6CAA6C;IAC7C,IAAW,UAAU,IAAI,+BAA+B,CAAC,YAAY,CAAC,CAErE;IAED,qCAAqC;IAC9B,sBAAsB,IAAI,wBAAwB,CAAC,OAAO,CAAC;IAI3D,YAAY,CAClB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EACrB,OAAO,CAAC,EAAE;QACT,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;KACrD,GACC,MAAM;IAIF,YAAY,IAAI,SAAS,qBAAqB,EAAE;IAIhD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAIzD,mBAAmB,CACzB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GACvB,qBAAqB;IAIjB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAIlE,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,qBAAqB;IAIvE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIlC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAItC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAItC,oBAAoB,IAAI,MAAM,GAAG,SAAS;IAI1C,cAAc,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,IAAI;IAIhF,uBAAuB,IAAI,OAAO,GAAG,MAAM;IAI3C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOzD,SAAS,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAOzD,8BAA8B,CACpC,OAAO,GAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAA;KAAO,GACtE,2BAA2B;IA8CvB,qBAAqB,IAAI,eAAe;IAOxC,eAAe,IAAI,yBAAyB;IAmB5C,cAAc,CACpB,QAAQ,SAA4B,GAClC;QACF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC1B;IASY,iBAAiB,CAC7B,KAAK,EAAE,QAAQ,GAAG,aAAa,GAC7B,OAAO,CAAC,UAAU,CAAC;IAyCf,yBAAyB,CAC/B,YAAY,EAAE,sBAAsB,GAClC;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAyB3B,YAAY,CAClB,KAAK,EAAE,UAAU,GAAG,eAAe,GACjC,UAAU,GAAG,eAAe;IAwBxB,oBAAoB,CAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,UAAU,EAAE,EAC3B,OAAO,EAAE,OAAO,GACd,gCAAgC;IA0B5B,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IASjE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAItE,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/C,iBAAiB,CACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,IAAI;IAQA,OAAO,IAAI,IAAI;CA8GtB;AAED,wBAAsB,8BAA8B,CACnD,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,+BAA+B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAEnC"}
1
+ {"version":3,"file":"workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/drawing/workspace-runtime.ts"],"names":[],"mappings":"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"}
@@ -60,13 +60,19 @@ export class DrawableWorkspaceRuntime {
60
60
  #sequence = 0;
61
61
  #destroyed = false;
62
62
  #scene;
63
- constructor(container, workspace, engine, options) {
63
+ /** 渐进 Runtime 只允许安装一次首份 DrawingDocument。 */
64
+ #drawingDocumentInstalled;
65
+ /** 首次 Scene 建立时固定的 Drawing 业务身份,不随投影 metadata 变化。 */
66
+ #drawingMetadataIdentity;
67
+ constructor(container, workspace, engine, options, drawingDocumentInstalled = true) {
64
68
  this.#container = container;
65
69
  this.#workspace = workspace;
66
70
  this.#engine = engine;
67
71
  this.#commitMode = options.commitMode;
68
72
  this.#runtimeId = `drawable-workspace-${Math.random().toString(36).slice(2)}`;
69
73
  this.#scene = workspace.scene.document;
74
+ this.#drawingDocumentInstalled = drawingDocumentInstalled;
75
+ this.#drawingMetadataIdentity = structuredClone(workspace.drawings.metadata);
70
76
  this.#registration = getSceneRuntime(workspace.scene.kind);
71
77
  this.#session = new DrawingSessionController({
72
78
  runtimeId: this.#runtimeId,
@@ -116,6 +122,18 @@ export class DrawableWorkspaceRuntime {
116
122
  });
117
123
  return new DrawableWorkspaceRuntime(container, workspace, engine, options);
118
124
  }
125
+ /** 复用空运行态已经创建的 Adapter,不重新初始化图表容器。 */
126
+ static createFromEmptyAdapter(container, value, engine, options) {
127
+ const workspace = parseDrawableWorkspaceDocument(value);
128
+ if (workspace.scene.kind !== 'chart' || engine.sceneKind !== 'chart') {
129
+ throw new Error('DRAWABLE_SCENE_KIND_UNSUPPORTED: empty Runtime only supports chart Workspaces.');
130
+ }
131
+ if (options.historicalDataLoading !== undefined) {
132
+ const port = engine;
133
+ port.configureHistoricalDataLoading(options.historicalDataLoading.hasMore);
134
+ }
135
+ return new DrawableWorkspaceRuntime(container, workspace, engine, options, false);
136
+ }
119
137
  /** 跨周期等宿主编排只能连接显式 host-confirmed Runtime。 */
120
138
  get commitMode() {
121
139
  return this.#commitMode;
@@ -221,6 +239,70 @@ export class DrawableWorkspaceRuntime {
221
239
  this.#assertUsable();
222
240
  return parseDrawingDocument(this.#buildDocument(this.#session.confirmedDrawings));
223
241
  }
242
+ /** 在首份正式 Scene 建立坐标系后,独立安装宿主加载的 DrawingDocument。 */
243
+ installDrawingDocument(value) {
244
+ this.#assertUsable();
245
+ if (this.#drawingDocumentInstalled) {
246
+ throw new DrawingSessionError('DRAWING_CHANGE_IN_PROGRESS', '/drawings', 'The initial DrawingDocument has already been installed.');
247
+ }
248
+ const installed = this.#applyDrawingDocumentProjection(this.#validateDrawingDocumentProjection(value));
249
+ this.#drawingDocumentInstalled = true;
250
+ return installed;
251
+ }
252
+ /** 在无交互事务时刷新宿主派生的 Drawing 投影,不产生保存候选。 */
253
+ replaceDrawingDocumentProjection(value) {
254
+ this.#assertUsable();
255
+ if (!this.#drawingDocumentInstalled || this.#session.state !== 'ready') {
256
+ throw new DrawingSessionError('DRAWING_CHANGE_IN_PROGRESS', '/drawings', 'Drawing projection can only be replaced after installation and outside interactions.');
257
+ }
258
+ return this.#applyDrawingDocumentProjection(this.#validateDrawingDocumentProjection(value));
259
+ }
260
+ #validateDrawingDocumentProjection(value) {
261
+ const document = parseDrawingDocument(value);
262
+ const expected = this.#workspace.drawings;
263
+ if (document.scopeKey !== expected.scopeKey ||
264
+ document.coordinateSystem.timezone !== expected.coordinateSystem.timezone ||
265
+ JSON.stringify(document.coordinateSystem.valueAxes) !==
266
+ JSON.stringify(expected.coordinateSystem.valueAxes) ||
267
+ !containsMetadataIdentity(document.metadata, this.#drawingMetadataIdentity)) {
268
+ throw new DrawingSessionError('DRAWING_PROJECTION_INVALID', '/drawings', 'DrawingDocument identity or coordinate system does not match the installed Scene.');
269
+ }
270
+ this.#projectionService.projectDocument({
271
+ scene: this.#projectionScene(),
272
+ drawings: document,
273
+ });
274
+ return document;
275
+ }
276
+ #applyDrawingDocumentProjection(document) {
277
+ const previousDrawings = this.#session.confirmedDrawings;
278
+ const previousWorkspace = this.#workspace;
279
+ try {
280
+ this.#session.restoreConfirmed(document.drawings.map((drawing) => drawingToSnapshot(drawing)));
281
+ this.#workspace = parseDrawableWorkspaceDocument({
282
+ ...structuredClone(this.#workspace),
283
+ drawings: structuredClone(document),
284
+ binding: {
285
+ scopeKey: document.scopeKey,
286
+ timezone: document.coordinateSystem.timezone,
287
+ valueAxes: structuredClone(document.coordinateSystem.valueAxes),
288
+ },
289
+ });
290
+ }
291
+ catch (error) {
292
+ this.#session.restoreConfirmed(previousDrawings);
293
+ this.#workspace = previousWorkspace;
294
+ throw error;
295
+ }
296
+ for (const listener of this.#drawingChangeListeners) {
297
+ try {
298
+ listener();
299
+ }
300
+ catch {
301
+ // 宿主投影刷新已经提交;单个 UI 监听失败不能回滚 Drawing。
302
+ }
303
+ }
304
+ return structuredClone(document);
305
+ }
224
306
  exportWorkspace() {
225
307
  this.#assertUsable();
226
308
  const drawings = this.exportDrawingDocument();
@@ -443,6 +525,15 @@ export class DrawableWorkspaceRuntime {
443
525
  }
444
526
  }
445
527
  }
528
+ function containsMetadataIdentity(actual, expected) {
529
+ if (expected === undefined) {
530
+ return true;
531
+ }
532
+ if (actual === undefined) {
533
+ return false;
534
+ }
535
+ return Object.entries(expected).every(([key, value]) => JSON.stringify(actual[key]) === JSON.stringify(value));
536
+ }
446
537
  export async function createDrawableWorkspaceRuntime(container, workspace, options) {
447
538
  return DrawableWorkspaceRuntime.create(container, workspace, options);
448
539
  }
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  /** Web Runtime npm 包版本;ChartScene runtimeVersion 是独立的数据契约版本。 */
2
- export declare const WEB_RUNTIME_PACKAGE_VERSION: "0.9.11";
2
+ export declare const WEB_RUNTIME_PACKAGE_VERSION: "0.9.13";
3
3
  export { SUPPORTED_OVERLAYS } from '@baron1996/klinecharts-adapter';
4
4
  export * from './cross-period/coordinator.js';
5
5
  export * from './drawing/capabilities.js';
6
6
  export * from './drawing/projection-service.js';
7
+ export * from './drawing/progressive-workspace-runtime.js';
7
8
  export * from './drawing/runtime-capability-descriptor.js';
8
9
  export * from './drawing/scene-runtime-factory.js';
9
10
  export * from './drawing/session-controller.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,2BAA2B,EAAG,QAAiB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,2BAA2B,EAAG,QAAiB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /** Web Runtime npm 包版本;ChartScene runtimeVersion 是独立的数据契约版本。 */
2
- export const WEB_RUNTIME_PACKAGE_VERSION = '0.9.11';
2
+ export const WEB_RUNTIME_PACKAGE_VERSION = '0.9.13';
3
3
  export { SUPPORTED_OVERLAYS } from '@baron1996/klinecharts-adapter';
4
4
  export * from './cross-period/coordinator.js';
5
5
  export * from './drawing/capabilities.js';
6
6
  export * from './drawing/projection-service.js';
7
+ export * from './drawing/progressive-workspace-runtime.js';
7
8
  export * from './drawing/runtime-capability-descriptor.js';
8
9
  export * from './drawing/scene-runtime-factory.js';
9
10
  export * from './drawing/session-controller.js';
@@ -1 +1 @@
1
- {"version":3,"file":"standard-toolbar.d.ts","sourceRoot":"","sources":["../../src/toolbar/standard-toolbar.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,wBAAwB,EACxB,0BAA0B,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACX,eAAe,EACf,sBAAsB,EAEtB,MAAM,aAAa,CAAC;AAgErB,KAAK,sBAAsB,GAAG,wBAAwB,GAAG,0BAA0B,CAAC;AAyKpF,2BAA2B;AAC3B,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,sBAA2B,GAClC,eAAe,CA8RjB"}
1
+ {"version":3,"file":"standard-toolbar.d.ts","sourceRoot":"","sources":["../../src/toolbar/standard-toolbar.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,wBAAwB,EACxB,0BAA0B,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACX,eAAe,EACf,sBAAsB,EAEtB,MAAM,aAAa,CAAC;AAgErB,KAAK,sBAAsB,GAAG,wBAAwB,GAAG,0BAA0B,CAAC;AAwLpF,2BAA2B;AAC3B,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,sBAA2B,GAClC,eAAe,CA+UjB"}
@@ -26,6 +26,13 @@ function applyHostActionState(control, state) {
26
26
  }
27
27
  }
28
28
  }
29
+ function runtimeStateCapability(runtime) {
30
+ const candidate = runtime;
31
+ return typeof candidate.getRuntimeState === 'function' &&
32
+ typeof candidate.subscribeRuntimeState === 'function'
33
+ ? candidate
34
+ : undefined;
35
+ }
29
36
  function downloadArtifact(runtime, fileName) {
30
37
  const artifact = runtime.exportArtifact(fileName);
31
38
  const blob = new Blob([artifact.bytes], { type: artifact.mediaType });
@@ -177,6 +184,8 @@ export function createStandardToolbar(container, runtime, options = {}) {
177
184
  root.append(style, viewport);
178
185
  const tooltip = createTooltip(viewport, `baron-kline-toolbar-tooltip-${toolbarId}`);
179
186
  const cleanupCallbacks = [];
187
+ const dataDependentControls = [];
188
+ const drawingDependentControls = [];
180
189
  const handleViewportWheel = (event) => {
181
190
  if (event.ctrlKey ||
182
191
  viewport.scrollWidth <= viewport.clientWidth ||
@@ -200,6 +209,8 @@ export function createStandardToolbar(container, runtime, options = {}) {
200
209
  textInput.dataset.action = 'overlay-text';
201
210
  textInput.setAttribute('aria-label', '标注文本');
202
211
  textInput.placeholder = '输入标注文本';
212
+ dataDependentControls.push(textInput);
213
+ drawingDependentControls.push(textInput);
203
214
  const scaleControl = createSelectControl('价格轴', 'price-scale', [
204
215
  { value: 'linear', label: '线性' },
205
216
  { value: 'logarithmic', label: '对数' },
@@ -229,6 +240,10 @@ export function createStandardToolbar(container, runtime, options = {}) {
229
240
  mainSeriesControl.select.value = mainSeries.activeType;
230
241
  }
231
242
  scaleControl.select.value = descriptor.valueAxis.activeScale;
243
+ dataDependentControls.push(scaleControl.select);
244
+ if (mainSeriesControl !== null) {
245
+ dataDependentControls.push(mainSeriesControl.select);
246
+ }
232
247
  const handleScaleChange = async () => {
233
248
  await runtime.setValueAxisScale(scaleControl.select.value);
234
249
  };
@@ -286,6 +301,7 @@ export function createStandardToolbar(container, runtime, options = {}) {
286
301
  };
287
302
  const button = createIconButton(presentation, action);
288
303
  button.element.dataset.action = presentation.action;
304
+ dataDependentControls.push(button.element);
289
305
  groupElement.append(button.element);
290
306
  cleanupCallbacks.push(button.cleanup, tooltip.bind(button.element, presentation.label, presentation.action));
291
307
  }
@@ -334,6 +350,8 @@ export function createStandardToolbar(container, runtime, options = {}) {
334
350
  buttonElement.dataset.overlayType = overlayType;
335
351
  buttonElement.setAttribute('aria-pressed', 'false');
336
352
  overlayButtons.push(buttonElement);
353
+ dataDependentControls.push(buttonElement);
354
+ drawingDependentControls.push(buttonElement);
337
355
  groupElement.append(buttonElement);
338
356
  cleanupCallbacks.push(button.cleanup, tooltip.bind(buttonElement, presentation.label, overlayType));
339
357
  }
@@ -347,11 +365,48 @@ export function createStandardToolbar(container, runtime, options = {}) {
347
365
  textLabel.textContent = '标注文本';
348
366
  textField.append(textLabel, textInput);
349
367
  content.append(textField);
368
+ const stateCapability = runtimeStateCapability(runtime);
369
+ let runtimeReady = stateCapability === undefined;
370
+ let hostDataActionsDisabled = false;
371
+ let hostDrawingActionsDisabled = false;
372
+ const applyDataActionState = () => {
373
+ for (const control of dataDependentControls) {
374
+ control.disabled = !runtimeReady || hostDataActionsDisabled;
375
+ }
376
+ if (hostDrawingActionsDisabled) {
377
+ for (const control of drawingDependentControls) {
378
+ control.disabled = true;
379
+ }
380
+ }
381
+ };
382
+ if (stateCapability !== undefined) {
383
+ const applyRuntimeState = (state) => {
384
+ runtimeReady = state === 'ready';
385
+ applyDataActionState();
386
+ root.dataset.runtimeState = state;
387
+ };
388
+ applyRuntimeState(stateCapability.getRuntimeState());
389
+ cleanupCallbacks.push(stateCapability.subscribeRuntimeState(applyRuntimeState));
390
+ }
350
391
  container.append(root);
351
392
  let destroyed = false;
352
393
  let unregisterRuntime = () => { };
353
394
  const toolbar = {
354
395
  element: root,
396
+ setDataActionsDisabled(disabled) {
397
+ if (destroyed) {
398
+ throw new Error('STANDARD_TOOLBAR_DESTROYED');
399
+ }
400
+ hostDataActionsDisabled = disabled;
401
+ applyDataActionState();
402
+ },
403
+ setDrawingActionsDisabled(disabled) {
404
+ if (destroyed) {
405
+ throw new Error('STANDARD_TOOLBAR_DESTROYED');
406
+ }
407
+ hostDrawingActionsDisabled = disabled;
408
+ applyDataActionState();
409
+ },
355
410
  setHostActionState(actionId, state) {
356
411
  if (destroyed) {
357
412
  throw new Error('STANDARD_TOOLBAR_DESTROYED');
package/dist/types.d.ts CHANGED
@@ -125,6 +125,10 @@ export interface DrawingFloatingToolbar {
125
125
  }
126
126
  export interface StandardToolbar {
127
127
  readonly element: HTMLElement;
128
+ /** 宿主需要整体只读时,独立禁用所有依赖真实数据的动作。 */
129
+ setDataActionsDisabled(disabled: boolean): void;
130
+ /** 只禁用画线创建与文本输入,保留已就绪历史 Scene 的轴和导出能力。 */
131
+ setDrawingActionsDisabled(disabled: boolean): void;
128
132
  setHostActionState(actionId: string, state: {
129
133
  readonly pressed?: boolean;
130
134
  readonly disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baron1996/klinecharts-runtime",
3
- "version": "0.9.11",
3
+ "version": "0.9.13",
4
4
  "description": "Web runtime for deterministic KLineCharts scenes.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -39,8 +39,8 @@
39
39
  "typecheck": "tsc -p tsconfig.json --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@baron1996/kline-scene-schema": "0.9.11",
43
- "@baron1996/klinecharts-adapter": "0.9.11",
42
+ "@baron1996/kline-scene-schema": "0.9.13",
43
+ "@baron1996/klinecharts-adapter": "0.9.13",
44
44
  "@js-temporal/polyfill": "0.5.1"
45
45
  }
46
46
  }