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.
- package/README.md +12 -3
- package/README.zh-Hans.md +13 -3
- package/dist/graphic.d.ts +2 -3
- package/dist/graphic.js +147 -115
- package/dist/graphic.js.map +1 -1
- package/dist/index.js +158 -300
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/update-CWPvYl2M.js +239 -0
- package/dist/update-CWPvYl2M.js.map +1 -0
- package/package.json +10 -14
- package/dist/runtime-BSiQKM1W.js +0 -64
- package/dist/runtime-BSiQKM1W.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-CWPvYl2M.js","names":["warn"],"sources":["../src/utils.ts","../src/graphic/runtime.ts","../src/update.ts"],"sourcesContent":["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 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 { 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"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-echarts",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "Vue.js component for Apache ECharts™.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GU Yiling <justice360@gmail.com>",
|
|
@@ -26,13 +26,10 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^24.13.3",
|
|
29
|
-
"@typescript-eslint/utils": "^8.67.0",
|
|
30
29
|
"@vercel/analytics": "^2.0.1",
|
|
31
30
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
32
31
|
"@vitest/browser-playwright": "^4.1.11",
|
|
33
32
|
"@vitest/coverage-istanbul": "^4.1.11",
|
|
34
|
-
"@vue/eslint-config-prettier": "^10.2.0",
|
|
35
|
-
"@vue/eslint-config-typescript": "^14.9.0",
|
|
36
33
|
"@vue/runtime-core-3.3": "npm:@vue/runtime-core@3.3.0",
|
|
37
34
|
"@vue/server-renderer": "^3.5.41",
|
|
38
35
|
"@vue/tsconfig": "^0.9.1",
|
|
@@ -42,26 +39,25 @@
|
|
|
42
39
|
"echarts": "^6.1.0",
|
|
43
40
|
"echarts-6.0": "npm:echarts@6.0.0",
|
|
44
41
|
"echarts-gl": "^2.1.0",
|
|
45
|
-
"eslint": "^10.8.1",
|
|
46
|
-
"eslint-plugin-vue": "^10.10.0",
|
|
47
42
|
"jiti": "^2.7.0",
|
|
48
43
|
"lefthook": "^2.1.10",
|
|
49
44
|
"monaco-editor": "0.54.0",
|
|
50
|
-
"oxfmt": "^0.
|
|
45
|
+
"oxfmt": "^0.65.0",
|
|
46
|
+
"oxlint": "^1.81.0",
|
|
51
47
|
"pinia": "^4.0.3",
|
|
52
48
|
"playwright": "^1.62.1",
|
|
53
|
-
"postcss-nested": "^
|
|
54
|
-
"publint": "^0.3.
|
|
49
|
+
"postcss-nested": "^8.0.1",
|
|
50
|
+
"publint": "^0.3.24",
|
|
55
51
|
"releaselog": "^8.1.0",
|
|
56
52
|
"tsdown": "^0.22.14",
|
|
57
53
|
"typescript": "^6.0.3",
|
|
58
54
|
"unplugin-raw": "^0.7.0",
|
|
59
|
-
"vite": "8.2.
|
|
55
|
+
"vite": "8.2.2",
|
|
60
56
|
"vitest": "^4.1.11",
|
|
61
57
|
"vitest-browser-vue": "^2.1.0",
|
|
62
58
|
"vue": "^3.5.41",
|
|
63
|
-
"vue-component-type-helpers": "^3.3.
|
|
64
|
-
"vue-tsc": "^3.3.
|
|
59
|
+
"vue-component-type-helpers": "^3.3.11",
|
|
60
|
+
"vue-tsc": "^3.3.11"
|
|
65
61
|
},
|
|
66
62
|
"peerDependencies": {
|
|
67
63
|
"echarts": "^6.0.0",
|
|
@@ -71,8 +67,8 @@
|
|
|
71
67
|
"dev": "vite",
|
|
72
68
|
"build": "tsdown && tsc -p tsconfig.package.json && tsc -p tsconfig.package-echarts.json",
|
|
73
69
|
"typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.vitest.json",
|
|
74
|
-
"lint": "
|
|
75
|
-
"lint:fix": "
|
|
70
|
+
"lint": "oxlint .",
|
|
71
|
+
"lint:fix": "oxlint . --fix",
|
|
76
72
|
"format": "oxfmt",
|
|
77
73
|
"publint": "publint",
|
|
78
74
|
"dev:build": "vite build",
|
package/dist/runtime-BSiQKM1W.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { warn } from "vue";
|
|
2
|
-
//#region src/utils.ts
|
|
3
|
-
function hasEventHandler(value) {
|
|
4
|
-
return typeof value === "function" || Array.isArray(value) && value.length > 0;
|
|
5
|
-
}
|
|
6
|
-
function createEventInvoker(value) {
|
|
7
|
-
if (typeof value === "function") return value;
|
|
8
|
-
if (!Array.isArray(value) || value.length === 0) return;
|
|
9
|
-
return (...args) => {
|
|
10
|
-
let result;
|
|
11
|
-
for (const handler of value.slice()) result = handler(...args) || result;
|
|
12
|
-
return result;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function isBrowser() {
|
|
16
|
-
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
17
|
-
}
|
|
18
|
-
const onRE = /^on[^a-z]/;
|
|
19
|
-
const isOn = (key) => onRE.test(key);
|
|
20
|
-
function parseOnEvent(key) {
|
|
21
|
-
if (!isOn(key)) return null;
|
|
22
|
-
let event = key.charAt(2).toLowerCase() + key.slice(3);
|
|
23
|
-
const once = event.endsWith("Once");
|
|
24
|
-
if (once) event = event.slice(0, -4);
|
|
25
|
-
return {
|
|
26
|
-
event,
|
|
27
|
-
once
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function isValidArrayIndex(key) {
|
|
31
|
-
const num = Number(key);
|
|
32
|
-
return Number.isInteger(num) && num >= 0 && num < Math.pow(2, 32) - 1 && String(num) === key;
|
|
33
|
-
}
|
|
34
|
-
function isPlainObject(value) {
|
|
35
|
-
if (value == null || typeof value !== "object") return false;
|
|
36
|
-
const prototype = Object.getPrototypeOf(value);
|
|
37
|
-
return prototype === null || prototype === Object.prototype;
|
|
38
|
-
}
|
|
39
|
-
function hasZeroDimension(width, height) {
|
|
40
|
-
return width === 0 || height === 0;
|
|
41
|
-
}
|
|
42
|
-
function isIgnorableWatchChange(value, previous) {
|
|
43
|
-
if (Object.is(value, previous)) return value === null || typeof value !== "object";
|
|
44
|
-
if (!isPlainObject(value) || !isPlainObject(previous)) return false;
|
|
45
|
-
const keys = Object.keys(value);
|
|
46
|
-
return keys.length === Object.keys(previous).length && keys.every((key) => Object.hasOwn(previous, key) && Object.is(value[key], previous[key]));
|
|
47
|
-
}
|
|
48
|
-
const LOG_PREFIX = "[vue-echarts]";
|
|
49
|
-
function warn$1(message) {
|
|
50
|
-
warn(`${LOG_PREFIX} ${message}`);
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
//#region src/graphic/runtime.ts
|
|
54
|
-
let runtimeFactory = null;
|
|
55
|
-
function registerRuntime(factory) {
|
|
56
|
-
runtimeFactory = factory;
|
|
57
|
-
}
|
|
58
|
-
function useRuntime(context) {
|
|
59
|
-
return runtimeFactory ? runtimeFactory(context) : null;
|
|
60
|
-
}
|
|
61
|
-
//#endregion
|
|
62
|
-
export { hasZeroDimension as a, isOn as c, parseOnEvent as d, warn$1 as f, hasEventHandler as i, isPlainObject as l, useRuntime as n, isBrowser as o, createEventInvoker as r, isIgnorableWatchChange as s, registerRuntime as t, isValidArrayIndex as u };
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=runtime-BSiQKM1W.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-BSiQKM1W.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>;\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 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"],"mappings":";;AAKA,SAAgB,gBAAgB,OAAyB;CACvD,OAAO,OAAO,UAAU,cAAe,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS;AAChF;AAEA,SAAgB,mBAAmB,OAA0C;CAC3E,IAAI,OAAO,UAAU,YACnB,OAAO;CAGT,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAC5C;CAGF,QAAQ,GAAG,SAA6B;EACtC,IAAI;EACJ,KAAK,MAAM,WAAW,MAAM,MAAM,GAChC,SAAS,QAAQ,GAAG,IAAI,KAAK;EAE/B,OAAO;CACT;AACF;AAEA,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;AAEA,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,cAAc,OAAkD;CAC9E,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,OAAO;CAET,MAAM,YAAY,OAAO,eAAe,KAAK;CAC7C,OAAO,cAAc,QAAQ,cAAc,OAAO;AACpD;AAEA,SAAgB,iBAAiB,OAAe,QAAyB;CACvE,OAAO,UAAU,KAAK,WAAW;AACnC;AAEA,SAAgB,uBAAuB,OAAgB,UAA4B;CACjF,IAAI,OAAO,GAAG,OAAO,QAAQ,GAC3B,OAAO,UAAU,QAAQ,OAAO,UAAU;CAG5C,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,QAAQ,GAClD,OAAO;CAGT,MAAM,OAAO,OAAO,KAAK,KAAK;CAC9B,OACE,KAAK,WAAW,OAAO,KAAK,QAAQ,CAAC,CAAC,UACtC,KAAK,OAAO,QAAQ,OAAO,OAAO,UAAU,GAAG,KAAK,OAAO,GAAG,MAAM,MAAM,SAAS,IAAI,CAAC;AAE5F;AAEA,MAAM,aAAa;AAEnB,SAAgBA,OAAK,SAAuB;CAC1C,KAAQ,GAAG,WAAW,GAAG,SAAS;AACpC;;;AC7EA,IAAI,iBAAuE;AAE3E,SAAgB,gBAAgB,SAA4D;CAC1F,iBAAiB;AACnB;AAEA,SAAgB,WAAW,SAAgD;CACzE,OAAO,iBAAiB,eAAe,OAAO,IAAI;AACpD"}
|