@baron1996/klinecharts-runtime 0.2.3 → 0.3.0

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.2.3 @baron1996/klinecharts-runtime@0.2.3
7
+ npm install --save-exact @baron1996/kline-scene-schema@0.3.0 @baron1996/klinecharts-runtime@0.3.0
8
8
  ```
9
9
 
10
10
  ```ts
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  /** Web Runtime npm 包版本;ChartScene runtimeVersion 是独立的数据契约版本。 */
2
- export declare const WEB_RUNTIME_PACKAGE_VERSION: "0.2.3";
2
+ export declare const WEB_RUNTIME_PACKAGE_VERSION: "0.3.0";
3
3
  export { SUPPORTED_OVERLAYS } from '@baron1996/klinecharts-adapter';
4
4
  export * from './runtime.js';
5
+ export * from './time-series-runtime.js';
6
+ export * from './time-series-types.js';
5
7
  export * from './toolbar/standard-toolbar.js';
6
8
  export * from './types.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,2BAA2B,EAAG,OAAgB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,2BAA2B,EAAG,OAAgB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  /** Web Runtime npm 包版本;ChartScene runtimeVersion 是独立的数据契约版本。 */
2
- export const WEB_RUNTIME_PACKAGE_VERSION = '0.2.3';
2
+ export const WEB_RUNTIME_PACKAGE_VERSION = '0.3.0';
3
3
  export { SUPPORTED_OVERLAYS } from '@baron1996/klinecharts-adapter';
4
4
  export * from './runtime.js';
5
+ export * from './time-series-runtime.js';
6
+ export * from './time-series-types.js';
5
7
  export * from './toolbar/standard-toolbar.js';
6
8
  export * from './types.js';
