@macroui/echarts-vue 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +550 -0
- package/README.zh-Hans.md +518 -0
- package/dist/graphic.d.ts +2786 -0
- package/dist/graphic.js +673 -0
- package/dist/graphic.js.map +1 -0
- package/dist/index-CJnrqQei.d.ts +219 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +741 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +5 -0
- package/dist/index.min.js.map +1 -0
- package/dist/runtime-CcSlBnVC.js +55 -0
- package/dist/runtime-CcSlBnVC.js.map +1 -0
- package/dist/style.css +3 -0
- package/package.json +92 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["cssRules","useGraphic","init","initChart","ECharts"],"sources":["../src/composables/api.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/composables/slot.ts","../src/wc.ts","../src/core/events.ts","../src/update.ts","../src/style.css?raw","../src/style.ts","../src/ECharts.ts","../src/index.ts"],"sourcesContent":["import type { Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\n\nconst METHOD_NAMES = [\n \"getWidth\",\n \"getHeight\",\n \"getDom\",\n \"getOption\",\n \"resize\",\n \"dispatchAction\",\n \"convertToPixel\",\n \"convertFromPixel\",\n \"containPixel\",\n \"getDataURL\",\n \"getConnectedDataURL\",\n \"appendData\",\n \"clear\",\n \"isDisposed\",\n \"dispose\",\n] as const;\n\ntype MethodName = (typeof METHOD_NAMES)[number];\n\nexport type PublicMethods = Pick<EChartsType, MethodName>;\n\nexport function usePublicAPI(chart: Ref<EChartsType | undefined>): PublicMethods {\n function makePublicMethod<T extends MethodName>(name: T): EChartsType[T] {\n // Return a function that matches the signature of EChartsType[T]\n const fn = function (this: unknown, ...args: unknown[]): unknown {\n if (!chart.value) {\n throw new Error(\"ECharts is not initialized yet.\");\n }\n // Use Reflect.apply to call the method with proper context\n return Reflect.apply(chart.value[name], chart.value, args);\n };\n return fn as EChartsType[T];\n }\n\n // Build the methods object with proper typing\n const methods = METHOD_NAMES.reduce(\n (acc, name) => {\n acc[name] = makePublicMethod(name);\n return acc;\n },\n {} as Record<MethodName, unknown>,\n ) as PublicMethods;\n\n return methods;\n}\n","import { watch } from \"vue\";\nimport { throttle } from \"echarts/core\";\n\nimport type { Ref, PropType } from \"vue\";\nimport type { EChartsType, AutoResize } from \"../types\";\n\nexport function useAutoresize(\n chart: Ref<EChartsType | undefined>,\n autoresize: Ref<AutoResize | undefined>,\n root: Ref<HTMLElement | undefined>,\n): void {\n watch([root, chart, autoresize], ([root, chart, autoresize], _, onCleanup) => {\n let ro: ResizeObserver | null = null;\n\n if (root && chart && autoresize) {\n const { offsetWidth, offsetHeight } = root;\n const autoresizeOptions = autoresize === true ? {} : autoresize;\n const { throttle: wait = 100, onResize } = autoresizeOptions;\n\n let initialResizeTriggered = false;\n\n const callback = () => {\n chart.resize();\n onResize?.();\n };\n\n const resizeCallback = wait ? throttle(callback, wait) : callback;\n\n ro = new ResizeObserver(() => {\n // We just skip ResizeObserver's initial resize callback if the\n // size has not changed since the chart is rendered.\n if (!initialResizeTriggered) {\n initialResizeTriggered = true;\n if (root.offsetWidth === offsetWidth && root.offsetHeight === offsetHeight) {\n return;\n }\n }\n\n // Skip if container has zero size\n if (root.offsetWidth === 0 || root.offsetHeight === 0) {\n return;\n }\n\n resizeCallback();\n });\n ro.observe(root);\n }\n\n onCleanup(() => {\n if (ro) {\n ro.disconnect();\n ro = null;\n }\n });\n });\n}\n\nexport const autoresizeProps = {\n autoresize: [Boolean, Object] as PropType<AutoResize>,\n};\n","import { inject, computed, watchEffect, toValue } 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 loadingOptions: Ref<LoadingOptions | undefined>,\n): void {\n const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, {});\n const realLoadingOptions = computed(() => ({\n ...toValue(defaultLoadingOptions),\n ...(loadingOptions.value ?? {}),\n }));\n\n watchEffect(() => {\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n if (loading.value) {\n instance.showLoading(realLoadingOptions.value);\n } else {\n instance.hideLoading();\n }\n });\n}\n\nexport const loadingProps = {\n loading: Boolean,\n loadingOptions: Object as PropType<LoadingOptions>,\n};\n","import { h, Teleport, onUpdated, onUnmounted, onMounted, shallowRef, shallowReactive } from \"vue\";\nimport type { Slots, SlotsType } from \"vue\";\nimport type { Option } from \"../types\";\nimport { isBrowser, isPlainObject, isSameSet, 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;\ntype SlotPrefix = keyof typeof SLOT_OPTION_PATHS;\ntype SlotName = SlotPrefix | `${SlotPrefix}-${string}`;\ntype SlotContainerMap = Partial<Record<SlotName, HTMLElement>>;\ntype SlotInitMap = Partial<Record<SlotName, boolean>>;\ntype SlotParamMap = Partial<Record<SlotName, unknown>>;\nconst SLOT_PREFIXES: SlotPrefix[] = [\"tooltip\", \"dataView\"];\n\nfunction isValidSlotName(key: string): key is SlotName {\n return SLOT_PREFIXES.some((slotPrefix) => key === slotPrefix || key.startsWith(slotPrefix + \"-\"));\n}\n\ntype Container = Record<string, unknown> | unknown[];\n\nfunction ensureChild(parent: Container, seg: string, nextSeg?: string): Container | undefined {\n const next = readSegment(parent, seg);\n\n if (Array.isArray(next)) {\n const cloned = [...next];\n writeSegment(parent, seg, cloned);\n return cloned;\n }\n if (isPlainObject(next)) {\n const cloned: Record<string, unknown> = { ...next };\n writeSegment(parent, seg, cloned);\n return cloned;\n }\n if (next === undefined) {\n const created = nextSeg && isValidArrayIndex(nextSeg) ? [] : {};\n writeSegment(parent, seg, created);\n return created;\n }\n return undefined;\n}\n\nfunction readSegment(parent: Container, seg: string): unknown {\n if (Array.isArray(parent)) {\n return parent[Number(seg)];\n }\n return parent[seg];\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\nexport function useSlotOption(slots: Slots, onSlotsChange: () => void) {\n const detachedRoot = isBrowser() ? document.createElement(\"div\") : undefined;\n const containers = shallowReactive<SlotContainerMap>({});\n const initialized = shallowReactive<SlotInitMap>({});\n const params = shallowReactive<SlotParamMap>({});\n const isMounted = shallowRef(false);\n const warnedInvalidSlots = new Set<string>();\n\n const collectSlotNames = (warnInvalid: boolean): SlotName[] => {\n const result: SlotName[] = [];\n for (const key of Object.keys(slots)) {\n if (key === \"graphic\") {\n continue;\n }\n if (isValidSlotName(key)) {\n result.push(key);\n } else if (warnInvalid && !warnedInvalidSlots.has(key)) {\n warn(`Invalid slot name: ${key}`);\n warnedInvalidSlots.add(key);\n }\n }\n return result;\n };\n\n let slotNames = collectSlotNames(false);\n\n const render = () => {\n const names = collectSlotNames(false);\n if (names.length === 0 || !isMounted.value || !detachedRoot) {\n return undefined;\n }\n\n return h(\n Teleport,\n { to: detachedRoot },\n names.map((slotName) => {\n const slot = slots[slotName];\n const slotContent = initialized[slotName] ? slot?.(params[slotName]) : undefined;\n return h(\n \"div\",\n {\n key: slotName,\n ref: (el) => {\n if (el instanceof HTMLElement) {\n containers[slotName] = el;\n }\n },\n style: { display: \"contents\" },\n },\n slotContent,\n );\n }),\n );\n };\n\n function patchOption(src: Option): Option {\n const root: Option = { ...src };\n const names = collectSlotNames(true);\n\n for (const key of names) {\n const prefix: SlotPrefix = key.startsWith(\"tooltip\") ? \"tooltip\" : \"dataView\";\n const rest = key.slice(prefix.length);\n const parts = rest ? rest.slice(1).split(\"-\") : [];\n const tail = SLOT_OPTION_PATHS[prefix];\n const path = [...parts, ...tail];\n\n let current: Container | undefined = root;\n for (let i = 0; i < path.length - 1; i++) {\n current = ensureChild(current, path[i], path[i + 1]);\n if (!current) {\n break;\n }\n }\n if (!current) {\n continue;\n }\n\n const leaf = path[path.length - 1];\n const formatter = (payload: unknown): HTMLElement | undefined => {\n initialized[key] = true;\n params[key] = payload;\n return containers[key];\n };\n writeSegment(current, leaf, formatter);\n }\n\n return root;\n }\n\n onUpdated(() => {\n const nextSlotNames = collectSlotNames(false);\n if (!isSameSet(nextSlotNames, slotNames)) {\n const nextSlotNameSet = new Set(nextSlotNames);\n for (const key of slotNames) {\n if (!nextSlotNameSet.has(key)) {\n delete params[key];\n delete initialized[key];\n delete containers[key];\n }\n }\n slotNames = nextSlotNames;\n onSlotsChange();\n }\n });\n\n onMounted(() => {\n isMounted.value = true;\n });\n\n onUnmounted(() => {\n detachedRoot?.remove();\n });\n\n return {\n render,\n patchOption,\n };\n}\n\nexport type SlotsTypes = SlotsType<\n Record<\"tooltip\" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> &\n Record<\"dataView\" | `dataView-${string}`, Option> &\n VChartSlotsExtension\n>;\n","import { isBrowser } from \"./utils\";\n\nlet registered: boolean | null = null;\n\nexport const TAG_NAME = \"x-macroui-echarts\";\n\nexport interface EChartsElement extends HTMLElement {\n __dispose: (() => void) | null;\n}\n\nexport function register(): boolean {\n if (registered != null) {\n return registered;\n }\n\n const registry = globalThis.customElements;\n\n if (!isBrowser() || !registry?.get) {\n registered = false;\n return registered;\n }\n\n if (!registry.get(TAG_NAME)) {\n try {\n class ECElement extends HTMLElement implements EChartsElement {\n __dispose: (() => void) | null = null;\n\n disconnectedCallback(): void {\n if (this.__dispose) {\n this.__dispose();\n this.__dispose = null;\n }\n }\n }\n\n registry.define(TAG_NAME, ECElement);\n } catch {\n registered = false;\n return registered;\n }\n }\n\n registered = true;\n return registered;\n}\n\n// Test helper to reset cached registration state.\nexport function __resetRegisterState(): void {\n registered = null;\n}\n","import { computed, onScopeDispose, watchEffect } from \"vue\";\n\nimport type { ComputedRef, Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\nimport { isOn, parseOnEvent } from \"../utils\";\nimport type { AttrMap } from \"../utils\";\n\ntype EventHandler = (...args: unknown[]) => void;\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 once: boolean;\n handler: EventHandler;\n};\n\nfunction getEmitter(instance: EChartsType, zr: boolean): EventEmitter {\n return zr ? (instance.getZr() as EventEmitter) : (instance as EventEmitter);\n}\n\nfunction resolveHandlers(value: unknown): EventHandler[] {\n if (typeof value === \"function\") {\n return [value as EventHandler];\n }\n\n if (!Array.isArray(value)) {\n return [];\n }\n\n const handlers: EventHandler[] = [];\n for (const item of value) {\n if (typeof item === \"function\") {\n handlers.push(item as EventHandler);\n }\n }\n return handlers;\n}\n\nfunction createBoundHandler(\n emitter: EventEmitter,\n event: string,\n value: unknown,\n once: boolean,\n): EventHandler | undefined {\n const handlers = resolveHandlers(value);\n if (handlers.length === 0) {\n return undefined;\n }\n\n const invoke = (...args: unknown[]): void => {\n for (const handler of handlers) {\n handler(...args);\n }\n };\n\n if (!once) {\n return invoke;\n }\n\n let called = false;\n const onceHandler: EventHandler = (...args: unknown[]): void => {\n if (called) {\n return;\n }\n called = true;\n invoke(...args);\n emitter.off(event, onceHandler);\n };\n\n return onceHandler;\n}\n\nfunction toNativeEventKey(event: string, once: boolean): string | null {\n if (!event.startsWith(\"native:\")) {\n return null;\n }\n\n const nativeEvent = event.slice(7);\n if (!nativeEvent) {\n return null;\n }\n\n const head = nativeEvent.charAt(0).toUpperCase();\n const tail = nativeEvent.slice(1);\n return `on${head}${tail}${once ? \"Once\" : \"\"}`;\n}\n\nexport function useReactiveChartListeners(\n chart: Ref<EChartsType | undefined>,\n attrs: AttrMap,\n): void {\n const bindings = new Map<string, ListenerBinding>();\n let activeInstance: 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 watchEffect(() => {\n const instance = chart.value;\n if (!instance) {\n clearBindings();\n activeInstance = undefined;\n return;\n }\n\n if (activeInstance && activeInstance !== instance) {\n clearBindings();\n }\n activeInstance = instance;\n\n const seen = new Set<string>();\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed || parsed.event.startsWith(\"native:\")) {\n continue;\n }\n\n const zr = parsed.event.startsWith(\"zr:\");\n const event = zr ? parsed.event.slice(3) : parsed.event;\n const source = attrs[key];\n const emitter = getEmitter(instance, zr);\n const existing = bindings.get(key);\n\n if (\n existing &&\n existing.source === source &&\n existing.event === event &&\n existing.once === parsed.once\n ) {\n seen.add(key);\n continue;\n }\n\n if (existing) {\n existing.emitter.off(existing.event, existing.handler);\n bindings.delete(key);\n }\n\n const handler = createBoundHandler(emitter, event, source, parsed.once);\n if (!handler) {\n continue;\n }\n\n emitter.on(event, handler);\n bindings.set(key, {\n emitter,\n event,\n source,\n once: parsed.once,\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 onScopeDispose(clearBindings);\n}\n\nexport function useReactiveEventAttrs(attrs: AttrMap): {\n nonEventAttrs: ComputedRef<AttrMap>;\n nativeListeners: ComputedRef<AttrMap>;\n} {\n const nonEventAttrs = computed(() => {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n if (isOn(key)) {\n continue;\n }\n result[key] = attrs[key];\n }\n\n return result;\n });\n\n const nativeListeners = computed(() => {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed) {\n continue;\n }\n\n const nativeKey = toNativeEventKey(parsed.event, parsed.once);\n if (!nativeKey) {\n continue;\n }\n result[nativeKey] = attrs[key];\n }\n\n return result;\n });\n\n return {\n nonEventAttrs,\n nativeListeners,\n };\n}\n","import type { Option } from \"./types\";\nimport { isPlainObject } from \"./utils\";\n\nexport interface UpdatePlan {\n notMerge: boolean;\n replaceMerge?: string[];\n}\n\n/** Summary of a top-level array key for deletion detection. */\nexport interface ArraySummary {\n /** Unique, sorted string ids extracted from items' `id` field. */\n idsSorted: string[];\n /** Count of items without an `id` field. */\n noIdCount: number;\n}\n\n/** Minimal signature of an option used to decide setOption behavior. */\nexport interface Signature {\n /** Lengths of `option.options` and `option.media` (0 if not arrays). */\n optionsLength: number;\n mediaLength: number;\n /** Map of array-typed top-level keys to their summaries. */\n arrays: Record<string, ArraySummary | undefined>;\n /** Sorted list of object-typed top-level keys. */\n objects: string[];\n /** Sorted list of scalar-typed top-level keys (string|number|boolean|null). */\n scalars: string[];\n}\n\nexport interface PlannedUpdate {\n option: Option;\n signature: Signature;\n plan: UpdatePlan;\n}\n\n/**\n * Read an item's `id` as a string.\n * Only accept string or number. Other types are ignored to surface inconsistent data early.\n */\nfunction readId(item: unknown): string | undefined {\n if (!isPlainObject(item)) {\n return undefined;\n }\n\n const raw = item.id;\n if (typeof raw === \"string\") {\n return raw;\n }\n\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n return String(raw);\n }\n\n return undefined;\n}\n\nfunction summarizeArray(items: unknown[]): ArraySummary {\n const ids = new Set<string>();\n let noIdCount = 0;\n\n for (let i = 0; i < items.length; i++) {\n const id = readId(items[i]);\n if (id === undefined) {\n noIdCount++;\n continue;\n }\n ids.add(id);\n }\n\n return {\n idsSorted: ids.size > 0 ? Array.from(ids).sort() : [],\n noIdCount,\n };\n}\n\n/**\n * Build a minimal signature from a full ECharts option.\n * Only top-level keys are inspected.\n */\nexport function buildSignature(option: Option): Signature {\n const opt = option as Record<string, unknown>;\n\n const optionsLength = Array.isArray(opt.options) ? opt.options.length : 0;\n const mediaLength = Array.isArray(opt.media) ? opt.media.length : 0;\n\n const arrays: Record<string, ArraySummary | undefined> = Object.create(null);\n const objects: string[] = [];\n const scalars: string[] = [];\n\n for (const key of Object.keys(opt)) {\n if (key === \"options\" || key === \"media\") {\n continue;\n }\n\n const value = opt[key];\n if (Array.isArray(value)) {\n arrays[key] = summarizeArray(value);\n continue;\n }\n\n if (isPlainObject(value)) {\n objects.push(key);\n continue;\n }\n\n // scalar: string | number | boolean | null (undefined is treated as \"absent\")\n if (value !== undefined) {\n scalars.push(key);\n }\n }\n\n if (objects.length > 1) {\n objects.sort();\n }\n if (scalars.length > 1) {\n scalars.sort();\n }\n\n return {\n optionsLength,\n mediaLength,\n arrays,\n objects,\n scalars,\n };\n}\n\nfunction diffKeys(prevKeys: readonly string[], nextKeys: readonly string[]): string[] {\n if (prevKeys.length === 0) {\n return [];\n }\n if (nextKeys.length === 0) {\n return prevKeys.slice();\n }\n\n const nextSet = new Set(nextKeys);\n const missing: string[] = [];\n\n for (let i = 0; i < prevKeys.length; i++) {\n const key = prevKeys[i];\n if (!nextSet.has(key)) {\n missing.push(key);\n }\n }\n\n return missing;\n}\n\nfunction hasMissingIds(prevIds: readonly string[], nextIds: readonly string[]): boolean {\n if (prevIds.length === 0) {\n return false;\n }\n if (nextIds.length === 0) {\n return true;\n }\n\n const nextSet = new Set(nextIds);\n for (let i = 0; i < prevIds.length; i++) {\n if (!nextSet.has(prevIds[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldForceNotMerge(prev: Signature, next: Signature): boolean {\n if (next.optionsLength < prev.optionsLength) {\n return true;\n }\n\n if (next.mediaLength < prev.mediaLength) {\n return true;\n }\n\n return diffKeys(prev.scalars, next.scalars).length > 0;\n}\n\nfunction collectObjectOverrides(prev: Signature, next: Signature): Map<string, null | []> {\n const overrides = new Map<string, null | []>();\n\n const missingObjects = diffKeys(prev.objects, next.objects);\n for (let i = 0; i < missingObjects.length; i++) {\n const key = missingObjects[i];\n const movedToArray = next.arrays[key] !== undefined;\n const movedToScalar = next.scalars.includes(key);\n if (!movedToArray && !movedToScalar) {\n overrides.set(key, null);\n }\n }\n\n return overrides;\n}\n\nfunction collectArrayChanges(\n prev: Signature,\n next: Signature,\n overrides: Map<string, null | []>,\n): Set<string> {\n const replaceMerge = new Set<string>();\n\n for (const key of Object.keys(prev.arrays)) {\n const prevArray = prev.arrays[key];\n if (!prevArray) {\n continue;\n }\n\n const nextArray = next.arrays[key];\n if (!nextArray) {\n if (prevArray.idsSorted.length > 0 || prevArray.noIdCount > 0) {\n overrides.set(key, []);\n replaceMerge.add(key);\n }\n continue;\n }\n\n if (hasMissingIds(prevArray.idsSorted, nextArray.idsSorted)) {\n replaceMerge.add(key);\n continue;\n }\n\n if (nextArray.noIdCount < prevArray.noIdCount) {\n replaceMerge.add(key);\n }\n }\n\n return replaceMerge;\n}\n\nfunction applyOverrides(\n option: Option,\n next: Signature,\n overrides: Map<string, null | []>,\n): { option: Option; signature: Signature } {\n if (overrides.size === 0) {\n return {\n option,\n signature: next,\n };\n }\n\n const normalizedOption: Option = { ...option };\n overrides.forEach((value, key) => {\n normalizedOption[key] = value;\n });\n\n return {\n option: normalizedOption,\n signature: buildSignature(normalizedOption),\n };\n}\n\n/**\n * Produce an update plan plus a normalized option that encodes common deletions.\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 option,\n signature: next,\n plan: { notMerge: false },\n };\n }\n\n if (shouldForceNotMerge(prev, next)) {\n return {\n option,\n signature: next,\n plan: { notMerge: true },\n };\n }\n\n const overrides = collectObjectOverrides(prev, next);\n const replaceMergeSet = collectArrayChanges(prev, next, overrides);\n const normalized = applyOverrides(option, next, overrides);\n\n const replaceMerge = replaceMergeSet.size > 0 ? Array.from(replaceMergeSet).sort() : undefined;\n\n return {\n option: normalized.option,\n signature: normalized.signature,\n plan: replaceMerge ? { notMerge: false, replaceMerge } : { notMerge: false },\n };\n}\n","export default \"x-macroui-echarts{display:block;width:100%;height:100%;min-width:0;}\\nx-macroui-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}\\nx-macroui-echarts>.echarts-host>:first-child,x-macroui-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 toRefs,\n watch,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n h,\n nextTick,\n watchEffect,\n toValue,\n} from \"vue\";\nimport { init as initChart } from \"echarts/core\";\n\nimport type { InjectionKey, PropType, VNodeChild } from \"vue\";\n\nimport {\n usePublicAPI,\n useAutoresize,\n autoresizeProps,\n useLoading,\n loadingProps,\n useSlotOption,\n} from \"./composables\";\nimport type { PublicMethods, SlotsTypes } from \"./composables\";\nimport { warn } from \"./utils\";\nimport type { AttrMap } from \"./utils\";\nimport { register, TAG_NAME } from \"./wc\";\nimport { useRuntime as useGraphic } from \"./graphic/runtime\";\nimport { useReactiveChartListeners, useReactiveEventAttrs } 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} from \"./types\";\nimport type { EChartsElement } from \"./wc\";\n\nimport \"./style\";\n\nconst wcRegistered = register();\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\";\n\nexport default defineComponent({\n name: \"Echarts\",\n inheritAttrs: false,\n props: {\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 emits: {} as Emits,\n slots: Object as SlotsTypes,\n setup(props, { attrs, expose, slots }) {\n const attrsMap: AttrMap = attrs;\n const root = shallowRef<EChartsElement>();\n const chartHost = shallowRef<HTMLDivElement>();\n const chart = shallowRef<EChartsType>();\n const isReady = shallowRef(false);\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, manualUpdate, loading, loadingOptions } = toRefs(props);\n\n const realTheme = computed(() => props.theme || toValue(defaultTheme));\n const realInitOptions = computed(\n () => props.initOptions || toValue(defaultInitOptions) || undefined,\n );\n const realUpdateOptions = computed(() => props.updateOptions || toValue(defaultUpdateOptions));\n\n const { nonEventAttrs, nativeListeners } = useReactiveEventAttrs(attrsMap);\n\n const { render: renderSlot, patchOption } = useSlotOption(slots, requestUpdate);\n\n const { patchOption: patchGraphicOption, render: renderGraphic } =\n useGraphic({\n chart,\n slots,\n manualUpdate,\n requestUpdate,\n }) ?? {};\n\n let lastSignature: Signature | undefined;\n\n function withGraphicReplaceMerge(updateOptions?: UpdateOptions): UpdateOptions | undefined {\n if (!slots.graphic || !patchGraphicOption) {\n return updateOptions;\n }\n\n const replaceMerge = [...(updateOptions?.replaceMerge ?? []), \"graphic\"];\n return {\n ...updateOptions,\n replaceMerge: [...new Set(replaceMerge)],\n };\n }\n\n function applyOption(\n instance: EChartsType,\n option: Option,\n override?: UpdateOptions,\n manual = false,\n ): void {\n const slotted = patchOption(option);\n const patched = patchGraphicOption ? patchGraphicOption(slotted) : slotted;\n\n if (manual) {\n instance.setOption(patched, withGraphicReplaceMerge(override) ?? {});\n lastSignature = undefined;\n return;\n }\n\n if (override) {\n const planned = planUpdate(lastSignature, patched);\n instance.setOption(patched, withGraphicReplaceMerge(override));\n lastSignature = planned.signature;\n return;\n }\n\n if (realUpdateOptions.value) {\n instance.setOption(patched, withGraphicReplaceMerge(realUpdateOptions.value));\n lastSignature = undefined;\n return;\n }\n\n const planned = planUpdate(lastSignature, patched);\n const updateOptions: UpdateOptions = {\n notMerge: planned.plan.notMerge,\n };\n const replacements = (planned.plan.replaceMerge ?? []).filter(\n (key): key is string => key != null,\n );\n if (replacements.length > 0) {\n updateOptions.replaceMerge = [...new Set(replacements)];\n }\n instance.setOption(planned.option, withGraphicReplaceMerge(updateOptions));\n lastSignature = planned.signature;\n }\n\n function requestUpdate(updateOptions?: UpdateOptions): boolean {\n const instance = chart.value;\n const option = props.option;\n if (!instance || !option || manualUpdate.value) {\n return false;\n }\n\n applyOption(instance, option, updateOptions);\n return true;\n }\n\n if (slots.graphic && !patchGraphicOption) {\n warn(\n \"Detected `#graphic` slot but no extension is registered. Import from `@macroui/echarts-vue/graphic` to enable it.\",\n );\n }\n\n useReactiveChartListeners(chart, attrsMap);\n\n function cleanup(): void {\n const instance = chart.value;\n if (instance) {\n instance.dispose();\n chart.value = undefined;\n }\n isReady.value = false;\n lastSignature = undefined;\n }\n\n function init(): void {\n isReady.value = false;\n\n const host = chartHost.value as HTMLDivElement;\n const instance = (chart.value = initChart(host, realTheme.value, realInitOptions.value));\n\n if (props.group) {\n instance.group = props.group;\n }\n\n function resize(): void {\n if (!instance.isDisposed()) {\n instance.resize();\n }\n }\n\n function commit(): void {\n const option = props.option;\n if (!option) {\n return;\n }\n\n if (manualUpdate.value) {\n applyOption(instance, option, undefined, true);\n return;\n }\n\n applyOption(instance, option);\n }\n\n if (autoresize.value) {\n nextTick(() => {\n resize();\n commit();\n isReady.value = true;\n });\n return;\n }\n\n commit();\n isReady.value = true;\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 updateOptions = typeof notMerge === \"boolean\" ? { notMerge, lazyUpdate } : notMerge;\n\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n applyOption(instance, option, updateOptions ?? undefined, true);\n };\n\n watch(\n () => props.option,\n (option) => {\n if (!option) {\n lastSignature = undefined;\n return;\n }\n\n if (manualUpdate.value) {\n warn(\"`option` prop changes are ignored when `manual-update` is `true`.\");\n return;\n }\n\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n applyOption(instance, option);\n },\n { deep: true },\n );\n\n watch(\n [manualUpdate, realInitOptions],\n () => {\n cleanup();\n init();\n },\n {\n deep: true,\n },\n );\n\n watch(\n realTheme,\n (theme) => {\n const instance = chart.value;\n if (instance) {\n instance.setTheme(theme || {});\n\n if (props.option && !manualUpdate.value) {\n applyOption(instance, props.option);\n }\n }\n },\n {\n deep: true,\n },\n );\n\n watchEffect(() => {\n const instance = chart.value;\n if (props.group && instance) {\n instance.group = props.group;\n }\n });\n\n const publicApi = usePublicAPI(chart);\n\n useLoading(chart, loading, loadingOptions);\n\n useAutoresize(chart, autoresize, root);\n\n onMounted(init);\n\n onBeforeUnmount(() => {\n if (wcRegistered && root.value) {\n root.value.__dispose = cleanup;\n return;\n }\n\n cleanup();\n });\n\n const exposed = {\n setOption,\n root,\n chart,\n };\n expose({ ...exposed, ...publicApi });\n\n return (() => {\n const children: VNodeChild[] = [\n h(\"div\", {\n ref: chartHost,\n class: \"echarts-host\",\n }),\n ];\n\n if (isReady.value) {\n const teleported = renderSlot();\n if (teleported) {\n children.push(teleported);\n }\n }\n\n if (renderGraphic) {\n const graphic = renderGraphic();\n if (graphic) {\n children.push(graphic);\n }\n }\n\n return h(\n TAG_NAME,\n {\n ...nonEventAttrs.value,\n ...nativeListeners.value,\n ref: root,\n class: [\"echarts\", nonEventAttrs.value.class],\n },\n children,\n );\n }) as unknown as typeof exposed & PublicMethods;\n },\n});\n","import ECharts from \"./ECharts\";\n\n// Optional entries can augment this interface to add extra named slots.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface VChartSlotsExtension {}\n\nexport default ECharts;\nexport * from \"./ECharts\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("echarts"),require("vue"),require("echarts/core")):typeof define==`function`&&define.amd?define([`echarts`,`vue`,`echarts/core`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.MacrouiECharts=t(e.echarts,e.Vue,e.echarts))})(this,function(e,t,n){var r=Object.defineProperty,i=(e,t)=>{let n={};for(var i in e)r(n,i,{get:e[i],enumerable:!0});return t||r(n,Symbol.toStringTag,{value:`Module`}),n};let a=[`getWidth`,`getHeight`,`getDom`,`getOption`,`resize`,`dispatchAction`,`convertToPixel`,`convertFromPixel`,`containPixel`,`getDataURL`,`getConnectedDataURL`,`appendData`,`clear`,`isDisposed`,`dispose`];function o(e){function t(t){return function(...n){if(!e.value)throw Error(`ECharts is not initialized yet.`);return Reflect.apply(e.value[t],e.value,n)}}return a.reduce((e,n)=>(e[n]=t(n),e),{})}function s(e,r,i){(0,t.watch)([i,e,r],([e,t,r],i,a)=>{let o=null;if(e&&t&&r){let{offsetWidth:i,offsetHeight:a}=e,{throttle:s=100,onResize:c}=r===!0?{}:r,l=!1,u=()=>{t.resize(),c?.()},d=s?(0,n.throttle)(u,s):u;o=new ResizeObserver(()=>{!l&&(l=!0,e.offsetWidth===i&&e.offsetHeight===a)||e.offsetWidth===0||e.offsetHeight===0||d()}),o.observe(e)}a(()=>{o&&=(o.disconnect(),null)})})}let c={autoresize:[Boolean,Object]},l=Symbol();function u(e,n,r){let i=(0,t.inject)(l,{}),a=(0,t.computed)(()=>({...(0,t.toValue)(i),...r.value??{}}));(0,t.watchEffect)(()=>{let t=e.value;t&&(n.value?t.showLoading(a.value):t.hideLoading())})}let d={loading:Boolean,loadingOptions:Object};function f(){return typeof window<`u`&&typeof document<`u`}let p=/^on[^a-z]/,m=e=>p.test(e);function h(e){if(!m(e))return null;let t=e.charAt(2).toLowerCase()+e.slice(3),n=t.endsWith(`Once`);return n&&(t=t.slice(0,-4)),{event:t,once:n}}function g(e){let t=Number(e);return Number.isInteger(t)&&t>=0&&t<2**32-1&&String(t)===e}function _(e,t){let n=new Set(e),r=new Set(t);if(n.size!==r.size)return!1;for(let e of n)if(!r.has(e))return!1;return!0}function v(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}let y=new Set,b=(e,n)=>{if(n?.onceKey){let e=n.onceStore??y;if(e.has(n.onceKey))return;e.add(n.onceKey)}(0,t.warn)(`[@macroui/echarts-vue] ${e}`)},x={tooltip:[`tooltip`,`formatter`],dataView:[`toolbox`,`feature`,`dataView`,`optionToContent`]},S=[`tooltip`,`dataView`];function C(e){return S.some(t=>e===t||e.startsWith(t+`-`))}function w(e,t,n){let r=T(e,t);if(Array.isArray(r)){let n=[...r];return E(e,t,n),n}if(v(r)){let n={...r};return E(e,t,n),n}if(r===void 0){let r=n&&g(n)?[]:{};return E(e,t,r),r}}function T(e,t){return Array.isArray(e)?e[Number(t)]:e[t]}function E(e,t,n){if(Array.isArray(e)){e[Number(t)]=n;return}e[t]=n}function D(e,n){let r=f()?document.createElement(`div`):void 0,i=(0,t.shallowReactive)({}),a=(0,t.shallowReactive)({}),o=(0,t.shallowReactive)({}),s=(0,t.shallowRef)(!1),c=new Set,l=t=>{let n=[];for(let r of Object.keys(e))r!==`graphic`&&(C(r)?n.push(r):t&&!c.has(r)&&(b(`Invalid slot name: ${r}`),c.add(r)));return n},u=l(!1),d=()=>{let n=l(!1);if(!(n.length===0||!s.value||!r))return(0,t.h)(t.Teleport,{to:r},n.map(n=>{let r=e[n],s=a[n]?r?.(o[n]):void 0;return(0,t.h)(`div`,{key:n,ref:e=>{e instanceof HTMLElement&&(i[n]=e)},style:{display:`contents`}},s)}))};function p(e){let t={...e},n=l(!0);for(let e of n){let n=e.startsWith(`tooltip`)?`tooltip`:`dataView`,r=e.slice(n.length),s=r?r.slice(1).split(`-`):[],c=x[n],l=[...s,...c],u=t;for(let e=0;e<l.length-1&&(u=w(u,l[e],l[e+1]),u);e++);if(!u)continue;let d=l[l.length-1];E(u,d,t=>(a[e]=!0,o[e]=t,i[e]))}return t}return(0,t.onUpdated)(()=>{let e=l(!1);if(!_(e,u)){let t=new Set(e);for(let e of u)t.has(e)||(delete o[e],delete a[e],delete i[e]);u=e,n()}}),(0,t.onMounted)(()=>{s.value=!0}),(0,t.onUnmounted)(()=>{r?.remove()}),{render:d,patchOption:p}}let O=null,k=`x-macroui-echarts`;function A(){if(O!=null)return O;let e=globalThis.customElements;if(!f()||!e?.get)return O=!1,O;if(!e.get(`x-macroui-echarts`))try{class t extends HTMLElement{__dispose=null;disconnectedCallback(){this.__dispose&&=(this.__dispose(),null)}}e.define(k,t)}catch{return O=!1,O}return O=!0,O}function j(e){return null}function M(e,t){return t?e.getZr():e}function N(e){if(typeof e==`function`)return[e];if(!Array.isArray(e))return[];let t=[];for(let n of e)typeof n==`function`&&t.push(n);return t}function P(e,t,n,r){let i=N(n);if(i.length===0)return;let a=(...e)=>{for(let t of i)t(...e)};if(!r)return a;let o=!1,s=(...n)=>{o||(o=!0,a(...n),e.off(t,s))};return s}function F(e,t){if(!e.startsWith(`native:`))return null;let n=e.slice(7);return n?`on${n.charAt(0).toUpperCase()}${n.slice(1)}${t?`Once`:``}`:null}function I(e,n){let r=new Map,i;function a(){for(let e of r.values())e.emitter.off(e.event,e.handler);r.clear()}(0,t.watchEffect)(()=>{let t=e.value;if(!t){a(),i=void 0;return}i&&i!==t&&a(),i=t;let o=new Set;for(let e in n){let i=h(e);if(!i||i.event.startsWith(`native:`))continue;let a=i.event.startsWith(`zr:`),s=a?i.event.slice(3):i.event,c=n[e],l=M(t,a),u=r.get(e);if(u&&u.source===c&&u.event===s&&u.once===i.once){o.add(e);continue}u&&(u.emitter.off(u.event,u.handler),r.delete(e));let d=P(l,s,c,i.once);d&&(l.on(s,d),r.set(e,{emitter:l,event:s,source:c,once:i.once,handler:d}),o.add(e))}for(let[e,t]of r)o.has(e)||(t.emitter.off(t.event,t.handler),r.delete(e))}),(0,t.onScopeDispose)(a)}function L(e){return{nonEventAttrs:(0,t.computed)(()=>{let t={};for(let n in e)m(n)||(t[n]=e[n]);return t}),nativeListeners:(0,t.computed)(()=>{let t={};for(let n in e){let r=h(n);if(!r)continue;let i=F(r.event,r.once);i&&(t[i]=e[n])}return t})}}function R(e){if(!v(e))return;let t=e.id;if(typeof t==`string`)return t;if(typeof t==`number`&&Number.isFinite(t))return String(t)}function z(e){let t=new Set,n=0;for(let r=0;r<e.length;r++){let i=R(e[r]);if(i===void 0){n++;continue}t.add(i)}return{idsSorted:t.size>0?Array.from(t).sort():[],noIdCount:n}}function B(e){let t=e,n=Array.isArray(t.options)?t.options.length:0,r=Array.isArray(t.media)?t.media.length:0,i=Object.create(null),a=[],o=[];for(let e of Object.keys(t)){if(e===`options`||e===`media`)continue;let n=t[e];if(Array.isArray(n)){i[e]=z(n);continue}if(v(n)){a.push(e);continue}n!==void 0&&o.push(e)}return a.length>1&&a.sort(),o.length>1&&o.sort(),{optionsLength:n,mediaLength:r,arrays:i,objects:a,scalars:o}}function V(e,t){if(e.length===0)return[];if(t.length===0)return e.slice();let n=new Set(t),r=[];for(let t=0;t<e.length;t++){let i=e[t];n.has(i)||r.push(i)}return r}function H(e,t){if(e.length===0)return!1;if(t.length===0)return!0;let n=new Set(t);for(let t=0;t<e.length;t++)if(!n.has(e[t]))return!0;return!1}function U(e,t){return t.optionsLength<e.optionsLength||t.mediaLength<e.mediaLength?!0:V(e.scalars,t.scalars).length>0}function W(e,t){let n=new Map,r=V(e.objects,t.objects);for(let e=0;e<r.length;e++){let i=r[e],a=t.arrays[i]!==void 0,o=t.scalars.includes(i);!a&&!o&&n.set(i,null)}return n}function G(e,t,n){let r=new Set;for(let i of Object.keys(e.arrays)){let a=e.arrays[i];if(!a)continue;let o=t.arrays[i];if(!o){(a.idsSorted.length>0||a.noIdCount>0)&&(n.set(i,[]),r.add(i));continue}if(H(a.idsSorted,o.idsSorted)){r.add(i);continue}o.noIdCount<a.noIdCount&&r.add(i)}return r}function K(e,t,n){if(n.size===0)return{option:e,signature:t};let r={...e};return n.forEach((e,t)=>{r[t]=e}),{option:r,signature:B(r)}}function q(e,t){let n=B(t);if(!e)return{option:t,signature:n,plan:{notMerge:!1}};if(U(e,n))return{option:t,signature:n,plan:{notMerge:!0}};let r=W(e,n),i=G(e,n,r),a=K(t,n,r),o=i.size>0?Array.from(i).sort():void 0;return{option:a.option,signature:a.signature,plan:o?{notMerge:!1,replaceMerge:o}:{notMerge:!1}}}var J=`x-macroui-echarts{display:block;width:100%;height:100%;min-width:0;}
|
|
2
|
+
x-macroui-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}
|
|
3
|
+
x-macroui-echarts>.echarts-host>:first-child,x-macroui-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}
|
|
4
|
+
`;if(f())if(Array.isArray(document.adoptedStyleSheets)&&`replaceSync`in CSSStyleSheet.prototype){let e=new CSSStyleSheet;e.replaceSync(J),document.adoptedStyleSheets=[...document.adoptedStyleSheets,e]}else{let e=document.createElement(`style`);e.textContent=J,document.head.appendChild(e)}let Y=A(),X=Symbol(),Z=Symbol(),Q=Symbol();var ee=(0,t.defineComponent)({name:`Echarts`,inheritAttrs:!1,props:{option:Object,theme:{type:[Object,String]},initOptions:Object,updateOptions:Object,group:String,manualUpdate:Boolean,...c,...d},emits:{},slots:Object,setup(e,{attrs:r,expose:i,slots:a}){let c=r,l=(0,t.shallowRef)(),d=(0,t.shallowRef)(),f=(0,t.shallowRef)(),p=(0,t.shallowRef)(!1),m=(0,t.inject)(X,null),h=(0,t.inject)(Z,null),g=(0,t.inject)(Q,null),{autoresize:_,manualUpdate:v,loading:y,loadingOptions:x}=(0,t.toRefs)(e),S=(0,t.computed)(()=>e.theme||(0,t.toValue)(m)),C=(0,t.computed)(()=>e.initOptions||(0,t.toValue)(h)||void 0),w=(0,t.computed)(()=>e.updateOptions||(0,t.toValue)(g)),{nonEventAttrs:T,nativeListeners:E}=L(c),{render:O,patchOption:A}=D(a,z),{patchOption:M,render:N}=j({chart:f,slots:a,manualUpdate:v,requestUpdate:z})??{},P;function F(e){if(!a.graphic||!M)return e;let t=[...e?.replaceMerge??[],`graphic`];return{...e,replaceMerge:[...new Set(t)]}}function R(e,t,n,r=!1){let i=A(t),a=M?M(i):i;if(r){e.setOption(a,F(n)??{}),P=void 0;return}if(n){let t=q(P,a);e.setOption(a,F(n)),P=t.signature;return}if(w.value){e.setOption(a,F(w.value)),P=void 0;return}let o=q(P,a),s={notMerge:o.plan.notMerge},c=(o.plan.replaceMerge??[]).filter(e=>e!=null);c.length>0&&(s.replaceMerge=[...new Set(c)]),e.setOption(o.option,F(s)),P=o.signature}function z(t){let n=f.value,r=e.option;return!n||!r||v.value?!1:(R(n,r,t),!0)}a.graphic&&!M&&b("Detected `#graphic` slot but no extension is registered. Import from `@macroui/echarts-vue/graphic` to enable it."),I(f,c);function B(){let e=f.value;e&&(e.dispose(),f.value=void 0),p.value=!1,P=void 0}function V(){p.value=!1;let r=d.value,i=f.value=(0,n.init)(r,S.value,C.value);e.group&&(i.group=e.group);function a(){i.isDisposed()||i.resize()}function o(){let t=e.option;if(t){if(v.value){R(i,t,void 0,!0);return}R(i,t)}}if(_.value){(0,t.nextTick)(()=>{a(),o(),p.value=!0});return}o(),p.value=!0}let H=(t,n,r)=>{if(!e.manualUpdate){b("`setOption` is only available when `manual-update` is `true`.");return}let i=typeof n==`boolean`?{notMerge:n,lazyUpdate:r}:n,a=f.value;a&&R(a,t,i??void 0,!0)};(0,t.watch)(()=>e.option,e=>{if(!e){P=void 0;return}if(v.value){b("`option` prop changes are ignored when `manual-update` is `true`.");return}let t=f.value;t&&R(t,e)},{deep:!0}),(0,t.watch)([v,C],()=>{B(),V()},{deep:!0}),(0,t.watch)(S,t=>{let n=f.value;n&&(n.setTheme(t||{}),e.option&&!v.value&&R(n,e.option))},{deep:!0}),(0,t.watchEffect)(()=>{let t=f.value;e.group&&t&&(t.group=e.group)});let U=o(f);return u(f,y,x),s(f,_,l),(0,t.onMounted)(V),(0,t.onBeforeUnmount)(()=>{if(Y&&l.value){l.value.__dispose=B;return}B()}),i({setOption:H,root:l,chart:f,...U}),(()=>{let e=[(0,t.h)(`div`,{ref:d,class:`echarts-host`})];if(p.value){let t=O();t&&e.push(t)}if(N){let t=N();t&&e.push(t)}return(0,t.h)(k,{...T.value,...E.value,ref:l,class:[`echarts`,T.value.class]},e)})}}),te=i({INIT_OPTIONS_KEY:()=>Z,LOADING_OPTIONS_KEY:()=>l,THEME_KEY:()=>X,UPDATE_OPTIONS_KEY:()=>Q,default:()=>$}),$=ee;return{...$,...te}});
|
|
5
|
+
//# sourceMappingURL=index.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.min.js","names":["Teleport","cssRules","useGraphic","ECharts","ECharts","exported"],"sources":["../src/composables/api.ts","../src/composables/autoresize.ts","../src/composables/loading.ts","../src/utils.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 \"getOption\",\n \"resize\",\n \"dispatchAction\",\n \"convertToPixel\",\n \"convertFromPixel\",\n \"containPixel\",\n \"getDataURL\",\n \"getConnectedDataURL\",\n \"appendData\",\n \"clear\",\n \"isDisposed\",\n \"dispose\",\n] as const;\n\ntype MethodName = (typeof METHOD_NAMES)[number];\n\nexport type PublicMethods = Pick<EChartsType, MethodName>;\n\nexport function usePublicAPI(chart: Ref<EChartsType | undefined>): PublicMethods {\n function makePublicMethod<T extends MethodName>(name: T): EChartsType[T] {\n // Return a function that matches the signature of EChartsType[T]\n const fn = function (this: unknown, ...args: unknown[]): unknown {\n if (!chart.value) {\n throw new Error(\"ECharts is not initialized yet.\");\n }\n // Use Reflect.apply to call the method with proper context\n return Reflect.apply(chart.value[name], chart.value, args);\n };\n return fn as EChartsType[T];\n }\n\n // Build the methods object with proper typing\n const methods = METHOD_NAMES.reduce(\n (acc, name) => {\n acc[name] = makePublicMethod(name);\n return acc;\n },\n {} as Record<MethodName, unknown>,\n ) as PublicMethods;\n\n return methods;\n}\n","import { watch } from \"vue\";\nimport { throttle } from \"echarts/core\";\n\nimport type { Ref, PropType } from \"vue\";\nimport type { EChartsType, AutoResize } from \"../types\";\n\nexport function useAutoresize(\n chart: Ref<EChartsType | undefined>,\n autoresize: Ref<AutoResize | undefined>,\n root: Ref<HTMLElement | undefined>,\n): void {\n watch([root, chart, autoresize], ([root, chart, autoresize], _, onCleanup) => {\n let ro: ResizeObserver | null = null;\n\n if (root && chart && autoresize) {\n const { offsetWidth, offsetHeight } = root;\n const autoresizeOptions = autoresize === true ? {} : autoresize;\n const { throttle: wait = 100, onResize } = autoresizeOptions;\n\n let initialResizeTriggered = false;\n\n const callback = () => {\n chart.resize();\n onResize?.();\n };\n\n const resizeCallback = wait ? throttle(callback, wait) : callback;\n\n ro = new ResizeObserver(() => {\n // We just skip ResizeObserver's initial resize callback if the\n // size has not changed since the chart is rendered.\n if (!initialResizeTriggered) {\n initialResizeTriggered = true;\n if (root.offsetWidth === offsetWidth && root.offsetHeight === offsetHeight) {\n return;\n }\n }\n\n // Skip if container has zero size\n if (root.offsetWidth === 0 || root.offsetHeight === 0) {\n return;\n }\n\n resizeCallback();\n });\n ro.observe(root);\n }\n\n onCleanup(() => {\n if (ro) {\n ro.disconnect();\n ro = null;\n }\n });\n });\n}\n\nexport const autoresizeProps = {\n autoresize: [Boolean, Object] as PropType<AutoResize>,\n};\n","import { inject, computed, watchEffect, toValue } 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 loadingOptions: Ref<LoadingOptions | undefined>,\n): void {\n const defaultLoadingOptions = inject(LOADING_OPTIONS_KEY, {});\n const realLoadingOptions = computed(() => ({\n ...toValue(defaultLoadingOptions),\n ...(loadingOptions.value ?? {}),\n }));\n\n watchEffect(() => {\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n if (loading.value) {\n instance.showLoading(realLoadingOptions.value);\n } else {\n instance.hideLoading();\n }\n });\n}\n\nexport const loadingProps = {\n loading: Boolean,\n loadingOptions: Object as PropType<LoadingOptions>,\n};\n","import { warn as vueWarn } from \"vue\";\n\nexport type AttrMap = Record<string, unknown>;\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\nexport type 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 omitOn(attrs: AttrMap): AttrMap {\n const result: AttrMap = {};\n for (const key in attrs) {\n if (!isOn(key)) {\n result[key] = attrs[key];\n }\n }\n\n return result;\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 isSameSet<T>(a: T[], b: T[]): boolean {\n const setA = new Set(a);\n const setB = new Set(b);\n\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (const val of setA) {\n if (!setB.has(val)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isPlainObject(v: unknown): v is Record<string, unknown> {\n return v != null && typeof v === \"object\" && !Array.isArray(v);\n}\n\nconst LOG_PREFIX = \"[@macroui/echarts-vue]\";\n\nconst warned = new Set<string>();\n\nexport type WarnOptions = {\n onceKey?: string;\n onceStore?: Set<string>;\n};\n\nexport type Warn = (message: string, options?: WarnOptions) => void;\n\nexport const warn: Warn = (message, options) => {\n if (options?.onceKey) {\n const store = options.onceStore ?? warned;\n if (store.has(options.onceKey)) {\n return;\n }\n store.add(options.onceKey);\n }\n\n vueWarn(`${LOG_PREFIX} ${message}`);\n};\n\nexport function __resetWarnState(): void {\n warned.clear();\n}\n","import { h, Teleport, onUpdated, onUnmounted, onMounted, shallowRef, shallowReactive } from \"vue\";\nimport type { Slots, SlotsType } from \"vue\";\nimport type { Option } from \"../types\";\nimport { isBrowser, isPlainObject, isSameSet, 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;\ntype SlotPrefix = keyof typeof SLOT_OPTION_PATHS;\ntype SlotName = SlotPrefix | `${SlotPrefix}-${string}`;\ntype SlotContainerMap = Partial<Record<SlotName, HTMLElement>>;\ntype SlotInitMap = Partial<Record<SlotName, boolean>>;\ntype SlotParamMap = Partial<Record<SlotName, unknown>>;\nconst SLOT_PREFIXES: SlotPrefix[] = [\"tooltip\", \"dataView\"];\n\nfunction isValidSlotName(key: string): key is SlotName {\n return SLOT_PREFIXES.some((slotPrefix) => key === slotPrefix || key.startsWith(slotPrefix + \"-\"));\n}\n\ntype Container = Record<string, unknown> | unknown[];\n\nfunction ensureChild(parent: Container, seg: string, nextSeg?: string): Container | undefined {\n const next = readSegment(parent, seg);\n\n if (Array.isArray(next)) {\n const cloned = [...next];\n writeSegment(parent, seg, cloned);\n return cloned;\n }\n if (isPlainObject(next)) {\n const cloned: Record<string, unknown> = { ...next };\n writeSegment(parent, seg, cloned);\n return cloned;\n }\n if (next === undefined) {\n const created = nextSeg && isValidArrayIndex(nextSeg) ? [] : {};\n writeSegment(parent, seg, created);\n return created;\n }\n return undefined;\n}\n\nfunction readSegment(parent: Container, seg: string): unknown {\n if (Array.isArray(parent)) {\n return parent[Number(seg)];\n }\n return parent[seg];\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\nexport function useSlotOption(slots: Slots, onSlotsChange: () => void) {\n const detachedRoot = isBrowser() ? document.createElement(\"div\") : undefined;\n const containers = shallowReactive<SlotContainerMap>({});\n const initialized = shallowReactive<SlotInitMap>({});\n const params = shallowReactive<SlotParamMap>({});\n const isMounted = shallowRef(false);\n const warnedInvalidSlots = new Set<string>();\n\n const collectSlotNames = (warnInvalid: boolean): SlotName[] => {\n const result: SlotName[] = [];\n for (const key of Object.keys(slots)) {\n if (key === \"graphic\") {\n continue;\n }\n if (isValidSlotName(key)) {\n result.push(key);\n } else if (warnInvalid && !warnedInvalidSlots.has(key)) {\n warn(`Invalid slot name: ${key}`);\n warnedInvalidSlots.add(key);\n }\n }\n return result;\n };\n\n let slotNames = collectSlotNames(false);\n\n const render = () => {\n const names = collectSlotNames(false);\n if (names.length === 0 || !isMounted.value || !detachedRoot) {\n return undefined;\n }\n\n return h(\n Teleport,\n { to: detachedRoot },\n names.map((slotName) => {\n const slot = slots[slotName];\n const slotContent = initialized[slotName] ? slot?.(params[slotName]) : undefined;\n return h(\n \"div\",\n {\n key: slotName,\n ref: (el) => {\n if (el instanceof HTMLElement) {\n containers[slotName] = el;\n }\n },\n style: { display: \"contents\" },\n },\n slotContent,\n );\n }),\n );\n };\n\n function patchOption(src: Option): Option {\n const root: Option = { ...src };\n const names = collectSlotNames(true);\n\n for (const key of names) {\n const prefix: SlotPrefix = key.startsWith(\"tooltip\") ? \"tooltip\" : \"dataView\";\n const rest = key.slice(prefix.length);\n const parts = rest ? rest.slice(1).split(\"-\") : [];\n const tail = SLOT_OPTION_PATHS[prefix];\n const path = [...parts, ...tail];\n\n let current: Container | undefined = root;\n for (let i = 0; i < path.length - 1; i++) {\n current = ensureChild(current, path[i], path[i + 1]);\n if (!current) {\n break;\n }\n }\n if (!current) {\n continue;\n }\n\n const leaf = path[path.length - 1];\n const formatter = (payload: unknown): HTMLElement | undefined => {\n initialized[key] = true;\n params[key] = payload;\n return containers[key];\n };\n writeSegment(current, leaf, formatter);\n }\n\n return root;\n }\n\n onUpdated(() => {\n const nextSlotNames = collectSlotNames(false);\n if (!isSameSet(nextSlotNames, slotNames)) {\n const nextSlotNameSet = new Set(nextSlotNames);\n for (const key of slotNames) {\n if (!nextSlotNameSet.has(key)) {\n delete params[key];\n delete initialized[key];\n delete containers[key];\n }\n }\n slotNames = nextSlotNames;\n onSlotsChange();\n }\n });\n\n onMounted(() => {\n isMounted.value = true;\n });\n\n onUnmounted(() => {\n detachedRoot?.remove();\n });\n\n return {\n render,\n patchOption,\n };\n}\n\nexport type SlotsTypes = SlotsType<\n Record<\"tooltip\" | `tooltip-${string}`, TooltipComponentFormatterCallbackParams> &\n Record<\"dataView\" | `dataView-${string}`, Option> &\n VChartSlotsExtension\n>;\n","import { isBrowser } from \"./utils\";\n\nlet registered: boolean | null = null;\n\nexport const TAG_NAME = \"x-macroui-echarts\";\n\nexport interface EChartsElement extends HTMLElement {\n __dispose: (() => void) | null;\n}\n\nexport function register(): boolean {\n if (registered != null) {\n return registered;\n }\n\n const registry = globalThis.customElements;\n\n if (!isBrowser() || !registry?.get) {\n registered = false;\n return registered;\n }\n\n if (!registry.get(TAG_NAME)) {\n try {\n class ECElement extends HTMLElement implements EChartsElement {\n __dispose: (() => void) | null = null;\n\n disconnectedCallback(): void {\n if (this.__dispose) {\n this.__dispose();\n this.__dispose = null;\n }\n }\n }\n\n registry.define(TAG_NAME, ECElement);\n } catch {\n registered = false;\n return registered;\n }\n }\n\n registered = true;\n return registered;\n}\n\n// Test helper to reset cached registration state.\nexport function __resetRegisterState(): void {\n registered = null;\n}\n","import type { Ref, Slots, VNodeChild } from \"vue\";\n\nimport type { EChartsType, Option, UpdateOptions } from \"../types\";\n\nexport type GraphicContext = {\n chart: Ref<EChartsType | undefined>;\n slots: Slots;\n manualUpdate: Ref<boolean>;\n requestUpdate: (updateOptions?: UpdateOptions) => boolean;\n};\n\nexport type GraphicRuntime = {\n patchOption: (option: Option) => Option;\n render: () => VNodeChild;\n};\n\nlet registeredRuntime: ((context: GraphicContext) => GraphicRuntime) | null = null;\n\nexport function registerRuntime(factory: (context: GraphicContext) => GraphicRuntime): void {\n if (registeredRuntime) {\n return;\n }\n registeredRuntime = factory;\n}\n\nexport function useRuntime(context: GraphicContext): GraphicRuntime | null {\n return registeredRuntime ? registeredRuntime(context) : null;\n}\n","import { computed, onScopeDispose, watchEffect } from \"vue\";\n\nimport type { ComputedRef, Ref } from \"vue\";\nimport type { EChartsType } from \"../types\";\nimport { isOn, parseOnEvent } from \"../utils\";\nimport type { AttrMap } from \"../utils\";\n\ntype EventHandler = (...args: unknown[]) => void;\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 once: boolean;\n handler: EventHandler;\n};\n\nfunction getEmitter(instance: EChartsType, zr: boolean): EventEmitter {\n return zr ? (instance.getZr() as EventEmitter) : (instance as EventEmitter);\n}\n\nfunction resolveHandlers(value: unknown): EventHandler[] {\n if (typeof value === \"function\") {\n return [value as EventHandler];\n }\n\n if (!Array.isArray(value)) {\n return [];\n }\n\n const handlers: EventHandler[] = [];\n for (const item of value) {\n if (typeof item === \"function\") {\n handlers.push(item as EventHandler);\n }\n }\n return handlers;\n}\n\nfunction createBoundHandler(\n emitter: EventEmitter,\n event: string,\n value: unknown,\n once: boolean,\n): EventHandler | undefined {\n const handlers = resolveHandlers(value);\n if (handlers.length === 0) {\n return undefined;\n }\n\n const invoke = (...args: unknown[]): void => {\n for (const handler of handlers) {\n handler(...args);\n }\n };\n\n if (!once) {\n return invoke;\n }\n\n let called = false;\n const onceHandler: EventHandler = (...args: unknown[]): void => {\n if (called) {\n return;\n }\n called = true;\n invoke(...args);\n emitter.off(event, onceHandler);\n };\n\n return onceHandler;\n}\n\nfunction toNativeEventKey(event: string, once: boolean): string | null {\n if (!event.startsWith(\"native:\")) {\n return null;\n }\n\n const nativeEvent = event.slice(7);\n if (!nativeEvent) {\n return null;\n }\n\n const head = nativeEvent.charAt(0).toUpperCase();\n const tail = nativeEvent.slice(1);\n return `on${head}${tail}${once ? \"Once\" : \"\"}`;\n}\n\nexport function useReactiveChartListeners(\n chart: Ref<EChartsType | undefined>,\n attrs: AttrMap,\n): void {\n const bindings = new Map<string, ListenerBinding>();\n let activeInstance: 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 watchEffect(() => {\n const instance = chart.value;\n if (!instance) {\n clearBindings();\n activeInstance = undefined;\n return;\n }\n\n if (activeInstance && activeInstance !== instance) {\n clearBindings();\n }\n activeInstance = instance;\n\n const seen = new Set<string>();\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed || parsed.event.startsWith(\"native:\")) {\n continue;\n }\n\n const zr = parsed.event.startsWith(\"zr:\");\n const event = zr ? parsed.event.slice(3) : parsed.event;\n const source = attrs[key];\n const emitter = getEmitter(instance, zr);\n const existing = bindings.get(key);\n\n if (\n existing &&\n existing.source === source &&\n existing.event === event &&\n existing.once === parsed.once\n ) {\n seen.add(key);\n continue;\n }\n\n if (existing) {\n existing.emitter.off(existing.event, existing.handler);\n bindings.delete(key);\n }\n\n const handler = createBoundHandler(emitter, event, source, parsed.once);\n if (!handler) {\n continue;\n }\n\n emitter.on(event, handler);\n bindings.set(key, {\n emitter,\n event,\n source,\n once: parsed.once,\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 onScopeDispose(clearBindings);\n}\n\nexport function useReactiveEventAttrs(attrs: AttrMap): {\n nonEventAttrs: ComputedRef<AttrMap>;\n nativeListeners: ComputedRef<AttrMap>;\n} {\n const nonEventAttrs = computed(() => {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n if (isOn(key)) {\n continue;\n }\n result[key] = attrs[key];\n }\n\n return result;\n });\n\n const nativeListeners = computed(() => {\n const result: AttrMap = {};\n\n for (const key in attrs) {\n const parsed = parseOnEvent(key);\n if (!parsed) {\n continue;\n }\n\n const nativeKey = toNativeEventKey(parsed.event, parsed.once);\n if (!nativeKey) {\n continue;\n }\n result[nativeKey] = attrs[key];\n }\n\n return result;\n });\n\n return {\n nonEventAttrs,\n nativeListeners,\n };\n}\n","import type { Option } from \"./types\";\nimport { isPlainObject } from \"./utils\";\n\nexport interface UpdatePlan {\n notMerge: boolean;\n replaceMerge?: string[];\n}\n\n/** Summary of a top-level array key for deletion detection. */\nexport interface ArraySummary {\n /** Unique, sorted string ids extracted from items' `id` field. */\n idsSorted: string[];\n /** Count of items without an `id` field. */\n noIdCount: number;\n}\n\n/** Minimal signature of an option used to decide setOption behavior. */\nexport interface Signature {\n /** Lengths of `option.options` and `option.media` (0 if not arrays). */\n optionsLength: number;\n mediaLength: number;\n /** Map of array-typed top-level keys to their summaries. */\n arrays: Record<string, ArraySummary | undefined>;\n /** Sorted list of object-typed top-level keys. */\n objects: string[];\n /** Sorted list of scalar-typed top-level keys (string|number|boolean|null). */\n scalars: string[];\n}\n\nexport interface PlannedUpdate {\n option: Option;\n signature: Signature;\n plan: UpdatePlan;\n}\n\n/**\n * Read an item's `id` as a string.\n * Only accept string or number. Other types are ignored to surface inconsistent data early.\n */\nfunction readId(item: unknown): string | undefined {\n if (!isPlainObject(item)) {\n return undefined;\n }\n\n const raw = item.id;\n if (typeof raw === \"string\") {\n return raw;\n }\n\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n return String(raw);\n }\n\n return undefined;\n}\n\nfunction summarizeArray(items: unknown[]): ArraySummary {\n const ids = new Set<string>();\n let noIdCount = 0;\n\n for (let i = 0; i < items.length; i++) {\n const id = readId(items[i]);\n if (id === undefined) {\n noIdCount++;\n continue;\n }\n ids.add(id);\n }\n\n return {\n idsSorted: ids.size > 0 ? Array.from(ids).sort() : [],\n noIdCount,\n };\n}\n\n/**\n * Build a minimal signature from a full ECharts option.\n * Only top-level keys are inspected.\n */\nexport function buildSignature(option: Option): Signature {\n const opt = option as Record<string, unknown>;\n\n const optionsLength = Array.isArray(opt.options) ? opt.options.length : 0;\n const mediaLength = Array.isArray(opt.media) ? opt.media.length : 0;\n\n const arrays: Record<string, ArraySummary | undefined> = Object.create(null);\n const objects: string[] = [];\n const scalars: string[] = [];\n\n for (const key of Object.keys(opt)) {\n if (key === \"options\" || key === \"media\") {\n continue;\n }\n\n const value = opt[key];\n if (Array.isArray(value)) {\n arrays[key] = summarizeArray(value);\n continue;\n }\n\n if (isPlainObject(value)) {\n objects.push(key);\n continue;\n }\n\n // scalar: string | number | boolean | null (undefined is treated as \"absent\")\n if (value !== undefined) {\n scalars.push(key);\n }\n }\n\n if (objects.length > 1) {\n objects.sort();\n }\n if (scalars.length > 1) {\n scalars.sort();\n }\n\n return {\n optionsLength,\n mediaLength,\n arrays,\n objects,\n scalars,\n };\n}\n\nfunction diffKeys(prevKeys: readonly string[], nextKeys: readonly string[]): string[] {\n if (prevKeys.length === 0) {\n return [];\n }\n if (nextKeys.length === 0) {\n return prevKeys.slice();\n }\n\n const nextSet = new Set(nextKeys);\n const missing: string[] = [];\n\n for (let i = 0; i < prevKeys.length; i++) {\n const key = prevKeys[i];\n if (!nextSet.has(key)) {\n missing.push(key);\n }\n }\n\n return missing;\n}\n\nfunction hasMissingIds(prevIds: readonly string[], nextIds: readonly string[]): boolean {\n if (prevIds.length === 0) {\n return false;\n }\n if (nextIds.length === 0) {\n return true;\n }\n\n const nextSet = new Set(nextIds);\n for (let i = 0; i < prevIds.length; i++) {\n if (!nextSet.has(prevIds[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldForceNotMerge(prev: Signature, next: Signature): boolean {\n if (next.optionsLength < prev.optionsLength) {\n return true;\n }\n\n if (next.mediaLength < prev.mediaLength) {\n return true;\n }\n\n return diffKeys(prev.scalars, next.scalars).length > 0;\n}\n\nfunction collectObjectOverrides(prev: Signature, next: Signature): Map<string, null | []> {\n const overrides = new Map<string, null | []>();\n\n const missingObjects = diffKeys(prev.objects, next.objects);\n for (let i = 0; i < missingObjects.length; i++) {\n const key = missingObjects[i];\n const movedToArray = next.arrays[key] !== undefined;\n const movedToScalar = next.scalars.includes(key);\n if (!movedToArray && !movedToScalar) {\n overrides.set(key, null);\n }\n }\n\n return overrides;\n}\n\nfunction collectArrayChanges(\n prev: Signature,\n next: Signature,\n overrides: Map<string, null | []>,\n): Set<string> {\n const replaceMerge = new Set<string>();\n\n for (const key of Object.keys(prev.arrays)) {\n const prevArray = prev.arrays[key];\n if (!prevArray) {\n continue;\n }\n\n const nextArray = next.arrays[key];\n if (!nextArray) {\n if (prevArray.idsSorted.length > 0 || prevArray.noIdCount > 0) {\n overrides.set(key, []);\n replaceMerge.add(key);\n }\n continue;\n }\n\n if (hasMissingIds(prevArray.idsSorted, nextArray.idsSorted)) {\n replaceMerge.add(key);\n continue;\n }\n\n if (nextArray.noIdCount < prevArray.noIdCount) {\n replaceMerge.add(key);\n }\n }\n\n return replaceMerge;\n}\n\nfunction applyOverrides(\n option: Option,\n next: Signature,\n overrides: Map<string, null | []>,\n): { option: Option; signature: Signature } {\n if (overrides.size === 0) {\n return {\n option,\n signature: next,\n };\n }\n\n const normalizedOption: Option = { ...option };\n overrides.forEach((value, key) => {\n normalizedOption[key] = value;\n });\n\n return {\n option: normalizedOption,\n signature: buildSignature(normalizedOption),\n };\n}\n\n/**\n * Produce an update plan plus a normalized option that encodes common deletions.\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 option,\n signature: next,\n plan: { notMerge: false },\n };\n }\n\n if (shouldForceNotMerge(prev, next)) {\n return {\n option,\n signature: next,\n plan: { notMerge: true },\n };\n }\n\n const overrides = collectObjectOverrides(prev, next);\n const replaceMergeSet = collectArrayChanges(prev, next, overrides);\n const normalized = applyOverrides(option, next, overrides);\n\n const replaceMerge = replaceMergeSet.size > 0 ? Array.from(replaceMergeSet).sort() : undefined;\n\n return {\n option: normalized.option,\n signature: normalized.signature,\n plan: replaceMerge ? { notMerge: false, replaceMerge } : { notMerge: false },\n };\n}\n","export default \"x-macroui-echarts{display:block;width:100%;height:100%;min-width:0;}\\nx-macroui-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}\\nx-macroui-echarts>.echarts-host>:first-child,x-macroui-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 toRefs,\n watch,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n h,\n nextTick,\n watchEffect,\n toValue,\n} from \"vue\";\nimport { init as initChart } from \"echarts/core\";\n\nimport type { InjectionKey, PropType, VNodeChild } from \"vue\";\n\nimport {\n usePublicAPI,\n useAutoresize,\n autoresizeProps,\n useLoading,\n loadingProps,\n useSlotOption,\n} from \"./composables\";\nimport type { PublicMethods, SlotsTypes } from \"./composables\";\nimport { warn } from \"./utils\";\nimport type { AttrMap } from \"./utils\";\nimport { register, TAG_NAME } from \"./wc\";\nimport { useRuntime as useGraphic } from \"./graphic/runtime\";\nimport { useReactiveChartListeners, useReactiveEventAttrs } 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} from \"./types\";\nimport type { EChartsElement } from \"./wc\";\n\nimport \"./style\";\n\nconst wcRegistered = register();\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\";\n\nexport default defineComponent({\n name: \"Echarts\",\n inheritAttrs: false,\n props: {\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 emits: {} as Emits,\n slots: Object as SlotsTypes,\n setup(props, { attrs, expose, slots }) {\n const attrsMap: AttrMap = attrs;\n const root = shallowRef<EChartsElement>();\n const chartHost = shallowRef<HTMLDivElement>();\n const chart = shallowRef<EChartsType>();\n const isReady = shallowRef(false);\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, manualUpdate, loading, loadingOptions } = toRefs(props);\n\n const realTheme = computed(() => props.theme || toValue(defaultTheme));\n const realInitOptions = computed(\n () => props.initOptions || toValue(defaultInitOptions) || undefined,\n );\n const realUpdateOptions = computed(() => props.updateOptions || toValue(defaultUpdateOptions));\n\n const { nonEventAttrs, nativeListeners } = useReactiveEventAttrs(attrsMap);\n\n const { render: renderSlot, patchOption } = useSlotOption(slots, requestUpdate);\n\n const { patchOption: patchGraphicOption, render: renderGraphic } =\n useGraphic({\n chart,\n slots,\n manualUpdate,\n requestUpdate,\n }) ?? {};\n\n let lastSignature: Signature | undefined;\n\n function withGraphicReplaceMerge(updateOptions?: UpdateOptions): UpdateOptions | undefined {\n if (!slots.graphic || !patchGraphicOption) {\n return updateOptions;\n }\n\n const replaceMerge = [...(updateOptions?.replaceMerge ?? []), \"graphic\"];\n return {\n ...updateOptions,\n replaceMerge: [...new Set(replaceMerge)],\n };\n }\n\n function applyOption(\n instance: EChartsType,\n option: Option,\n override?: UpdateOptions,\n manual = false,\n ): void {\n const slotted = patchOption(option);\n const patched = patchGraphicOption ? patchGraphicOption(slotted) : slotted;\n\n if (manual) {\n instance.setOption(patched, withGraphicReplaceMerge(override) ?? {});\n lastSignature = undefined;\n return;\n }\n\n if (override) {\n const planned = planUpdate(lastSignature, patched);\n instance.setOption(patched, withGraphicReplaceMerge(override));\n lastSignature = planned.signature;\n return;\n }\n\n if (realUpdateOptions.value) {\n instance.setOption(patched, withGraphicReplaceMerge(realUpdateOptions.value));\n lastSignature = undefined;\n return;\n }\n\n const planned = planUpdate(lastSignature, patched);\n const updateOptions: UpdateOptions = {\n notMerge: planned.plan.notMerge,\n };\n const replacements = (planned.plan.replaceMerge ?? []).filter(\n (key): key is string => key != null,\n );\n if (replacements.length > 0) {\n updateOptions.replaceMerge = [...new Set(replacements)];\n }\n instance.setOption(planned.option, withGraphicReplaceMerge(updateOptions));\n lastSignature = planned.signature;\n }\n\n function requestUpdate(updateOptions?: UpdateOptions): boolean {\n const instance = chart.value;\n const option = props.option;\n if (!instance || !option || manualUpdate.value) {\n return false;\n }\n\n applyOption(instance, option, updateOptions);\n return true;\n }\n\n if (slots.graphic && !patchGraphicOption) {\n warn(\n \"Detected `#graphic` slot but no extension is registered. Import from `@macroui/echarts-vue/graphic` to enable it.\",\n );\n }\n\n useReactiveChartListeners(chart, attrsMap);\n\n function cleanup(): void {\n const instance = chart.value;\n if (instance) {\n instance.dispose();\n chart.value = undefined;\n }\n isReady.value = false;\n lastSignature = undefined;\n }\n\n function init(): void {\n isReady.value = false;\n\n const host = chartHost.value as HTMLDivElement;\n const instance = (chart.value = initChart(host, realTheme.value, realInitOptions.value));\n\n if (props.group) {\n instance.group = props.group;\n }\n\n function resize(): void {\n if (!instance.isDisposed()) {\n instance.resize();\n }\n }\n\n function commit(): void {\n const option = props.option;\n if (!option) {\n return;\n }\n\n if (manualUpdate.value) {\n applyOption(instance, option, undefined, true);\n return;\n }\n\n applyOption(instance, option);\n }\n\n if (autoresize.value) {\n nextTick(() => {\n resize();\n commit();\n isReady.value = true;\n });\n return;\n }\n\n commit();\n isReady.value = true;\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 updateOptions = typeof notMerge === \"boolean\" ? { notMerge, lazyUpdate } : notMerge;\n\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n applyOption(instance, option, updateOptions ?? undefined, true);\n };\n\n watch(\n () => props.option,\n (option) => {\n if (!option) {\n lastSignature = undefined;\n return;\n }\n\n if (manualUpdate.value) {\n warn(\"`option` prop changes are ignored when `manual-update` is `true`.\");\n return;\n }\n\n const instance = chart.value;\n if (!instance) {\n return;\n }\n\n applyOption(instance, option);\n },\n { deep: true },\n );\n\n watch(\n [manualUpdate, realInitOptions],\n () => {\n cleanup();\n init();\n },\n {\n deep: true,\n },\n );\n\n watch(\n realTheme,\n (theme) => {\n const instance = chart.value;\n if (instance) {\n instance.setTheme(theme || {});\n\n if (props.option && !manualUpdate.value) {\n applyOption(instance, props.option);\n }\n }\n },\n {\n deep: true,\n },\n );\n\n watchEffect(() => {\n const instance = chart.value;\n if (props.group && instance) {\n instance.group = props.group;\n }\n });\n\n const publicApi = usePublicAPI(chart);\n\n useLoading(chart, loading, loadingOptions);\n\n useAutoresize(chart, autoresize, root);\n\n onMounted(init);\n\n onBeforeUnmount(() => {\n if (wcRegistered && root.value) {\n root.value.__dispose = cleanup;\n return;\n }\n\n cleanup();\n });\n\n const exposed = {\n setOption,\n root,\n chart,\n };\n expose({ ...exposed, ...publicApi });\n\n return (() => {\n const children: VNodeChild[] = [\n h(\"div\", {\n ref: chartHost,\n class: \"echarts-host\",\n }),\n ];\n\n if (isReady.value) {\n const teleported = renderSlot();\n if (teleported) {\n children.push(teleported);\n }\n }\n\n if (renderGraphic) {\n const graphic = renderGraphic();\n if (graphic) {\n children.push(graphic);\n }\n }\n\n return h(\n TAG_NAME,\n {\n ...nonEventAttrs.value,\n ...nativeListeners.value,\n ref: root,\n class: [\"echarts\", nonEventAttrs.value.class],\n },\n children,\n );\n }) as unknown as typeof exposed & PublicMethods;\n },\n});\n","import ECharts from \"./ECharts\";\n\n// Optional entries can augment this interface to add extra named slots.\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface VChartSlotsExtension {}\n\nexport default ECharts;\nexport * from \"./ECharts\";\n","import \"echarts\";\nimport ECharts, * as exported from \"./index\";\n\nexport default {\n ...ECharts,\n ...exported,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { warn } from "vue";
|
|
2
|
+
//#region src/utils.ts
|
|
3
|
+
function isBrowser() {
|
|
4
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
5
|
+
}
|
|
6
|
+
const onRE = /^on[^a-z]/;
|
|
7
|
+
const isOn = (key) => onRE.test(key);
|
|
8
|
+
function parseOnEvent(key) {
|
|
9
|
+
if (!isOn(key)) return null;
|
|
10
|
+
let event = key.charAt(2).toLowerCase() + key.slice(3);
|
|
11
|
+
const once = event.endsWith("Once");
|
|
12
|
+
if (once) event = event.slice(0, -4);
|
|
13
|
+
return {
|
|
14
|
+
event,
|
|
15
|
+
once
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function isValidArrayIndex(key) {
|
|
19
|
+
const num = Number(key);
|
|
20
|
+
return Number.isInteger(num) && num >= 0 && num < Math.pow(2, 32) - 1 && String(num) === key;
|
|
21
|
+
}
|
|
22
|
+
function isSameSet(a, b) {
|
|
23
|
+
const setA = new Set(a);
|
|
24
|
+
const setB = new Set(b);
|
|
25
|
+
if (setA.size !== setB.size) return false;
|
|
26
|
+
for (const val of setA) if (!setB.has(val)) return false;
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function isPlainObject(v) {
|
|
30
|
+
return v != null && typeof v === "object" && !Array.isArray(v);
|
|
31
|
+
}
|
|
32
|
+
const LOG_PREFIX = "[@macroui/echarts-vue]";
|
|
33
|
+
const warned = /* @__PURE__ */ new Set();
|
|
34
|
+
const warn$1 = (message, options) => {
|
|
35
|
+
if (options?.onceKey) {
|
|
36
|
+
const store = options.onceStore ?? warned;
|
|
37
|
+
if (store.has(options.onceKey)) return;
|
|
38
|
+
store.add(options.onceKey);
|
|
39
|
+
}
|
|
40
|
+
warn(`${LOG_PREFIX} ${message}`);
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/graphic/runtime.ts
|
|
44
|
+
let registeredRuntime = null;
|
|
45
|
+
function registerRuntime(factory) {
|
|
46
|
+
if (registeredRuntime) return;
|
|
47
|
+
registeredRuntime = factory;
|
|
48
|
+
}
|
|
49
|
+
function useRuntime(context) {
|
|
50
|
+
return registeredRuntime ? registeredRuntime(context) : null;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { isPlainObject as a, parseOnEvent as c, isOn as i, warn$1 as l, useRuntime as n, isSameSet as o, isBrowser as r, isValidArrayIndex as s, registerRuntime as t };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=runtime-CcSlBnVC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-CcSlBnVC.js","names":["warn"],"sources":["../src/utils.ts","../src/graphic/runtime.ts"],"sourcesContent":["import { warn as vueWarn } from \"vue\";\n\nexport type AttrMap = Record<string, unknown>;\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\nexport type 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 omitOn(attrs: AttrMap): AttrMap {\n const result: AttrMap = {};\n for (const key in attrs) {\n if (!isOn(key)) {\n result[key] = attrs[key];\n }\n }\n\n return result;\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 isSameSet<T>(a: T[], b: T[]): boolean {\n const setA = new Set(a);\n const setB = new Set(b);\n\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (const val of setA) {\n if (!setB.has(val)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isPlainObject(v: unknown): v is Record<string, unknown> {\n return v != null && typeof v === \"object\" && !Array.isArray(v);\n}\n\nconst LOG_PREFIX = \"[@macroui/echarts-vue]\";\n\nconst warned = new Set<string>();\n\nexport type WarnOptions = {\n onceKey?: string;\n onceStore?: Set<string>;\n};\n\nexport type Warn = (message: string, options?: WarnOptions) => void;\n\nexport const warn: Warn = (message, options) => {\n if (options?.onceKey) {\n const store = options.onceStore ?? warned;\n if (store.has(options.onceKey)) {\n return;\n }\n store.add(options.onceKey);\n }\n\n vueWarn(`${LOG_PREFIX} ${message}`);\n};\n\nexport function __resetWarnState(): void {\n warned.clear();\n}\n","import type { Ref, Slots, VNodeChild } from \"vue\";\n\nimport type { EChartsType, Option, UpdateOptions } from \"../types\";\n\nexport type GraphicContext = {\n chart: Ref<EChartsType | undefined>;\n slots: Slots;\n manualUpdate: Ref<boolean>;\n requestUpdate: (updateOptions?: UpdateOptions) => boolean;\n};\n\nexport type GraphicRuntime = {\n patchOption: (option: Option) => Option;\n render: () => VNodeChild;\n};\n\nlet registeredRuntime: ((context: GraphicContext) => GraphicRuntime) | null = null;\n\nexport function registerRuntime(factory: (context: GraphicContext) => GraphicRuntime): void {\n if (registeredRuntime) {\n return;\n }\n registeredRuntime = factory;\n}\n\nexport function useRuntime(context: GraphicContext): GraphicRuntime | null {\n return registeredRuntime ? registeredRuntime(context) : null;\n}\n"],"mappings":";;AAIA,SAAgB,YAAqB;CACnC,OAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAC9D;AAIA,MAAM,OAAO;AACb,MAAa,QAAQ,QAAyB,KAAK,KAAK,GAAG;AAO3D,SAAgB,aAAa,KAAmC;CAC9D,IAAI,CAAC,KAAK,GAAG,GACX,OAAO;CAGT,IAAI,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;CACrD,MAAM,OAAO,MAAM,SAAS,MAAM;CAClC,IAAI,MACF,QAAQ,MAAM,MAAM,GAAG,EAAE;CAG3B,OAAO;EAAE;EAAO;CAAK;AACvB;AAaA,SAAgB,kBAAkB,KAAsB;CACtD,MAAM,MAAM,OAAO,GAAG;CACtB,OAAO,OAAO,UAAU,GAAG,KAAK,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,GAAG,MAAM;AAC3F;AAEA,SAAgB,UAAa,GAAQ,GAAiB;CACpD,MAAM,OAAO,IAAI,IAAI,CAAC;CACtB,MAAM,OAAO,IAAI,IAAI,CAAC;CAEtB,IAAI,KAAK,SAAS,KAAK,MACrB,OAAO;CAGT,KAAK,MAAM,OAAO,MAChB,IAAI,CAAC,KAAK,IAAI,GAAG,GACf,OAAO;CAIX,OAAO;AACT;AAEA,SAAgB,cAAc,GAA0C;CACtE,OAAO,KAAK,QAAQ,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC;AAC/D;AAEA,MAAM,aAAa;AAEnB,MAAM,yBAAS,IAAI,IAAY;AAS/B,MAAaA,UAAc,SAAS,YAAY;CAC9C,IAAI,SAAS,SAAS;EACpB,MAAM,QAAQ,QAAQ,aAAa;EACnC,IAAI,MAAM,IAAI,QAAQ,OAAO,GAC3B;EAEF,MAAM,IAAI,QAAQ,OAAO;CAC3B;CAEA,KAAQ,GAAG,WAAW,GAAG,SAAS;AACpC;;;AC1EA,IAAI,oBAA0E;AAE9E,SAAgB,gBAAgB,SAA4D;CAC1F,IAAI,mBACF;CAEF,oBAAoB;AACtB;AAEA,SAAgB,WAAW,SAAgD;CACzE,OAAO,oBAAoB,kBAAkB,OAAO,IAAI;AAC1D"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
x-macroui-echarts{display:block;width:100%;height:100%;min-width:0;}
|
|
2
|
+
x-macroui-echarts>.echarts-host{display:block;width:100%;height:100%;min-width:0;}
|
|
3
|
+
x-macroui-echarts>.echarts-host>:first-child,x-macroui-echarts>.echarts-host>:first-child>canvas{border-radius:inherit;}
|
package/package.json
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@macroui/echarts-vue",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Vue.js component for Apache ECharts™, themed with MacroUI (DaisyUI).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "MacroUI <peng.deyou@gmail.com>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://gitee.com/macroui/echarts-vue.git"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "dist/index.js",
|
|
16
|
+
"types": "dist/index.d.ts",
|
|
17
|
+
"unpkg": "dist/index.min.js",
|
|
18
|
+
"jsdelivr": "dist/index.min.js",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": "./dist/index.js",
|
|
21
|
+
"./style.css": "./dist/style.css",
|
|
22
|
+
"./graphic": {
|
|
23
|
+
"types": "./dist/graphic.d.ts",
|
|
24
|
+
"default": "./dist/graphic.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"dev": "vite",
|
|
29
|
+
"build": "tsdown",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.vitest.json",
|
|
31
|
+
"lint": "eslint .",
|
|
32
|
+
"lint:fix": "eslint . --fix",
|
|
33
|
+
"format": "oxfmt",
|
|
34
|
+
"publint": "publint",
|
|
35
|
+
"dev:build": "vite build",
|
|
36
|
+
"dev:preview": "vite preview",
|
|
37
|
+
"dev:typecheck": "vue-tsc -p ./demo",
|
|
38
|
+
"test:setup": "playwright install chromium",
|
|
39
|
+
"docs": "jiti ./scripts/docs.ts",
|
|
40
|
+
"release": "bumpp --execute \"pnpm run docs\" --all",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:coverage": "vitest run --coverage",
|
|
43
|
+
"test:watch": "vitest watch",
|
|
44
|
+
"test:browser": "vitest run --project browser",
|
|
45
|
+
"test:node": "vitest run --project node"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@macroui/macroui": "^4.3.0",
|
|
49
|
+
"@types/node": "^24.13.2",
|
|
50
|
+
"@typescript-eslint/utils": "^8.62.0",
|
|
51
|
+
"@vercel/analytics": "^2.0.1",
|
|
52
|
+
"@vitejs/plugin-vue": "^6.0.7",
|
|
53
|
+
"@vitest/browser-playwright": "^4.1.9",
|
|
54
|
+
"@vitest/coverage-istanbul": "^4.1.9",
|
|
55
|
+
"@vue/eslint-config-prettier": "^10.2.0",
|
|
56
|
+
"@vue/eslint-config-typescript": "^14.9.0",
|
|
57
|
+
"@vue/server-renderer": "^3.5.38",
|
|
58
|
+
"@vue/tsconfig": "^0.9.1",
|
|
59
|
+
"@vueuse/core": "^14.3.0",
|
|
60
|
+
"bumpp": "^11.1.0",
|
|
61
|
+
"comment-mark": "^2.0.1",
|
|
62
|
+
"echarts": "^6.1.0",
|
|
63
|
+
"echarts-gl": "^2.1.0",
|
|
64
|
+
"eslint": "^10.5.0",
|
|
65
|
+
"eslint-plugin-vue": "^10.9.2",
|
|
66
|
+
"jiti": "^2.7.0",
|
|
67
|
+
"lefthook": "^2.1.9",
|
|
68
|
+
"monaco-editor": "0.54.0",
|
|
69
|
+
"oxfmt": "^0.56.0",
|
|
70
|
+
"pinia": "^3.0.4",
|
|
71
|
+
"playwright": "^1.61.0",
|
|
72
|
+
"postcss": "^8.4.0",
|
|
73
|
+
"postcss-nested": "^7.0.2",
|
|
74
|
+
"publint": "^0.3.21",
|
|
75
|
+
"releaselog": "^8.0.0",
|
|
76
|
+
"tailwindcss": "^3.4.0",
|
|
77
|
+
"tsdown": "^0.22.3",
|
|
78
|
+
"typescript": "^6.0.3",
|
|
79
|
+
"unplugin-raw": "^0.7.0",
|
|
80
|
+
"vite": "8.1.0",
|
|
81
|
+
"vitest": "^4.1.9",
|
|
82
|
+
"vitest-browser-vue": "^2.1.0",
|
|
83
|
+
"vue": "^3.5.38",
|
|
84
|
+
"vue-component-type-helpers": "^3.3.5",
|
|
85
|
+
"vue-tsc": "^3.3.5"
|
|
86
|
+
},
|
|
87
|
+
"peerDependencies": {
|
|
88
|
+
"echarts": "^6.0.0",
|
|
89
|
+
"vue": "^3.3.0"
|
|
90
|
+
},
|
|
91
|
+
"packageManager": "pnpm@11.8.0"
|
|
92
|
+
}
|