vue-echarts 8.2.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","names":["Teleport","ComponentModel","cssRules","useGraphic","ECharts","exported"],"sources":["../src/composables/api.ts","../src/utils.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/composables/slot.ts","../src/wc.ts","../src/graphic/runtime.ts","../src/core/events.ts","../src/update.ts","../src/style.css?raw","../src/style.ts","../src/ECharts.ts","../src/index.ts","../src/global.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 { warn as vueWarn } from \"vue\";\n\nexport type AttrMap = Record<string, unknown>;\nexport type EventHandler = (...args: unknown[]) => unknown;\n\nexport function hasEventHandler(value: unknown): boolean {\n return typeof value === \"function\" || (Array.isArray(value) && value.length > 0);\n}\n\nexport function createEventInvoker(value: unknown): EventHandler | undefined {\n if (typeof value === \"function\") {\n return value as EventHandler;\n }\n\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n return (...args: unknown[]): unknown => {\n let result: unknown;\n for (const handler of value.slice()) {\n result = handler(...args) || result;\n }\n return result;\n };\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n// Copied from\n// https://github.com/vuejs/vue-next/blob/5a7a1b8293822219283d6e267496bec02234b0bc/packages/shared/src/index.ts#L40-L41\nconst onRE = /^on[^a-z]/;\nexport const isOn = (key: string): boolean => onRE.test(key);\n\ntype ParsedOnEvent = {\n event: string;\n once: boolean;\n};\n\nexport function parseOnEvent(key: string): ParsedOnEvent | null {\n if (!isOn(key)) {\n return null;\n }\n\n let event = key.charAt(2).toLowerCase() + key.slice(3);\n const once = event.endsWith(\"Once\");\n if (once) {\n event = event.slice(0, -4);\n }\n\n return { event, once };\n}\n\nexport function isValidArrayIndex(key: string): boolean {\n const num = Number(key);\n return Number.isInteger(num) && num >= 0 && num < Math.pow(2, 32) - 1 && String(num) === key;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value == null || typeof value !== \"object\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\nexport function hasZeroDimension(width: number, height: number): boolean {\n return width === 0 || height === 0;\n}\n\nexport function isIgnorableWatchChange(value: unknown, previous: unknown): boolean {\n if (Object.is(value, previous)) {\n return value === null || typeof value !== \"object\";\n }\n\n if (!isPlainObject(value) || !isPlainObject(previous)) {\n return false;\n }\n\n const keys = Object.keys(value);\n return (\n keys.length === Object.keys(previous).length &&\n keys.every((key) => Object.hasOwn(previous, key) && Object.is(value[key], previous[key]))\n );\n}\n\nconst LOG_PREFIX = \"[vue-echarts]\";\n\nexport function warn(message: string): void {\n vueWarn(`${LOG_PREFIX} ${message}`);\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 let patchedSlotNames = slotNames;\n\n const hasNewSlots = () => collectSlotNames().some((name) => !slotNames.includes(name));\n\n function setReady(value: boolean): void {\n ready.value = value;\n if (value) {\n return;\n }\n patchedSlotNames = [];\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 }\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 patchOption(src: Option): Option {\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 === 0) {\n patchedSlotNames = [];\n return root ?? src;\n }\n root ??= { ...src };\n const patchedNames: SlotName[] = [];\n\n for (const key of names) {\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\n if (!writePath(root, getSlotPath(key), formatter)) {\n continue;\n }\n patchedNames.push(key);\n }\n\n patchedSlotNames = patchedNames;\n return root;\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 hasNewSlots,\n patchOption,\n setReady,\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 type { Ref, Slots, VNodeChild } from \"vue\";\n\nimport type { Option } from \"../types\";\n\nexport type GraphicContext = {\n slots: Slots;\n manualUpdate: Ref<boolean>;\n requestUpdate: () => void;\n};\n\ntype GraphicRuntime = {\n patchOption: (option: Option) => Option;\n render: () => VNodeChild;\n};\n\nlet runtimeFactory: ((context: GraphicContext) => GraphicRuntime) | null = null;\n\nexport function registerRuntime(factory: (context: GraphicContext) => GraphicRuntime): void {\n runtimeFactory = factory;\n}\n\nexport function useRuntime(context: GraphicContext): GraphicRuntime | null {\n return runtimeFactory ? runtimeFactory(context) : null;\n}\n","import { computed, onScopeDispose, watchSyncEffect } from \"vue\";\n\nimport type { ComputedRef, 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): () => 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 const stopWatch = watchSyncEffect(() => {\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 stop = () => {\n stopWatch();\n clearBindings();\n };\n onScopeDispose(stop);\n return stop;\n}\n\nexport function useRootAttrs(attrs: AttrMap): ComputedRef<AttrMap> {\n return computed(() => {\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}\n","import { ComponentModel } from \"echarts/core\";\n\nimport type { Option } from \"./types\";\nimport { isPlainObject } from \"./utils\";\n\ninterface ObjectShape {\n [key: string]: Shape | undefined;\n}\ntype Shape = true | ObjectShape | ItemShape[];\ntype ItemShape = {\n id: string | undefined;\n name: string | undefined;\n shape: Shape;\n};\ntype ShapeMode = \"option\" | \"media\" | \"graphic\";\ntype AnalysisContext = {\n hasAction: boolean;\n};\n\nfunction toIdentity(value: unknown): string | undefined {\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\n/** Minimal signature of an option used to decide setOption behavior. */\nexport interface Signature {\n /** Map of top-level arrays and singleton components to their summaries. */\n collections: Record<string, ItemShape[] | undefined>;\n /** Structural snapshots used to detect nested property removal without retaining option values. */\n objectShapes: Record<string, Shape | undefined>;\n /** Top-level keys whose values are not traversed. */\n leaves: string[];\n /** Whether the option delegates graphic element changes to `$action`. */\n hasAction: boolean;\n}\n\ninterface PlannedUpdate {\n signature: Signature;\n plan: {\n notMerge: boolean;\n replaceMerge?: string[];\n };\n}\n\nfunction buildShape(\n value: unknown,\n context: AnalysisContext,\n mode?: ShapeMode,\n): true | ObjectShape {\n if (!isPlainObject(value)) {\n return true;\n }\n\n const shape: ObjectShape = Object.create(null);\n for (const key of Object.keys(value)) {\n const child = value[key];\n if (child === undefined) {\n continue;\n }\n if (mode === \"graphic\" && key === \"$action\") {\n context.hasAction = true;\n }\n if (mode === \"graphic\" && (key === \"elements\" || key === \"children\") && Array.isArray(child)) {\n shape[key] = analyzeItems(child, context, \"graphic\", true);\n continue;\n }\n if (mode === \"option\") {\n const componentItems = ComponentModel.hasClass(key);\n if (Array.isArray(child) || (componentItems && isPlainObject(child))) {\n shape[key] = analyzeItems(\n Array.isArray(child) ? child : [child],\n context,\n key === \"graphic\" ? \"graphic\" : undefined,\n componentItems,\n );\n continue;\n }\n }\n shape[key] =\n mode === \"media\" && key === \"option\"\n ? buildShape(child, context, \"option\")\n : buildShape(child, context);\n }\n return shape;\n}\n\nfunction analyzeItems(\n items: unknown[],\n context: AnalysisContext,\n mode: ShapeMode | undefined,\n componentItems: boolean,\n): ItemShape[] {\n const shapes: ItemShape[] = [];\n\n for (const item of items) {\n const identity = componentItems ? (item as Record<string, unknown>) : undefined;\n shapes.push({\n id: toIdentity(identity?.id),\n name: toIdentity(identity?.name),\n shape: buildShape(item, context, mode),\n });\n }\n\n return shapes;\n}\n\n/**\n * Build a structural signature that retains component identities but not option payload values.\n * Data arrays inside component items remain leaves. Graphic element trees and nested option units\n * (`baseOption`, timeline options, and media options) reuse collection summaries.\n */\nfunction buildSignature(option: Option): Signature {\n const opt = option as Record<string, unknown>;\n\n const context: AnalysisContext = { hasAction: false };\n const collections: Record<string, ItemShape[] | undefined> = Object.create(null);\n const objectShapes: Record<string, Shape | undefined> = Object.create(null);\n const leaves: string[] = [];\n\n for (const key of Object.keys(opt)) {\n const value = opt[key];\n const componentItems = ComponentModel.hasClass(key);\n if (Array.isArray(value) || (componentItems && isPlainObject(value))) {\n const mode =\n key === \"options\"\n ? \"option\"\n : key === \"media\"\n ? \"media\"\n : key === \"graphic\"\n ? \"graphic\"\n : undefined;\n const shapes = analyzeItems(\n Array.isArray(value) ? value : [value],\n context,\n mode,\n componentItems,\n );\n collections[key] = shapes;\n continue;\n }\n\n if (isPlainObject(value)) {\n const mode = key === \"baseOption\" ? \"option\" : undefined;\n const shape = buildShape(value, context, mode);\n objectShapes[key] = shape;\n continue;\n }\n\n if (value !== undefined && !componentItems) {\n leaves.push(key);\n }\n }\n\n return {\n collections,\n objectShapes,\n leaves,\n hasAction: context.hasAction,\n };\n}\n\nfunction hasCollectionRemoval(prev: ItemShape[], next: ItemShape[] | undefined): boolean {\n if (!next) {\n return prev.length > 0;\n }\n return next.length < prev.length;\n}\n\nfunction getItemIdentity(item: ItemShape): string | undefined {\n return item.id !== undefined\n ? `id:${item.id}`\n : item.name !== undefined\n ? `name:${item.name}`\n : undefined;\n}\n\nfunction hasIdentityChange(prev: ItemShape[], next: ItemShape[]): boolean {\n const length = Math.min(prev.length, next.length);\n for (let index = 0; index < length; index++) {\n const previous = getItemIdentity(prev[index]);\n const current = getItemIdentity(next[index]);\n if (previous !== current && (previous !== undefined || current !== undefined)) {\n return true;\n }\n }\n return false;\n}\n\nfunction preservesReplacementOrder(prev: ItemShape[], next: ItemShape[]): boolean {\n const positions = new Map<string, number>();\n for (let index = 0; index < prev.length; index++) {\n const item = prev[index];\n if (item.id !== undefined) {\n positions.set(item.id, index);\n }\n }\n\n return next.every((item, index) => {\n const previousIndex = item.id === undefined ? undefined : positions.get(item.id);\n return previousIndex === undefined || previousIndex === index;\n });\n}\n\nfunction hasShapeRemoval(prev: Shape, next: Shape): boolean {\n if (prev === true || next === true) {\n return false;\n }\n\n const prevIsCollection = Array.isArray(prev);\n const nextIsCollection = Array.isArray(next);\n if (prevIsCollection || nextIsCollection) {\n return (\n !prevIsCollection ||\n !nextIsCollection ||\n hasCollectionRemoval(prev, next) ||\n hasIdentityChange(prev, next) ||\n findItemShapeRemoval(prev, next) !== undefined\n );\n }\n\n for (const key in prev) {\n const nextChild = next[key];\n if (nextChild === undefined || hasShapeRemoval(prev[key] as Shape, nextChild)) {\n return true;\n }\n }\n return false;\n}\n\nfunction findItemShapeRemoval(prev: ItemShape[], next: ItemShape[]): ItemShape | undefined {\n let anonymousRemoval: ItemShape | undefined;\n\n for (let index = 0; index < prev.length; index++) {\n const item = prev[index];\n let nextShape: Shape | undefined;\n if (item.id !== undefined) {\n nextShape = next.find((candidate) => candidate.id === item.id)?.shape;\n } else {\n nextShape = next[index]?.shape;\n }\n if (nextShape && hasShapeRemoval(item.shape, nextShape)) {\n if (item.id !== undefined) {\n return item;\n }\n anonymousRemoval ??= item;\n }\n }\n return anonymousRemoval;\n}\n\n/** Returns replacements, undefined for a plain merge, or null when a rebuild is required. */\nfunction collectReplacements(prev: Signature, next: Signature): string[] | null | undefined {\n let replaceMerge: string[] | undefined;\n\n // Global arrays may already contain theme/default entries, while aria is only\n // auto-enabled when it is present during initial model creation.\n if (next.objectShapes.aria && !prev.objectShapes.aria) {\n return null;\n }\n for (const key in next.collections) {\n if (\n !prev.collections[key] &&\n !prev.objectShapes[key] &&\n !prev.leaves.includes(key) &&\n !ComponentModel.hasClass(key)\n ) {\n return null;\n }\n }\n\n for (const key in prev.objectShapes) {\n const prevShape = prev.objectShapes[key];\n const nextShape = next.objectShapes[key];\n if (prevShape && nextShape) {\n if (hasShapeRemoval(prevShape, nextShape)) {\n return null;\n }\n continue;\n }\n\n if (!next.leaves.includes(key)) {\n return null;\n }\n }\n\n for (const key of prev.leaves) {\n if (\n !next.leaves.includes(key) &&\n next.collections[key] === undefined &&\n next.objectShapes[key] === undefined\n ) {\n return null;\n }\n }\n\n for (const key in prev.collections) {\n const prevCollection = prev.collections[key]!;\n // Replacing graphic would discard the existing elements targeted by `$action`.\n if (key === \"graphic\" && next.hasAction) {\n continue;\n }\n\n const nextCollection = next.collections[key];\n // Empty setting arrays can override defaults, so removing them is still meaningful.\n if (!nextCollection && !ComponentModel.hasClass(key)) {\n return null;\n }\n const collectionRemoval = hasCollectionRemoval(prevCollection, nextCollection);\n const identityChange =\n nextCollection && !collectionRemoval && hasIdentityChange(prevCollection, nextCollection);\n const shapeRemoval = nextCollection\n ? findItemShapeRemoval(prevCollection, nextCollection)\n : undefined;\n // replaceMerge recreates anonymous items, but explicit ids are merged into existing models.\n if (shapeRemoval?.id !== undefined) {\n return null;\n }\n\n if (!shapeRemoval && !collectionRemoval && !identityChange) {\n continue;\n }\n if (!ComponentModel.hasClass(key)) {\n return null;\n }\n if (nextCollection && !preservesReplacementOrder(prevCollection, nextCollection)) {\n return null;\n }\n (replaceMerge ??= []).push(key);\n }\n\n return replaceMerge;\n}\n\n/**\n * Produce an update plan that preserves option structure and initialization semantics.\n * Falls back to `notMerge: true` when the change looks complex.\n */\nexport function planUpdate(prev: Signature | undefined, option: Option): PlannedUpdate {\n const next = buildSignature(option);\n\n if (!prev) {\n return {\n signature: next,\n plan: { notMerge: false },\n };\n }\n\n const replaceMerge = collectReplacements(prev, next);\n if (replaceMerge === null) {\n return {\n signature: next,\n // Rebuilding would remove the existing graphic elements targeted by `$action`.\n plan: { notMerge: !next.hasAction },\n };\n }\n replaceMerge?.sort();\n\n return {\n signature: next,\n plan: replaceMerge ? { notMerge: false, replaceMerge } : { notMerge: false },\n };\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, useRootAttrs } 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\" | \"theme\";\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 themeRevision = shallowRef(0);\n const initOptionsRevision = shallowRef(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 rootAttrs = useRootAttrs(attrs);\n const terminallyDisposed = shallowRef(false);\n\n const {\n render: renderSlot,\n hasNewSlots,\n patchOption,\n setReady: setSlotsReady,\n } = useSlotOption(slots, requestUpdate);\n\n const { patchOption: patchGraphicOption, render: renderGraphic } =\n useGraphic({\n slots,\n manualUpdate,\n // Graphic is always replaced, so slot-only changes do not alter the source signature.\n requestUpdate: () => requestUpdate(\"graphic\"),\n }) ?? {};\n\n // `null` means the last option skipped analysis, so the next smart update must rebuild.\n let lastSignature: Signature | null | undefined;\n let lastAutoOption: Option | undefined;\n let themeApplied = false;\n let initOptionsInvalidated = false;\n let optionApplied = false;\n let manualUpdateAtInit = manualUpdate.value;\n let initDeferred = false;\n let graphicSlotApplied = false;\n const updateFlush = patchGraphicOption ? \"post\" : \"pre\";\n\n function getAutoOption(): Option | undefined {\n // A graphic slot is a complete option source even without an `option` prop.\n return (\n props.option ??\n (patchGraphicOption && (slots.graphic || graphicSlotApplied) ? {} : undefined)\n );\n }\n\n function isCurrent(instance: EChartsType | undefined): instance is EChartsType {\n return instance !== undefined && chart.value === instance && !terminallyDisposed.value;\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 themeApplied = true;\n instance.setTheme(realTheme.value || {});\n return isCurrent(instance);\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 slotted = patchOption(option);\n const patched = patchGraphicOption ? patchGraphicOption(slotted) : slotted;\n const forceGraphic = mode === \"graphic\";\n const skipPlanning = manual || forceGraphic;\n let updateOptions: UpdateOptions | undefined;\n let nextSignature: Signature | null | undefined;\n\n if (skipPlanning) {\n updateOptions = forceGraphic ? (realUpdateOptions.value ?? undefined) : manualOptions;\n } else if (realUpdateOptions.value) {\n updateOptions = realUpdateOptions.value;\n nextSignature = null;\n } else {\n const planned = planUpdate(lastSignature ?? undefined, slotted);\n // Theme changes restore the first option; actions still need that existing element tree.\n const rebuild =\n !planned.signature.hasAction && (lastSignature === null || mode === \"theme\");\n updateOptions = rebuild ? { ...planned.plan, notMerge: true } : planned.plan;\n nextSignature = planned.signature;\n }\n\n const hasGraphicSlot = Boolean(patchGraphicOption && slots.graphic);\n const replaceGraphic = forceGraphic || graphicSlotApplied || hasGraphicSlot;\n if (replaceGraphic && !updateOptions?.notMerge) {\n const replaceMerge = updateOptions?.replaceMerge;\n const replacements = typeof replaceMerge === \"string\" ? [replaceMerge] : replaceMerge;\n if (!replacements?.includes(\"graphic\")) {\n updateOptions = {\n ...updateOptions,\n replaceMerge: replacements ? [...replacements, \"graphic\"] : [\"graphic\"],\n };\n }\n }\n graphicSlotApplied = hasGraphicSlot;\n optionApplied = true;\n if (!skipPlanning) {\n lastSignature = nextSignature;\n }\n if (!manual) {\n lastAutoOption = option;\n }\n instance.setOption(patched, updateOptions);\n if (!isCurrent(instance) || mode === \"theme\") {\n return;\n }\n if (applyTheme(instance) && !manual) {\n applyOption(instance, option, \"theme\");\n }\n }\n\n function requestUpdate(mode?: \"graphic\"): void {\n const instance = chart.value;\n if (!isCurrent(instance) || manualUpdate.value || initDeferred) {\n return;\n }\n\n const option = getAutoOption() ?? lastAutoOption;\n if (!option) {\n return;\n }\n applyOption(instance, option, mode);\n }\n\n if (slots.graphic && !patchGraphicOption) {\n warn(\n \"Detected `#graphic` slot but no extension is registered. Import from `vue-echarts/graphic` to enable it.\",\n );\n }\n\n const stopListeners = useReactiveChartListeners(chart, attrs);\n\n function cleanup(): void {\n const instance = chart.value;\n chart.value = undefined;\n setSlotsReady(false);\n lastSignature = undefined;\n lastAutoOption = undefined;\n initDeferred = false;\n graphicSlotApplied = false;\n instance?.dispose();\n }\n\n function init(): void {\n initOptionsInvalidated = false;\n manualUpdateAtInit = manualUpdate.value;\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 themeRevision.value++;\n themeApplied = false;\n },\n { deep: true, flush: \"sync\" },\n );\n\n const stopInitOptionsWatch = watch(\n realInitOptions,\n (options, previousOptions) => {\n if (!isIgnorableWatchChange(options, previousOptions)) {\n initOptionsInvalidated = true;\n initOptionsRevision.value++;\n }\n },\n { deep: true, flush: \"sync\" },\n );\n\n const stopOptionWatch = watch(\n () => (manualUpdate.value ? SKIP_AUTO_UPDATE : props.option),\n (option, previousOption) => {\n // Mode changes reinitialize the chart, so the watcher must not update the outgoing instance.\n if (option === SKIP_AUTO_UPDATE || previousOption === SKIP_AUTO_UPDATE) {\n return;\n }\n\n const nextOption = option ?? getAutoOption();\n if (!nextOption) {\n return;\n }\n\n const instance = chart.value;\n if (initOptionsInvalidated || !isCurrent(instance) || initDeferred) {\n return;\n }\n // Let the updated hook apply once the new callback containers exist.\n if (hasNewSlots()) {\n return;\n }\n applyOption(instance, nextOption);\n },\n // Graphic nodes register during render, so update after the collected tree is current.\n { deep: true, flush: updateFlush },\n );\n\n const stopReinitWatch = watch([manualUpdate, initOptionsRevision], () => {\n if (!chart.value) {\n return;\n }\n cleanup();\n init();\n });\n\n const stopThemeApplyWatch = watch(\n themeRevision,\n () => {\n const instance = chart.value;\n if (\n !initOptionsInvalidated &&\n manualUpdate.value === manualUpdateAtInit &&\n isCurrent(instance) &&\n !themeApplied\n ) {\n if (!applyTheme(instance)) {\n return;\n }\n\n // `clear()` deliberately drops the applied option until its source changes again.\n const option = lastAutoOption;\n if (option && !manualUpdate.value && !initDeferred && !hasNewSlots()) {\n applyOption(instance, option, \"theme\");\n }\n }\n },\n {\n flush: updateFlush,\n },\n );\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 stopReinitWatch();\n stopThemeApplyWatch();\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 lastSignature = undefined;\n lastAutoOption = undefined;\n instance.clear();\n };\n\n onMounted(() => {\n if (!terminallyDisposed.value) {\n init();\n }\n });\n\n onBeforeUnmount(() => {\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 if (renderGraphic) {\n const graphic = renderGraphic();\n if (graphic) {\n children.push(graphic);\n }\n }\n }\n\n const forwardedAttrs = rootAttrs.value;\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","import \"echarts\";\nimport ECharts, * as exported from \"./index\";\n\nexport default Object.assign(ECharts, exported);\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","names":["Teleport","ComponentModel","cssRules","useGraphic","ECharts","exported"],"sources":["../src/composables/api.ts","../src/utils.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/composables/slot.ts","../src/wc.ts","../src/graphic/runtime.ts","../src/core/events.ts","../src/update.ts","../src/style.css?raw","../src/style.ts","../src/ECharts.ts","../src/index.ts","../src/global.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 { warn as vueWarn } from \"vue\";\n\nexport type AttrMap = Record<string, unknown>;\nexport type EventHandler = (...args: unknown[]) => unknown;\n\nexport function hasEventHandler(value: unknown): boolean {\n return typeof value === \"function\" || (Array.isArray(value) && value.length > 0);\n}\n\nexport function createEventInvoker(value: unknown): EventHandler | undefined {\n if (typeof value === \"function\") {\n return value as EventHandler;\n }\n\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n return (...args: unknown[]): unknown => {\n let result: unknown;\n for (const handler of value.slice()) {\n result = handler(...args) || result;\n }\n return result;\n };\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n// Copied from\n// https://github.com/vuejs/vue-next/blob/5a7a1b8293822219283d6e267496bec02234b0bc/packages/shared/src/index.ts#L40-L41\nconst onRE = /^on[^a-z]/;\nexport const isOn = (key: string): boolean => onRE.test(key);\n\ntype ParsedOnEvent = {\n event: string;\n once: boolean;\n};\n\nexport function parseOnEvent(key: string): ParsedOnEvent | null {\n if (!isOn(key)) {\n return null;\n }\n\n let event = key.charAt(2).toLowerCase() + key.slice(3);\n const once = event.endsWith(\"Once\");\n if (once) {\n event = event.slice(0, -4);\n }\n\n return { event, once };\n}\n\nexport function isValidArrayIndex(key: string): boolean {\n const num = Number(key);\n return Number.isInteger(num) && num >= 0 && num < Math.pow(2, 32) - 1 && String(num) === key;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value == null || typeof value !== \"object\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\nexport function hasZeroDimension(width: number, height: number): boolean {\n return width === 0 || height === 0;\n}\n\nexport function isIgnorableWatchChange(value: unknown, previous: unknown): boolean {\n if (Object.is(value, previous)) {\n return value === null || typeof value !== \"object\";\n }\n\n if (!isPlainObject(value) || !isPlainObject(previous)) {\n return false;\n }\n\n const keys = Object.keys(value);\n return (\n keys.length === Object.keys(previous).length &&\n keys.every((key) => Object.hasOwn(previous, key) && Object.is(value[key], previous[key]))\n );\n}\n\nconst LOG_PREFIX = \"[vue-echarts]\";\n\nexport function warn(message: string): void {\n vueWarn(`${LOG_PREFIX} ${message}`);\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 type { Ref, Slots, VNodeChild } from \"vue\";\n\nimport type { Option } from \"../types\";\n\nexport type GraphicContext = {\n slots: Slots;\n manualUpdate: Ref<boolean>;\n requestUpdate: () => void;\n};\n\ntype GraphicRuntime = {\n cancelPendingFlush: () => void;\n prepare: (\n option: Option,\n reset: boolean,\n ) => { option: Option; replace: boolean; commit: () => void };\n render: () => VNodeChild;\n};\n\nlet runtimeFactory: ((context: GraphicContext) => GraphicRuntime) | null = null;\n\nexport function registerRuntime(factory: (context: GraphicContext) => GraphicRuntime): void {\n runtimeFactory = factory;\n}\n\nexport function useRuntime(context: GraphicContext): GraphicRuntime | null {\n return runtimeFactory ? runtimeFactory(context) : null;\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","import { ComponentModel } from \"echarts/core\";\n\nimport type { Option } from \"./types\";\nimport { isPlainObject } from \"./utils\";\n\ninterface ObjectShape {\n [key: string]: Shape | undefined;\n}\ntype Shape = true | ObjectShape | ItemShape[];\ntype ItemShape = {\n id: string | undefined;\n name: string | undefined;\n /** Graphic elements cannot merge a change of type. */\n type?: string;\n shape: Shape;\n};\ntype ShapeMode = \"option\" | \"media\" | \"graphic\";\ntype AnalysisContext = {\n hasAction: boolean;\n};\n\nfunction toIdentity(value: unknown): string | undefined {\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\n/** Minimal signature of an option used to decide setOption behavior. */\nexport interface Signature {\n /** Map of top-level arrays and singleton components to their summaries. */\n collections: Record<string, ItemShape[] | undefined>;\n /** Structural snapshots used to detect nested property removal without retaining option values. */\n objectShapes: Record<string, Shape | undefined>;\n /** Top-level keys whose values are not traversed. */\n leaves: string[];\n /** Whether the option delegates graphic element changes to `$action`. */\n hasAction: boolean;\n}\n\ninterface PlannedUpdate {\n signature: Signature;\n plan: {\n notMerge: boolean;\n replaceMerge?: string[];\n };\n}\n\nenum UpdateKind {\n Merge,\n Replace,\n Reset,\n}\n\nfunction buildShape(\n value: unknown,\n context: AnalysisContext,\n mode?: ShapeMode,\n): true | ObjectShape {\n if (!isPlainObject(value)) {\n return true;\n }\n\n const shape: ObjectShape = Object.create(null);\n for (const key of Object.keys(value)) {\n const child = value[key];\n if (child === undefined) {\n continue;\n }\n if (mode === \"graphic\" && key === \"$action\") {\n context.hasAction = true;\n }\n if (mode === \"graphic\" && (key === \"elements\" || key === \"children\") && Array.isArray(child)) {\n shape[key] = analyzeItems(child, context, \"graphic\", true);\n continue;\n }\n if (mode === \"option\") {\n const componentItems = ComponentModel.hasClass(key);\n if (Array.isArray(child) || (componentItems && isPlainObject(child))) {\n shape[key] = analyzeItems(\n Array.isArray(child) ? child : [child],\n context,\n key === \"graphic\" ? \"graphic\" : undefined,\n componentItems,\n );\n continue;\n }\n }\n shape[key] =\n mode === \"media\" && key === \"option\"\n ? buildShape(child, context, \"option\")\n : buildShape(child, context);\n }\n return shape;\n}\n\nfunction analyzeItems(\n items: unknown[],\n context: AnalysisContext,\n mode: ShapeMode | undefined,\n componentItems: boolean,\n): ItemShape[] {\n const shapes: ItemShape[] = [];\n\n for (const item of items) {\n const identity = componentItems ? (item as Record<string, unknown>) : undefined;\n shapes.push({\n id: toIdentity(identity?.id),\n name: toIdentity(identity?.name),\n ...(mode === \"graphic\" ? { type: toIdentity(identity?.type) } : {}),\n shape: buildShape(item, context, mode),\n });\n }\n\n return shapes;\n}\n\n/**\n * Build a structural signature that retains component identities but not option payload values.\n * Data arrays inside component items remain leaves. Graphic element trees and nested option units\n * (`baseOption`, timeline options, and media options) reuse collection summaries.\n */\nfunction buildSignature(option: Option): Signature {\n const opt = option as Record<string, unknown>;\n\n const context: AnalysisContext = { hasAction: false };\n const collections: Record<string, ItemShape[] | undefined> = Object.create(null);\n const objectShapes: Record<string, Shape | undefined> = Object.create(null);\n const leaves: string[] = [];\n\n for (const key of Object.keys(opt)) {\n const value = opt[key];\n const componentItems = ComponentModel.hasClass(key);\n if (Array.isArray(value) || (componentItems && isPlainObject(value))) {\n const mode =\n key === \"options\"\n ? \"option\"\n : key === \"media\"\n ? \"media\"\n : key === \"graphic\"\n ? \"graphic\"\n : undefined;\n const shapes = analyzeItems(\n Array.isArray(value) ? value : [value],\n context,\n mode,\n componentItems,\n );\n collections[key] = shapes;\n continue;\n }\n\n if (isPlainObject(value)) {\n const mode = key === \"baseOption\" ? \"option\" : undefined;\n const shape = buildShape(value, context, mode);\n objectShapes[key] = shape;\n continue;\n }\n\n if (value !== undefined && !componentItems) {\n leaves.push(key);\n }\n }\n\n return {\n collections,\n objectShapes,\n leaves,\n hasAction: context.hasAction,\n };\n}\n\nfunction hasCollectionRemoval(prev: ItemShape[], next: ItemShape[] | undefined): boolean {\n if (!next) {\n return prev.length > 0;\n }\n return next.length < prev.length;\n}\n\nfunction getItemIdentity(item: ItemShape): string | undefined {\n return item.id !== undefined\n ? `id:${item.id}`\n : item.name !== undefined\n ? `name:${item.name}`\n : undefined;\n}\n\nfunction hasIdentityChange(prev: ItemShape[], next: ItemShape[]): boolean {\n const length = Math.min(prev.length, next.length);\n for (let index = 0; index < length; index++) {\n const previous = getItemIdentity(prev[index]);\n const current = getItemIdentity(next[index]);\n if (previous !== current && (previous !== undefined || current !== undefined)) {\n return true;\n }\n }\n return false;\n}\n\nfunction preservesReplacementOrder(prev: ItemShape[], next: ItemShape[]): boolean {\n const positions = new Map<string, number>();\n for (let index = 0; index < prev.length; index++) {\n const item = prev[index];\n if (item.id !== undefined) {\n positions.set(item.id, index);\n }\n }\n\n return next.every((item, index) => {\n const previousIndex = item.id === undefined ? undefined : positions.get(item.id);\n return previousIndex === undefined || previousIndex === index;\n });\n}\n\nfunction hasShapeRemoval(prev: Shape, next: Shape): boolean {\n if (prev === true || next === true) {\n return false;\n }\n\n const prevIsCollection = Array.isArray(prev);\n const nextIsCollection = Array.isArray(next);\n if (prevIsCollection || nextIsCollection) {\n return (\n !prevIsCollection ||\n !nextIsCollection ||\n hasCollectionRemoval(prev, next) ||\n hasIdentityChange(prev, next) ||\n compareItemShapes(prev, next) !== UpdateKind.Merge\n );\n }\n\n for (const key in prev) {\n const nextChild = next[key];\n if (nextChild === undefined || hasShapeRemoval(prev[key] as Shape, nextChild)) {\n return true;\n }\n }\n return false;\n}\n\nfunction compareItemShapes(prev: ItemShape[], next: ItemShape[]): UpdateKind {\n const byId = new Map<string, ItemShape>();\n for (const item of next) {\n if (item.id !== undefined && !byId.has(item.id)) {\n byId.set(item.id, item);\n }\n }\n let kind = UpdateKind.Merge;\n\n for (let index = 0; index < prev.length; index++) {\n const item = prev[index];\n const candidate = item.id !== undefined ? byId.get(item.id) : next[index];\n if (\n candidate &&\n (item.type !== candidate.type || hasShapeRemoval(item.shape, candidate.shape))\n ) {\n // replaceMerge recreates anonymous items, but merges items with explicit IDs.\n if (item.id !== undefined) {\n return UpdateKind.Reset;\n }\n kind = UpdateKind.Replace;\n }\n }\n return kind;\n}\n\nfunction needsGlobalReset(prev: Signature, next: Signature): boolean {\n // Global arrays may already contain theme/default entries, while aria is only\n // auto-enabled when it is present during initial model creation.\n if (next.objectShapes.aria && !prev.objectShapes.aria) {\n return true;\n }\n for (const key in next.collections) {\n if (\n !prev.collections[key] &&\n !prev.objectShapes[key] &&\n !prev.leaves.includes(key) &&\n !ComponentModel.hasClass(key)\n ) {\n return true;\n }\n }\n\n for (const key in prev.objectShapes) {\n const prevShape = prev.objectShapes[key];\n const nextShape = next.objectShapes[key];\n if (prevShape && nextShape) {\n if (hasShapeRemoval(prevShape, nextShape)) {\n return true;\n }\n continue;\n }\n\n if (!next.leaves.includes(key)) {\n return true;\n }\n }\n\n for (const key of prev.leaves) {\n if (\n !next.leaves.includes(key) &&\n next.collections[key] === undefined &&\n next.objectShapes[key] === undefined\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction compareCollection(prev: ItemShape[], next: ItemShape[] | undefined): UpdateKind {\n const kind = next ? compareItemShapes(prev, next) : UpdateKind.Merge;\n if (kind === UpdateKind.Reset) {\n return kind;\n }\n if (\n kind === UpdateKind.Merge &&\n !hasCollectionRemoval(prev, next) &&\n !(next && hasIdentityChange(prev, next))\n ) {\n return UpdateKind.Merge;\n }\n return next && !preservesReplacementOrder(prev, next) ? UpdateKind.Reset : UpdateKind.Replace;\n}\n\n/**\n * Produce an update plan that preserves option structure and initialization semantics.\n * Falls back to `notMerge: true` when the change looks complex.\n */\nexport function planUpdate(prev: Signature | undefined, option: Option): PlannedUpdate {\n const next = buildSignature(option);\n\n if (!prev) {\n return {\n signature: next,\n plan: { notMerge: false },\n };\n }\n\n let reset = needsGlobalReset(prev, next);\n const replaceMerge: string[] = [];\n for (const key in prev.collections) {\n const collection = next.collections[key];\n const kind = compareCollection(prev.collections[key]!, collection);\n if (!ComponentModel.hasClass(key)) {\n // Removing even an empty setting array can expose theme/default entries.\n reset ||= !collection || kind !== UpdateKind.Merge;\n } else if (kind === UpdateKind.Reset) {\n reset = true;\n } else if (kind === UpdateKind.Replace) {\n replaceMerge.push(key);\n }\n }\n\n // Command compatibility is separate from snapshot analysis: keep the target tree\n // and all safe unrelated replacements even when a complete reset is unavailable.\n const replacements = next.hasAction\n ? replaceMerge.filter((key) => key !== \"graphic\")\n : replaceMerge;\n const notMerge = reset && !next.hasAction;\n\n return {\n signature: next,\n plan:\n !notMerge && replacements.length\n ? { notMerge, replaceMerge: replacements.sort() }\n : { notMerge },\n };\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","import \"echarts\";\nimport ECharts, * as exported from \"./index\";\n\nexport default Object.assign(ECharts, exported);\n"],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ import { warn } from "vue";
2
+ import { ComponentModel } from "echarts/core";
3
+ //#region src/utils.ts
4
+ function hasEventHandler(value) {
5
+ return typeof value === "function" || Array.isArray(value) && value.length > 0;
6
+ }
7
+ function createEventInvoker(value) {
8
+ if (typeof value === "function") return value;
9
+ if (!Array.isArray(value) || value.length === 0) return;
10
+ return (...args) => {
11
+ let result;
12
+ for (const handler of value.slice()) result = handler(...args) || result;
13
+ return result;
14
+ };
15
+ }
16
+ function isBrowser() {
17
+ return typeof window !== "undefined" && typeof document !== "undefined";
18
+ }
19
+ const onRE = /^on[^a-z]/;
20
+ const isOn = (key) => onRE.test(key);
21
+ function parseOnEvent(key) {
22
+ if (!isOn(key)) return null;
23
+ let event = key.charAt(2).toLowerCase() + key.slice(3);
24
+ const once = event.endsWith("Once");
25
+ if (once) event = event.slice(0, -4);
26
+ return {
27
+ event,
28
+ once
29
+ };
30
+ }
31
+ function isValidArrayIndex(key) {
32
+ const num = Number(key);
33
+ return Number.isInteger(num) && num >= 0 && num < Math.pow(2, 32) - 1 && String(num) === key;
34
+ }
35
+ function isPlainObject(value) {
36
+ if (value == null || typeof value !== "object") return false;
37
+ const prototype = Object.getPrototypeOf(value);
38
+ return prototype === null || prototype === Object.prototype;
39
+ }
40
+ function hasZeroDimension(width, height) {
41
+ return width === 0 || height === 0;
42
+ }
43
+ function isIgnorableWatchChange(value, previous) {
44
+ if (Object.is(value, previous)) return value === null || typeof value !== "object";
45
+ if (!isPlainObject(value) || !isPlainObject(previous)) return false;
46
+ const keys = Object.keys(value);
47
+ return keys.length === Object.keys(previous).length && keys.every((key) => Object.hasOwn(previous, key) && Object.is(value[key], previous[key]));
48
+ }
49
+ const LOG_PREFIX = "[vue-echarts]";
50
+ function warn$1(message) {
51
+ warn(`${LOG_PREFIX} ${message}`);
52
+ }
53
+ //#endregion
54
+ //#region src/graphic/runtime.ts
55
+ let runtimeFactory = null;
56
+ function registerRuntime(factory) {
57
+ runtimeFactory = factory;
58
+ }
59
+ function useRuntime(context) {
60
+ return runtimeFactory ? runtimeFactory(context) : null;
61
+ }
62
+ //#endregion
63
+ //#region src/update.ts
64
+ function toIdentity(value) {
65
+ return typeof value === "string" || typeof value === "number" ? String(value) : void 0;
66
+ }
67
+ function buildShape(value, context, mode) {
68
+ if (!isPlainObject(value)) return true;
69
+ const shape = Object.create(null);
70
+ for (const key of Object.keys(value)) {
71
+ const child = value[key];
72
+ if (child === void 0) continue;
73
+ if (mode === "graphic" && key === "$action") context.hasAction = true;
74
+ if (mode === "graphic" && (key === "elements" || key === "children") && Array.isArray(child)) {
75
+ shape[key] = analyzeItems(child, context, "graphic", true);
76
+ continue;
77
+ }
78
+ if (mode === "option") {
79
+ const componentItems = ComponentModel.hasClass(key);
80
+ if (Array.isArray(child) || componentItems && isPlainObject(child)) {
81
+ shape[key] = analyzeItems(Array.isArray(child) ? child : [child], context, key === "graphic" ? "graphic" : void 0, componentItems);
82
+ continue;
83
+ }
84
+ }
85
+ shape[key] = mode === "media" && key === "option" ? buildShape(child, context, "option") : buildShape(child, context);
86
+ }
87
+ return shape;
88
+ }
89
+ function analyzeItems(items, context, mode, componentItems) {
90
+ const shapes = [];
91
+ for (const item of items) {
92
+ const identity = componentItems ? item : void 0;
93
+ shapes.push({
94
+ id: toIdentity(identity?.id),
95
+ name: toIdentity(identity?.name),
96
+ ...mode === "graphic" ? { type: toIdentity(identity?.type) } : {},
97
+ shape: buildShape(item, context, mode)
98
+ });
99
+ }
100
+ return shapes;
101
+ }
102
+ /**
103
+ * Build a structural signature that retains component identities but not option payload values.
104
+ * Data arrays inside component items remain leaves. Graphic element trees and nested option units
105
+ * (`baseOption`, timeline options, and media options) reuse collection summaries.
106
+ */
107
+ function buildSignature(option) {
108
+ const opt = option;
109
+ const context = { hasAction: false };
110
+ const collections = Object.create(null);
111
+ const objectShapes = Object.create(null);
112
+ const leaves = [];
113
+ for (const key of Object.keys(opt)) {
114
+ const value = opt[key];
115
+ const componentItems = ComponentModel.hasClass(key);
116
+ if (Array.isArray(value) || componentItems && isPlainObject(value)) {
117
+ const mode = key === "options" ? "option" : key === "media" ? "media" : key === "graphic" ? "graphic" : void 0;
118
+ collections[key] = analyzeItems(Array.isArray(value) ? value : [value], context, mode, componentItems);
119
+ continue;
120
+ }
121
+ if (isPlainObject(value)) {
122
+ objectShapes[key] = buildShape(value, context, key === "baseOption" ? "option" : void 0);
123
+ continue;
124
+ }
125
+ if (value !== void 0 && !componentItems) leaves.push(key);
126
+ }
127
+ return {
128
+ collections,
129
+ objectShapes,
130
+ leaves,
131
+ hasAction: context.hasAction
132
+ };
133
+ }
134
+ function hasCollectionRemoval(prev, next) {
135
+ if (!next) return prev.length > 0;
136
+ return next.length < prev.length;
137
+ }
138
+ function getItemIdentity(item) {
139
+ return item.id !== void 0 ? `id:${item.id}` : item.name !== void 0 ? `name:${item.name}` : void 0;
140
+ }
141
+ function hasIdentityChange(prev, next) {
142
+ const length = Math.min(prev.length, next.length);
143
+ for (let index = 0; index < length; index++) {
144
+ const previous = getItemIdentity(prev[index]);
145
+ const current = getItemIdentity(next[index]);
146
+ if (previous !== current && (previous !== void 0 || current !== void 0)) return true;
147
+ }
148
+ return false;
149
+ }
150
+ function preservesReplacementOrder(prev, next) {
151
+ const positions = /* @__PURE__ */ new Map();
152
+ for (let index = 0; index < prev.length; index++) {
153
+ const item = prev[index];
154
+ if (item.id !== void 0) positions.set(item.id, index);
155
+ }
156
+ return next.every((item, index) => {
157
+ const previousIndex = item.id === void 0 ? void 0 : positions.get(item.id);
158
+ return previousIndex === void 0 || previousIndex === index;
159
+ });
160
+ }
161
+ function hasShapeRemoval(prev, next) {
162
+ if (prev === true || next === true) return false;
163
+ const prevIsCollection = Array.isArray(prev);
164
+ const nextIsCollection = Array.isArray(next);
165
+ if (prevIsCollection || nextIsCollection) return !prevIsCollection || !nextIsCollection || hasCollectionRemoval(prev, next) || hasIdentityChange(prev, next) || compareItemShapes(prev, next) !== 0;
166
+ for (const key in prev) {
167
+ const nextChild = next[key];
168
+ if (nextChild === void 0 || hasShapeRemoval(prev[key], nextChild)) return true;
169
+ }
170
+ return false;
171
+ }
172
+ function compareItemShapes(prev, next) {
173
+ const byId = /* @__PURE__ */ new Map();
174
+ for (const item of next) if (item.id !== void 0 && !byId.has(item.id)) byId.set(item.id, item);
175
+ let kind = 0;
176
+ for (let index = 0; index < prev.length; index++) {
177
+ const item = prev[index];
178
+ const candidate = item.id !== void 0 ? byId.get(item.id) : next[index];
179
+ if (candidate && (item.type !== candidate.type || hasShapeRemoval(item.shape, candidate.shape))) {
180
+ if (item.id !== void 0) return 2;
181
+ kind = 1;
182
+ }
183
+ }
184
+ return kind;
185
+ }
186
+ function needsGlobalReset(prev, next) {
187
+ if (next.objectShapes.aria && !prev.objectShapes.aria) return true;
188
+ for (const key in next.collections) if (!prev.collections[key] && !prev.objectShapes[key] && !prev.leaves.includes(key) && !ComponentModel.hasClass(key)) return true;
189
+ for (const key in prev.objectShapes) {
190
+ const prevShape = prev.objectShapes[key];
191
+ const nextShape = next.objectShapes[key];
192
+ if (prevShape && nextShape) {
193
+ if (hasShapeRemoval(prevShape, nextShape)) return true;
194
+ continue;
195
+ }
196
+ if (!next.leaves.includes(key)) return true;
197
+ }
198
+ for (const key of prev.leaves) if (!next.leaves.includes(key) && next.collections[key] === void 0 && next.objectShapes[key] === void 0) return true;
199
+ return false;
200
+ }
201
+ function compareCollection(prev, next) {
202
+ const kind = next ? compareItemShapes(prev, next) : 0;
203
+ if (kind === 2) return kind;
204
+ if (kind === 0 && !hasCollectionRemoval(prev, next) && !(next && hasIdentityChange(prev, next))) return 0;
205
+ return next && !preservesReplacementOrder(prev, next) ? 2 : 1;
206
+ }
207
+ /**
208
+ * Produce an update plan that preserves option structure and initialization semantics.
209
+ * Falls back to `notMerge: true` when the change looks complex.
210
+ */
211
+ function planUpdate(prev, option) {
212
+ const next = buildSignature(option);
213
+ if (!prev) return {
214
+ signature: next,
215
+ plan: { notMerge: false }
216
+ };
217
+ let reset = needsGlobalReset(prev, next);
218
+ const replaceMerge = [];
219
+ for (const key in prev.collections) {
220
+ const collection = next.collections[key];
221
+ const kind = compareCollection(prev.collections[key], collection);
222
+ if (!ComponentModel.hasClass(key)) reset ||= !collection || kind !== 0;
223
+ else if (kind === 2) reset = true;
224
+ else if (kind === 1) replaceMerge.push(key);
225
+ }
226
+ const replacements = next.hasAction ? replaceMerge.filter((key) => key !== "graphic") : replaceMerge;
227
+ const notMerge = reset && !next.hasAction;
228
+ return {
229
+ signature: next,
230
+ plan: !notMerge && replacements.length ? {
231
+ notMerge,
232
+ replaceMerge: replacements.sort()
233
+ } : { notMerge }
234
+ };
235
+ }
236
+ //#endregion
237
+ export { hasEventHandler as a, isIgnorableWatchChange as c, isValidArrayIndex as d, parseOnEvent as f, createEventInvoker as i, isOn as l, registerRuntime as n, hasZeroDimension as o, warn$1 as p, useRuntime as r, isBrowser as s, planUpdate as t, isPlainObject as u };
238
+
239
+ //# sourceMappingURL=update-CWPvYl2M.js.map