vue-echarts 8.3.0 → 8.3.1

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.
@@ -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 PublicComponent<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>;
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 SlotsTypes = SlotsType<Record<"tooltip" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> & Record<"dataView" | `dataView-${string}`, Option> & VChartSlotsExtension>;
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 Bindings = {
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: PublicComponent<typeof chartProps, Bindings, Emits, SlotsTypes>;
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 { UPDATE_OPTIONS_KEY as a, ElementEventAlias as c, LoadingOptions as d, PublicComponent as f, THEME_KEY as i, FontStyle as l, ECharts as n, LOADING_OPTIONS_KEY as o, WithOnce as p, INIT_OPTIONS_KEY as r, AutoResize as s, VChartSlotsExtension as t, FontWeight as u };
108
- //# sourceMappingURL=index-BujxhN-1.d.ts.map
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 UPDATE_OPTIONS_KEY, d as LoadingOptions, i as THEME_KEY, n as ECharts, o as LOADING_OPTIONS_KEY, r as INIT_OPTIONS_KEY, s as AutoResize, t as VChartSlotsExtension } from "./index-BujxhN-1.js";
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-CWPvYl2M.js";
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
@@ -81,27 +81,22 @@ const autoresizeProps = { autoresize: [Boolean, Object] };
81
81
  const LOADING_OPTIONS_KEY = Symbol();
82
82
  function useLoading(chart, loading, loadingType, loadingOptions) {
83
83
  const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, void 0);