@@ -0,0 +1,2 @@
1
+ export declare const TIME_SERIES_RUNTIME_STYLES: string;
2
+ //# sourceMappingURL=time-series-runtime-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-series-runtime-styles.d.ts","sourceRoot":"","sources":["../src/time-series-runtime-styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,QAiGtC,CAAC"}
@@ -0,0 +1,98 @@
1
+ export const TIME_SERIES_RUNTIME_STYLES = String.raw `
2
+ .baron-time-series-runtime,
3
+ .baron-time-series-runtime * {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ .baron-time-series-runtime {
8
+ position: absolute;
9
+ inset: 0;
10
+ z-index: 20;
11
+ color: var(--baron-time-series-text);
12
+ font-family: var(--baron-time-series-font);
13
+ pointer-events: none;
14
+ }
15
+
16
+ .baron-time-series-runtime__legend {
17
+ position: absolute;
18
+ top: 12px;
19
+ left: 12px;
20
+ display: flex;
21
+ flex-wrap: wrap;
22
+ gap: 7px;
23
+ max-width: calc(100% - 24px);
24
+ pointer-events: auto;
25
+ }
26
+
27
+ .baron-time-series-runtime__legend-button {
28
+ display: inline-flex;
29
+ gap: 7px;
30
+ align-items: center;
31
+ min-height: 28px;
32
+ padding: 5px 10px;
33
+ color: inherit;
34
+ background: color-mix(in srgb, var(--baron-time-series-background) 86%, transparent);
35
+ border: 1px solid color-mix(in srgb, var(--baron-time-series-text) 18%, transparent);
36
+ border-radius: 999px;
37
+ font: inherit;
38
+ cursor: pointer;
39
+ backdrop-filter: blur(6px);
40
+ }
41
+
42
+ .baron-time-series-runtime__legend-button[aria-pressed="false"] {
43
+ opacity: 0.45;
44
+ }
45
+
46
+ .baron-time-series-runtime__legend-button:focus-visible {
47
+ outline: 2px solid currentColor;
48
+ outline-offset: 2px;
49
+ }
50
+
51
+ .baron-time-series-runtime__swatch {
52
+ width: 16px;
53
+ height: 3px;
54
+ background: var(--baron-time-series-color);
55
+ border-radius: 2px;
56
+ }
57
+
58
+ .baron-time-series-runtime__tooltip {
59
+ position: absolute;
60
+ top: 52px;
61
+ left: 12px;
62
+ display: grid;
63
+ gap: 5px;
64
+ min-width: 178px;
65
+ padding: 9px 11px;
66
+ color: var(--baron-time-series-text);
67
+ background: color-mix(in srgb, var(--baron-time-series-background) 90%, transparent);
68
+ border: 1px solid color-mix(in srgb, var(--baron-time-series-text) 18%, transparent);
69
+ border-radius: 9px;
70
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
71
+ backdrop-filter: blur(8px);
72
+ }
73
+
74
+ .baron-time-series-runtime__tooltip[hidden] {
75
+ display: none;
76
+ }
77
+
78
+ .baron-time-series-runtime__tooltip-time {
79
+ margin-bottom: 2px;
80
+ font-weight: 650;
81
+ }
82
+
83
+ .baron-time-series-runtime__tooltip-row {
84
+ display: flex;
85
+ gap: 14px;
86
+ justify-content: space-between;
87
+ }
88
+
89
+ .baron-time-series-runtime__tooltip-name {
90
+ display: inline-flex;
91
+ gap: 7px;
92
+ align-items: center;
93
+ }
94
+
95
+ .baron-time-series-runtime__tooltip-value {
96
+ font-variant-numeric: tabular-nums;
97
+ }
98
+ `;
@@ -0,0 +1,3 @@
1
+ import type { TimeSeriesRuntimeOptions, TimeSeriesRuntime as TimeSeriesRuntimeContract } from './time-series-types.js';
2
+ export declare function createTimeSeriesRuntime(container: HTMLElement, scene: unknown, options?: TimeSeriesRuntimeOptions): Promise<TimeSeriesRuntimeContract>;
3
+ //# sourceMappingURL=time-series-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-series-runtime.d.ts","sourceRoot":"","sources":["../src/time-series-runtime.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAIX,wBAAwB,EACxB,iBAAiB,IAAI,yBAAyB,EAC9C,MAAM,wBAAwB,CAAC;AA8WhC,wBAAsB,uBAAuB,CAC5C,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,wBAA6B,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAEpC"}
@@ -0,0 +1,301 @@
1
+ import { parseTimeSeriesScene, TimeSeriesSceneError, } from '@baron1996/kline-scene-schema';
2
+ import { TimeSeriesChartsAdapter, } from '@baron1996/klinecharts-adapter';
3
+ import { TIME_SERIES_RUNTIME_STYLES } from './time-series-runtime-styles.js';
4
+ function runtimeError() {
5
+ return new TimeSeriesSceneError('TIME_SERIES_RUNTIME_DESTROYED', '/runtime', 'The Time Series Runtime has been destroyed.');
6
+ }
7
+ function adapterError(error) {
8
+ if (error instanceof TimeSeriesSceneError) {
9
+ return error;
10
+ }
11
+ return new TimeSeriesSceneError('TIME_SERIES_ADAPTER_FAILED', '/runtime/adapter', 'The Time Series Adapter operation failed.');
12
+ }
13
+ function exportError(error) {
14
+ const issues = error instanceof TimeSeriesSceneError
15
+ ? error.issues.map((issue) => ({
16
+ ...issue,
17
+ code: 'TIME_SERIES_EXPORT_INVALID',
18
+ }))
19
+ : [{
20
+ code: 'TIME_SERIES_EXPORT_INVALID',
21
+ path: '/',
22
+ message: 'Time Series Scene export validation failed.',
23
+ }];
24
+ return new TimeSeriesSceneError('TIME_SERIES_EXPORT_INVALID', '/', 'Time Series Scene export validation failed.', issues);
25
+ }
26
+ function createSwatch(color) {
27
+ const swatch = document.createElement('span');
28
+ swatch.className = 'baron-time-series-runtime__swatch';
29
+ swatch.setAttribute('aria-hidden', 'true');
30
+ swatch.style.setProperty('--baron-time-series-color', color);
31
+ return swatch;
32
+ }
33
+ function notifyRuntimeListener(listener, event) {
34
+ try {
35
+ listener(structuredClone(event));
36
+ }
37
+ catch {
38
+ // 宿主回调异常不得改变 Runtime 已完成的状态变更或错误语义。
39
+ }
40
+ }
41
+ /** 独立的通用时间序列 Runtime,不公开或复用旧 K 线 Runtime 状态。 */
42
+ class TimeSeriesRuntimeImplementation {
43
+ /** 唯一受控的时间序列 Adapter。 */
44
+ #adapter;
45
+ /** Runtime 纯数据事件监听器。 */
46
+ #listeners = new Set();
47
+ /** 图例按钮,按 Scene 中 series 的声明顺序保存。 */
48
+ #legendButtons = new Map();
49
+ /** 图例按钮事件解绑函数。 */
50
+ #legendCleanups = [];
51
+ /** Runtime 自有覆盖层根节点。 */
52
+ #root;
53
+ /** Runtime 自有样式节点。 */
54
+ #styleElement;
55
+ /** 十字线 Tooltip 节点。 */
56
+ #tooltip;
57
+ /** Adapter 十字线监听器解绑函数。 */
58
+ #unsubscribeCrosshair;
59
+ /** Adapter 容器。 */
60
+ #container;
61
+ /** 创建前容器内联 position,销毁时精确恢复。 */
62
+ #originalPosition;
63
+ /** 当前完整且通过校验的 Scene。 */
64
+ #scene;
65
+ /** 防止销毁后继续访问 Adapter。 */
66
+ #destroyed = false;
67
+ constructor(container, scene, adapter, options) {
68
+ this.#container = container;
69
+ this.#scene = scene;
70
+ this.#adapter = adapter;
71
+ this.#originalPosition = container.style.position;
72
+ if (getComputedStyle(container).position === 'static') {
73
+ container.style.position = 'relative';
74
+ }
75
+ if (options.onEvent !== undefined) {
76
+ this.#listeners.add(options.onEvent);
77
+ }
78
+ this.#styleElement = document.createElement('style');
79
+ this.#styleElement.dataset.baronTimeSeriesStyle = 'true';
80
+ this.#styleElement.textContent = TIME_SERIES_RUNTIME_STYLES;
81
+ this.#root = document.createElement('div');
82
+ this.#root.className = 'baron-time-series-runtime';
83
+ this.#root.style.setProperty('--baron-time-series-text', scene.chart.layout.textColor);
84
+ this.#root.style.setProperty('--baron-time-series-background', scene.chart.layout.backgroundColor);
85
+ this.#root.style.setProperty('--baron-time-series-font', scene.chart.layout.fontFamily);
86
+ const legend = document.createElement('div');
87
+ legend.className = 'baron-time-series-runtime__legend';
88
+ legend.setAttribute('aria-label', '时间序列图例');
89
+ for (const series of scene.series) {
90
+ const button = document.createElement('button');
91
+ button.type = 'button';
92
+ button.className = 'baron-time-series-runtime__legend-button';
93
+ button.dataset.timeSeriesId = series.id;
94
+ button.setAttribute('aria-pressed', String(series.visible));
95
+ button.append(createSwatch(series.style.color), series.name);
96
+ const handleClick = () => {
97
+ this.setSeriesVisible(series.id, button.getAttribute('aria-pressed') !== 'true');
98
+ };
99
+ button.addEventListener('click', handleClick);
100
+ this.#legendCleanups.push(() => button.removeEventListener('click', handleClick));
101
+ this.#legendButtons.set(series.id, button);
102
+ legend.append(button);
103
+ }
104
+ this.#tooltip = document.createElement('div');
105
+ this.#tooltip.className = 'baron-time-series-runtime__tooltip';
106
+ this.#tooltip.hidden = true;
107
+ this.#tooltip.setAttribute('role', 'status');
108
+ this.#root.append(legend, this.#tooltip);
109
+ container.append(this.#styleElement, this.#root);
110
+ this.#unsubscribeCrosshair = adapter.subscribeCrosshair((event) => this.#handleCrosshair(event));
111
+ }
112
+ static async create(container, value, options = {}) {
113
+ let adapter = null;
114
+ try {
115
+ const scene = parseTimeSeriesScene(value);
116
+ adapter = await TimeSeriesChartsAdapter.create(container, scene);
117
+ const runtime = new TimeSeriesRuntimeImplementation(container, scene, adapter, options);
118
+ runtime.#emit({ type: 'scene-ready', scene: runtime.exportScene() });
119
+ return runtime;
120
+ }
121
+ catch (error) {
122
+ adapter?.dispose();
123
+ const normalized = adapterError(error);
124
+ if (options.onEvent !== undefined) {
125
+ notifyRuntimeListener(options.onEvent, {
126
+ type: 'scene-error',
127
+ issues: structuredClone(normalized.issues),
128
+ sceneVersion: 1,
129
+ runtimeVersion: '0.1.0',
130
+ });
131
+ }
132
+ throw normalized;
133
+ }
134
+ }
135
+ #assertActive() {
136
+ if (this.#destroyed) {
137
+ throw runtimeError();
138
+ }
139
+ }
140
+ #emit(payload) {
141
+ const event = {
142
+ ...structuredClone(payload),
143
+ sceneVersion: 1,
144
+ runtimeVersion: '0.1.0',
145
+ };
146
+ for (const listener of this.#listeners) {
147
+ notifyRuntimeListener(listener, event);
148
+ }
149
+ }
150
+ #emitError(error) {
151
+ this.#emit({ type: 'scene-error', issues: structuredClone(error.issues) });
152
+ }
153
+ #handleCrosshair(event) {
154
+ const tooltip = this.#tooltip;
155
+ const scene = this.#scene;
156
+ if (this.#destroyed || tooltip === null || scene === null) {
157
+ return;
158
+ }
159
+ tooltip.replaceChildren();
160
+ if (event.timestamp === null || event.values === null) {
161
+ tooltip.hidden = true;
162
+ this.#emit({
163
+ type: 'crosshair-changed',
164
+ timestamp: null,
165
+ values: null,
166
+ });
167
+ return;
168
+ }
169
+ const time = document.createElement('div');
170
+ time.className = 'baron-time-series-runtime__tooltip-time';
171
+ time.textContent = new Intl.DateTimeFormat(scene.chart.locale, {
172
+ timeZone: scene.chart.timezone,
173
+ year: 'numeric',
174
+ month: '2-digit',
175
+ day: '2-digit',
176
+ }).format(new Date(event.timestamp));
177
+ tooltip.append(time);
178
+ for (const series of scene.series) {
179
+ if (!series.visible) {
180
+ continue;
181
+ }
182
+ const row = document.createElement('div');
183
+ row.className = 'baron-time-series-runtime__tooltip-row';
184
+ const name = document.createElement('span');
185
+ name.className = 'baron-time-series-runtime__tooltip-name';
186
+ name.append(createSwatch(series.style.color), series.name);
187
+ const value = document.createElement('span');
188
+ value.className = 'baron-time-series-runtime__tooltip-value';
189
+ const raw = event.values[series.id];
190
+ value.textContent = raw === null || raw === undefined
191
+ ? '—'
192
+ : `${raw.toFixed(series.precision)} ${series.unit}`;
193
+ row.append(name, value);
194
+ tooltip.append(row);
195
+ }
196
+ tooltip.hidden = false;
197
+ this.#emit({
198
+ type: 'crosshair-changed',
199
+ timestamp: event.timestamp,
200
+ values: structuredClone(event.values),
201
+ });
202
+ }
203
+ setSeriesVisible(seriesId, visible) {
204
+ try {
205
+ this.#assertActive();
206
+ const adapter = this.#adapter;
207
+ if (adapter === null) {
208
+ throw runtimeError();
209
+ }
210
+ const scene = adapter.setSeriesVisible(seriesId, visible);
211
+ this.#scene = scene;
212
+ this.#legendButtons.get(seriesId)?.setAttribute('aria-pressed', String(visible));
213
+ const result = structuredClone(scene);
214
+ this.#emit({
215
+ type: 'series-visibility-changed',
216
+ seriesId,
217
+ visible,
218
+ scene: result,
219
+ });
220
+ return structuredClone(result);
221
+ }
222
+ catch (error) {
223
+ const normalized = adapterError(error);
224
+ this.#emitError(normalized);
225
+ throw normalized;
226
+ }
227
+ }
228
+ async replaceData(data) {
229
+ try {
230
+ this.#assertActive();
231
+ const adapter = this.#adapter;
232
+ if (adapter === null) {
233
+ throw runtimeError();
234
+ }
235
+ const scene = adapter.replaceData(structuredClone(data));
236
+ this.#scene = scene;
237
+ const result = structuredClone(scene);
238
+ this.#emit({
239
+ type: 'data-replaced',
240
+ dataCount: result.data.length,
241
+ scene: result,
242
+ });
243
+ return structuredClone(result);
244
+ }
245
+ catch (error) {
246
+ const normalized = adapterError(error);
247
+ this.#emitError(normalized);
248
+ throw normalized;
249
+ }
250
+ }
251
+ exportScene() {
252
+ this.#assertActive();
253
+ try {
254
+ const scene = this.#scene;
255
+ if (scene === null) {
256
+ throw runtimeError();
257
+ }
258
+ return parseTimeSeriesScene(structuredClone(scene));
259
+ }
260
+ catch (error) {
261
+ const normalized = exportError(error);
262
+ this.#emitError(normalized);
263
+ throw normalized;
264
+ }
265
+ }
266
+ subscribe(listener) {
267
+ this.#assertActive();
268
+ this.#listeners.add(listener);
269
+ return () => this.#listeners.delete(listener);
270
+ }
271
+ destroy() {
272
+ if (this.#destroyed) {
273
+ return;
274
+ }
275
+ this.#destroyed = true;
276
+ this.#unsubscribeCrosshair?.();
277
+ for (const cleanup of this.#legendCleanups) {
278
+ cleanup();
279
+ }
280
+ this.#legendCleanups.length = 0;
281
+ this.#legendButtons.clear();
282
+ this.#root?.remove();
283
+ this.#styleElement?.remove();
284
+ this.#adapter?.dispose();
285
+ this.#listeners.clear();
286
+ if (this.#container !== null && this.#originalPosition !== null) {
287
+ this.#container.style.position = this.#originalPosition;
288
+ }
289
+ this.#unsubscribeCrosshair = null;
290
+ this.#tooltip = null;
291
+ this.#root = null;
292
+ this.#styleElement = null;
293
+ this.#adapter = null;
294
+ this.#scene = null;
295
+ this.#container = null;
296
+ this.#originalPosition = null;
297
+ }
298
+ }
299
+ export async function createTimeSeriesRuntime(container, scene, options = {}) {
300
+ return TimeSeriesRuntimeImplementation.create(container, scene, options);
301
+ }
@@ -0,0 +1,42 @@
1
+ import type { TimeSeriesPoint, TimeSeriesScene, TimeSeriesSceneIssue } from '@baron1996/kline-scene-schema';
2
+ export interface TimeSeriesRuntimeEventEnvelope {
3
+ readonly sceneVersion: 1;
4
+ readonly runtimeVersion: '0.1.0';
5
+ }
6
+ export type TimeSeriesRuntimeEventPayload = {
7
+ readonly type: 'scene-ready';
8
+ readonly scene: TimeSeriesScene;
9
+ } | {
10
+ readonly type: 'series-visibility-changed';
11
+ readonly seriesId: string;
12
+ readonly visible: boolean;
13
+ readonly scene: TimeSeriesScene;
14
+ } | {
15
+ readonly type: 'data-replaced';
16
+ readonly dataCount: number;
17
+ readonly scene: TimeSeriesScene;
18
+ } | {
19
+ readonly type: 'crosshair-changed';
20
+ readonly timestamp: number;
21
+ readonly values: Readonly<Record<string, number | null>>;
22
+ } | {
23
+ readonly type: 'crosshair-changed';
24
+ readonly timestamp: null;
25
+ readonly values: null;
26
+ } | {
27
+ readonly type: 'scene-error';
28
+ readonly issues: readonly TimeSeriesSceneIssue[];
29
+ };
30
+ export type TimeSeriesRuntimeEvent = TimeSeriesRuntimeEventPayload & TimeSeriesRuntimeEventEnvelope;
31
+ export type TimeSeriesRuntimeListener = (event: TimeSeriesRuntimeEvent) => void;
32
+ export interface TimeSeriesRuntimeOptions {
33
+ readonly onEvent?: TimeSeriesRuntimeListener;
34
+ }
35
+ export interface TimeSeriesRuntime {
36
+ setSeriesVisible(seriesId: string, visible: boolean): TimeSeriesScene;
37
+ replaceData(data: readonly TimeSeriesPoint[]): Promise<TimeSeriesScene>;
38
+ exportScene(): TimeSeriesScene;
39
+ subscribe(listener: TimeSeriesRuntimeListener): () => void;
40
+ destroy(): void;
41
+ }
42
+ //# sourceMappingURL=time-series-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-series-types.d.ts","sourceRoot":"","sources":["../src/time-series-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,6BAA6B,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GACjE;IACD,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CAChC,GACC;IACD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CAChC,GACC;IACD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CACzD,GACC;IACD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;CACtB,GACC;IACD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD,CAAC;AAEH,MAAM,MAAM,sBAAsB,GACjC,6BAA6B,GAAG,8BAA8B,CAAC;AAEhE,MAAM,MAAM,yBAAyB,GAAG,CACvC,KAAK,EAAE,sBAAsB,KACzB,IAAI,CAAC;AAEV,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IACjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;IACtE,WAAW,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxE,WAAW,IAAI,eAAe,CAAC;IAC/B,SAAS,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,IAAI,CAAC;IAC3D,OAAO,IAAI,IAAI,CAAC;CAChB"}
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baron1996/klinecharts-runtime",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "Web runtime for deterministic KLineCharts scenes.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -39,7 +39,7 @@
39
39
  "typecheck": "tsc -p tsconfig.json --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@baron1996/kline-scene-schema": "0.2.3",
43
- "@baron1996/klinecharts-adapter": "0.2.3"
42
+ "@baron1996/kline-scene-schema": "0.3.0",
43
+ "@baron1996/klinecharts-adapter": "0.3.0"
44
44
  }
45
45
  }