vue-echarts 8.3.0 → 8.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/README.zh-Hans.md +6 -2
- package/dist/graphic.d.ts +26 -26
- package/dist/graphic.js +34 -37
- package/dist/graphic.js.map +1 -1
- package/dist/{index-BujxhN-1.d.ts → index-GjFScMW2.d.ts} +6 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +66 -58
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +3 -3
- package/dist/index.min.js.map +1 -1
- package/dist/style.css +2 -2
- package/dist/{update-CWPvYl2M.js → update-DiQcDAnW.js} +7 -8
- package/dist/update-DiQcDAnW.js.map +1 -0
- package/package.json +22 -19
- package/dist/update-CWPvYl2M.js.map +0 -1
|
@@ -3,7 +3,7 @@ import { AxisBreakChangedEvent, DownplayPayload, ECElementEvent, ElementEvent, H
|
|
|
3
3
|
import { TooltipComponentFormatterCallbackParams } from "echarts";
|
|
4
4
|
//#region src/types.d.ts
|
|
5
5
|
type EventProps<T> = { [K in string & keyof T as `on${Capitalize<K>}`]?: T[K] extends ((...args: infer P) => unknown) ? (...args: P) => any : never; };
|
|
6
|
-
type
|
|
6
|
+
type Component<Props extends ComponentPropsOptions, Bindings, Events extends EmitsOptions, Slots extends SlotsType = Record<never, never>> = DefineComponent<Props, Bindings, Record<never, never>, Record<never, never>, Record<never, never>, ComponentOptionsMixin, ComponentOptionsMixin, Events, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<Props>> & Readonly<EventProps<Events>>, ExtractDefaultPropTypes<Props>, Slots>;
|
|
7
7
|
type Injection<T> = MaybeRefOrGetter<T | null | undefined>;
|
|
8
8
|
type InitParameters = Parameters<typeof init>;
|
|
9
9
|
type Theme = NonNullable<InitParameters[1]>;
|
|
@@ -69,7 +69,7 @@ type MethodName = (typeof METHOD_NAMES)[number];
|
|
|
69
69
|
type PublicMethods = Pick<EChartsType, MethodName | "dispose" | "isDisposed">;
|
|
70
70
|
//#endregion
|
|
71
71
|
//#region src/composables/slot.d.ts
|
|
72
|
-
type
|
|
72
|
+
type Slots = SlotsType<Record<"tooltip" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> & Record<"dataView" | `dataView-${string}`, Option> & VChartSlotsExtension>;
|
|
73
73
|
//#endregion
|
|
74
74
|
//#region src/composables/loading.d.ts
|
|
75
75
|
declare const LOADING_OPTIONS_KEY: InjectionKey<LoadingOptionsInjection>;
|
|
@@ -92,17 +92,17 @@ declare const chartProps: {
|
|
|
92
92
|
group: StringConstructor;
|
|
93
93
|
manualUpdate: BooleanConstructor;
|
|
94
94
|
};
|
|
95
|
-
type
|
|
95
|
+
type Exposed = {
|
|
96
96
|
setOption: SetOptionType;
|
|
97
97
|
readonly root: HTMLElement | undefined;
|
|
98
98
|
readonly chart: EChartsType | undefined;
|
|
99
99
|
} & PublicMethods;
|
|
100
|
-
declare const ECharts:
|
|
100
|
+
declare const ECharts: Component<typeof chartProps, Exposed, Emits, Slots>;
|
|
101
101
|
//#endregion
|
|
102
102
|
//#region src/index.d.ts
|
|
103
103
|
interface VChartSlotsExtension {
|
|
104
104
|
graphic?: Slot;
|
|
105
105
|
}
|
|
106
106
|
//#endregion
|
|
107
|
-
export {
|
|
108
|
-
//# sourceMappingURL=index-
|
|
107
|
+
export { THEME_KEY as a, Slots as c, ElementEventAlias as d, FontStyle as f, WithOnce as h, INIT_OPTIONS_KEY as i, AutoResize as l, LoadingOptions as m, ECharts as n, UPDATE_OPTIONS_KEY as o, FontWeight as p, Exposed as r, LOADING_OPTIONS_KEY as s, VChartSlotsExtension as t, Component as u };
|
|
108
|
+
//# sourceMappingURL=index-GjFScMW2.d.ts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { type AutoResize, INIT_OPTIONS_KEY, LOADING_OPTIONS_KEY, type LoadingOptions, THEME_KEY, UPDATE_OPTIONS_KEY, VChartSlotsExtension, ECharts as default };
|
|
1
|
+
import { a as THEME_KEY, c as Slots, i as INIT_OPTIONS_KEY, l as AutoResize, m as LoadingOptions, n as ECharts, o as UPDATE_OPTIONS_KEY, r as Exposed, s as LOADING_OPTIONS_KEY, t as VChartSlotsExtension, u as Component } from "./index-GjFScMW2.js";
|
|
2
|
+
export { type AutoResize, type Component, Exposed, INIT_OPTIONS_KEY, LOADING_OPTIONS_KEY, type LoadingOptions, type Slots, THEME_KEY, UPDATE_OPTIONS_KEY, VChartSlotsExtension, ECharts as default };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as hasEventHandler, c as isIgnorableWatchChange, d as isValidArrayIndex, f as parseOnEvent, i as createEventInvoker, l as isOn, o as hasZeroDimension, p as warn$1, r as useRuntime, s as isBrowser, t as planUpdate, u as isPlainObject } from "./update-
|
|
1
|
+
import { a as hasEventHandler, c as isIgnorableWatchChange, d as isValidArrayIndex, f as parseOnEvent, i as createEventInvoker, l as isOn, o as hasZeroDimension, p as warn$1, r as useRuntime, s as isBrowser, t as planUpdate, u as isPlainObject } from "./update-DiQcDAnW.js";
|
|
2
2
|
import { Teleport, computed, defineComponent, getCurrentInstance, h, inject, nextTick, onBeforeUnmount, onMounted, onScopeDispose, onUpdated, shallowReactive, shallowRef, toRef, toValue, watch, watchSyncEffect } from "vue";
|
|
3
3
|
import { init, throttle } from "echarts/core";
|
|
4
4
|
//#region src/composables/api.ts
|
|
@@ -58,7 +58,12 @@ function useAutoresize(chart, autoresize, container) {
|
|
|
58
58
|
let observedWidth = chart.getWidth();
|
|
59
59
|
let observedHeight = chart.getHeight();
|
|
60
60
|
const resize = () => {
|
|
61
|
-
if (hasZeroDimension(observedWidth, observedHeight)
|
|
61
|
+
if (hasZeroDimension(observedWidth, observedHeight)) return;
|
|
62
|
+
const width = chart.getWidth();
|
|
63
|
+
const height = chart.getHeight();
|
|
64
|
+
if (container.clientWidth === width && container.clientHeight === height) return;
|
|
65
|
+
chart.getZr().resize();
|
|
66
|
+
if (width === chart.getWidth() && height === chart.getHeight()) return;
|
|
62
67
|
chart.resize();
|
|
63
68
|
getOptions()?.onResize?.();
|
|
64
69
|
};
|
|
@@ -81,27 +86,22 @@ const autoresizeProps = { autoresize: [Boolean, Object] };
|
|
|
81
86
|
const LOADING_OPTIONS_KEY = Symbol();
|
|
82
87
|
function useLoading(chart, loading, loadingType, loadingOptions) {
|
|
83
88
|
const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, void 0);
|
|
84
|
-
return watch(() => loading.value ? {
|
|
85
|
-
instance: chart.value,
|
|
86
|
-
visible: true,
|
|
89
|
+
return watch(() => chart.value && loading.value ? {
|
|
87
90
|
type: loadingType.value || void 0,
|
|
88
91
|
options: {
|
|
89
92
|
...toValue(defaultLoadingOptions),
|
|
90
93
|
...loadingOptions.value
|
|
91
94
|
}
|
|
92
|
-
} : {
|
|
93
|
-
instance
|
|
94
|
-
visible: false
|
|
95
|
-
}, (state) => {
|
|
96
|
-
const { instance } = state;
|
|
95
|
+
} : null, (state) => {
|
|
96
|
+
const instance = chart.value;
|
|
97
97
|
if (!instance) return;
|
|
98
|
-
if (!state
|
|
98
|
+
if (!state) {
|
|
99
99
|
instance.hideLoading();
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
|
-
const { type, options
|
|
103
|
-
if (type) instance.showLoading(type,
|
|
104
|
-
else instance.showLoading(
|
|
102
|
+
const { type, options } = state;
|
|
103
|
+
if (type) instance.showLoading(type, options);
|
|
104
|
+
else instance.showLoading(options);
|
|
105
105
|
}, {
|
|
106
106
|
deep: true,
|
|
107
107
|
immediate: true,
|
|
@@ -139,15 +139,16 @@ function getSlotPath(key) {
|
|
|
139
139
|
} else path.push(...target);
|
|
140
140
|
return path;
|
|
141
141
|
}
|
|
142
|
-
function ensureChild(parent, seg, nextSeg) {
|
|
142
|
+
function ensureChild(parent, seg, nextSeg, writable) {
|
|
143
143
|
const parentIsArray = Array.isArray(parent);
|
|
144
144
|
if (parentIsArray !== isValidArrayIndex(seg)) return;
|
|
145
145
|
const next = parentIsArray ? parent[Number(seg)] : parent[seg];
|
|
146
146
|
let child;
|
|
147
|
-
if (Array.isArray(next)) child = [...next];
|
|
148
|
-
else if (isPlainObject(next)) child = { ...next };
|
|
147
|
+
if (Array.isArray(next)) child = writable.has(next) ? next : [...next];
|
|
148
|
+
else if (isPlainObject(next)) child = writable.has(next) ? next : { ...next };
|
|
149
149
|
else if (next === void 0 && !parentIsArray && !isValidArrayIndex(nextSeg)) child = {};
|
|
150
150
|
else return;
|
|
151
|
+
writable.add(child);
|
|
151
152
|
writeSegment(parent, seg, child);
|
|
152
153
|
return child;
|
|
153
154
|
}
|
|
@@ -158,10 +159,10 @@ function writeSegment(parent, seg, value) {
|
|
|
158
159
|
}
|
|
159
160
|
parent[seg] = value;
|
|
160
161
|
}
|
|
161
|
-
function writePath(root, path, value, preserveDefined = false) {
|
|
162
|
+
function writePath(root, path, value, writable, preserveDefined = false) {
|
|
162
163
|
let current = root;
|
|
163
164
|
for (let i = 0; i < path.length - 1; i++) {
|
|
164
|
-
const child = ensureChild(current, path[i], path[i + 1]);
|
|
165
|
+
const child = ensureChild(current, path[i], path[i + 1], writable);
|
|
165
166
|
if (!child) return false;
|
|
166
167
|
current = child;
|
|
167
168
|
}
|
|
@@ -178,16 +179,16 @@ function useSlotOption(slots, onSlotsChange) {
|
|
|
178
179
|
const isMounted = shallowRef(false);
|
|
179
180
|
const ready = shallowRef(false);
|
|
180
181
|
const collectSlotNames = (warnInvalid = false) => {
|
|
181
|
-
const names =
|
|
182
|
+
const names = /* @__PURE__ */ new Set();
|
|
182
183
|
for (const key in slots) {
|
|
183
184
|
if (key === "graphic") continue;
|
|
184
|
-
if (isValidSlotName(key)) names.
|
|
185
|
+
if (isValidSlotName(key)) names.add(key);
|
|
185
186
|
else if (warnInvalid) warn$1(`Invalid slot name: ${key}`);
|
|
186
187
|
}
|
|
187
188
|
return names;
|
|
188
189
|
};
|
|
189
190
|
collectSlotNames(true);
|
|
190
|
-
let slotNames =
|
|
191
|
+
let slotNames = /* @__PURE__ */ new Set();
|
|
191
192
|
let nextSlotNames = slotNames;
|
|
192
193
|
const patchedSlotNames = /* @__PURE__ */ new Set();
|
|
193
194
|
const callbacks = /* @__PURE__ */ new Map();
|
|
@@ -198,21 +199,22 @@ function useSlotOption(slots, onSlotsChange) {
|
|
|
198
199
|
for (const key of Object.keys(params)) delete params[key];
|
|
199
200
|
}
|
|
200
201
|
function syncSlotNames(names) {
|
|
201
|
-
|
|
202
|
-
for (const key of slotNames) if (!names.
|
|
202
|
+
let changed = names.size !== slotNames.size;
|
|
203
|
+
for (const key of slotNames) if (!names.has(key)) {
|
|
204
|
+
changed = true;
|
|
203
205
|
delete params[key];
|
|
204
206
|
delete containers[key];
|
|
205
207
|
callbacks.delete(key);
|
|
206
208
|
}
|
|
207
|
-
slotNames = names;
|
|
208
|
-
return
|
|
209
|
+
if (changed) slotNames = names;
|
|
210
|
+
return changed;
|
|
209
211
|
}
|
|
210
212
|
const render = () => {
|
|
211
213
|
nextSlotNames = collectSlotNames();
|
|
212
|
-
if (nextSlotNames.
|
|
214
|
+
if (nextSlotNames.size === 0 || !ready.value || !isMounted.value) return;
|
|
213
215
|
const ownerDocument = instance.vnode.el.ownerDocument;
|
|
214
216
|
detachedRoot ??= ownerDocument.createElement("div");
|
|
215
|
-
return h(Teleport, { to: detachedRoot },
|
|
217
|
+
return h(Teleport, { to: detachedRoot }, Array.from(nextSlotNames, (slotName) => {
|
|
216
218
|
const slot = slots[slotName];
|
|
217
219
|
const slotContent = slotName in params ? slot?.(params[slotName]) : void 0;
|
|
218
220
|
return h("div", {
|
|
@@ -228,14 +230,15 @@ function useSlotOption(slots, onSlotsChange) {
|
|
|
228
230
|
function prepare(src) {
|
|
229
231
|
const names = collectSlotNames();
|
|
230
232
|
syncSlotNames(names);
|
|
233
|
+
const writable = /* @__PURE__ */ new WeakSet();
|
|
231
234
|
let root;
|
|
232
|
-
for (const key of patchedSlotNames) if (!names.
|
|
235
|
+
for (const key of patchedSlotNames) if (!names.has(key)) {
|
|
233
236
|
root ??= { ...src };
|
|
234
|
-
writePath(root, getSlotPath(key), null, true);
|
|
237
|
+
writePath(root, getSlotPath(key), null, writable, true);
|
|
235
238
|
}
|
|
236
|
-
if (names.length) root ??= { ...src };
|
|
237
239
|
const patchedNames = [];
|
|
238
240
|
for (const key of names) {
|
|
241
|
+
root ??= { ...src };
|
|
239
242
|
let callback = callbacks.get(key);
|
|
240
243
|
if (!callback) {
|
|
241
244
|
const formatter = (payload) => {
|
|
@@ -250,7 +253,7 @@ function useSlotOption(slots, onSlotsChange) {
|
|
|
250
253
|
};
|
|
251
254
|
callbacks.set(key, callback);
|
|
252
255
|
}
|
|
253
|
-
if (!writePath(root, callback.path, callback.formatter)) continue;
|
|
256
|
+
if (!writePath(root, callback.path, callback.formatter, writable)) continue;
|
|
254
257
|
patchedNames.push(key);
|
|
255
258
|
}
|
|
256
259
|
return {
|
|
@@ -392,17 +395,19 @@ function getRootAttrs(attrs) {
|
|
|
392
395
|
}
|
|
393
396
|
//#endregion
|
|
394
397
|
//#region src/style.css?raw
|
|
395
|
-
var style_default = "x-vue-echarts{display:block;width:100%;height:100%;min-width:0;}\nx-vue-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}\nx-vue-echarts>.echarts-host>:first-child,x-vue-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}\n";
|
|
398
|
+
var style_default = "x-vue-echarts{display:block;width:100%;height:100%;min-width:0;min-height:0;}\nx-vue-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;border-radius:inherit;}\nx-vue-echarts>.echarts-host>:first-child,x-vue-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}\n";
|
|
396
399
|
//#endregion
|
|
397
400
|
//#region src/style.ts
|
|
398
|
-
if (isBrowser())
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
401
|
+
if (isBrowser()) {
|
|
402
|
+
if (Array.isArray(document.adoptedStyleSheets) && "replaceSync" in CSSStyleSheet.prototype) {
|
|
403
|
+
const sheet = new CSSStyleSheet();
|
|
404
|
+
sheet.replaceSync(style_default);
|
|
405
|
+
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
|
|
406
|
+
} else {
|
|
407
|
+
const styleEl = document.createElement("style");
|
|
408
|
+
styleEl.textContent = style_default;
|
|
409
|
+
document.head.appendChild(styleEl);
|
|
410
|
+
}
|
|
406
411
|
}
|
|
407
412
|
//#endregion
|
|
408
413
|
//#region src/ECharts.ts
|
|
@@ -411,21 +416,22 @@ const SKIP_AUTO_UPDATE = Symbol();
|
|
|
411
416
|
const THEME_KEY = Symbol();
|
|
412
417
|
const INIT_OPTIONS_KEY = Symbol();
|
|
413
418
|
const UPDATE_OPTIONS_KEY = Symbol();
|
|
419
|
+
const chartProps = {
|
|
420
|
+
option: Object,
|
|
421
|
+
theme: { type: [Object, String] },
|
|
422
|
+
initOptions: Object,
|
|
423
|
+
updateOptions: Object,
|
|
424
|
+
group: String,
|
|
425
|
+
manualUpdate: Boolean,
|
|
426
|
+
...autoresizeProps,
|
|
427
|
+
...loadingProps
|
|
428
|
+
};
|
|
414
429
|
//#endregion
|
|
415
430
|
//#region src/index.ts
|
|
416
431
|
var src_default = /* @__PURE__ */ defineComponent({
|
|
417
432
|
name: "Echarts",
|
|
418
433
|
inheritAttrs: false,
|
|
419
|
-
props:
|
|
420
|
-
option: Object,
|
|
421
|
-
theme: { type: [Object, String] },
|
|
422
|
-
initOptions: Object,
|
|
423
|
-
updateOptions: Object,
|
|
424
|
-
group: String,
|
|
425
|
-
manualUpdate: Boolean,
|
|
426
|
-
...autoresizeProps,
|
|
427
|
-
...loadingProps
|
|
428
|
-
},
|
|
434
|
+
props: chartProps,
|
|
429
435
|
emits: {},
|
|
430
436
|
slots: Object,
|
|
431
437
|
setup(props, { attrs, expose, slots }) {
|
|
@@ -478,6 +484,7 @@ var src_default = /* @__PURE__ */ defineComponent({
|
|
|
478
484
|
}
|
|
479
485
|
function applyTheme(instance) {
|
|
480
486
|
if (!optionApplied || themeApplied) return false;
|
|
487
|
+
syncListeners();
|
|
481
488
|
const revision = updateRevision + 1;
|
|
482
489
|
themeApplied = true;
|
|
483
490
|
try {
|
|
@@ -493,15 +500,15 @@ var src_default = /* @__PURE__ */ defineComponent({
|
|
|
493
500
|
const preparedSlots = prepareSlots(option);
|
|
494
501
|
const slotted = preparedSlots.option;
|
|
495
502
|
const hasGraphicSlot = Boolean(graphic && slots.graphic);
|
|
496
|
-
const source = hasGraphicSlot ? {
|
|
497
|
-
...slotted,
|
|
498
|
-
graphic: void 0
|
|
499
|
-
} : slotted;
|
|
500
503
|
let updateOptions = manual ? manualOptions : realUpdateOptions.value ?? void 0;
|
|
501
504
|
let nextSignature = null;
|
|
502
505
|
const graphicOnly = mode === "graphic" && hasGraphicSlot && graphicSlotApplied && modelValid;
|
|
503
506
|
if (graphicOnly) nextSignature = lastSignature ?? null;
|
|
504
507
|
else if (!manual && !updateOptions) {
|
|
508
|
+
const source = hasGraphicSlot ? {
|
|
509
|
+
...slotted,
|
|
510
|
+
graphic: void 0
|
|
511
|
+
} : slotted;
|
|
505
512
|
const planned = planUpdate(lastSignature ?? void 0, source);
|
|
506
513
|
updateOptions = !planned.signature.hasAction && lastSignature === null ? {
|
|
507
514
|
...planned.plan,
|
|
@@ -546,7 +553,6 @@ var src_default = /* @__PURE__ */ defineComponent({
|
|
|
546
553
|
return;
|
|
547
554
|
}
|
|
548
555
|
if (initDeferred) return;
|
|
549
|
-
syncListeners();
|
|
550
556
|
const option = reasons & 3 ? getAutoOption() ?? lastAutoOption : lastAutoOption;
|
|
551
557
|
const needsTheme = !themeApplied && optionApplied;
|
|
552
558
|
if (needsTheme && !applyTheme(instance)) return;
|
|
@@ -578,8 +584,10 @@ var src_default = /* @__PURE__ */ defineComponent({
|
|
|
578
584
|
themeApplied = true;
|
|
579
585
|
function commit() {
|
|
580
586
|
const option = manualUpdate.value ? props.option : getAutoOption();
|
|
581
|
-
if (option)
|
|
582
|
-
|
|
587
|
+
if (option) {
|
|
588
|
+
if (manualUpdate.value) applyOption(instance, option, "manual", realUpdateOptions.value ?? void 0);
|
|
589
|
+
else applyOption(instance, option);
|
|
590
|
+
}
|
|
583
591
|
setSlotsReady(isCurrent(instance));
|
|
584
592
|
}
|
|
585
593
|
if (autoresize.value) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["cssRules","useGraphic","init","initChart"],"sources":["../src/composables/api.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/composables/slot.ts","../src/wc.ts","../src/core/events.ts","../src/style.css?raw","../src/style.ts","../src/ECharts.ts","../src/index.ts"],"sourcesContent":["import type { Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\n\nconst METHOD_NAMES = [\n \"getWidth\",\n \"getHeight\",\n \"getDom\",\n \"getZr\",\n \"getId\",\n \"getOption\",\n \"isSSR\",\n \"getDevicePixelRatio\",\n \"resize\",\n \"makeActionFromEvent\",\n \"dispatchAction\",\n \"updateLabelLayout\",\n \"convertToPixel\",\n \"convertToLayout\",\n \"convertFromPixel\",\n \"containPixel\",\n \"getVisual\",\n \"renderToCanvas\",\n \"renderToSVGString\",\n \"getSvgDataURL\",\n \"getDataURL\",\n \"getConnectedDataURL\",\n \"appendData\",\n \"clear\",\n] as const;\n\ntype MethodName = (typeof METHOD_NAMES)[number];\n\nexport type PublicMethods = Pick<EChartsType, MethodName | \"dispose\" | \"isDisposed\">;\n\nexport function usePublicAPI(\n chart: Ref<EChartsType | undefined>,\n dispose: () => void,\n isDisposed: () => boolean,\n): PublicMethods {\n const getInstance = (): EChartsType => {\n if (isDisposed()) {\n throw new Error(\"ECharts has been disposed.\");\n }\n const instance = chart.value;\n if (!instance) {\n throw new Error(\"ECharts is not initialized yet.\");\n }\n return instance;\n };\n\n const api: Record<string, (...args: unknown[]) => unknown> = {};\n for (const name of METHOD_NAMES) {\n api[name] = (...args: unknown[]): unknown => {\n const instance = getInstance();\n return Reflect.apply(instance[name], instance, args);\n };\n }\n api.dispose = dispose;\n api.isDisposed = isDisposed;\n return api as PublicMethods;\n}\n","import { watch } from \"vue\";\nimport { throttle } from \"echarts/core\";\n\nimport type { Ref, PropType } from \"vue\";\nimport type { EChartsType, AutoResize } from \"../types\";\nimport { hasZeroDimension } from \"../utils\";\n\nexport function useAutoresize(\n chart: Ref<EChartsType | undefined>,\n autoresize: Ref<AutoResize | undefined>,\n container: Ref<HTMLElement | undefined>,\n): () => void {\n const getOptions = () => (typeof autoresize.value === \"object\" ? autoresize.value : undefined);\n const resizeSources = [\n container,\n chart,\n () => Boolean(autoresize.value),\n () => getOptions()?.throttle ?? 100,\n ] as const;\n\n return watch(\n resizeSources,\n ([container, chart, enabled, wait], _, onCleanup) => {\n if (!chart || !container || !enabled) {\n return;\n }\n\n let observedWidth = chart.getWidth();\n let observedHeight = chart.getHeight();\n\n const resize = () => {\n if (\n hasZeroDimension(observedWidth, observedHeight) ||\n (observedWidth === chart.getWidth() && observedHeight === chart.getHeight())\n ) {\n return;\n }\n chart.resize();\n getOptions()?.onResize?.();\n };\n const throttledResize = wait ? throttle(resize, wait) : undefined;\n\n const observer = new ResizeObserver(([entry]) => {\n observedWidth = entry.contentRect.width;\n observedHeight = entry.contentRect.height;\n (throttledResize ?? resize)();\n });\n\n observer.observe(container);\n onCleanup(() => {\n observer.disconnect();\n throttledResize?.clear();\n });\n },\n // Stop observer work before the outgoing chart can be disposed.\n { flush: \"sync\" },\n );\n}\n\nexport const autoresizeProps = {\n autoresize: [Boolean, Object] as PropType<AutoResize>,\n};\n","import { inject, toValue, watch } from \"vue\";\n\nimport type { Ref, InjectionKey, PropType } from \"vue\";\nimport type { EChartsType, LoadingOptions, LoadingOptionsInjection } from \"../types\";\n\nexport const LOADING_OPTIONS_KEY: InjectionKey<LoadingOptionsInjection> = Symbol();\n\nexport function useLoading(\n chart: Ref<EChartsType | undefined>,\n loading: Ref<boolean | undefined>,\n loadingType: Ref<string | undefined>,\n loadingOptions: Ref<LoadingOptions | undefined>,\n): () => void {\n const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, undefined);\n\n return watch(\n () =>\n loading.value\n ? {\n instance: chart.value,\n visible: true as const,\n type: loadingType.value || undefined,\n options: {\n ...toValue(defaultLoadingOptions),\n ...loadingOptions.value,\n },\n }\n : { instance: chart.value, visible: false as const },\n (state) => {\n const { instance } = state;\n if (!instance) {\n return;\n }\n\n if (!state.visible) {\n instance.hideLoading();\n return;\n }\n\n const { type, options: currentOptions } = state;\n if (type) {\n instance.showLoading(type, currentOptions);\n } else {\n instance.showLoading(currentOptions);\n }\n },\n { deep: true, immediate: true, flush: \"sync\" },\n );\n}\n\nexport const loadingProps = {\n loading: Boolean,\n loadingType: String,\n loadingOptions: Object as PropType<LoadingOptions>,\n};\n","import {\n getCurrentInstance,\n h,\n Teleport,\n onUpdated,\n onMounted,\n shallowRef,\n shallowReactive,\n} from \"vue\";\nimport type { Slots, SlotsType } from \"vue\";\nimport type { Option } from \"../types\";\nimport { isPlainObject, isValidArrayIndex, warn } from \"../utils\";\nimport type { TooltipComponentFormatterCallbackParams } from \"echarts\";\nimport type { VChartSlotsExtension } from \"../index\";\n\nconst SLOT_OPTION_PATHS = {\n tooltip: [\"tooltip\", \"formatter\"],\n dataView: [\"toolbox\", \"feature\", \"dataView\", \"optionToContent\"],\n} as const;\nconst PROTOTYPE_SEGMENT_RE = /-__proto__(?:-|$)/;\ntype SlotPrefix = keyof typeof SLOT_OPTION_PATHS;\ntype SlotName = SlotPrefix | `${SlotPrefix}-${string}`;\ntype SlotMap<T> = Partial<Record<SlotName, T>>;\n\nfunction isValidSlotName(key: string): key is SlotName {\n return (\n (key === \"tooltip\" ||\n key.startsWith(\"tooltip-\") ||\n key === \"dataView\" ||\n key.startsWith(\"dataView-\")) &&\n !key.endsWith(\"-\") &&\n !key.includes(\"--\") &&\n !PROTOTYPE_SEGMENT_RE.test(key)\n );\n}\n\nfunction getSlotPath(key: SlotName): string[] {\n const prefix: SlotPrefix = key.startsWith(\"tooltip\") ? \"tooltip\" : \"dataView\";\n const rest = key.slice(prefix.length);\n const path = rest ? rest.slice(1).split(\"-\") : [];\n const target = SLOT_OPTION_PATHS[prefix];\n if (isValidArrayIndex(path[0] ?? \"\")) {\n const index = path.shift()!;\n path.push(target[0], index, ...target.slice(1));\n } else {\n path.push(...target);\n }\n return path;\n}\n\ntype Container = Record<string, unknown> | unknown[];\n\nfunction ensureChild(parent: Container, seg: string, nextSeg: string): Container | undefined {\n const parentIsArray = Array.isArray(parent);\n if (parentIsArray !== isValidArrayIndex(seg)) {\n return undefined;\n }\n const next = parentIsArray ? parent[Number(seg)] : parent[seg];\n\n let child: Container;\n if (Array.isArray(next)) {\n child = [...next];\n } else if (isPlainObject(next)) {\n child = { ...next };\n } else if (next === undefined && !parentIsArray && !isValidArrayIndex(nextSeg)) {\n child = {};\n } else {\n return undefined;\n }\n writeSegment(parent, seg, child);\n return child;\n}\n\nfunction writeSegment(parent: Container, seg: string, value: unknown): void {\n if (Array.isArray(parent)) {\n parent[Number(seg)] = value;\n return;\n }\n parent[seg] = value;\n}\n\nfunction writePath(\n root: Option,\n path: readonly string[],\n value: unknown,\n preserveDefined = false,\n): boolean {\n let current: Container = root;\n for (let i = 0; i < path.length - 1; i++) {\n const child = ensureChild(current, path[i], path[i + 1]);\n if (!child) {\n return false;\n }\n current = child;\n }\n if (Array.isArray(current)) {\n return false;\n }\n const leaf = path[path.length - 1];\n if (!preserveDefined || current[leaf] === undefined) {\n writeSegment(current, leaf, value);\n }\n return true;\n}\n\nexport function useSlotOption(slots: Slots, onSlotsChange: () => void) {\n const instance = getCurrentInstance()!;\n let detachedRoot: HTMLDivElement | undefined;\n const containers = shallowReactive<SlotMap<HTMLElement>>({});\n const params = shallowReactive<SlotMap<unknown>>({});\n const isMounted = shallowRef(false);\n const ready = shallowRef(false);\n\n const collectSlotNames = (warnInvalid = false): SlotName[] => {\n const names: SlotName[] = [];\n for (const key in slots) {\n if (key === \"graphic\") {\n continue;\n }\n if (isValidSlotName(key)) {\n names.push(key);\n } else if (warnInvalid) {\n warn(`Invalid slot name: ${key}`);\n }\n }\n return names;\n };\n collectSlotNames(true);\n\n let slotNames: readonly SlotName[] = [];\n let nextSlotNames = slotNames;\n const patchedSlotNames = new Set<SlotName>();\n const callbacks = new Map<\n SlotName,\n { path: string[]; formatter: (payload: unknown) => HTMLElement | undefined }\n >();\n\n function setReady(value: boolean): void {\n ready.value = value;\n if (value) {\n return;\n }\n patchedSlotNames.clear();\n for (const key of Object.keys(params) as SlotName[]) {\n delete params[key];\n }\n }\n\n function syncSlotNames(names: readonly SlotName[]): boolean {\n if (names.length === slotNames.length && slotNames.every((name) => names.includes(name))) {\n return false;\n }\n\n for (const key of slotNames) {\n if (!names.includes(key)) {\n delete params[key];\n delete containers[key];\n callbacks.delete(key);\n }\n }\n slotNames = names;\n return true;\n }\n\n const render = () => {\n nextSlotNames = collectSlotNames();\n if (nextSlotNames.length === 0 || !ready.value || !isMounted.value) {\n return undefined;\n }\n const ownerDocument = (instance.vnode.el as HTMLElement).ownerDocument;\n detachedRoot ??= ownerDocument.createElement(\"div\");\n\n return h(\n Teleport,\n { to: detachedRoot },\n nextSlotNames.map((slotName) => {\n const slot = slots[slotName];\n const slotContent = slotName in params ? slot?.(params[slotName]) : undefined;\n return h(\n \"div\",\n {\n key: slotName,\n ref: (el) => {\n if (el) {\n containers[slotName] = el as HTMLElement;\n } else {\n delete containers[slotName];\n }\n },\n style: { display: \"contents\" },\n },\n slotContent,\n );\n }),\n );\n };\n\n function prepare(src: Option): { option: Option; commit: () => void } {\n const names = collectSlotNames();\n syncSlotNames(names);\n let root: Option | undefined;\n\n for (const key of patchedSlotNames) {\n if (!names.includes(key)) {\n root ??= { ...src };\n writePath(root, getSlotPath(key), null, true);\n }\n }\n\n if (names.length) {\n root ??= { ...src };\n }\n const patchedNames: SlotName[] = [];\n\n for (const key of names) {\n let callback = callbacks.get(key);\n if (!callback) {\n const formatter = (payload: unknown): HTMLElement | undefined => {\n if (!slots[key]) {\n return undefined;\n }\n // ECharts may update and reuse the same formatter payload object.\n if (key in params && Object.is(params[key], payload)) {\n delete params[key];\n }\n params[key] = payload;\n return containers[key];\n };\n callback = { path: getSlotPath(key), formatter };\n callbacks.set(key, callback);\n }\n\n if (!writePath(root!, callback.path, callback.formatter)) {\n continue;\n }\n patchedNames.push(key);\n }\n\n return {\n option: root ?? src,\n commit: () => {\n // Native theme changes can replay callbacks from an older option backup.\n // Keep their cleanup paths until the chart instance is replaced.\n patchedNames.forEach((name) => patchedSlotNames.add(name));\n },\n };\n }\n\n onUpdated(() => {\n if (syncSlotNames(nextSlotNames)) {\n onSlotsChange();\n }\n });\n\n onMounted(() => {\n slotNames = nextSlotNames;\n isMounted.value = true;\n });\n\n return {\n render,\n prepare,\n setReady,\n cancelPendingUpdate: () => {\n // A queued updated hook must not replay slot changes preceding clear().\n syncSlotNames(collectSlotNames());\n },\n };\n}\n\nexport type SlotsTypes = SlotsType<\n Record<\"tooltip\" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> &\n Record<\"dataView\" | `dataView-${string}`, Option> &\n VChartSlotsExtension\n>;\n","export const TAG_NAME = \"x-vue-echarts\";\n// Shared across bundles so one copy can trust another copy's disconnect hook.\nconst LIFECYCLE_MARKER = Symbol.for(\"vue-echarts.lifecycle\");\n\ntype LifecycleConstructor = CustomElementConstructor & {\n [LIFECYCLE_MARKER]?: true;\n};\n\nexport interface EChartsElement extends HTMLElement {\n __dispose: (() => void) | null;\n}\n\nexport function register(): boolean {\n const registry = globalThis.customElements;\n\n if (!registry) {\n return false;\n }\n\n const existing = registry.get(TAG_NAME);\n if (existing) {\n return Boolean((existing as LifecycleConstructor)[LIFECYCLE_MARKER]);\n }\n\n class ECElement extends HTMLElement implements EChartsElement {\n __dispose: (() => void) | null = null;\n\n disconnectedCallback(): void {\n if (!this.__dispose) {\n return;\n }\n queueMicrotask(() => {\n if (!this.isConnected && this.__dispose) {\n const dispose = this.__dispose;\n this.__dispose = null;\n dispose();\n }\n });\n }\n }\n\n Object.defineProperty(ECElement, LIFECYCLE_MARKER, { value: true });\n registry.define(TAG_NAME, ECElement);\n return true;\n}\n","import { getCurrentInstance, onScopeDispose, onUpdated, watchSyncEffect } from \"vue\";\n\nimport type { Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\nimport { createEventInvoker, hasEventHandler, isOn, parseOnEvent } from \"../utils\";\nimport type { AttrMap, EventHandler } from \"../utils\";\n\ntype EventEmitter = {\n on: (event: string, handler: EventHandler) => void;\n off: (event: string, handler: EventHandler) => void;\n};\n\ntype ListenerBinding = {\n emitter: EventEmitter;\n event: string;\n source: unknown;\n handler: EventHandler;\n};\n\nconst NATIVE_EVENT_PREFIX = \"onNative:\";\n\nexport function useReactiveChartListeners(\n chart: Ref<EChartsType | undefined>,\n attrs: AttrMap,\n): { sync: () => void; stop: () => void } {\n const bindings = new Map<string, ListenerBinding>();\n const consumedSources = new Map<string, unknown>();\n const seen = new Set<string>();\n let boundChart: EChartsType | undefined;\n\n function clearBindings(): void {\n for (const binding of bindings.values()) {\n binding.emitter.off(binding.event, binding.handler);\n }\n bindings.clear();\n }\n\n function sync(): void {\n seen.clear();\n const instance = chart.value;\n for (const [key, source] of consumedSources) {\n if (attrs[key] !== source) {\n consumedSources.delete(key);\n }\n }\n if (!instance) {\n clearBindings();\n boundChart = undefined;\n return;\n }\n\n if (boundChart && boundChart !== instance) {\n clearBindings();\n }\n boundChart = instance;\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed || parsed.event.startsWith(\"native:\") || parsed.event === \"zr:\") {\n continue;\n }\n\n const zr = parsed.event.startsWith(\"zr:\");\n const event = (zr ? parsed.event.slice(3) : parsed.event).toLowerCase();\n const source = attrs[key];\n const existing = bindings.get(key);\n\n if (parsed.once && consumedSources.get(key) === source) {\n continue;\n }\n\n if (existing && existing.source === source && hasEventHandler(source)) {\n seen.add(key);\n continue;\n }\n\n const invoke = createEventInvoker(source);\n if (existing) {\n existing.emitter.off(existing.event, existing.handler);\n bindings.delete(key);\n }\n\n if (!invoke) {\n continue;\n }\n\n const emitter = zr ? (instance.getZr() as EventEmitter) : (instance as EventEmitter);\n let handler = invoke;\n if (parsed.once) {\n handler = (...args): void => {\n bindings.delete(key);\n consumedSources.set(key, source);\n emitter.off(event, handler);\n invoke(...args);\n };\n }\n\n emitter.on(event, handler);\n bindings.set(key, {\n emitter,\n event,\n source,\n handler,\n });\n seen.add(key);\n }\n\n for (const [key, binding] of bindings) {\n if (seen.has(key)) {\n continue;\n }\n binding.emitter.off(binding.event, binding.handler);\n bindings.delete(key);\n }\n }\n\n const stopWatch = watchSyncEffect(sync);\n if (getCurrentInstance()) {\n onUpdated(sync);\n }\n\n const stop = () => {\n stopWatch();\n clearBindings();\n };\n onScopeDispose(stop);\n return { sync, stop };\n}\n\nexport function getRootAttrs(attrs: AttrMap): AttrMap {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n if (key.startsWith(NATIVE_EVENT_PREFIX)) {\n const event = key.slice(NATIVE_EVENT_PREFIX.length);\n if (event) {\n result[`on:${event}`] = attrs[key];\n }\n continue;\n }\n if (!isOn(key)) {\n result[key] = attrs[key];\n }\n }\n\n return result;\n}\n","export default \"x-vue-echarts{display:block;width:100%;height:100%;min-width:0;}\\nx-vue-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}\\nx-vue-echarts>.echarts-host>:first-child,x-vue-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}\\n\"","import cssRules from \"./style.css?raw\";\nimport { isBrowser } from \"./utils\";\n\nif (isBrowser()) {\n if (Array.isArray(document.adoptedStyleSheets) && \"replaceSync\" in CSSStyleSheet.prototype) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(cssRules);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n } else {\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = cssRules;\n document.head.appendChild(styleEl);\n }\n}\n","import {\n defineComponent,\n shallowRef,\n toRef,\n watch,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n h,\n nextTick,\n watchSyncEffect,\n toValue,\n} from \"vue\";\nimport { init as initChart } from \"echarts/core\";\n\nimport type { InjectionKey, PropType, VNodeChild } from \"vue\";\n\nimport { usePublicAPI, type PublicMethods } from \"./composables/api\";\nimport { useAutoresize, autoresizeProps } from \"./composables/autoresize\";\nimport { useLoading, loadingProps } from \"./composables/loading\";\nimport { useSlotOption, type SlotsTypes } from \"./composables/slot\";\nimport { hasZeroDimension, isIgnorableWatchChange, warn } from \"./utils\";\nimport { register, TAG_NAME } from \"./wc\";\nimport { useRuntime as useGraphic } from \"./graphic/runtime\";\nimport { useReactiveChartListeners, getRootAttrs } from \"./core/events\";\nimport { planUpdate } from \"./update\";\nimport type { Signature } from \"./update\";\n\nimport type {\n EChartsType,\n SetOptionType,\n Option,\n Theme,\n ThemeInjection,\n InitOptions,\n InitOptionsInjection,\n UpdateOptions,\n UpdateOptionsInjection,\n Emits,\n PublicComponent,\n} from \"./types\";\nimport type { EChartsElement } from \"./wc\";\n\nimport \"./style\";\n\nconst wcRegistered = register();\nconst SKIP_AUTO_UPDATE = Symbol();\ntype ApplyMode = \"manual\" | \"graphic\";\nenum UpdateReason {\n Option = 1,\n Graphic = 2,\n Theme = 4,\n Reinit = 8,\n}\n\nexport const THEME_KEY: InjectionKey<ThemeInjection> = Symbol();\nexport const INIT_OPTIONS_KEY: InjectionKey<InitOptionsInjection> = Symbol();\nexport const UPDATE_OPTIONS_KEY: InjectionKey<UpdateOptionsInjection> = Symbol();\nexport { LOADING_OPTIONS_KEY } from \"./composables/loading\";\n\nconst chartProps = {\n option: Object as PropType<Option>,\n theme: {\n type: [Object, String] as PropType<Theme>,\n },\n initOptions: Object as PropType<InitOptions>,\n updateOptions: Object as PropType<UpdateOptions>,\n group: String,\n manualUpdate: Boolean,\n ...autoresizeProps,\n ...loadingProps,\n};\n\ntype Bindings = {\n setOption: SetOptionType;\n readonly root: HTMLElement | undefined;\n readonly chart: EChartsType | undefined;\n} & PublicMethods;\n\nconst ECharts = /* @__PURE__ */ defineComponent({\n name: \"Echarts\",\n inheritAttrs: false,\n props: chartProps,\n emits: {} as Emits,\n slots: Object as SlotsTypes,\n setup(props, { attrs, expose, slots }) {\n const root = shallowRef<EChartsElement>();\n const chartHost = shallowRef<HTMLDivElement>();\n const chart = shallowRef<EChartsType>();\n const updateRequest = shallowRef(0);\n let pendingUpdate = 0;\n const defaultTheme = inject(THEME_KEY, null);\n const defaultInitOptions = inject(INIT_OPTIONS_KEY, null);\n const defaultUpdateOptions = inject(UPDATE_OPTIONS_KEY, null);\n\n const autoresize = toRef(props, \"autoresize\");\n const manualUpdate = toRef(props, \"manualUpdate\");\n const loading = toRef(props, \"loading\");\n const loadingType = toRef(props, \"loadingType\");\n const loadingOptions = toRef(props, \"loadingOptions\");\n\n const realTheme = computed(() => props.theme ?? toValue(defaultTheme) ?? undefined);\n const realInitOptions = computed(\n () => props.initOptions ?? toValue(defaultInitOptions) ?? undefined,\n );\n const realUpdateOptions = computed(() => props.updateOptions ?? toValue(defaultUpdateOptions));\n\n const terminallyDisposed = shallowRef(false);\n\n const {\n render: renderSlot,\n prepare: prepareSlots,\n setReady: setSlotsReady,\n cancelPendingUpdate: cancelSlotUpdate,\n } = useSlotOption(slots, requestUpdate);\n\n const graphic = useGraphic({\n slots,\n manualUpdate,\n requestUpdate: () => requestUpdate(UpdateReason.Graphic),\n });\n\n // `null` means the model has no trusted signature, so the next smart update must rebuild.\n let lastSignature: Signature | null | undefined;\n let lastAutoOption: Option | undefined;\n let themeApplied = false;\n let optionApplied = false;\n let initDeferred = false;\n let graphicSlotApplied = false;\n let updateRevision = 0;\n let modelValid = false;\n\n function getAutoOption(): Option | undefined {\n // A graphic slot is a complete option source even without an `option` prop.\n return props.option ?? (graphic && (slots.graphic || graphicSlotApplied) ? {} : undefined);\n }\n\n function isCurrent(instance: EChartsType | undefined): instance is EChartsType {\n return instance !== undefined && chart.value === instance && !terminallyDisposed.value;\n }\n\n function runUpdate(\n instance: EChartsType,\n update: () => void,\n signature: Signature | null | undefined,\n ): boolean {\n const revision = ++updateRevision;\n // A failed native call may have partially changed the model. Only a successful,\n // uninterrupted submission can establish a new smart-update baseline.\n lastSignature = null;\n modelValid = false;\n update();\n if (!isCurrent(instance) || updateRevision !== revision) {\n return false;\n }\n lastSignature = signature;\n modelValid = true;\n return true;\n }\n\n function applyTheme(instance: EChartsType): boolean {\n // ECharts ignores setTheme until its first option creates the chart model.\n if (!optionApplied || themeApplied) {\n return false;\n }\n const revision = updateRevision + 1;\n // Native update events can submit another option before setTheme returns.\n themeApplied = true;\n try {\n return runUpdate(\n instance,\n () => instance.setTheme(realTheme.value || {}),\n lastSignature === undefined ? undefined : null,\n );\n } catch (error) {\n if (updateRevision === revision) {\n themeApplied = false;\n }\n throw error;\n }\n }\n\n function applyOption(\n instance: EChartsType,\n option: Option,\n mode?: ApplyMode,\n manualOptions?: UpdateOptions,\n ): void {\n const manual = mode === \"manual\";\n initDeferred = false;\n const preparedSlots = prepareSlots(option);\n const slotted = preparedSlots.option;\n const hasGraphicSlot = Boolean(graphic && slots.graphic);\n // An owned graphic tree is planned separately from the source it overrides.\n const source = hasGraphicSlot ? { ...slotted, graphic: undefined } : slotted;\n let updateOptions = manual ? manualOptions : (realUpdateOptions.value ?? undefined);\n let nextSignature: Signature | null = null;\n\n const graphicOnly = mode === \"graphic\" && hasGraphicSlot && graphicSlotApplied && modelValid;\n if (graphicOnly) {\n nextSignature = lastSignature ?? null;\n } else if (!manual && !updateOptions) {\n const planned = planUpdate(lastSignature ?? undefined, source);\n const rebuild = !planned.signature.hasAction && lastSignature === null;\n updateOptions = rebuild ? { ...planned.plan, notMerge: true } : planned.plan;\n nextSignature = planned.signature;\n }\n\n const replaceMerge = updateOptions?.replaceMerge;\n const replacements = typeof replaceMerge === \"string\" ? [replaceMerge] : (replaceMerge ?? []);\n const preparedGraphic = graphic?.prepare(\n slotted,\n !modelValid ||\n !graphicSlotApplied ||\n Boolean(updateOptions?.notMerge) ||\n replacements.includes(\"graphic\") ||\n manual,\n );\n let patched = preparedGraphic?.option ?? slotted;\n const replaceGraphic = preparedGraphic?.replace || (graphicSlotApplied && !hasGraphicSlot);\n if (replaceGraphic && !updateOptions?.notMerge && !replacements.includes(\"graphic\")) {\n updateOptions = { ...updateOptions, replaceMerge: [...replacements, \"graphic\"] };\n }\n const replacesSource = replacements.some((key) => key !== \"graphic\");\n if (graphicOnly && !updateOptions?.notMerge && !replacesSource) {\n patched = { graphic: patched.graphic };\n }\n syncListeners();\n if (!runUpdate(instance, () => instance.setOption(patched, updateOptions), nextSignature)) {\n return;\n }\n preparedSlots.commit();\n preparedGraphic?.commit();\n graphicSlotApplied = hasGraphicSlot;\n optionApplied = true;\n if (!manual) {\n lastAutoOption = option;\n }\n if (applyTheme(instance) && !manual) {\n applyOption(instance, option);\n }\n }\n\n function scheduleUpdate(reason: UpdateReason): void {\n pendingUpdate |= reason;\n updateRequest.value++;\n }\n\n function requestUpdate(reason = UpdateReason.Option): void {\n if (!manualUpdate.value && !initDeferred && !terminallyDisposed.value) {\n scheduleUpdate(reason);\n }\n }\n\n function flushUpdate(): void {\n const reasons = pendingUpdate;\n pendingUpdate = 0;\n const instance = chart.value;\n if (!reasons || !isCurrent(instance)) {\n return;\n }\n if (reasons & UpdateReason.Reinit) {\n cleanup();\n init();\n return;\n }\n if (initDeferred) {\n return;\n }\n\n syncListeners();\n const option =\n reasons & (UpdateReason.Option | UpdateReason.Graphic)\n ? (getAutoOption() ?? lastAutoOption)\n : lastAutoOption;\n const needsTheme = !themeApplied && optionApplied;\n if (needsTheme && !applyTheme(instance)) {\n return;\n }\n if (!manualUpdate.value && option) {\n const graphicOnly = reasons === UpdateReason.Graphic && !needsTheme;\n applyOption(instance, option, graphicOnly ? \"graphic\" : undefined);\n }\n }\n\n if (slots.graphic && !graphic) {\n warn(\n \"Detected `#graphic` slot but no extension is registered. Import from `vue-echarts/graphic` to enable it.\",\n );\n }\n\n const { sync: syncListeners, stop: stopListeners } = useReactiveChartListeners(chart, attrs);\n\n function cleanup(): void {\n pendingUpdate = 0;\n graphic?.cancelPendingFlush();\n updateRevision++;\n const instance = chart.value;\n chart.value = undefined;\n setSlotsReady(false);\n lastSignature = undefined;\n modelValid = false;\n lastAutoOption = undefined;\n initDeferred = false;\n graphicSlotApplied = false;\n instance?.dispose();\n }\n\n function init(): void {\n pendingUpdate = 0;\n optionApplied = false;\n\n const host = chartHost.value as HTMLDivElement;\n const instance = initChart(host, realTheme.value, realInitOptions.value);\n chart.value = instance;\n if (!isCurrent(instance)) {\n return;\n }\n themeApplied = true;\n\n function commit(): void {\n const option = manualUpdate.value ? props.option : getAutoOption();\n if (option) {\n if (manualUpdate.value) {\n applyOption(instance, option, \"manual\", realUpdateOptions.value ?? undefined);\n } else {\n applyOption(instance, option);\n }\n }\n setSlotsReady(isCurrent(instance));\n }\n\n if (autoresize.value) {\n initDeferred = true;\n nextTick(() => {\n if (!isCurrent(instance)) {\n return;\n }\n if (autoresize.value && !hasZeroDimension(host.offsetWidth, host.offsetHeight)) {\n instance.resize();\n if (!isCurrent(instance)) {\n return;\n }\n }\n if (initDeferred) {\n initDeferred = false;\n commit();\n } else {\n setSlotsReady(true);\n }\n });\n return;\n }\n\n commit();\n }\n\n const setOption: SetOptionType = (option, notMerge, lazyUpdate?: boolean) => {\n if (!props.manualUpdate) {\n warn(\"`setOption` is only available when `manual-update` is `true`.\");\n return;\n }\n\n const instance = chart.value;\n if (!isCurrent(instance)) {\n return;\n }\n\n const updateOptions =\n typeof notMerge === \"boolean\"\n ? { notMerge, lazyUpdate }\n : (notMerge ?? (lazyUpdate === undefined ? undefined : { lazyUpdate }));\n\n applyOption(instance, option, \"manual\", updateOptions);\n };\n\n // Mark synchronously so later batched replacements cannot mask nested changes.\n const stopThemeWatch = watch(\n realTheme,\n (theme, previousTheme) => {\n if (isIgnorableWatchChange(theme, previousTheme)) {\n return;\n }\n themeApplied = false;\n scheduleUpdate(UpdateReason.Theme);\n },\n { deep: true, flush: \"sync\" },\n );\n\n const stopInitOptionsWatch = watch(\n realInitOptions,\n (options, previousOptions) => {\n if (!isIgnorableWatchChange(options, previousOptions)) {\n scheduleUpdate(UpdateReason.Reinit);\n }\n },\n { deep: true, flush: \"sync\" },\n );\n\n function watchOption() {\n return watch(\n () => (manualUpdate.value ? SKIP_AUTO_UPDATE : props.option),\n (option, previousOption) => {\n if (\n option !== SKIP_AUTO_UPDATE &&\n previousOption !== SKIP_AUTO_UPDATE &&\n (option ?? getAutoOption())\n ) {\n requestUpdate();\n }\n },\n // Batch deep traversal, then submit after Vue has prepared slot containers and graphic nodes.\n { deep: true },\n );\n }\n let stopOptionWatch = watchOption();\n const stopModeWatch = watch(manualUpdate, () => scheduleUpdate(UpdateReason.Reinit), {\n flush: \"sync\",\n });\n const stopUpdateWatch = watch(updateRequest, flushUpdate, { flush: \"post\" });\n\n const stopGroupWatch = watchSyncEffect(() => {\n const instance = chart.value;\n if (isCurrent(instance)) {\n instance.group = props.group ?? \"\";\n }\n });\n const stopLoading = useLoading(chart, loading, loadingType, loadingOptions);\n const stopAutoresize = useAutoresize(chart, autoresize, chartHost);\n\n function dispose(): void {\n if (terminallyDisposed.value) {\n return;\n }\n terminallyDisposed.value = true;\n stopThemeWatch();\n stopInitOptionsWatch();\n stopOptionWatch();\n stopModeWatch();\n stopUpdateWatch();\n stopGroupWatch();\n stopLoading();\n stopAutoresize();\n stopListeners();\n cleanup();\n }\n\n const publicApi = usePublicAPI(chart, dispose, () => terminallyDisposed.value);\n const guardedClear = publicApi.clear;\n publicApi.clear = () => {\n const instance = chart.value;\n if (!isCurrent(instance)) {\n return guardedClear();\n }\n initDeferred = false;\n pendingUpdate = 0;\n graphic?.cancelPendingFlush();\n cancelSlotUpdate();\n // Drop earlier queued source changes while observing changes made inside clear's events.\n stopOptionWatch();\n stopOptionWatch = watchOption();\n if (runUpdate(instance, () => instance.clear(), undefined)) {\n lastAutoOption = undefined;\n graphicSlotApplied = false;\n optionApplied = true;\n }\n };\n\n onMounted(() => {\n if (!terminallyDisposed.value) {\n init();\n }\n });\n\n onBeforeUnmount(() => {\n stopOptionWatch();\n if (terminallyDisposed.value) {\n return;\n }\n terminallyDisposed.value = true;\n const element = root.value;\n if (wcRegistered && element?.isConnected && element.__dispose === null) {\n element.__dispose = cleanup;\n return;\n }\n\n cleanup();\n });\n\n const exposed = {\n setOption,\n get root(): HTMLElement | undefined {\n return root.value ?? undefined;\n },\n get chart() {\n const instance = chart.value;\n return isCurrent(instance) ? instance : undefined;\n },\n };\n expose(Object.assign(exposed, publicApi));\n\n return (() => {\n const children: VNodeChild[] = [\n h(\"div\", {\n ref: chartHost,\n class: \"echarts-host\",\n }),\n ];\n\n if (!terminallyDisposed.value) {\n const teleported = renderSlot();\n if (teleported) {\n children.push(teleported);\n }\n\n const graphicContent = graphic?.render();\n if (graphicContent) {\n children.push(graphicContent);\n }\n }\n\n const forwardedAttrs = getRootAttrs(attrs);\n\n return h(\n TAG_NAME,\n {\n ...forwardedAttrs,\n ref: root,\n class: [\"echarts\", forwardedAttrs.class],\n },\n children,\n );\n }) as unknown as typeof exposed & PublicMethods;\n },\n}) as PublicComponent<typeof chartProps, Bindings, Emits, SlotsTypes>;\n\nexport default ECharts;\n","import ECharts from \"./ECharts\";\nimport type { Slot } from \"vue\";\n\nexport interface VChartSlotsExtension {\n graphic?: Slot;\n}\n\nexport default ECharts;\nexport * from \"./ECharts\";\nexport type { AutoResize, LoadingOptions } from \"./types\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["cssRules","useGraphic","init","initChart"],"sources":["../src/composables/api.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/composables/slot.ts","../src/wc.ts","../src/core/events.ts","../src/style.css?raw","../src/style.ts","../src/ECharts.ts","../src/index.ts"],"sourcesContent":["import type { Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\n\nconst METHOD_NAMES = [\n \"getWidth\",\n \"getHeight\",\n \"getDom\",\n \"getZr\",\n \"getId\",\n \"getOption\",\n \"isSSR\",\n \"getDevicePixelRatio\",\n \"resize\",\n \"makeActionFromEvent\",\n \"dispatchAction\",\n \"updateLabelLayout\",\n \"convertToPixel\",\n \"convertToLayout\",\n \"convertFromPixel\",\n \"containPixel\",\n \"getVisual\",\n \"renderToCanvas\",\n \"renderToSVGString\",\n \"getSvgDataURL\",\n \"getDataURL\",\n \"getConnectedDataURL\",\n \"appendData\",\n \"clear\",\n] as const;\n\ntype MethodName = (typeof METHOD_NAMES)[number];\n\nexport type PublicMethods = Pick<EChartsType, MethodName | \"dispose\" | \"isDisposed\">;\n\nexport function usePublicAPI(\n chart: Ref<EChartsType | undefined>,\n dispose: () => void,\n isDisposed: () => boolean,\n): PublicMethods {\n const getInstance = (): EChartsType => {\n if (isDisposed()) {\n throw new Error(\"ECharts has been disposed.\");\n }\n const instance = chart.value;\n if (!instance) {\n throw new Error(\"ECharts is not initialized yet.\");\n }\n return instance;\n };\n\n const api: Record<string, (...args: unknown[]) => unknown> = {};\n for (const name of METHOD_NAMES) {\n api[name] = (...args: unknown[]): unknown => {\n const instance = getInstance();\n return Reflect.apply(instance[name], instance, args);\n };\n }\n api.dispose = dispose;\n api.isDisposed = isDisposed;\n return api as PublicMethods;\n}\n","import { watch } from \"vue\";\nimport { throttle } from \"echarts/core\";\n\nimport type { Ref, PropType } from \"vue\";\nimport type { EChartsType, AutoResize } from \"../types\";\nimport { hasZeroDimension } from \"../utils\";\n\nexport function useAutoresize(\n chart: Ref<EChartsType | undefined>,\n autoresize: Ref<AutoResize | undefined>,\n container: Ref<HTMLElement | undefined>,\n): () => void {\n const getOptions = () => (typeof autoresize.value === \"object\" ? autoresize.value : undefined);\n const resizeSources = [\n container,\n chart,\n () => Boolean(autoresize.value),\n () => getOptions()?.throttle ?? 100,\n ] as const;\n\n return watch(\n resizeSources,\n ([container, chart, enabled, wait], _, onCleanup) => {\n if (!chart || !container || !enabled) {\n return;\n }\n\n let observedWidth = chart.getWidth();\n let observedHeight = chart.getHeight();\n\n const resize = () => {\n if (hasZeroDimension(observedWidth, observedHeight)) {\n return;\n }\n const width = chart.getWidth();\n const height = chart.getHeight();\n // CSS is applied to the public root; the internal host has no padding or scrollbars.\n if (container.clientWidth === width && container.clientHeight === height) {\n return;\n }\n // Let the renderer resolve fractional CSS sizes and explicit dimensions.\n // Only a real size change needs the ECharts update that stops animations.\n chart.getZr().resize();\n if (width === chart.getWidth() && height === chart.getHeight()) {\n return;\n }\n chart.resize();\n getOptions()?.onResize?.();\n };\n const throttledResize = wait ? throttle(resize, wait) : undefined;\n\n const observer = new ResizeObserver(([entry]) => {\n observedWidth = entry.contentRect.width;\n observedHeight = entry.contentRect.height;\n (throttledResize ?? resize)();\n });\n\n observer.observe(container);\n onCleanup(() => {\n observer.disconnect();\n throttledResize?.clear();\n });\n },\n // Stop observer work before the outgoing chart can be disposed.\n { flush: \"sync\" },\n );\n}\n\nexport const autoresizeProps = {\n autoresize: [Boolean, Object] as PropType<AutoResize>,\n};\n","import { inject, toValue, watch } from \"vue\";\n\nimport type { Ref, InjectionKey, PropType } from \"vue\";\nimport type { EChartsType, LoadingOptions, LoadingOptionsInjection } from \"../types\";\n\nexport const LOADING_OPTIONS_KEY: InjectionKey<LoadingOptionsInjection> = Symbol();\n\nexport function useLoading(\n chart: Ref<EChartsType | undefined>,\n loading: Ref<boolean | undefined>,\n loadingType: Ref<string | undefined>,\n loadingOptions: Ref<LoadingOptions | undefined>,\n): () => void {\n const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, undefined);\n\n return watch(\n // Track chart availability without including its internals in deep traversal.\n () =>\n chart.value && loading.value\n ? {\n type: loadingType.value || undefined,\n options: {\n ...toValue(defaultLoadingOptions),\n ...loadingOptions.value,\n },\n }\n : null,\n (state) => {\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n if (!state) {\n instance.hideLoading();\n return;\n }\n\n const { type, options } = state;\n if (type) {\n instance.showLoading(type, options);\n } else {\n instance.showLoading(options);\n }\n },\n { deep: true, immediate: true, flush: \"sync\" },\n );\n}\n\nexport const loadingProps = {\n loading: Boolean,\n loadingType: String,\n loadingOptions: Object as PropType<LoadingOptions>,\n};\n","import {\n getCurrentInstance,\n h,\n Teleport,\n onUpdated,\n onMounted,\n shallowRef,\n shallowReactive,\n} from \"vue\";\nimport type { Slots as VueSlots, SlotsType as VueSlotsType } from \"vue\";\nimport type { Option } from \"../types\";\nimport { isPlainObject, isValidArrayIndex, warn } from \"../utils\";\nimport type { TooltipComponentFormatterCallbackParams } from \"echarts\";\nimport type { VChartSlotsExtension } from \"../index\";\n\nconst SLOT_OPTION_PATHS = {\n tooltip: [\"tooltip\", \"formatter\"],\n dataView: [\"toolbox\", \"feature\", \"dataView\", \"optionToContent\"],\n} as const;\nconst PROTOTYPE_SEGMENT_RE = /-__proto__(?:-|$)/;\ntype SlotPrefix = keyof typeof SLOT_OPTION_PATHS;\ntype SlotName = SlotPrefix | `${SlotPrefix}-${string}`;\ntype SlotMap<T> = Partial<Record<SlotName, T>>;\n\nfunction isValidSlotName(key: string): key is SlotName {\n return (\n (key === \"tooltip\" ||\n key.startsWith(\"tooltip-\") ||\n key === \"dataView\" ||\n key.startsWith(\"dataView-\")) &&\n !key.endsWith(\"-\") &&\n !key.includes(\"--\") &&\n !PROTOTYPE_SEGMENT_RE.test(key)\n );\n}\n\nfunction getSlotPath(key: SlotName): string[] {\n const prefix: SlotPrefix = key.startsWith(\"tooltip\") ? \"tooltip\" : \"dataView\";\n const rest = key.slice(prefix.length);\n const path = rest ? rest.slice(1).split(\"-\") : [];\n const target = SLOT_OPTION_PATHS[prefix];\n if (isValidArrayIndex(path[0] ?? \"\")) {\n const index = path.shift()!;\n path.push(target[0], index, ...target.slice(1));\n } else {\n path.push(...target);\n }\n return path;\n}\n\ntype Container = Record<string, unknown> | unknown[];\n\nfunction ensureChild(\n parent: Container,\n seg: string,\n nextSeg: string,\n writable: WeakSet<Container>,\n): Container | undefined {\n const parentIsArray = Array.isArray(parent);\n if (parentIsArray !== isValidArrayIndex(seg)) {\n return undefined;\n }\n const next = parentIsArray ? parent[Number(seg)] : parent[seg];\n\n let child: Container;\n if (Array.isArray(next)) {\n child = writable.has(next) ? next : [...next];\n } else if (isPlainObject(next)) {\n child = writable.has(next) ? next : { ...next };\n } else if (next === undefined && !parentIsArray && !isValidArrayIndex(nextSeg)) {\n child = {};\n } else {\n return undefined;\n }\n writable.add(child);\n writeSegment(parent, seg, child);\n return child;\n}\n\nfunction writeSegment(parent: Container, seg: string, value: unknown): void {\n if (Array.isArray(parent)) {\n parent[Number(seg)] = value;\n return;\n }\n parent[seg] = value;\n}\n\nfunction writePath(\n root: Option,\n path: readonly string[],\n value: unknown,\n writable: WeakSet<Container>,\n preserveDefined = false,\n): boolean {\n let current: Container = root;\n for (let i = 0; i < path.length - 1; i++) {\n const child = ensureChild(current, path[i], path[i + 1], writable);\n if (!child) {\n return false;\n }\n current = child;\n }\n if (Array.isArray(current)) {\n return false;\n }\n const leaf = path[path.length - 1];\n if (!preserveDefined || current[leaf] === undefined) {\n writeSegment(current, leaf, value);\n }\n return true;\n}\n\nexport function useSlotOption(slots: VueSlots, onSlotsChange: () => void) {\n const instance = getCurrentInstance()!;\n let detachedRoot: HTMLDivElement | undefined;\n const containers = shallowReactive<SlotMap<HTMLElement>>({});\n const params = shallowReactive<SlotMap<unknown>>({});\n const isMounted = shallowRef(false);\n const ready = shallowRef(false);\n\n const collectSlotNames = (warnInvalid = false): Set<SlotName> => {\n const names = new Set<SlotName>();\n for (const key in slots) {\n if (key === \"graphic\") {\n continue;\n }\n if (isValidSlotName(key)) {\n names.add(key);\n } else if (warnInvalid) {\n warn(`Invalid slot name: ${key}`);\n }\n }\n return names;\n };\n collectSlotNames(true);\n\n let slotNames: ReadonlySet<SlotName> = new Set();\n let nextSlotNames = slotNames;\n const patchedSlotNames = new Set<SlotName>();\n const callbacks = new Map<\n SlotName,\n { path: string[]; formatter: (payload: unknown) => HTMLElement | undefined }\n >();\n\n function setReady(value: boolean): void {\n ready.value = value;\n if (value) {\n return;\n }\n patchedSlotNames.clear();\n for (const key of Object.keys(params) as SlotName[]) {\n delete params[key];\n }\n }\n\n function syncSlotNames(names: ReadonlySet<SlotName>): boolean {\n let changed = names.size !== slotNames.size;\n for (const key of slotNames) {\n if (!names.has(key)) {\n changed = true;\n delete params[key];\n delete containers[key];\n callbacks.delete(key);\n }\n }\n if (changed) {\n slotNames = names;\n }\n return changed;\n }\n\n const render = () => {\n nextSlotNames = collectSlotNames();\n if (nextSlotNames.size === 0 || !ready.value || !isMounted.value) {\n return undefined;\n }\n const ownerDocument = (instance.vnode.el as HTMLElement).ownerDocument;\n detachedRoot ??= ownerDocument.createElement(\"div\");\n\n return h(\n Teleport,\n { to: detachedRoot },\n Array.from(nextSlotNames, (slotName) => {\n const slot = slots[slotName];\n const slotContent = slotName in params ? slot?.(params[slotName]) : undefined;\n return h(\n \"div\",\n {\n key: slotName,\n ref: (el) => {\n if (el) {\n containers[slotName] = el as HTMLElement;\n } else {\n delete containers[slotName];\n }\n },\n style: { display: \"contents\" },\n },\n slotContent,\n );\n }),\n );\n };\n\n function prepare(src: Option): { option: Option; commit: () => void } {\n const names = collectSlotNames();\n syncSlotNames(names);\n // Shared callback paths only clone each container once per submission.\n const writable = new WeakSet<Container>();\n let root: Option | undefined;\n\n for (const key of patchedSlotNames) {\n if (!names.has(key)) {\n root ??= { ...src };\n writePath(root, getSlotPath(key), null, writable, true);\n }\n }\n\n const patchedNames: SlotName[] = [];\n\n for (const key of names) {\n root ??= { ...src };\n let callback = callbacks.get(key);\n if (!callback) {\n const formatter = (payload: unknown): HTMLElement | undefined => {\n if (!slots[key]) {\n return undefined;\n }\n // ECharts may update and reuse the same formatter payload object.\n if (key in params && Object.is(params[key], payload)) {\n delete params[key];\n }\n params[key] = payload;\n return containers[key];\n };\n callback = { path: getSlotPath(key), formatter };\n callbacks.set(key, callback);\n }\n\n if (!writePath(root, callback.path, callback.formatter, writable)) {\n continue;\n }\n patchedNames.push(key);\n }\n\n return {\n option: root ?? src,\n commit: () => {\n // Native theme changes can replay callbacks from an older option backup.\n // Keep their cleanup paths until the chart instance is replaced.\n patchedNames.forEach((name) => patchedSlotNames.add(name));\n },\n };\n }\n\n onUpdated(() => {\n if (syncSlotNames(nextSlotNames)) {\n onSlotsChange();\n }\n });\n\n onMounted(() => {\n slotNames = nextSlotNames;\n isMounted.value = true;\n });\n\n return {\n render,\n prepare,\n setReady,\n cancelPendingUpdate: () => {\n // A queued updated hook must not replay slot changes preceding clear().\n syncSlotNames(collectSlotNames());\n },\n };\n}\n\n/** Vue SlotsType metadata for VChart, including VChartSlotsExtension augmentations. */\nexport type Slots = VueSlotsType<\n Record<\"tooltip\" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> &\n Record<\"dataView\" | `dataView-${string}`, Option> &\n VChartSlotsExtension\n>;\n","export const TAG_NAME = \"x-vue-echarts\";\n// Shared across bundles so one copy can trust another copy's disconnect hook.\nconst LIFECYCLE_MARKER = Symbol.for(\"vue-echarts.lifecycle\");\n\ntype LifecycleConstructor = CustomElementConstructor & {\n [LIFECYCLE_MARKER]?: true;\n};\n\nexport interface EChartsElement extends HTMLElement {\n __dispose: (() => void) | null;\n}\n\nexport function register(): boolean {\n const registry = globalThis.customElements;\n\n if (!registry) {\n return false;\n }\n\n const existing = registry.get(TAG_NAME);\n if (existing) {\n return Boolean((existing as LifecycleConstructor)[LIFECYCLE_MARKER]);\n }\n\n class ECElement extends HTMLElement implements EChartsElement {\n __dispose: (() => void) | null = null;\n\n disconnectedCallback(): void {\n if (!this.__dispose) {\n return;\n }\n queueMicrotask(() => {\n if (!this.isConnected && this.__dispose) {\n const dispose = this.__dispose;\n this.__dispose = null;\n dispose();\n }\n });\n }\n }\n\n Object.defineProperty(ECElement, LIFECYCLE_MARKER, { value: true });\n registry.define(TAG_NAME, ECElement);\n return true;\n}\n","import { getCurrentInstance, onScopeDispose, onUpdated, watchSyncEffect } from \"vue\";\n\nimport type { Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\nimport { createEventInvoker, hasEventHandler, isOn, parseOnEvent } from \"../utils\";\nimport type { AttrMap, EventHandler } from \"../utils\";\n\ntype EventEmitter = {\n on: (event: string, handler: EventHandler) => void;\n off: (event: string, handler: EventHandler) => void;\n};\n\ntype ListenerBinding = {\n emitter: EventEmitter;\n event: string;\n source: unknown;\n handler: EventHandler;\n};\n\nconst NATIVE_EVENT_PREFIX = \"onNative:\";\n\nexport function useReactiveChartListeners(\n chart: Ref<EChartsType | undefined>,\n attrs: AttrMap,\n): { sync: () => void; stop: () => void } {\n const bindings = new Map<string, ListenerBinding>();\n const consumedSources = new Map<string, unknown>();\n const seen = new Set<string>();\n let boundChart: EChartsType | undefined;\n\n function clearBindings(): void {\n for (const binding of bindings.values()) {\n binding.emitter.off(binding.event, binding.handler);\n }\n bindings.clear();\n }\n\n function sync(): void {\n seen.clear();\n const instance = chart.value;\n for (const [key, source] of consumedSources) {\n if (attrs[key] !== source) {\n consumedSources.delete(key);\n }\n }\n if (!instance) {\n clearBindings();\n boundChart = undefined;\n return;\n }\n\n if (boundChart && boundChart !== instance) {\n clearBindings();\n }\n boundChart = instance;\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed || parsed.event.startsWith(\"native:\") || parsed.event === \"zr:\") {\n continue;\n }\n\n const zr = parsed.event.startsWith(\"zr:\");\n const event = (zr ? parsed.event.slice(3) : parsed.event).toLowerCase();\n const source = attrs[key];\n const existing = bindings.get(key);\n\n if (parsed.once && consumedSources.get(key) === source) {\n continue;\n }\n\n if (existing && existing.source === source && hasEventHandler(source)) {\n seen.add(key);\n continue;\n }\n\n const invoke = createEventInvoker(source);\n if (existing) {\n existing.emitter.off(existing.event, existing.handler);\n bindings.delete(key);\n }\n\n if (!invoke) {\n continue;\n }\n\n const emitter = zr ? (instance.getZr() as EventEmitter) : (instance as EventEmitter);\n let handler = invoke;\n if (parsed.once) {\n handler = (...args): void => {\n bindings.delete(key);\n consumedSources.set(key, source);\n emitter.off(event, handler);\n invoke(...args);\n };\n }\n\n emitter.on(event, handler);\n bindings.set(key, {\n emitter,\n event,\n source,\n handler,\n });\n seen.add(key);\n }\n\n for (const [key, binding] of bindings) {\n if (seen.has(key)) {\n continue;\n }\n binding.emitter.off(binding.event, binding.handler);\n bindings.delete(key);\n }\n }\n\n const stopWatch = watchSyncEffect(sync);\n if (getCurrentInstance()) {\n onUpdated(sync);\n }\n\n const stop = () => {\n stopWatch();\n clearBindings();\n };\n onScopeDispose(stop);\n return { sync, stop };\n}\n\nexport function getRootAttrs(attrs: AttrMap): AttrMap {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n if (key.startsWith(NATIVE_EVENT_PREFIX)) {\n const event = key.slice(NATIVE_EVENT_PREFIX.length);\n if (event) {\n result[`on:${event}`] = attrs[key];\n }\n continue;\n }\n if (!isOn(key)) {\n result[key] = attrs[key];\n }\n }\n\n return result;\n}\n","export default \"x-vue-echarts{display:block;width:100%;height:100%;min-width:0;min-height:0;}\\nx-vue-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;border-radius:inherit;}\\nx-vue-echarts>.echarts-host>:first-child,x-vue-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}\\n\"","import cssRules from \"./style.css?raw\";\nimport { isBrowser } from \"./utils\";\n\nif (isBrowser()) {\n if (Array.isArray(document.adoptedStyleSheets) && \"replaceSync\" in CSSStyleSheet.prototype) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(cssRules);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n } else {\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = cssRules;\n document.head.appendChild(styleEl);\n }\n}\n","import {\n defineComponent,\n shallowRef,\n toRef,\n watch,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n h,\n nextTick,\n watchSyncEffect,\n toValue,\n} from \"vue\";\nimport { init as initChart } from \"echarts/core\";\n\nimport type { InjectionKey, PropType, VNodeChild } from \"vue\";\n\nimport { usePublicAPI, type PublicMethods } from \"./composables/api\";\nimport { useAutoresize, autoresizeProps } from \"./composables/autoresize\";\nimport { useLoading, loadingProps } from \"./composables/loading\";\nimport { useSlotOption, type Slots } from \"./composables/slot\";\nimport { hasZeroDimension, isIgnorableWatchChange, warn } from \"./utils\";\nimport { register, TAG_NAME } from \"./wc\";\nimport { useRuntime as useGraphic } from \"./graphic/runtime\";\nimport { useReactiveChartListeners, getRootAttrs } from \"./core/events\";\nimport { planUpdate } from \"./update\";\nimport type { Signature } from \"./update\";\n\nimport type {\n EChartsType,\n SetOptionType,\n Option,\n Theme,\n ThemeInjection,\n InitOptions,\n InitOptionsInjection,\n UpdateOptions,\n UpdateOptionsInjection,\n Emits,\n Component,\n} from \"./types\";\nimport type { EChartsElement } from \"./wc\";\n\nimport \"./style\";\n\nconst wcRegistered = register();\nconst SKIP_AUTO_UPDATE = Symbol();\ntype ApplyMode = \"manual\" | \"graphic\";\nenum UpdateReason {\n Option = 1,\n Graphic = 2,\n Theme = 4,\n Reinit = 8,\n}\n\nexport const THEME_KEY: InjectionKey<ThemeInjection> = Symbol();\nexport const INIT_OPTIONS_KEY: InjectionKey<InitOptionsInjection> = Symbol();\nexport const UPDATE_OPTIONS_KEY: InjectionKey<UpdateOptionsInjection> = Symbol();\nexport { LOADING_OPTIONS_KEY } from \"./composables/loading\";\n\nconst chartProps = {\n option: Object as PropType<Option>,\n theme: {\n type: [Object, String] as PropType<Theme>,\n },\n initOptions: Object as PropType<InitOptions>,\n updateOptions: Object as PropType<UpdateOptions>,\n group: String,\n manualUpdate: Boolean,\n ...autoresizeProps,\n ...loadingProps,\n};\n\n/** Methods and read-only state exposed by VChart through a template ref. */\nexport type Exposed = {\n setOption: SetOptionType;\n readonly root: HTMLElement | undefined;\n readonly chart: EChartsType | undefined;\n} & PublicMethods;\n\nconst ECharts = /* @__PURE__ */ defineComponent({\n name: \"Echarts\",\n inheritAttrs: false,\n props: chartProps,\n emits: {} as Emits,\n slots: Object as Slots,\n setup(props, { attrs, expose, slots }) {\n const root = shallowRef<EChartsElement>();\n const chartHost = shallowRef<HTMLDivElement>();\n const chart = shallowRef<EChartsType>();\n const updateRequest = shallowRef(0);\n let pendingUpdate = 0;\n const defaultTheme = inject(THEME_KEY, null);\n const defaultInitOptions = inject(INIT_OPTIONS_KEY, null);\n const defaultUpdateOptions = inject(UPDATE_OPTIONS_KEY, null);\n\n const autoresize = toRef(props, \"autoresize\");\n const manualUpdate = toRef(props, \"manualUpdate\");\n const loading = toRef(props, \"loading\");\n const loadingType = toRef(props, \"loadingType\");\n const loadingOptions = toRef(props, \"loadingOptions\");\n\n const realTheme = computed(() => props.theme ?? toValue(defaultTheme) ?? undefined);\n const realInitOptions = computed(\n () => props.initOptions ?? toValue(defaultInitOptions) ?? undefined,\n );\n const realUpdateOptions = computed(() => props.updateOptions ?? toValue(defaultUpdateOptions));\n\n const terminallyDisposed = shallowRef(false);\n\n const {\n render: renderSlot,\n prepare: prepareSlots,\n setReady: setSlotsReady,\n cancelPendingUpdate: cancelSlotUpdate,\n } = useSlotOption(slots, requestUpdate);\n\n const graphic = useGraphic({\n slots,\n manualUpdate,\n requestUpdate: () => requestUpdate(UpdateReason.Graphic),\n });\n\n // `null` means the model has no trusted signature, so the next smart update must rebuild.\n let lastSignature: Signature | null | undefined;\n let lastAutoOption: Option | undefined;\n let themeApplied = false;\n let optionApplied = false;\n let initDeferred = false;\n let graphicSlotApplied = false;\n let updateRevision = 0;\n let modelValid = false;\n\n function getAutoOption(): Option | undefined {\n // A graphic slot is a complete option source even without an `option` prop.\n return props.option ?? (graphic && (slots.graphic || graphicSlotApplied) ? {} : undefined);\n }\n\n function isCurrent(instance: EChartsType | undefined): instance is EChartsType {\n return instance !== undefined && chart.value === instance && !terminallyDisposed.value;\n }\n\n function runUpdate(\n instance: EChartsType,\n update: () => void,\n signature: Signature | null | undefined,\n ): boolean {\n const revision = ++updateRevision;\n // A failed native call may have partially changed the model. Only a successful,\n // uninterrupted submission can establish a new smart-update baseline.\n lastSignature = null;\n modelValid = false;\n update();\n if (!isCurrent(instance) || updateRevision !== revision) {\n return false;\n }\n lastSignature = signature;\n modelValid = true;\n return true;\n }\n\n function applyTheme(instance: EChartsType): boolean {\n // ECharts ignores setTheme until its first option creates the chart model.\n if (!optionApplied || themeApplied) {\n return false;\n }\n syncListeners();\n const revision = updateRevision + 1;\n // Native update events can submit another option before setTheme returns.\n themeApplied = true;\n try {\n return runUpdate(\n instance,\n () => instance.setTheme(realTheme.value || {}),\n lastSignature === undefined ? undefined : null,\n );\n } catch (error) {\n if (updateRevision === revision) {\n themeApplied = false;\n }\n throw error;\n }\n }\n\n function applyOption(\n instance: EChartsType,\n option: Option,\n mode?: ApplyMode,\n manualOptions?: UpdateOptions,\n ): void {\n const manual = mode === \"manual\";\n initDeferred = false;\n const preparedSlots = prepareSlots(option);\n const slotted = preparedSlots.option;\n const hasGraphicSlot = Boolean(graphic && slots.graphic);\n let updateOptions = manual ? manualOptions : (realUpdateOptions.value ?? undefined);\n let nextSignature: Signature | null = null;\n\n const graphicOnly = mode === \"graphic\" && hasGraphicSlot && graphicSlotApplied && modelValid;\n if (graphicOnly) {\n nextSignature = lastSignature ?? null;\n } else if (!manual && !updateOptions) {\n // An owned graphic tree is planned separately from the source it overrides.\n const source = hasGraphicSlot ? { ...slotted, graphic: undefined } : slotted;\n const planned = planUpdate(lastSignature ?? undefined, source);\n const rebuild = !planned.signature.hasAction && lastSignature === null;\n updateOptions = rebuild ? { ...planned.plan, notMerge: true } : planned.plan;\n nextSignature = planned.signature;\n }\n\n const replaceMerge = updateOptions?.replaceMerge;\n const replacements = typeof replaceMerge === \"string\" ? [replaceMerge] : (replaceMerge ?? []);\n const preparedGraphic = graphic?.prepare(\n slotted,\n !modelValid ||\n !graphicSlotApplied ||\n Boolean(updateOptions?.notMerge) ||\n replacements.includes(\"graphic\") ||\n manual,\n );\n let patched = preparedGraphic?.option ?? slotted;\n const replaceGraphic = preparedGraphic?.replace || (graphicSlotApplied && !hasGraphicSlot);\n if (replaceGraphic && !updateOptions?.notMerge && !replacements.includes(\"graphic\")) {\n updateOptions = { ...updateOptions, replaceMerge: [...replacements, \"graphic\"] };\n }\n const replacesSource = replacements.some((key) => key !== \"graphic\");\n if (graphicOnly && !updateOptions?.notMerge && !replacesSource) {\n patched = { graphic: patched.graphic };\n }\n syncListeners();\n if (!runUpdate(instance, () => instance.setOption(patched, updateOptions), nextSignature)) {\n return;\n }\n preparedSlots.commit();\n preparedGraphic?.commit();\n graphicSlotApplied = hasGraphicSlot;\n optionApplied = true;\n if (!manual) {\n lastAutoOption = option;\n }\n if (applyTheme(instance) && !manual) {\n applyOption(instance, option);\n }\n }\n\n function scheduleUpdate(reason: UpdateReason): void {\n pendingUpdate |= reason;\n updateRequest.value++;\n }\n\n function requestUpdate(reason = UpdateReason.Option): void {\n if (!manualUpdate.value && !initDeferred && !terminallyDisposed.value) {\n scheduleUpdate(reason);\n }\n }\n\n function flushUpdate(): void {\n const reasons = pendingUpdate;\n pendingUpdate = 0;\n const instance = chart.value;\n if (!reasons || !isCurrent(instance)) {\n return;\n }\n if (reasons & UpdateReason.Reinit) {\n cleanup();\n init();\n return;\n }\n if (initDeferred) {\n return;\n }\n\n const option =\n reasons & (UpdateReason.Option | UpdateReason.Graphic)\n ? (getAutoOption() ?? lastAutoOption)\n : lastAutoOption;\n const needsTheme = !themeApplied && optionApplied;\n if (needsTheme && !applyTheme(instance)) {\n return;\n }\n if (!manualUpdate.value && option) {\n const graphicOnly = reasons === UpdateReason.Graphic && !needsTheme;\n applyOption(instance, option, graphicOnly ? \"graphic\" : undefined);\n }\n }\n\n if (slots.graphic && !graphic) {\n warn(\n \"Detected `#graphic` slot but no extension is registered. Import from `vue-echarts/graphic` to enable it.\",\n );\n }\n\n const { sync: syncListeners, stop: stopListeners } = useReactiveChartListeners(chart, attrs);\n\n function cleanup(): void {\n pendingUpdate = 0;\n graphic?.cancelPendingFlush();\n updateRevision++;\n const instance = chart.value;\n chart.value = undefined;\n setSlotsReady(false);\n lastSignature = undefined;\n modelValid = false;\n lastAutoOption = undefined;\n initDeferred = false;\n graphicSlotApplied = false;\n instance?.dispose();\n }\n\n function init(): void {\n pendingUpdate = 0;\n optionApplied = false;\n\n const host = chartHost.value as HTMLDivElement;\n const instance = initChart(host, realTheme.value, realInitOptions.value);\n chart.value = instance;\n if (!isCurrent(instance)) {\n return;\n }\n themeApplied = true;\n\n function commit(): void {\n const option = manualUpdate.value ? props.option : getAutoOption();\n if (option) {\n if (manualUpdate.value) {\n applyOption(instance, option, \"manual\", realUpdateOptions.value ?? undefined);\n } else {\n applyOption(instance, option);\n }\n }\n setSlotsReady(isCurrent(instance));\n }\n\n if (autoresize.value) {\n initDeferred = true;\n nextTick(() => {\n if (!isCurrent(instance)) {\n return;\n }\n if (autoresize.value && !hasZeroDimension(host.offsetWidth, host.offsetHeight)) {\n instance.resize();\n if (!isCurrent(instance)) {\n return;\n }\n }\n if (initDeferred) {\n initDeferred = false;\n commit();\n } else {\n setSlotsReady(true);\n }\n });\n return;\n }\n\n commit();\n }\n\n const setOption: SetOptionType = (option, notMerge, lazyUpdate?: boolean) => {\n if (!props.manualUpdate) {\n warn(\"`setOption` is only available when `manual-update` is `true`.\");\n return;\n }\n\n const instance = chart.value;\n if (!isCurrent(instance)) {\n return;\n }\n\n const updateOptions =\n typeof notMerge === \"boolean\"\n ? { notMerge, lazyUpdate }\n : (notMerge ?? (lazyUpdate === undefined ? undefined : { lazyUpdate }));\n\n applyOption(instance, option, \"manual\", updateOptions);\n };\n\n // Mark synchronously so later batched replacements cannot mask nested changes.\n const stopThemeWatch = watch(\n realTheme,\n (theme, previousTheme) => {\n if (isIgnorableWatchChange(theme, previousTheme)) {\n return;\n }\n themeApplied = false;\n scheduleUpdate(UpdateReason.Theme);\n },\n { deep: true, flush: \"sync\" },\n );\n\n const stopInitOptionsWatch = watch(\n realInitOptions,\n (options, previousOptions) => {\n if (!isIgnorableWatchChange(options, previousOptions)) {\n scheduleUpdate(UpdateReason.Reinit);\n }\n },\n { deep: true, flush: \"sync\" },\n );\n\n function watchOption() {\n return watch(\n () => (manualUpdate.value ? SKIP_AUTO_UPDATE : props.option),\n (option, previousOption) => {\n if (\n option !== SKIP_AUTO_UPDATE &&\n previousOption !== SKIP_AUTO_UPDATE &&\n (option ?? getAutoOption())\n ) {\n requestUpdate();\n }\n },\n // Batch deep traversal, then submit after Vue has prepared slot containers and graphic nodes.\n { deep: true },\n );\n }\n let stopOptionWatch = watchOption();\n const stopModeWatch = watch(manualUpdate, () => scheduleUpdate(UpdateReason.Reinit), {\n flush: \"sync\",\n });\n const stopUpdateWatch = watch(updateRequest, flushUpdate, { flush: \"post\" });\n\n const stopGroupWatch = watchSyncEffect(() => {\n const instance = chart.value;\n if (isCurrent(instance)) {\n instance.group = props.group ?? \"\";\n }\n });\n const stopLoading = useLoading(chart, loading, loadingType, loadingOptions);\n const stopAutoresize = useAutoresize(chart, autoresize, chartHost);\n\n function dispose(): void {\n if (terminallyDisposed.value) {\n return;\n }\n terminallyDisposed.value = true;\n stopThemeWatch();\n stopInitOptionsWatch();\n stopOptionWatch();\n stopModeWatch();\n stopUpdateWatch();\n stopGroupWatch();\n stopLoading();\n stopAutoresize();\n stopListeners();\n cleanup();\n }\n\n const publicApi = usePublicAPI(chart, dispose, () => terminallyDisposed.value);\n const guardedClear = publicApi.clear;\n publicApi.clear = () => {\n const instance = chart.value;\n if (!isCurrent(instance)) {\n return guardedClear();\n }\n initDeferred = false;\n pendingUpdate = 0;\n graphic?.cancelPendingFlush();\n cancelSlotUpdate();\n // Drop earlier queued source changes while observing changes made inside clear's events.\n stopOptionWatch();\n stopOptionWatch = watchOption();\n if (runUpdate(instance, () => instance.clear(), undefined)) {\n lastAutoOption = undefined;\n graphicSlotApplied = false;\n optionApplied = true;\n }\n };\n\n onMounted(() => {\n if (!terminallyDisposed.value) {\n init();\n }\n });\n\n onBeforeUnmount(() => {\n stopOptionWatch();\n if (terminallyDisposed.value) {\n return;\n }\n terminallyDisposed.value = true;\n const element = root.value;\n if (wcRegistered && element?.isConnected && element.__dispose === null) {\n element.__dispose = cleanup;\n return;\n }\n\n cleanup();\n });\n\n const exposed = {\n setOption,\n get root(): HTMLElement | undefined {\n return root.value ?? undefined;\n },\n get chart() {\n const instance = chart.value;\n return isCurrent(instance) ? instance : undefined;\n },\n };\n expose(Object.assign(exposed, publicApi));\n\n return (() => {\n const children: VNodeChild[] = [\n h(\"div\", {\n ref: chartHost,\n class: \"echarts-host\",\n }),\n ];\n\n if (!terminallyDisposed.value) {\n const teleported = renderSlot();\n if (teleported) {\n children.push(teleported);\n }\n\n const graphicContent = graphic?.render();\n if (graphicContent) {\n children.push(graphicContent);\n }\n }\n\n const forwardedAttrs = getRootAttrs(attrs);\n\n return h(\n TAG_NAME,\n {\n ...forwardedAttrs,\n ref: root,\n class: [\"echarts\", forwardedAttrs.class],\n },\n children,\n );\n }) as unknown as typeof exposed & PublicMethods;\n },\n}) as Component<typeof chartProps, Exposed, Emits, Slots>;\n\nexport default ECharts;\n","import ECharts from \"./ECharts\";\nimport type { Slot } from \"vue\";\n\nexport interface VChartSlotsExtension {\n graphic?: Slot;\n}\n\nexport default ECharts;\nexport * from \"./ECharts\";\nexport type { AutoResize, LoadingOptions, Component } from \"./types\";\nexport type { Slots } from \"./composables/slot\";\n"],"mappings":"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"}
|