84
- return watch(() => loading.value ? {
85
- instance: chart.value,
86
- visible: true,
84
+ return watch(() => chart.value && loading.value ? {
87
85
  type: loadingType.value || void 0,
88
86
  options: {
89
87
  ...toValue(defaultLoadingOptions),
90
88
  ...loadingOptions.value
91
89
  }
92
- } : {
93
- instance: chart.value,
94
- visible: false
95
- }, (state) => {
96
- const { instance } = state;
90
+ } : null, (state) => {
91
+ const instance = chart.value;
97
92
  if (!instance) return;
98
- if (!state.visible) {
93
+ if (!state) {
99
94
  instance.hideLoading();
100
95
  return;
101
96
  }
102
- const { type, options: currentOptions } = state;
103
- if (type) instance.showLoading(type, currentOptions);
104
- else instance.showLoading(currentOptions);
97
+ const { type, options } = state;
98
+ if (type) instance.showLoading(type, options);
99
+ else instance.showLoading(options);
105
100
  }, {
106
101
  deep: true,
107
102
  immediate: true,
@@ -139,15 +134,16 @@ function getSlotPath(key) {
139
134
  } else path.push(...target);
140
135
  return path;
141
136
  }
142
- function ensureChild(parent, seg, nextSeg) {
137
+ function ensureChild(parent, seg, nextSeg, writable) {
143
138
  const parentIsArray = Array.isArray(parent);
144
139
  if (parentIsArray !== isValidArrayIndex(seg)) return;
145
140
  const next = parentIsArray ? parent[Number(seg)] : parent[seg];
146
141
  let child;
147
- if (Array.isArray(next)) child = [...next];
148
- else if (isPlainObject(next)) child = { ...next };
142
+ if (Array.isArray(next)) child = writable.has(next) ? next : [...next];
143
+ else if (isPlainObject(next)) child = writable.has(next) ? next : { ...next };
149
144
  else if (next === void 0 && !parentIsArray && !isValidArrayIndex(nextSeg)) child = {};
150
145
  else return;
146
+ writable.add(child);
151
147
  writeSegment(parent, seg, child);
152
148
  return child;
153
149
  }
@@ -158,10 +154,10 @@ function writeSegment(parent, seg, value) {
158
154
  }
159
155
  parent[seg] = value;
160
156
  }
161
- function writePath(root, path, value, preserveDefined = false) {
157
+ function writePath(root, path, value, writable, preserveDefined = false) {
162
158
  let current = root;
163
159
  for (let i = 0; i < path.length - 1; i++) {
164
- const child = ensureChild(current, path[i], path[i + 1]);
160
+ const child = ensureChild(current, path[i], path[i + 1], writable);
165
161
  if (!child) return false;
166
162
  current = child;
167
163
  }
@@ -178,16 +174,16 @@ function useSlotOption(slots, onSlotsChange) {
178
174
  const isMounted = shallowRef(false);
179
175
  const ready = shallowRef(false);
180
176
  const collectSlotNames = (warnInvalid = false) => {
181
- const names = [];
177
+ const names = /* @__PURE__ */ new Set();
182
178
  for (const key in slots) {
183
179
  if (key === "graphic") continue;
184
- if (isValidSlotName(key)) names.push(key);
180
+ if (isValidSlotName(key)) names.add(key);
185
181
  else if (warnInvalid) warn$1(`Invalid slot name: ${key}`);
186
182
  }
187
183
  return names;
188
184
  };
189
185
  collectSlotNames(true);
190
- let slotNames = [];
186
+ let slotNames = /* @__PURE__ */ new Set();
191
187
  let nextSlotNames = slotNames;
192
188
  const patchedSlotNames = /* @__PURE__ */ new Set();
193
189
  const callbacks = /* @__PURE__ */ new Map();
@@ -198,21 +194,22 @@ function useSlotOption(slots, onSlotsChange) {
198
194
  for (const key of Object.keys(params)) delete params[key];
199
195
  }
200
196
  function syncSlotNames(names) {
201
- if (names.length === slotNames.length && slotNames.every((name) => names.includes(name))) return false;
202
- for (const key of slotNames) if (!names.includes(key)) {
197
+ let changed = names.size !== slotNames.size;
198
+ for (const key of slotNames) if (!names.has(key)) {
199
+ changed = true;
203
200
  delete params[key];
204
201
  delete containers[key];
205
202
  callbacks.delete(key);
206
203
  }
207
- slotNames = names;
208
- return true;
204
+ if (changed) slotNames = names;
205
+ return changed;
209
206
  }
210
207
  const render = () => {
211
208
  nextSlotNames = collectSlotNames();
212
- if (nextSlotNames.length === 0 || !ready.value || !isMounted.value) return;
209
+ if (nextSlotNames.size === 0 || !ready.value || !isMounted.value) return;
213
210
  const ownerDocument = instance.vnode.el.ownerDocument;
214
211
  detachedRoot ??= ownerDocument.createElement("div");
215
- return h(Teleport, { to: detachedRoot }, nextSlotNames.map((slotName) => {
212
+ return h(Teleport, { to: detachedRoot }, Array.from(nextSlotNames, (slotName) => {
216
213
  const slot = slots[slotName];
217
214
  const slotContent = slotName in params ? slot?.(params[slotName]) : void 0;
218
215
  return h("div", {
@@ -228,14 +225,15 @@ function useSlotOption(slots, onSlotsChange) {
228
225
  function prepare(src) {
229
226
  const names = collectSlotNames();
230
227
  syncSlotNames(names);
228
+ const writable = /* @__PURE__ */ new WeakSet();
231
229
  let root;
232
- for (const key of patchedSlotNames) if (!names.includes(key)) {
230
+ for (const key of patchedSlotNames) if (!names.has(key)) {
233
231
  root ??= { ...src };
234
- writePath(root, getSlotPath(key), null, true);
232
+ writePath(root, getSlotPath(key), null, writable, true);
235
233
  }
236
- if (names.length) root ??= { ...src };
237
234
  const patchedNames = [];
238
235
  for (const key of names) {
236
+ root ??= { ...src };
239
237
  let callback = callbacks.get(key);
240
238
  if (!callback) {
241
239
  const formatter = (payload) => {
@@ -250,7 +248,7 @@ function useSlotOption(slots, onSlotsChange) {
250
248
  };
251
249
  callbacks.set(key, callback);
252
250
  }
253
- if (!writePath(root, callback.path, callback.formatter)) continue;
251
+ if (!writePath(root, callback.path, callback.formatter, writable)) continue;
254
252
  patchedNames.push(key);
255
253
  }
256
254
  return {
@@ -392,17 +390,19 @@ function getRootAttrs(attrs) {
392
390
  }
393
391
  //#endregion
394
392
  //#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";
393
+ 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
394
  //#endregion
397
395
  //#region src/style.ts
398
- if (isBrowser()) if (Array.isArray(document.adoptedStyleSheets) && "replaceSync" in CSSStyleSheet.prototype) {
399
- const sheet = new CSSStyleSheet();
400
- sheet.replaceSync(style_default);
401
- document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
402
- } else {
403
- const styleEl = document.createElement("style");
404
- styleEl.textContent = style_default;
405
- document.head.appendChild(styleEl);
396
+ if (isBrowser()) {
397
+ if (Array.isArray(document.adoptedStyleSheets) && "replaceSync" in CSSStyleSheet.prototype) {
398
+ const sheet = new CSSStyleSheet();
399
+ sheet.replaceSync(style_default);
400
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
401
+ } else {
402
+ const styleEl = document.createElement("style");
403
+ styleEl.textContent = style_default;
404
+ document.head.appendChild(styleEl);
405
+ }
406
406
  }
407
407
  //#endregion
408
408
  //#region src/ECharts.ts
@@ -411,21 +411,22 @@ const SKIP_AUTO_UPDATE = Symbol();
411
411
  const THEME_KEY = Symbol();
412
412
  const INIT_OPTIONS_KEY = Symbol();
413
413
  const UPDATE_OPTIONS_KEY = Symbol();
414
+ const chartProps = {
415
+ option: Object,
416
+ theme: { type: [Object, String] },
417
+ initOptions: Object,
418
+ updateOptions: Object,
419
+ group: String,
420
+ manualUpdate: Boolean,
421
+ ...autoresizeProps,
422
+ ...loadingProps
423
+ };
414
424
  //#endregion
415
425
  //#region src/index.ts
416
426
  var src_default = /* @__PURE__ */ defineComponent({
417
427
  name: "Echarts",
418
428
  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
- },
429
+ props: chartProps,
429
430
  emits: {},
430
431
  slots: Object,
431
432
  setup(props, { attrs, expose, slots }) {
@@ -478,6 +479,7 @@ var src_default = /* @__PURE__ */ defineComponent({
478
479
  }
479
480
  function applyTheme(instance) {
480
481
  if (!optionApplied || themeApplied) return false;
482
+ syncListeners();
481
483
  const revision = updateRevision + 1;
482
484
  themeApplied = true;
483
485
  try {
@@ -493,15 +495,15 @@ var src_default = /* @__PURE__ */ defineComponent({
493
495
  const preparedSlots = prepareSlots(option);
494
496
  const slotted = preparedSlots.option;
495
497
  const hasGraphicSlot = Boolean(graphic && slots.graphic);
496
- const source = hasGraphicSlot ? {
497
- ...slotted,
498
- graphic: void 0
499
- } : slotted;
500
498
  let updateOptions = manual ? manualOptions : realUpdateOptions.value ?? void 0;
501
499
  let nextSignature = null;
502
500
  const graphicOnly = mode === "graphic" && hasGraphicSlot && graphicSlotApplied && modelValid;
503
501
  if (graphicOnly) nextSignature = lastSignature ?? null;
504
502
  else if (!manual && !updateOptions) {
503
+ const source = hasGraphicSlot ? {
504
+ ...slotted,
505
+ graphic: void 0
506
+ } : slotted;
505
507
  const planned = planUpdate(lastSignature ?? void 0, source);
506
508
  updateOptions = !planned.signature.hasAction && lastSignature === null ? {
507
509
  ...planned.plan,
@@ -546,7 +548,6 @@ var src_default = /* @__PURE__ */ defineComponent({
546
548
  return;
547
549
  }
548
550
  if (initDeferred) return;
549
- syncListeners();
550
551
  const option = reasons & 3 ? getAutoOption() ?? lastAutoOption : lastAutoOption;
551
552
  const needsTheme = !themeApplied && optionApplied;
552
553
  if (needsTheme && !applyTheme(instance)) return;
@@ -578,8 +579,10 @@ var src_default = /* @__PURE__ */ defineComponent({
578
579
  themeApplied = true;
579
580
  function commit() {
580
581
  const option = manualUpdate.value ? props.option : getAutoOption();
581
- if (option) if (manualUpdate.value) applyOption(instance, option, "manual", realUpdateOptions.value ?? void 0);
582
- else applyOption(instance, option);
582
+ if (option) {
583
+ if (manualUpdate.value) applyOption(instance, option, "manual", realUpdateOptions.value ?? void 0);
584
+ else applyOption(instance, option);
585
+ }
583
586
  setSlotsReady(isCurrent(instance));
584
587
  }
585
588
  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 (\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 // 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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"}