vue-echarts 8.3.0 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/README.zh-Hans.md +6 -2
- package/dist/graphic.d.ts +26 -26
- package/dist/graphic.js +34 -37
- package/dist/graphic.js.map +1 -1
- package/dist/{index-BujxhN-1.d.ts → index-GjFScMW2.d.ts} +6 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +60 -57
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +3 -3
- package/dist/index.min.js.map +1 -1
- package/dist/style.css +2 -2
- package/dist/{update-CWPvYl2M.js → update-DiQcDAnW.js} +7 -8
- package/dist/update-DiQcDAnW.js.map +1 -0
- package/package.json +22 -19
- package/dist/update-CWPvYl2M.js.map +0 -1
package/README.md
CHANGED
|
@@ -121,8 +121,8 @@ Drop `<script>` inside your HTML file and access the component via `window.VueEC
|
|
|
121
121
|
|
|
122
122
|
```html
|
|
123
123
|
<script src="https://cdn.jsdelivr.net/npm/echarts@6.1.0"></script>
|
|
124
|
-
<script src="https://cdn.jsdelivr.net/npm/vue@3.5.
|
|
125
|
-
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.
|
|
124
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5.42"></script>
|
|
125
|
+
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.1"></script>
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
<!-- scripts:end -->
|
|
@@ -223,6 +223,10 @@ const chart = ref<InstanceType<typeof VChart> | null>(null);
|
|
|
223
223
|
|
|
224
224
|
Vue 3.5's `useTemplateRef` can infer this type automatically.
|
|
225
225
|
|
|
226
|
+
`Exposed` describes the chart methods and read-only `chart` and `root` properties exposed through a template ref. It includes `setOption` and the other methods listed below; use `InstanceType<typeof VChart>` when you also need Vue's component instance properties.
|
|
227
|
+
|
|
228
|
+
Libraries can re-export or wrap `VChart` and the `vue-echarts/graphic` components while emitting their own TypeScript declarations. The root entry exports `Component`, the shared Vue component definition helper, and `Slots`, the Vue `SlotsType` metadata used by `VChart`, so inferred declarations can reference public types. The graphic entry exports its corresponding `GraphicComponent` type. For callable slots, use `InstanceType<typeof VChart>["$slots"]`; augment `VChartSlotsExtension` in `vue-echarts` to declare additional slots. The graphic entry re-exports the same extension interface.
|
|
229
|
+
|
|
226
230
|
### Events
|
|
227
231
|
|
|
228
232
|
You can bind events with Vue's `v-on` directive.
|
package/README.zh-Hans.md
CHANGED
|
@@ -121,8 +121,8 @@ import "echarts";
|
|
|
121
121
|
|
|
122
122
|
```html
|
|
123
123
|
<script src="https://cdn.jsdelivr.net/npm/echarts@6.1.0"></script>
|
|
124
|
-
<script src="https://cdn.jsdelivr.net/npm/vue@3.5.
|
|
125
|
-
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.
|
|
124
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5.42"></script>
|
|
125
|
+
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.1"></script>
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
<!-- scripts:end -->
|
|
@@ -224,6 +224,10 @@ const chart = ref<InstanceType<typeof VChart> | null>(null);
|
|
|
224
224
|
|
|
225
225
|
Vue 3.5 的 `useTemplateRef` 可以自动推导此类型。
|
|
226
226
|
|
|
227
|
+
`Exposed` 描述通过模板 ref 暴露的图表方法及只读的 `chart`、`root` 属性,包含 `setOption` 和下文列出的其它方法。如果还需要 Vue 组件实例属性,请使用 `InstanceType<typeof VChart>`。
|
|
228
|
+
|
|
229
|
+
组件库可以重新导出或包装 `VChart` 及 `vue-echarts/graphic` 组件,并生成自己的 TypeScript 声明。根入口导出共享的 Vue 组件定义辅助类型 `Component` 和 `VChart` 使用的 Vue `SlotsType` 元数据 `Slots`,使推导出的声明能够引用公开类型。graphic 入口导出对应的 `GraphicComponent` 类型。需要可调用的插槽类型时,使用 `InstanceType<typeof VChart>["$slots"]`;需要声明额外插槽时,在 `vue-echarts` 模块中扩展 `VChartSlotsExtension`。graphic 入口重新导出的是同一个扩展接口。
|
|
230
|
+
|
|
227
231
|
### 事件
|
|
228
232
|
|
|
229
233
|
可以使用 Vue 的 `v-on` 指令绑定事件。
|
package/dist/graphic.d.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as ElementEventAlias, f as FontStyle, h as WithOnce, p as FontWeight, t as VChartSlotsExtension, u as Component } from "./index-GjFScMW2.js";
|
|
2
2
|
import { ExtractPublicPropTypes, PropType, Slot, SlotsType } from "vue";
|
|
3
3
|
import { ElementEvent } from "echarts/core";
|
|
4
4
|
import { Color, CustomSeriesRenderItemReturn, GraphicComponentOption, PatternObject, TooltipComponentOption } from "echarts";
|
|
5
|
-
//#region src/graphic/types.d.ts
|
|
6
|
-
type GraphicEventName = Exclude<ElementEvent["type"], "globalout">;
|
|
7
|
-
type GraphicOnEventName = `on${GraphicEventName}`;
|
|
8
|
-
type GraphicEventAlias = Exclude<ElementEventAlias, "globalOut">;
|
|
9
|
-
type GraphicEmits = WithOnce<{ [key in GraphicEventName | GraphicEventAlias]: (params: ElementEvent) => boolean | void; }>;
|
|
10
|
-
//#endregion
|
|
11
5
|
//#region src/graphic/props-common.d.ts
|
|
12
6
|
type GraphicDuring = NonNullable<NonNullable<CustomSeriesRenderItemReturn>["during"]>;
|
|
13
7
|
type GraphicExtra = Record<string, unknown> & {
|
|
@@ -190,6 +184,9 @@ declare const textPropOverrides: {
|
|
|
190
184
|
};
|
|
191
185
|
type GraphicCommonProps = Omit<ExtractPublicPropTypes<typeof commonProps>, "width"> & Pick<ExtractPublicPropTypes<typeof textPropOverrides>, "width">;
|
|
192
186
|
//#endregion
|
|
187
|
+
//#region src/graphic/component-type.d.ts
|
|
188
|
+
type GraphicComponentType = "group" | "rect" | "circle" | "ellipse" | "text" | "line" | "polyline" | "polygon" | "image" | "sector" | "ring" | "arc" | "bezierCurve";
|
|
189
|
+
//#endregion
|
|
193
190
|
//#region src/graphic/props-shape.d.ts
|
|
194
191
|
declare const SHAPE_KEYS_BY_TYPE: {
|
|
195
192
|
readonly rect: readonly ["x", "y", "width", "height", "r"];
|
|
@@ -234,8 +231,11 @@ declare const shapeProps: {
|
|
|
234
231
|
};
|
|
235
232
|
type GraphicShapeProps = ExtractPublicPropTypes<typeof shapeProps>;
|
|
236
233
|
//#endregion
|
|
237
|
-
//#region src/graphic/
|
|
238
|
-
type
|
|
234
|
+
//#region src/graphic/types.d.ts
|
|
235
|
+
type GraphicEventName = Exclude<ElementEvent["type"], "globalout">;
|
|
236
|
+
type GraphicOnEventName = `on${GraphicEventName}`;
|
|
237
|
+
type GraphicEventAlias = Exclude<ElementEventAlias, "globalOut">;
|
|
238
|
+
type GraphicEmits = WithOnce<{ [key in GraphicEventName | GraphicEventAlias]: (params: ElementEvent) => boolean | void; }>;
|
|
239
239
|
//#endregion
|
|
240
240
|
//#region src/graphic/component-factory.d.ts
|
|
241
241
|
declare const componentProps: {
|
|
@@ -266,7 +266,7 @@ declare const componentProps: {
|
|
|
266
266
|
default: undefined;
|
|
267
267
|
};
|
|
268
268
|
readonly cornerRadius: import("vue").PropType<number | number[]>;
|
|
269
|
-
readonly image: import("vue").PropType<string |
|
|
269
|
+
readonly image: import("vue").PropType<string | HTMLCanvasElement | HTMLImageElement | HTMLVideoElement>;
|
|
270
270
|
readonly sx: NumberConstructor;
|
|
271
271
|
readonly sy: NumberConstructor;
|
|
272
272
|
readonly sWidth: NumberConstructor;
|
|
@@ -283,7 +283,7 @@ declare const componentProps: {
|
|
|
283
283
|
readonly lineHeight: NumberConstructor;
|
|
284
284
|
readonly tag: StringConstructor;
|
|
285
285
|
readonly backgroundColor: import("vue").PropType<string | {
|
|
286
|
-
image: string |
|
|
286
|
+
image: string | HTMLCanvasElement | HTMLImageElement | HTMLVideoElement;
|
|
287
287
|
}>;
|
|
288
288
|
readonly padding: import("vue").PropType<number | number[]>;
|
|
289
289
|
readonly margin: import("vue").PropType<number | number[]>;
|
|
@@ -418,22 +418,22 @@ type ComponentProps<T extends GraphicComponentType> = Pick<ComponentPropDefiniti
|
|
|
418
418
|
type ComponentSlots<T extends GraphicComponentType> = SlotsType<T extends "group" ? {
|
|
419
419
|
default?: Slot;
|
|
420
420
|
} : Record<never, never>>;
|
|
421
|
-
type GraphicComponent<T extends GraphicComponentType> =
|
|
421
|
+
type GraphicComponent<T extends GraphicComponentType> = Component<ComponentProps<T>, Record<never, never>, GraphicEmits, ComponentSlots<T>>;
|
|
422
422
|
//#endregion
|
|
423
423
|
//#region src/graphic/components.d.ts
|
|
424
|
-
declare const GGroup: GraphicComponent<"group">;
|
|
425
|
-
declare const GRect: GraphicComponent<"rect">;
|
|
426
|
-
declare const GCircle: GraphicComponent<"circle">;
|
|
427
|
-
declare const GEllipse: GraphicComponent<"ellipse">;
|
|
428
|
-
declare const GText: GraphicComponent<"text">;
|
|
429
|
-
declare const GLine: GraphicComponent<"line">;
|
|
430
|
-
declare const GPolyline: GraphicComponent<"polyline">;
|
|
431
|
-
declare const GPolygon: GraphicComponent<"polygon">;
|
|
432
|
-
declare const GImage: GraphicComponent<"image">;
|
|
433
|
-
declare const GSector: GraphicComponent<"sector">;
|
|
434
|
-
declare const GRing: GraphicComponent<"ring">;
|
|
435
|
-
declare const GArc: GraphicComponent<"arc">;
|
|
436
|
-
declare const GBezierCurve: GraphicComponent<"bezierCurve">;
|
|
424
|
+
export declare const GGroup: GraphicComponent<"group">;
|
|
425
|
+
export declare const GRect: GraphicComponent<"rect">;
|
|
426
|
+
export declare const GCircle: GraphicComponent<"circle">;
|
|
427
|
+
export declare const GEllipse: GraphicComponent<"ellipse">;
|
|
428
|
+
export declare const GText: GraphicComponent<"text">;
|
|
429
|
+
export declare const GLine: GraphicComponent<"line">;
|
|
430
|
+
export declare const GPolyline: GraphicComponent<"polyline">;
|
|
431
|
+
export declare const GPolygon: GraphicComponent<"polygon">;
|
|
432
|
+
export declare const GImage: GraphicComponent<"image">;
|
|
433
|
+
export declare const GSector: GraphicComponent<"sector">;
|
|
434
|
+
export declare const GRing: GraphicComponent<"ring">;
|
|
435
|
+
export declare const GArc: GraphicComponent<"arc">;
|
|
436
|
+
export declare const GBezierCurve: GraphicComponent<"bezierCurve">;
|
|
437
437
|
//#endregion
|
|
438
|
-
export {
|
|
438
|
+
export type { GraphicCommonProps, GraphicComponent, GraphicEmits, GraphicEventName, GraphicOnEventName, GraphicShapeProps, VChartSlotsExtension };
|
|
439
439
|
//# sourceMappingURL=graphic.d.ts.map
|
package/dist/graphic.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as hasEventHandler, c as isIgnorableWatchChange, f as parseOnEvent, i as createEventInvoker, n as registerRuntime, p as warn$1,
|
|
1
|
+
import { a as hasEventHandler, c as isIgnorableWatchChange, f as parseOnEvent, i as createEventInvoker, n as registerRuntime, p as warn$1, t as planUpdate } from "./update-DiQcDAnW.js";
|
|
2
2
|
import { Teleport, defineComponent, getCurrentInstance, h, inject, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUpdated, provide, queuePostFlushCb, shallowRef, watch } from "vue";
|
|
3
3
|
import { use } from "echarts/core";
|
|
4
4
|
import { GraphicComponent } from "echarts/components";
|
|
@@ -459,6 +459,7 @@ function toElement(node, children) {
|
|
|
459
459
|
id
|
|
460
460
|
};
|
|
461
461
|
for (const key of COMMON_PROP_KEYS) {
|
|
462
|
+
if (key === "id") continue;
|
|
462
463
|
const value = props[key];
|
|
463
464
|
if (value !== void 0 && !shapeKeys?.includes(key) && !styleKeys?.includes(key)) out[key] = value;
|
|
464
465
|
}
|
|
@@ -476,6 +477,7 @@ function toElement(node, children) {
|
|
|
476
477
|
if (style) out.style = style;
|
|
477
478
|
return out;
|
|
478
479
|
}
|
|
480
|
+
/** Build the tree in the order supplied by the collector. */
|
|
479
481
|
function buildOption(nodes, rootId) {
|
|
480
482
|
const byParent = /* @__PURE__ */ new Map();
|
|
481
483
|
const occupiedRootIds = /* @__PURE__ */ new Set();
|
|
@@ -489,7 +491,6 @@ function buildOption(nodes, rootId) {
|
|
|
489
491
|
byParent.set(node.parentId, [node]);
|
|
490
492
|
}
|
|
491
493
|
while (occupiedRootIds.has(rootId)) rootId += "_";
|
|
492
|
-
for (const list of byParent.values()) list.sort((a, b) => a.order - b.order);
|
|
493
494
|
const childrenOf = (parentId) => byParent.get(parentId)?.map((node) => {
|
|
494
495
|
if (node.type !== "group") return toElement(node);
|
|
495
496
|
return toElement(node, childrenOf(node.id));
|
|
@@ -506,34 +507,36 @@ function createCollector(onFlush) {
|
|
|
506
507
|
const nodes = /* @__PURE__ */ new Map();
|
|
507
508
|
const seenInPass = /* @__PURE__ */ new Map();
|
|
508
509
|
const warnedKeys = /* @__PURE__ */ new Set();
|
|
509
|
-
let order = 0;
|
|
510
510
|
let version = 0;
|
|
511
511
|
let pending = false;
|
|
512
512
|
let root;
|
|
513
513
|
let observer;
|
|
514
514
|
const byElement = /* @__PURE__ */ new WeakMap();
|
|
515
|
-
let
|
|
515
|
+
let orderedNodes = [];
|
|
516
|
+
let orderDirty = true;
|
|
516
517
|
function syncOrder() {
|
|
517
518
|
if (!root) return false;
|
|
518
|
-
|
|
519
|
+
if (observer?.takeRecords().length) orderDirty = true;
|
|
520
|
+
if (!orderDirty) return false;
|
|
521
|
+
orderDirty = false;
|
|
522
|
+
const nextNodes = [];
|
|
519
523
|
const walker = root.ownerDocument.createTreeWalker(root, 1);
|
|
520
524
|
for (let element = walker.nextNode(); element; element = walker.nextNode()) {
|
|
521
525
|
const node = byElement.get(element);
|
|
522
|
-
if (node && nodes.get(node.id) === node)
|
|
523
|
-
node.order = ids.length;
|
|
524
|
-
ids.push(node.id);
|
|
525
|
-
}
|
|
526
|
+
if (node && nodes.get(node.id) === node) nextNodes.push(node);
|
|
526
527
|
}
|
|
527
|
-
const changed =
|
|
528
|
-
|
|
528
|
+
const changed = nextNodes.length !== orderedNodes.length || nextNodes.some((node, index) => node.id !== orderedNodes[index].id);
|
|
529
|
+
orderedNodes = nextNodes;
|
|
529
530
|
return changed;
|
|
530
531
|
}
|
|
531
532
|
function setRoot(value) {
|
|
532
533
|
observer?.disconnect();
|
|
533
534
|
root = value;
|
|
534
|
-
|
|
535
|
+
orderedNodes = [];
|
|
536
|
+
orderDirty = true;
|
|
535
537
|
if (root) {
|
|
536
538
|
observer = new MutationObserver(() => {
|
|
539
|
+
orderDirty = true;
|
|
537
540
|
if (syncOrder()) requestFlush();
|
|
538
541
|
});
|
|
539
542
|
observer.observe(root, {
|
|
@@ -543,7 +546,6 @@ function createCollector(onFlush) {
|
|
|
543
546
|
}
|
|
544
547
|
}
|
|
545
548
|
function beginPass() {
|
|
546
|
-
order = 0;
|
|
547
549
|
seenInPass.clear();
|
|
548
550
|
}
|
|
549
551
|
function warn(message, onceKey) {
|
|
@@ -554,20 +556,18 @@ function createCollector(onFlush) {
|
|
|
554
556
|
function register(node) {
|
|
555
557
|
const seenSource = seenInPass.get(node.id);
|
|
556
558
|
if (seenSource !== void 0 && seenSource !== node.sourceId) warn(`Duplicate graphic id "${node.id}" detected. Updates may be unstable.`, `duplicate-id:${node.id}`);
|
|
557
|
-
const nextOrder = node.order ?? order;
|
|
558
|
-
order = Math.max(order, nextOrder + 1);
|
|
559
559
|
const existing = nodes.get(node.id);
|
|
560
560
|
const sameSource = existing?.sourceId === node.sourceId;
|
|
561
|
-
const unchanged = sameSource && existing.type === node.type && existing.parentId === node.parentId && existing.props === node.props && isIgnorableWatchChange(existing.handlers, node.handlers) && existing.element === node.element
|
|
561
|
+
const unchanged = sameSource && existing.type === node.type && existing.parentId === node.parentId && existing.props === node.props && isIgnorableWatchChange(existing.handlers, node.handlers) && existing.element === node.element;
|
|
562
562
|
seenInPass.set(node.id, node.sourceId);
|
|
563
563
|
if (unchanged) return;
|
|
564
564
|
const registered = {
|
|
565
565
|
...node,
|
|
566
566
|
handlerCache: sameSource ? existing?.handlerCache : void 0,
|
|
567
|
-
order: nextOrder,
|
|
568
567
|
version: ++version
|
|
569
568
|
};
|
|
570
569
|
nodes.set(node.id, registered);
|
|
570
|
+
orderDirty = true;
|
|
571
571
|
if (node.element) byElement.set(node.element, registered);
|
|
572
572
|
requestFlush();
|
|
573
573
|
}
|
|
@@ -575,6 +575,7 @@ function createCollector(onFlush) {
|
|
|
575
575
|
const existing = nodes.get(id);
|
|
576
576
|
if (!existing || existing.sourceId !== sourceId) return;
|
|
577
577
|
nodes.delete(id);
|
|
578
|
+
orderDirty = true;
|
|
578
579
|
requestFlush();
|
|
579
580
|
}
|
|
580
581
|
function requestFlush(id, sourceId) {
|
|
@@ -591,7 +592,7 @@ function createCollector(onFlush) {
|
|
|
591
592
|
}
|
|
592
593
|
function getNodes() {
|
|
593
594
|
syncOrder();
|
|
594
|
-
return root ?
|
|
595
|
+
return root ? orderedNodes : Array.from(nodes.values());
|
|
595
596
|
}
|
|
596
597
|
function dispose() {
|
|
597
598
|
cancelPendingFlush();
|
|
@@ -632,11 +633,11 @@ const GraphicMount = defineComponent({
|
|
|
632
633
|
const { collector } = props;
|
|
633
634
|
const { beginPass } = collector;
|
|
634
635
|
const detachedRoot = shallowRef();
|
|
635
|
-
const
|
|
636
|
+
const hydrating = Boolean(instance.vnode.el);
|
|
636
637
|
const parentId = shallowRef(null);
|
|
637
638
|
onBeforeMount(() => {
|
|
638
639
|
const host = instance.parent?.subTree.el;
|
|
639
|
-
if (host) {
|
|
640
|
+
if (host && !hydrating) {
|
|
640
641
|
const target = host.ownerDocument.createElement("div");
|
|
641
642
|
host.appendChild(target);
|
|
642
643
|
detachedRoot.value = target;
|
|
@@ -651,18 +652,14 @@ const GraphicMount = defineComponent({
|
|
|
651
652
|
detachedRoot.value = ownerDocument.createElement("div");
|
|
652
653
|
collector.setRoot(detachedRoot.value);
|
|
653
654
|
}
|
|
654
|
-
contentReady.value = true;
|
|
655
655
|
});
|
|
656
656
|
provide(GRAPHIC_COLLECTOR_KEY, collector);
|
|
657
657
|
provide(GRAPHIC_PARENT_ID_KEY, parentId);
|
|
658
658
|
return () => {
|
|
659
659
|
beginPass();
|
|
660
|
-
const content = slots.default();
|
|
661
660
|
const target = detachedRoot.value;
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
disabled: !target
|
|
665
|
-
}, target && contentReady.value ? content : []);
|
|
661
|
+
if (!target) return null;
|
|
662
|
+
return h(Teleport, { to: target }, slots.default());
|
|
666
663
|
};
|
|
667
664
|
}
|
|
668
665
|
});
|
|
@@ -679,7 +676,7 @@ function registerExtension() {
|
|
|
679
676
|
let versions = /* @__PURE__ */ new Map();
|
|
680
677
|
function handleFlush() {
|
|
681
678
|
if (manualUpdate.value) {
|
|
682
|
-
const nodes =
|
|
679
|
+
const nodes = collector.getNodes();
|
|
683
680
|
const changed = !slots.graphic || nodes.length !== versions.size || nodes.some((node) => versions.get(node.id) !== node.version);
|
|
684
681
|
if (!signature || !changed) return;
|
|
685
682
|
collector.warn("`#graphic` slot updates are ignored when `manual-update` is `true`.", "manual-update-graphic");
|
|
@@ -709,19 +706,19 @@ function registerExtension() {
|
|
|
709
706
|
}
|
|
710
707
|
};
|
|
711
708
|
if (option.graphic) collector.warn("`#graphic` slot is provided, so `option.graphic` is ignored. Remove one of them to avoid ambiguity.", "option-graphic-override");
|
|
712
|
-
const nodes =
|
|
709
|
+
const nodes = collector.getNodes();
|
|
713
710
|
const nextOption = buildOption(nodes, ROOT_ID);
|
|
714
711
|
const planned = planUpdate(signature, nextOption);
|
|
715
712
|
const replace = reset || !signature || planned.plan.notMerge || Boolean(planned.plan.replaceMerge?.length);
|
|
716
713
|
const nextVersions = new Map(nodes.map((node) => [node.id, node.version]));
|
|
717
714
|
const elements = [];
|
|
718
715
|
function collectChanges(element, parentId) {
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
}
|
|
724
|
-
children?.forEach((child) => collectChanges(child, element.id));
|
|
716
|
+
if (nextVersions.has(element.id) && nextVersions.get(element.id) !== versions.get(element.id)) {
|
|
717
|
+
const { children: _, ...props } = element;
|
|
718
|
+
props.parentId = parentId;
|
|
719
|
+
elements.push(props);
|
|
720
|
+
}
|
|
721
|
+
element.children?.forEach((child) => collectChanges(child, element.id));
|
|
725
722
|
}
|
|
726
723
|
if (!replace) nextOption.graphic.elements.forEach((element) => collectChanges(element));
|
|
727
724
|
const patched = { ...option };
|
|
@@ -790,12 +787,12 @@ function createComponent(name, type) {
|
|
|
790
787
|
return () => null;
|
|
791
788
|
}
|
|
792
789
|
const { register: registerNode, unregister, requestFlush } = collector;
|
|
793
|
-
let currentId
|
|
790
|
+
let currentId;
|
|
794
791
|
let element;
|
|
795
|
-
watch([props, () => attrs], () => requestFlush(currentId
|
|
792
|
+
watch([props, () => attrs], () => requestFlush(currentId, instance.uid), { deep: true });
|
|
796
793
|
function register() {
|
|
797
794
|
const id = resolveIdentity(props.id, instance.vnode.key, instance.uid);
|
|
798
|
-
if (currentId !==
|
|
795
|
+
if (currentId !== void 0 && currentId !== id) unregister(currentId, instance.uid);
|
|
799
796
|
currentId = id;
|
|
800
797
|
if (element) registerNode({
|
|
801
798
|
id,
|
package/dist/graphic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphic.js","names":[],"sources":["../src/graphic/props-common.ts","../src/graphic/props-shape.ts","../src/graphic/types.ts","../src/graphic/build.ts","../src/graphic/collector.ts","../src/graphic/context.ts","../src/graphic/mount.ts","../src/graphic/extension.ts","../src/graphic/identity.ts","../src/graphic/component-factory.ts","../src/graphic/components.ts","../src/graphic/index.ts"],"sourcesContent":["import type { ExtractPublicPropTypes, PropType } from \"vue\";\nimport type {\n Color,\n CustomSeriesRenderItemReturn,\n GraphicComponentOption,\n PatternObject,\n TooltipComponentOption,\n} from \"echarts\";\nimport type { FontStyle, FontWeight } from \"../types\";\n\nexport type GraphicDuring = NonNullable<NonNullable<CustomSeriesRenderItemReturn>[\"during\"]>;\ntype GraphicExtra = Record<string, unknown> & {\n transition?: string | string[];\n};\n\nexport const TEXT_ATTACHMENT_PROP_KEYS = [\"textContent\", \"textConfig\"] as const;\n\nexport const COMMON_PROP_KEYS = [\n \"id\",\n \"name\",\n \"x\",\n \"y\",\n \"rotation\",\n \"scaleX\",\n \"scaleY\",\n \"skewX\",\n \"skewY\",\n \"originX\",\n \"originY\",\n \"anchorX\",\n \"anchorY\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"bounding\",\n \"silent\",\n \"draggable\",\n \"ignore\",\n \"extra\",\n \"info\",\n \"tooltip\",\n \"clipPath\",\n ...TEXT_ATTACHMENT_PROP_KEYS,\n \"transition\",\n \"enterFrom\",\n \"leaveTo\",\n \"during\",\n \"enterAnimation\",\n \"updateAnimation\",\n \"leaveAnimation\",\n \"keyframeAnimation\",\n] as const;\n\nexport const GROUP_PROP_KEYS = [\"width\", \"height\"] as const;\n\nexport const DISPLAYABLE_PROP_KEYS = [\"z\", \"z2\", \"zlevel\", \"cursor\", \"invisible\"] as const;\n\nexport const PATH_PROP_KEYS = [\"autoBatch\"] as const;\n\nexport const TEXT_COMMON_STYLE_KEYS = [\n \"shadowBlur\",\n \"shadowOffsetX\",\n \"shadowOffsetY\",\n \"shadowColor\",\n \"opacity\",\n] as const;\n\nexport const COMMON_STYLE_KEYS = [...TEXT_COMMON_STYLE_KEYS, \"blend\"] as const;\n\nconst PAINT_STYLE_KEYS = [\n \"fill\",\n \"stroke\",\n \"strokeNoScale\",\n \"fillOpacity\",\n \"strokeOpacity\",\n \"lineWidth\",\n \"lineDash\",\n \"lineDashOffset\",\n] as const;\n\nexport const PATH_STYLE_KEYS = [\n ...PAINT_STYLE_KEYS,\n \"decal\",\n \"strokePercent\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"strokeFirst\",\n] as const;\n\nexport const TEXT_STYLE_KEYS = [\n ...PAINT_STYLE_KEYS,\n \"text\",\n \"font\",\n \"textFont\",\n \"fontStyle\",\n \"fontWeight\",\n \"fontFamily\",\n \"fontSize\",\n \"align\",\n \"verticalAlign\",\n \"lineHeight\",\n \"tag\",\n \"backgroundColor\",\n \"padding\",\n \"margin\",\n \"borderColor\",\n \"borderWidth\",\n \"borderRadius\",\n \"borderDash\",\n \"borderDashOffset\",\n \"rich\",\n \"textStrokeWidth\",\n \"textAlign\",\n \"textVerticalAlign\",\n \"textLineHeight\",\n \"textShadowBlur\",\n \"textShadowOffsetX\",\n \"textShadowOffsetY\",\n \"textShadowColor\",\n \"width\",\n \"height\",\n \"overflow\",\n \"lineOverflow\",\n \"ellipsis\",\n \"placeholder\",\n \"truncateMinChar\",\n] as const;\n\nexport const IMAGE_STYLE_KEYS = [\n \"image\",\n \"x\",\n \"y\",\n \"width\",\n \"height\",\n \"sx\",\n \"sy\",\n \"sWidth\",\n \"sHeight\",\n] as const;\n\nexport const STYLE_KEYS_BY_TYPE = {\n text: TEXT_STYLE_KEYS,\n image: IMAGE_STYLE_KEYS,\n} as const;\n\nexport type GraphicCommonPropKey = (typeof COMMON_PROP_KEYS)[number];\nexport type GraphicGroupPropKey = (typeof GROUP_PROP_KEYS)[number];\nexport type GraphicDisplayablePropKey = (typeof DISPLAYABLE_PROP_KEYS)[number];\nexport type GraphicPathPropKey = (typeof PATH_PROP_KEYS)[number];\nexport type GraphicTextAttachmentPropKey = (typeof TEXT_ATTACHMENT_PROP_KEYS)[number];\nexport type GraphicTextCommonStyleKey = (typeof TEXT_COMMON_STYLE_KEYS)[number];\nexport type GraphicCommonStyleKey = (typeof COMMON_STYLE_KEYS)[number];\nexport type GraphicPathStyleKey = (typeof PATH_STYLE_KEYS)[number];\nexport type GraphicTextStyleKey = (typeof TEXT_STYLE_KEYS)[number];\nexport type GraphicImageStyleKey = (typeof IMAGE_STYLE_KEYS)[number];\n\n// Keep zrender defaults instead of letting Vue cast absent Boolean props to false.\nexport function withUndefinedDefault<T>(type: T) {\n return { type, default: undefined };\n}\n\ntype GraphicTextStyleOnlyKey = Exclude<\n GraphicTextStyleKey,\n GraphicPathStyleKey | \"width\" | \"height\"\n>;\ntype GraphicImageStyleOnlyKey = Exclude<GraphicImageStyleKey, \"x\" | \"y\" | \"width\" | \"height\">;\ntype GraphicImageSource = string | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\ntype GraphicTextAlign = \"left\" | \"center\" | \"right\";\ntype GraphicTextVerticalAlign = \"top\" | \"middle\" | \"bottom\";\ntype GraphicTextOverflow = \"break\" | \"breakAll\" | \"truncate\" | \"none\";\ntype GraphicOptionProp<K extends PropertyKey, T = GraphicComponentOption> = T extends {\n [P in K]?: infer V;\n}\n ? NonNullable<V>\n : never;\nexport type GraphicAnimationOption = GraphicOptionProp<\"enterAnimation\">;\nexport type GraphicKeyframeAnimationOption = GraphicOptionProp<\"keyframeAnimation\">;\n\nconst elementProps = {\n id: [String, Number] as PropType<string | number>,\n name: String,\n x: Number,\n y: Number,\n rotation: Number,\n scaleX: Number,\n scaleY: Number,\n skewX: Number,\n skewY: Number,\n originX: Number,\n originY: Number,\n anchorX: Number,\n anchorY: Number,\n left: [String, Number] as PropType<string | number>,\n right: [String, Number] as PropType<string | number>,\n top: [String, Number] as PropType<string | number>,\n bottom: [String, Number] as PropType<string | number>,\n bounding: String as PropType<\"raw\" | \"all\">,\n z: Number,\n z2: Number,\n zlevel: Number,\n silent: withUndefinedDefault(Boolean),\n draggable: withUndefinedDefault([Boolean, String] as PropType<\n boolean | \"horizontal\" | \"vertical\"\n >),\n cursor: String,\n ignore: withUndefinedDefault(Boolean),\n invisible: withUndefinedDefault(Boolean),\n extra: Object as PropType<GraphicExtra>,\n info: null as unknown as PropType<unknown>,\n tooltip: Object as PropType<TooltipComponentOption>,\n clipPath: withUndefinedDefault([Boolean, Object] as PropType<false | object>),\n textContent: Object as PropType<Record<string, unknown>>,\n textConfig: Object as PropType<object>,\n transition: [String, Array] as PropType<string | string[]>,\n enterFrom: Object as PropType<object>,\n leaveTo: Object as PropType<object>,\n during: Function as PropType<GraphicDuring>,\n enterAnimation: Object as PropType<GraphicAnimationOption>,\n updateAnimation: Object as PropType<GraphicAnimationOption>,\n leaveAnimation: Object as PropType<GraphicAnimationOption>,\n keyframeAnimation: [Object, Array] as PropType<GraphicKeyframeAnimationOption>,\n} as const satisfies Record<GraphicCommonPropKey | GraphicDisplayablePropKey, unknown>;\n\nconst groupProps = {\n width: Number,\n height: Number,\n} as const satisfies Record<GraphicGroupPropKey, unknown>;\n\nconst pathProps = {\n autoBatch: withUndefinedDefault(Boolean),\n} as const satisfies Record<GraphicPathPropKey, unknown>;\n\nconst commonStyleProps = {\n shadowBlur: Number,\n shadowOffsetX: Number,\n shadowOffsetY: Number,\n shadowColor: String,\n opacity: Number,\n blend: String,\n} as const satisfies Record<GraphicCommonStyleKey, unknown>;\n\nconst pathStyleProps = {\n fill: [String, Object] as PropType<Color>,\n stroke: [String, Object] as PropType<Color>,\n decal: Object as PropType<PatternObject>,\n strokePercent: Number,\n strokeNoScale: withUndefinedDefault(Boolean),\n fillOpacity: Number,\n strokeOpacity: Number,\n lineWidth: Number,\n lineDash: withUndefinedDefault([String, Array, Boolean] as PropType<\n \"solid\" | \"dashed\" | \"dotted\" | number[] | false\n >),\n lineDashOffset: Number,\n lineCap: String as PropType<CanvasLineCap>,\n lineJoin: String as PropType<CanvasLineJoin>,\n miterLimit: Number,\n strokeFirst: withUndefinedDefault(Boolean),\n} as const satisfies Record<GraphicPathStyleKey, unknown>;\n\nconst textStyleProps = {\n text: String,\n font: String,\n textFont: String,\n fontStyle: String as PropType<FontStyle>,\n fontWeight: [String, Number] as PropType<FontWeight>,\n fontFamily: String,\n fontSize: [String, Number] as PropType<string | number>,\n align: String as PropType<GraphicTextAlign>,\n verticalAlign: String as PropType<GraphicTextVerticalAlign>,\n lineHeight: Number,\n tag: String,\n backgroundColor: [String, Object] as PropType<string | { image: GraphicImageSource }>,\n padding: [Number, Array] as PropType<number | number[]>,\n margin: [Number, Array] as PropType<number | number[]>,\n borderColor: String,\n borderWidth: Number,\n borderRadius: [Number, Array] as PropType<number | number[]>,\n borderDash: withUndefinedDefault([Array, Boolean] as PropType<number[] | false>),\n borderDashOffset: Number,\n rich: Object as PropType<Record<string, object>>,\n textStrokeWidth: Number,\n textAlign: String as PropType<GraphicTextAlign>,\n textVerticalAlign: String as PropType<GraphicTextVerticalAlign>,\n textLineHeight: Number,\n textShadowBlur: Number,\n textShadowOffsetX: Number,\n textShadowOffsetY: Number,\n textShadowColor: String,\n overflow: String as PropType<GraphicTextOverflow>,\n lineOverflow: String as PropType<\"truncate\">,\n ellipsis: String,\n placeholder: String,\n truncateMinChar: Number,\n} as const satisfies Record<GraphicTextStyleOnlyKey, unknown>;\n\nconst imageStyleProps = {\n image: [String, Object] as PropType<GraphicImageSource>,\n sx: Number,\n sy: Number,\n sWidth: Number,\n sHeight: Number,\n} as const satisfies Record<GraphicImageStyleOnlyKey, unknown>;\n\nexport const commonProps = {\n ...elementProps,\n ...groupProps,\n ...pathProps,\n shape: Object as PropType<Record<string, unknown>>,\n style: Object as PropType<object>,\n shapeTransition: [String, Array] as PropType<string | string[]>,\n styleTransition: [String, Array] as PropType<string | string[]>,\n ...commonStyleProps,\n ...pathStyleProps,\n ...textStyleProps,\n ...imageStyleProps,\n} as const;\n\nexport const textPropOverrides = {\n width: [String, Number] as PropType<string | number>,\n fill: String,\n stroke: String,\n lineDash: withUndefinedDefault([Array, Boolean] as PropType<number[] | false>),\n} as const;\n\nexport type GraphicCommonProps = Omit<ExtractPublicPropTypes<typeof commonProps>, \"width\"> &\n Pick<ExtractPublicPropTypes<typeof textPropOverrides>, \"width\">;\n","import type { ExtractPublicPropTypes, PropType } from \"vue\";\n\nimport type { GraphicComponentType } from \"./component-type\";\nimport { withUndefinedDefault } from \"./props-common\";\n\nexport const SHAPE_KEYS_BY_TYPE = {\n rect: [\"x\", \"y\", \"width\", \"height\", \"r\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n sector: [\"cx\", \"cy\", \"r\", \"r0\", \"startAngle\", \"endAngle\", \"clockwise\", \"cornerRadius\"],\n ring: [\"cx\", \"cy\", \"r\", \"r0\"],\n arc: [\"cx\", \"cy\", \"r\", \"startAngle\", \"endAngle\", \"clockwise\"],\n line: [\"x1\", \"y1\", \"x2\", \"y2\", \"percent\"],\n polyline: [\"points\", \"percent\", \"smooth\", \"smoothConstraint\"],\n polygon: [\"points\", \"smooth\", \"smoothConstraint\"],\n bezierCurve: [\"x1\", \"y1\", \"x2\", \"y2\", \"cpx1\", \"cpy1\", \"cpx2\", \"cpy2\", \"percent\"],\n} as const satisfies Partial<Record<GraphicComponentType, readonly string[]>>;\n\nexport const shapeProps = {\n x: Number,\n y: Number,\n cx: Number,\n cy: Number,\n rx: Number,\n ry: Number,\n r: [Number, Array] as PropType<number | number[]>,\n r0: Number,\n x1: Number,\n y1: Number,\n x2: Number,\n y2: Number,\n cpx1: Number,\n cpy1: Number,\n cpx2: Number,\n cpy2: Number,\n startAngle: Number,\n endAngle: Number,\n percent: Number,\n points: Array as PropType<number[][]>,\n smooth: Number,\n smoothConstraint: Array as PropType<number[][]>,\n clockwise: withUndefinedDefault(Boolean),\n cornerRadius: [Number, Array] as PropType<number | number[]>,\n} as const;\n\nexport type GraphicShapeProps = ExtractPublicPropTypes<typeof shapeProps>;\n","import type { ElementEvent } from \"echarts/core\";\nimport type { ElementEventAlias, WithOnce } from \"../types\";\n\nexport type GraphicEventName = Exclude<ElementEvent[\"type\"], \"globalout\">;\n\nexport const GRAPHIC_EVENTS = {\n click: true,\n dblclick: true,\n mousewheel: true,\n mouseout: true,\n mouseover: true,\n mouseup: true,\n mousedown: true,\n mousemove: true,\n contextmenu: true,\n drag: true,\n dragstart: true,\n dragend: true,\n dragenter: true,\n dragleave: true,\n dragover: true,\n drop: true,\n} as const satisfies Record<GraphicEventName, true>;\n\nexport type GraphicOnEventName = `on${GraphicEventName}`;\n\ntype GraphicEventAlias = Exclude<ElementEventAlias, \"globalOut\">;\n\nexport type GraphicEmits = WithOnce<{\n [key in GraphicEventName | GraphicEventAlias]: (params: ElementEvent) => boolean | void;\n}>;\n","import { createEventInvoker, hasEventHandler, parseOnEvent } from \"../utils\";\nimport type { EventHandler } from \"../utils\";\nimport {\n COMMON_PROP_KEYS,\n COMMON_STYLE_KEYS,\n DISPLAYABLE_PROP_KEYS,\n GROUP_PROP_KEYS,\n PATH_PROP_KEYS,\n PATH_STYLE_KEYS,\n STYLE_KEYS_BY_TYPE,\n TEXT_COMMON_STYLE_KEYS,\n} from \"./props-common\";\nimport { SHAPE_KEYS_BY_TYPE } from \"./props-shape\";\nimport type { GraphicNode } from \"./collector\";\nimport { GRAPHIC_EVENTS } from \"./types\";\n\nexport type GraphicElement = Record<string, unknown> & {\n type: string;\n id: string;\n children?: GraphicElement[];\n};\n\nfunction mergeProps(\n target: Record<string, unknown> | undefined,\n keys: readonly string[],\n props: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n for (const key of keys) {\n const value = props[key];\n if (value !== undefined) {\n (target ??= {})[key] = value;\n }\n }\n return target;\n}\n\nfunction buildNestedProps(\n source: unknown,\n props: Record<string, unknown>,\n keys: readonly string[],\n transition: unknown,\n extraKeys?: readonly string[],\n): Record<string, unknown> | undefined {\n const nested = source as Record<string, unknown> | undefined;\n let result = nested && Object.keys(nested).length > 0 ? { ...nested } : undefined;\n result = mergeProps(result, keys, props);\n if (extraKeys) {\n result = mergeProps(result, extraKeys, props);\n }\n\n if (transition !== undefined) {\n (result ??= {}).transition = transition;\n }\n\n return result;\n}\n\nfunction toEventHandler(value: unknown, once: boolean): EventHandler | undefined {\n const invoke = createEventInvoker(value);\n if (!invoke || !once) {\n return invoke;\n }\n\n let called = false;\n return (...args: unknown[]): unknown => {\n if (called) {\n return;\n }\n called = true;\n return invoke(...args);\n };\n}\n\nfunction mergeHandlers(node: GraphicNode, target: Record<string, unknown>): void {\n const { handlers } = node;\n\n if (node.handlerCache) {\n for (const key of node.handlerCache.keys()) {\n if (!Object.hasOwn(handlers, key)) {\n node.handlerCache.delete(key);\n }\n }\n }\n\n for (const key of Object.keys(handlers)) {\n const value = handlers[key];\n const descriptor = parseOnEvent(key);\n if (!descriptor) {\n continue;\n }\n const event = descriptor.event.toLowerCase();\n if (!Object.hasOwn(GRAPHIC_EVENTS, event)) {\n continue;\n }\n\n const cached = node.handlerCache?.get(key);\n const reused = cached !== undefined && cached.source === value && hasEventHandler(value);\n const handler = reused ? cached.handler : toEventHandler(value, descriptor.once);\n if (!handler) {\n node.handlerCache?.delete(key);\n continue;\n }\n if (!reused) {\n (node.handlerCache ??= new Map()).set(key, { source: value, handler });\n }\n\n const eventKey = `on${event}`;\n const existing = target[eventKey] as EventHandler | undefined;\n if (!existing) {\n target[eventKey] = handler;\n continue;\n }\n\n target[eventKey] = (...args: unknown[]): unknown => {\n const result = existing(...args);\n return handler(...args) || result;\n };\n }\n}\n\nfunction toElement(node: GraphicNode, children?: GraphicElement[]): GraphicElement {\n const { type, id, props } = node;\n const shapeKeys: readonly string[] | undefined =\n SHAPE_KEYS_BY_TYPE[type as keyof typeof SHAPE_KEYS_BY_TYPE];\n const styleKeys: readonly string[] | undefined = shapeKeys\n ? PATH_STYLE_KEYS\n : STYLE_KEYS_BY_TYPE[type as keyof typeof STYLE_KEYS_BY_TYPE];\n const commonStyleKeys = type === \"text\" ? TEXT_COMMON_STYLE_KEYS : COMMON_STYLE_KEYS;\n const out: Record<string, unknown> = {\n type,\n id,\n };\n\n for (const key of COMMON_PROP_KEYS) {\n const value = props[key];\n if (value !== undefined && !shapeKeys?.includes(key) && !styleKeys?.includes(key)) {\n out[key] = value;\n }\n }\n if (shapeKeys) {\n mergeProps(out, PATH_PROP_KEYS, props);\n }\n\n mergeHandlers(node, out);\n\n if (type === \"group\") {\n mergeProps(out, GROUP_PROP_KEYS, props);\n if (children?.length) {\n out.children = children;\n }\n return out as GraphicElement;\n }\n\n mergeProps(out, DISPLAYABLE_PROP_KEYS, props);\n\n const shape = shapeKeys\n ? buildNestedProps(props.shape, props, shapeKeys, props.shapeTransition)\n : undefined;\n if (shape) {\n out.shape = shape;\n }\n\n const style = buildNestedProps(\n props.style,\n props,\n commonStyleKeys,\n props.styleTransition,\n styleKeys,\n );\n if (style) {\n out.style = style;\n }\n\n return out as GraphicElement;\n}\n\nexport function buildOption(\n nodes: Iterable<GraphicNode>,\n rootId: string,\n): { graphic: { elements: GraphicElement[] } } {\n const byParent = new Map<string | null, GraphicNode[]>();\n const occupiedRootIds = new Set<string>();\n\n for (const node of nodes) {\n occupiedRootIds.add(node.id);\n const list = byParent.get(node.parentId);\n if (list) {\n list.push(node);\n continue;\n }\n byParent.set(node.parentId, [node]);\n }\n\n while (occupiedRootIds.has(rootId)) {\n rootId += \"_\";\n }\n\n for (const list of byParent.values()) {\n list.sort((a, b) => a.order - b.order);\n }\n\n const childrenOf = (parentId: string | null): GraphicElement[] | undefined =>\n byParent.get(parentId)?.map((node) => {\n if (node.type !== \"group\") {\n return toElement(node);\n }\n return toElement(node, childrenOf(node.id));\n });\n\n return {\n graphic: {\n elements: [\n {\n type: \"group\",\n id: rootId,\n children: childrenOf(null) ?? [],\n },\n ],\n },\n };\n}\n","import { queuePostFlushCb } from \"vue\";\n\nimport { isIgnorableWatchChange, warn as coreWarn } from \"../utils\";\nimport type { EventHandler } from \"../utils\";\n\nexport type GraphicNode = {\n id: string;\n type: string;\n parentId: string | null;\n props: Record<string, unknown>;\n handlers: Record<string, unknown>;\n handlerCache?: Map<string, { source: unknown; handler: EventHandler }>;\n order: number;\n sourceId: number;\n element?: HTMLElement;\n version?: number;\n};\n\nexport type GraphicCollector = {\n beginPass: () => void;\n register: (node: GraphicRegisterNode) => void;\n unregister: (id: string, sourceId: number) => void;\n warn: (message: string, onceKey: string) => void;\n getNodes: () => Iterable<GraphicNode>;\n requestFlush: (id?: string, sourceId?: number) => void;\n cancelPendingFlush: () => void;\n setRoot: (root: HTMLElement | undefined) => void;\n dispose: () => void;\n};\n\ntype GraphicRegisterNode = Omit<GraphicNode, \"handlerCache\" | \"order\"> & {\n order?: number;\n};\n\nexport function createCollector(onFlush: () => void): GraphicCollector {\n const nodes = new Map<string, GraphicNode>();\n const seenInPass = new Map<string, number>();\n const warnedKeys = new Set<string>();\n\n let order = 0;\n let version = 0;\n let pending = false;\n let root: HTMLElement | undefined;\n let observer: MutationObserver | undefined;\n const byElement = new WeakMap<HTMLElement, GraphicNode>();\n let orderedIds: string[] = [];\n\n function syncOrder(): boolean {\n if (!root) {\n return false;\n }\n const ids: string[] = [];\n const walker = root.ownerDocument.createTreeWalker(root, 1);\n for (let element = walker.nextNode(); element; element = walker.nextNode()) {\n const node = byElement.get(element as HTMLElement);\n if (node && nodes.get(node.id) === node) {\n node.order = ids.length;\n ids.push(node.id);\n }\n }\n const changed =\n ids.length !== orderedIds.length || ids.some((id, index) => id !== orderedIds[index]);\n orderedIds = ids;\n return changed;\n }\n\n function setRoot(value: HTMLElement | undefined): void {\n observer?.disconnect();\n root = value;\n orderedIds = [];\n if (root) {\n // Wrapper components can move unchanged children without rerendering a G* component.\n observer = new MutationObserver(() => {\n if (syncOrder()) {\n requestFlush();\n }\n });\n observer.observe(root, { childList: true, subtree: true });\n }\n }\n\n function beginPass(): void {\n order = 0;\n seenInPass.clear();\n }\n\n function warn(message: string, onceKey: string): void {\n if (warnedKeys.has(onceKey)) {\n return;\n }\n warnedKeys.add(onceKey);\n coreWarn(message);\n }\n\n function register(node: GraphicRegisterNode): void {\n const seenSource = seenInPass.get(node.id);\n if (seenSource !== undefined && seenSource !== node.sourceId) {\n warn(\n `Duplicate graphic id \"${node.id}\" detected. Updates may be unstable.`,\n `duplicate-id:${node.id}`,\n );\n }\n\n const nextOrder = node.order ?? order;\n order = Math.max(order, nextOrder + 1);\n const existing = nodes.get(node.id);\n const sameSource = existing?.sourceId === node.sourceId;\n const unchanged =\n sameSource &&\n existing.type === node.type &&\n existing.parentId === node.parentId &&\n existing.props === node.props &&\n isIgnorableWatchChange(existing.handlers, node.handlers) &&\n existing.element === node.element &&\n (node.element !== undefined || existing.order === nextOrder);\n\n seenInPass.set(node.id, node.sourceId);\n // Props and attrs are stable proxies; their watcher covers value-only changes.\n if (unchanged) {\n return;\n }\n\n const registered = {\n ...node,\n handlerCache: sameSource ? existing?.handlerCache : undefined,\n order: nextOrder,\n version: ++version,\n };\n nodes.set(node.id, registered);\n if (node.element) {\n byElement.set(node.element, registered);\n }\n requestFlush();\n }\n\n function unregister(id: string, sourceId: number): void {\n const existing = nodes.get(id);\n if (!existing || existing.sourceId !== sourceId) {\n return;\n }\n nodes.delete(id);\n requestFlush();\n }\n\n function requestFlush(id?: string, sourceId?: number): void {\n const node = id === undefined ? undefined : nodes.get(id);\n if (node && node.sourceId === sourceId) {\n node.version = ++version;\n }\n if (pending) {\n return;\n }\n pending = true;\n queuePostFlushCb(() => {\n if (!pending) {\n return;\n }\n pending = false;\n beginPass();\n onFlush();\n });\n }\n\n function getNodes(): Iterable<GraphicNode> {\n syncOrder();\n return root ? orderedIds.map((id) => nodes.get(id)!) : nodes.values();\n }\n\n function dispose(): void {\n cancelPendingFlush();\n setRoot(undefined);\n nodes.clear();\n }\n\n function cancelPendingFlush(): void {\n pending = false;\n syncOrder();\n beginPass();\n }\n\n return {\n beginPass,\n register,\n unregister,\n warn,\n getNodes,\n requestFlush,\n cancelPendingFlush,\n setRoot,\n dispose,\n };\n}\n","import type { InjectionKey, Ref } from \"vue\";\n\nimport type { GraphicCollector } from \"./collector\";\n\nexport const GRAPHIC_COLLECTOR_KEY: InjectionKey<GraphicCollector> = Symbol(\n \"vue-echarts:graphic-collector\",\n);\nexport const GRAPHIC_PARENT_ID_KEY: InjectionKey<Ref<string | null>> = Symbol(\n \"vue-echarts:graphic-parent-id\",\n);\n","import {\n Teleport,\n defineComponent,\n getCurrentInstance,\n h,\n onBeforeMount,\n onMounted,\n provide,\n shallowRef,\n} from \"vue\";\n\nimport { isBrowser } from \"../utils\";\nimport type { GraphicCollector } from \"./collector\";\nimport { GRAPHIC_COLLECTOR_KEY, GRAPHIC_PARENT_ID_KEY } from \"./context\";\n\nexport const GraphicMount = defineComponent({\n name: \"GraphicMount\",\n props: {\n collector: {\n type: Object as () => GraphicCollector,\n required: true,\n },\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance()!;\n const { collector } = props;\n const { beginPass } = collector;\n const detachedRoot = shallowRef<HTMLDivElement>();\n // A pre-existing vnode element means Vue is hydrating the empty SSR Teleport.\n const contentReady = shallowRef(isBrowser() && !instance.vnode.el);\n const parentId = shallowRef<string | null>(null);\n\n onBeforeMount(() => {\n // Keeping the target inside the host lets iframe adoption finish before child mounted hooks.\n const host = instance.parent?.subTree.el as HTMLElement | undefined;\n if (host) {\n const target = host.ownerDocument.createElement(\"div\");\n host.appendChild(target);\n detachedRoot.value = target;\n collector.setRoot(target);\n }\n });\n\n onMounted(() => {\n const ownerDocument = (instance.vnode.el as Node).ownerDocument!;\n const target = detachedRoot.value;\n target?.remove();\n if (target?.ownerDocument !== ownerDocument) {\n detachedRoot.value = ownerDocument.createElement(\"div\");\n collector.setRoot(detachedRoot.value);\n }\n contentReady.value = true;\n });\n\n provide(GRAPHIC_COLLECTOR_KEY, collector);\n provide(GRAPHIC_PARENT_ID_KEY, parentId);\n\n return () => {\n beginPass();\n const content = slots.default!();\n const target = detachedRoot.value;\n\n return h(\n Teleport,\n {\n to: target ?? \"body\",\n disabled: !target,\n },\n target && contentReady.value ? content : [],\n );\n };\n },\n});\n","import { h, onScopeDispose, onUpdated } from \"vue\";\nimport { use } from \"echarts/core\";\nimport { GraphicComponent } from \"echarts/components\";\nimport { buildOption, type GraphicElement } from \"./build\";\nimport { planUpdate, type Signature } from \"../update\";\nimport { createCollector } from \"./collector\";\nimport { GraphicMount } from \"./mount\";\nimport { registerRuntime } from \"./runtime\";\n\nconst ROOT_ID = \"__ve_graphic_root__\";\n\nexport function registerExtension(): void {\n use([GraphicComponent]);\n\n registerRuntime((ctx) => {\n const { slots, manualUpdate, requestUpdate } = ctx;\n const collector = createCollector(handleFlush);\n let hasGraphicSlot = Boolean(slots.graphic);\n let signature: Signature | undefined;\n let versions = new Map<string, number | undefined>();\n\n function handleFlush(): void {\n if (manualUpdate.value) {\n const nodes = Array.from(collector.getNodes());\n const changed =\n !slots.graphic ||\n nodes.length !== versions.size ||\n nodes.some((node) => versions.get(node.id) !== node.version);\n if (!signature || !changed) {\n return;\n }\n collector.warn(\n \"`#graphic` slot updates are ignored when `manual-update` is `true`.\",\n \"manual-update-graphic\",\n );\n return;\n }\n requestUpdate();\n }\n\n onScopeDispose(collector.dispose);\n onUpdated(() => {\n const nextHasGraphicSlot = Boolean(slots.graphic);\n if (nextHasGraphicSlot === hasGraphicSlot) {\n return;\n }\n hasGraphicSlot = nextHasGraphicSlot;\n if (!hasGraphicSlot) {\n collector.cancelPendingFlush();\n }\n handleFlush();\n });\n\n return {\n cancelPendingFlush: collector.cancelPendingFlush,\n prepare(option, reset) {\n hasGraphicSlot = Boolean(slots.graphic);\n collector.cancelPendingFlush();\n if (!hasGraphicSlot) {\n return {\n option,\n replace: false,\n commit: () => {\n signature = undefined;\n versions.clear();\n },\n };\n }\n if (option.graphic) {\n collector.warn(\n \"`#graphic` slot is provided, so `option.graphic` is ignored. Remove one of them to avoid ambiguity.\",\n \"option-graphic-override\",\n );\n }\n const nodes = Array.from(collector.getNodes());\n const nextOption = buildOption(nodes, ROOT_ID);\n const planned = planUpdate(signature, nextOption);\n const replace =\n reset ||\n !signature ||\n planned.plan.notMerge ||\n Boolean(planned.plan.replaceMerge?.length);\n const nextVersions = new Map(nodes.map((node) => [node.id, node.version]));\n const elements: GraphicElement[] = [];\n function collectChanges(element: GraphicElement, parentId?: string): void {\n const { children, ...props } = element;\n if (\n nextVersions.has(element.id) &&\n nextVersions.get(element.id) !== versions.get(element.id)\n ) {\n elements.push({ ...props, parentId });\n }\n children?.forEach((child) => collectChanges(child, element.id));\n }\n if (!replace) {\n nextOption.graphic.elements.forEach((element) => collectChanges(element));\n }\n const patched = { ...option };\n delete patched.graphic;\n if (replace || elements.length) {\n patched.graphic = replace ? nextOption.graphic : { elements };\n }\n return {\n option: patched,\n replace,\n commit: () => {\n signature = planned.signature;\n versions = nextVersions;\n },\n };\n },\n render() {\n if (!slots.graphic) {\n return null;\n }\n return h(GraphicMount, { collector }, { default: slots.graphic });\n },\n };\n });\n}\n","export function resolveIdentity(\n propsId: string | number | undefined,\n vnodeKey: PropertyKey | null | undefined,\n uid: number,\n): string {\n if (propsId != null) {\n return String(propsId);\n }\n // Vue distinguishes numeric and string keys, while ECharts stringifies IDs.\n return typeof vnodeKey === \"string\" ? vnodeKey : `__ve_graphic_${uid}`;\n}\n","import {\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onBeforeUnmount,\n provide,\n shallowRef,\n type Slot,\n type SlotsType,\n watch,\n} from \"vue\";\n\nimport type { PublicComponent } from \"../types\";\nimport { warn } from \"../utils\";\nimport { GRAPHIC_COLLECTOR_KEY, GRAPHIC_PARENT_ID_KEY } from \"./context\";\nimport { resolveIdentity } from \"./identity\";\nimport type { GraphicComponentType } from \"./component-type\";\nimport {\n COMMON_PROP_KEYS,\n COMMON_STYLE_KEYS,\n DISPLAYABLE_PROP_KEYS,\n GROUP_PROP_KEYS,\n PATH_PROP_KEYS,\n PATH_STYLE_KEYS,\n STYLE_KEYS_BY_TYPE,\n TEXT_COMMON_STYLE_KEYS,\n commonProps,\n textPropOverrides,\n} from \"./props-common\";\nimport type {\n GraphicCommonPropKey,\n GraphicCommonStyleKey,\n GraphicDisplayablePropKey,\n GraphicGroupPropKey,\n GraphicImageStyleKey,\n GraphicPathPropKey,\n GraphicPathStyleKey,\n GraphicTextAttachmentPropKey,\n GraphicTextCommonStyleKey,\n GraphicTextStyleKey,\n} from \"./props-common\";\nimport { SHAPE_KEYS_BY_TYPE, shapeProps } from \"./props-shape\";\nimport type { GraphicEmits } from \"./types\";\n\nconst componentProps = {\n ...commonProps,\n ...shapeProps,\n} as const;\n\nfunction getRuntimeProps(type: GraphicComponentType) {\n const keys: Array<keyof typeof componentProps> = COMMON_PROP_KEYS.filter(\n (key) => type !== \"text\" || (key !== \"textContent\" && key !== \"textConfig\"),\n );\n if (type === \"group\") {\n keys.push(...GROUP_PROP_KEYS);\n } else {\n const shapeKeys = SHAPE_KEYS_BY_TYPE[type as keyof typeof SHAPE_KEYS_BY_TYPE];\n const styleKeys = shapeKeys\n ? PATH_STYLE_KEYS\n : STYLE_KEYS_BY_TYPE[type as keyof typeof STYLE_KEYS_BY_TYPE];\n const commonStyleKeys = type === \"text\" ? TEXT_COMMON_STYLE_KEYS : COMMON_STYLE_KEYS;\n keys.push(\n \"style\",\n \"styleTransition\",\n ...DISPLAYABLE_PROP_KEYS,\n ...commonStyleKeys,\n ...styleKeys,\n );\n if (shapeKeys) {\n keys.push(\"shape\", \"shapeTransition\", ...PATH_PROP_KEYS, ...shapeKeys);\n }\n }\n const definitions =\n type === \"text\"\n ? { ...componentProps, ...textPropOverrides }\n : { ...componentProps, r: type === \"rect\" ? componentProps.r : Number };\n return Object.fromEntries(keys.map((key) => [key, definitions[key]]));\n}\n\ntype NestedShapePropKey = \"shape\" | \"shapeTransition\";\ntype NestedStylePropKey = \"style\" | \"styleTransition\";\ntype SharedPropKey<T extends GraphicComponentType> = Exclude<\n GraphicCommonPropKey,\n T extends \"text\" ? GraphicTextAttachmentPropKey : never\n>;\ntype StylePropKey<T extends GraphicComponentType> = T extends \"group\"\n ? never\n :\n | NestedStylePropKey\n | (T extends \"text\" ? GraphicTextCommonStyleKey : GraphicCommonStyleKey)\n | (T extends keyof typeof SHAPE_KEYS_BY_TYPE\n ? GraphicPathStyleKey\n : T extends \"text\"\n ? GraphicTextStyleKey\n : T extends \"image\"\n ? GraphicImageStyleKey\n : never);\ntype PathPropKey<T extends GraphicComponentType> = T extends keyof typeof SHAPE_KEYS_BY_TYPE\n ? NestedShapePropKey | GraphicPathPropKey | (typeof SHAPE_KEYS_BY_TYPE)[T][number]\n : never;\ntype GroupPropKey<T extends GraphicComponentType> = T extends \"group\" ? GraphicGroupPropKey : never;\ntype DisplayablePropKey<T extends GraphicComponentType> = T extends \"group\"\n ? never\n : GraphicDisplayablePropKey;\ntype ComponentPropDefinitions<T extends GraphicComponentType> = T extends \"text\"\n ? Omit<typeof componentProps, keyof typeof textPropOverrides> & typeof textPropOverrides\n : T extends \"rect\"\n ? typeof componentProps\n : Omit<typeof componentProps, \"r\"> & { r: NumberConstructor };\ntype ComponentProps<T extends GraphicComponentType> = Pick<\n ComponentPropDefinitions<T>,\n Extract<\n SharedPropKey<T> | GroupPropKey<T> | DisplayablePropKey<T> | PathPropKey<T> | StylePropKey<T>,\n keyof typeof componentProps\n >\n>;\ntype ComponentSlots<T extends GraphicComponentType> = SlotsType<\n T extends \"group\" ? { default?: Slot } : Record<never, never>\n>;\n\n/* @__NO_SIDE_EFFECTS__ */\nexport function createComponent<T extends GraphicComponentType>(\n name: string,\n type: T,\n): GraphicComponent<T> {\n return defineComponent({\n name,\n inheritAttrs: false,\n props: getRuntimeProps(type) as ComponentProps<T>,\n emits: {} as unknown as GraphicEmits,\n setup(props, { attrs, slots }) {\n const instance = getCurrentInstance()!;\n const collector = inject(GRAPHIC_COLLECTOR_KEY, null);\n const parentIdRef = inject(GRAPHIC_PARENT_ID_KEY, null);\n\n if (!collector) {\n warn(`\\`${name}\\` must be used inside \\`#graphic\\` slot.`);\n return () => null;\n }\n const { register: registerNode, unregister, requestFlush } = collector;\n let currentId: string | null = null;\n let element: HTMLElement | undefined;\n\n watch([props, () => attrs], () => requestFlush(currentId ?? undefined, instance.uid), {\n deep: true,\n });\n\n function register(): string {\n const id = resolveIdentity(\n (props as { id?: string | number }).id,\n instance.vnode.key,\n instance.uid,\n );\n if (currentId !== null && currentId !== id) {\n unregister(currentId, instance.uid);\n }\n currentId = id;\n\n if (element) {\n registerNode({\n id,\n type,\n parentId: parentIdRef!.value,\n element,\n props: props as Record<string, unknown>,\n handlers: { ...attrs },\n sourceId: instance.uid,\n });\n }\n return id;\n }\n\n const setElement = (value: unknown): void => {\n if (value === element) {\n return;\n }\n element = (value as HTMLElement | null) ?? undefined;\n if (element) {\n register();\n }\n };\n onBeforeUnmount(() => unregister(currentId!, instance.uid));\n\n if (type === \"group\") {\n const providedParent = shallowRef<string | null>(null);\n provide(GRAPHIC_PARENT_ID_KEY, providedParent);\n\n return () => {\n providedParent.value = register();\n const content = (slots as { default?: Slot }).default?.() ?? [];\n return h(\"div\", { ref: setElement }, content);\n };\n }\n\n return () => {\n register();\n return h(\"div\", { ref: setElement });\n };\n },\n }) as GraphicComponent<T>;\n}\n\nexport type GraphicComponent<T extends GraphicComponentType> = PublicComponent<\n ComponentProps<T>,\n Record<never, never>,\n GraphicEmits,\n ComponentSlots<T>\n>;\n","import { createComponent, type GraphicComponent } from \"./component-factory\";\n\nexport const GGroup: GraphicComponent<\"group\"> = createComponent(\"GGroup\", \"group\");\nexport const GRect: GraphicComponent<\"rect\"> = createComponent(\"GRect\", \"rect\");\nexport const GCircle: GraphicComponent<\"circle\"> = createComponent(\"GCircle\", \"circle\");\nexport const GEllipse: GraphicComponent<\"ellipse\"> = createComponent(\"GEllipse\", \"ellipse\");\nexport const GText: GraphicComponent<\"text\"> = createComponent(\"GText\", \"text\");\nexport const GLine: GraphicComponent<\"line\"> = createComponent(\"GLine\", \"line\");\nexport const GPolyline: GraphicComponent<\"polyline\"> = createComponent(\"GPolyline\", \"polyline\");\nexport const GPolygon: GraphicComponent<\"polygon\"> = createComponent(\"GPolygon\", \"polygon\");\nexport const GImage: GraphicComponent<\"image\"> = createComponent(\"GImage\", \"image\");\nexport const GSector: GraphicComponent<\"sector\"> = createComponent(\"GSector\", \"sector\");\nexport const GRing: GraphicComponent<\"ring\"> = createComponent(\"GRing\", \"ring\");\nexport const GArc: GraphicComponent<\"arc\"> = createComponent(\"GArc\", \"arc\");\nexport const GBezierCurve: GraphicComponent<\"bezierCurve\"> = createComponent(\n \"GBezierCurve\",\n \"bezierCurve\",\n);\n","import { registerExtension } from \"./extension\";\n\nregisterExtension();\n\nexport type { VChartSlotsExtension } from \"../index\";\nexport type { GraphicEmits, GraphicEventName, GraphicOnEventName } from \"./types\";\nexport type { GraphicCommonProps } from \"./props-common\";\nexport type { GraphicShapeProps } from \"./props-shape\";\n\nexport {\n GGroup,\n GRect,\n GCircle,\n GEllipse,\n GText,\n GLine,\n GPolyline,\n GPolygon,\n GImage,\n GSector,\n GRing,\n GArc,\n GBezierCurve,\n} from \"./components\";\n"],"mappings":";;;;AAiBA,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,CA5BqC,eAAe,YA4BpD;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,kBAAkB,CAAC,SAAS,QAAQ;AAEjD,MAAa,wBAAwB;CAAC;CAAK;CAAM;CAAU;CAAU;AAAW;AAEhF,MAAa,iBAAiB,CAAC,WAAW;AAE1C,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,oBAAoB,CAAC,GAAG,wBAAwB,OAAO;AAEpE,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,kBAAkB;CAC7B,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;AACF;AAqDA,MAAa,qBAAqB;CAChC,MAAM;EAnDN,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAgBM;CACN,OAAO;EAbP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAKO;AACT;AAcA,SAAgB,qBAAwB,MAAS;CAC/C,OAAO;EAAE;EAAM,SAAS,KAAA;CAAU;AACpC;AAmBA,MAAM,eAAe;CACnB,IAAI,CAAC,QAAQ,MAAM;CACnB,MAAM;CACN,GAAG;CACH,GAAG;CACH,UAAU;CACV,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,MAAM,CAAC,QAAQ,MAAM;CACrB,OAAO,CAAC,QAAQ,MAAM;CACtB,KAAK,CAAC,QAAQ,MAAM;CACpB,QAAQ,CAAC,QAAQ,MAAM;CACvB,UAAU;CACV,GAAG;CACH,IAAI;CACJ,QA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"}
|
|
1
|
+
{"version":3,"file":"graphic.js","names":[],"sources":["../src/graphic/props-common.ts","../src/graphic/props-shape.ts","../src/graphic/types.ts","../src/graphic/build.ts","../src/graphic/collector.ts","../src/graphic/context.ts","../src/graphic/mount.ts","../src/graphic/extension.ts","../src/graphic/identity.ts","../src/graphic/component-factory.ts","../src/graphic/components.ts","../src/graphic/index.ts"],"sourcesContent":["import type { ExtractPublicPropTypes, PropType } from \"vue\";\nimport type {\n Color,\n CustomSeriesRenderItemReturn,\n GraphicComponentOption,\n PatternObject,\n TooltipComponentOption,\n} from \"echarts\";\nimport type { FontStyle, FontWeight } from \"../types\";\n\nexport type GraphicDuring = NonNullable<NonNullable<CustomSeriesRenderItemReturn>[\"during\"]>;\ntype GraphicExtra = Record<string, unknown> & {\n transition?: string | string[];\n};\n\nexport const TEXT_ATTACHMENT_PROP_KEYS = [\"textContent\", \"textConfig\"] as const;\n\nexport const COMMON_PROP_KEYS = [\n \"id\",\n \"name\",\n \"x\",\n \"y\",\n \"rotation\",\n \"scaleX\",\n \"scaleY\",\n \"skewX\",\n \"skewY\",\n \"originX\",\n \"originY\",\n \"anchorX\",\n \"anchorY\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"bounding\",\n \"silent\",\n \"draggable\",\n \"ignore\",\n \"extra\",\n \"info\",\n \"tooltip\",\n \"clipPath\",\n ...TEXT_ATTACHMENT_PROP_KEYS,\n \"transition\",\n \"enterFrom\",\n \"leaveTo\",\n \"during\",\n \"enterAnimation\",\n \"updateAnimation\",\n \"leaveAnimation\",\n \"keyframeAnimation\",\n] as const;\n\nexport const GROUP_PROP_KEYS = [\"width\", \"height\"] as const;\n\nexport const DISPLAYABLE_PROP_KEYS = [\"z\", \"z2\", \"zlevel\", \"cursor\", \"invisible\"] as const;\n\nexport const PATH_PROP_KEYS = [\"autoBatch\"] as const;\n\nexport const TEXT_COMMON_STYLE_KEYS = [\n \"shadowBlur\",\n \"shadowOffsetX\",\n \"shadowOffsetY\",\n \"shadowColor\",\n \"opacity\",\n] as const;\n\nexport const COMMON_STYLE_KEYS = [...TEXT_COMMON_STYLE_KEYS, \"blend\"] as const;\n\nconst PAINT_STYLE_KEYS = [\n \"fill\",\n \"stroke\",\n \"strokeNoScale\",\n \"fillOpacity\",\n \"strokeOpacity\",\n \"lineWidth\",\n \"lineDash\",\n \"lineDashOffset\",\n] as const;\n\nexport const PATH_STYLE_KEYS = [\n ...PAINT_STYLE_KEYS,\n \"decal\",\n \"strokePercent\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"strokeFirst\",\n] as const;\n\nexport const TEXT_STYLE_KEYS = [\n ...PAINT_STYLE_KEYS,\n \"text\",\n \"font\",\n \"textFont\",\n \"fontStyle\",\n \"fontWeight\",\n \"fontFamily\",\n \"fontSize\",\n \"align\",\n \"verticalAlign\",\n \"lineHeight\",\n \"tag\",\n \"backgroundColor\",\n \"padding\",\n \"margin\",\n \"borderColor\",\n \"borderWidth\",\n \"borderRadius\",\n \"borderDash\",\n \"borderDashOffset\",\n \"rich\",\n \"textStrokeWidth\",\n \"textAlign\",\n \"textVerticalAlign\",\n \"textLineHeight\",\n \"textShadowBlur\",\n \"textShadowOffsetX\",\n \"textShadowOffsetY\",\n \"textShadowColor\",\n \"width\",\n \"height\",\n \"overflow\",\n \"lineOverflow\",\n \"ellipsis\",\n \"placeholder\",\n \"truncateMinChar\",\n] as const;\n\nexport const IMAGE_STYLE_KEYS = [\n \"image\",\n \"x\",\n \"y\",\n \"width\",\n \"height\",\n \"sx\",\n \"sy\",\n \"sWidth\",\n \"sHeight\",\n] as const;\n\nexport const STYLE_KEYS_BY_TYPE = {\n text: TEXT_STYLE_KEYS,\n image: IMAGE_STYLE_KEYS,\n} as const;\n\nexport type GraphicCommonPropKey = (typeof COMMON_PROP_KEYS)[number];\nexport type GraphicGroupPropKey = (typeof GROUP_PROP_KEYS)[number];\nexport type GraphicDisplayablePropKey = (typeof DISPLAYABLE_PROP_KEYS)[number];\nexport type GraphicPathPropKey = (typeof PATH_PROP_KEYS)[number];\nexport type GraphicTextAttachmentPropKey = (typeof TEXT_ATTACHMENT_PROP_KEYS)[number];\nexport type GraphicTextCommonStyleKey = (typeof TEXT_COMMON_STYLE_KEYS)[number];\nexport type GraphicCommonStyleKey = (typeof COMMON_STYLE_KEYS)[number];\nexport type GraphicPathStyleKey = (typeof PATH_STYLE_KEYS)[number];\nexport type GraphicTextStyleKey = (typeof TEXT_STYLE_KEYS)[number];\nexport type GraphicImageStyleKey = (typeof IMAGE_STYLE_KEYS)[number];\n\n// Keep zrender defaults instead of letting Vue cast absent Boolean props to false.\nexport function withUndefinedDefault<T>(type: T) {\n return { type, default: undefined };\n}\n\ntype GraphicTextStyleOnlyKey = Exclude<\n GraphicTextStyleKey,\n GraphicPathStyleKey | \"width\" | \"height\"\n>;\ntype GraphicImageStyleOnlyKey = Exclude<GraphicImageStyleKey, \"x\" | \"y\" | \"width\" | \"height\">;\ntype GraphicImageSource = string | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\ntype GraphicTextAlign = \"left\" | \"center\" | \"right\";\ntype GraphicTextVerticalAlign = \"top\" | \"middle\" | \"bottom\";\ntype GraphicTextOverflow = \"break\" | \"breakAll\" | \"truncate\" | \"none\";\ntype GraphicOptionProp<K extends PropertyKey, T = GraphicComponentOption> = T extends {\n [P in K]?: infer V;\n}\n ? NonNullable<V>\n : never;\nexport type GraphicAnimationOption = GraphicOptionProp<\"enterAnimation\">;\nexport type GraphicKeyframeAnimationOption = GraphicOptionProp<\"keyframeAnimation\">;\n\nconst elementProps = {\n id: [String, Number] as PropType<string | number>,\n name: String,\n x: Number,\n y: Number,\n rotation: Number,\n scaleX: Number,\n scaleY: Number,\n skewX: Number,\n skewY: Number,\n originX: Number,\n originY: Number,\n anchorX: Number,\n anchorY: Number,\n left: [String, Number] as PropType<string | number>,\n right: [String, Number] as PropType<string | number>,\n top: [String, Number] as PropType<string | number>,\n bottom: [String, Number] as PropType<string | number>,\n bounding: String as PropType<\"raw\" | \"all\">,\n z: Number,\n z2: Number,\n zlevel: Number,\n silent: withUndefinedDefault(Boolean),\n draggable: withUndefinedDefault([Boolean, String] as PropType<\n boolean | \"horizontal\" | \"vertical\"\n >),\n cursor: String,\n ignore: withUndefinedDefault(Boolean),\n invisible: withUndefinedDefault(Boolean),\n extra: Object as PropType<GraphicExtra>,\n info: null as unknown as PropType<unknown>,\n tooltip: Object as PropType<TooltipComponentOption>,\n clipPath: withUndefinedDefault([Boolean, Object] as PropType<false | object>),\n textContent: Object as PropType<Record<string, unknown>>,\n textConfig: Object as PropType<object>,\n transition: [String, Array] as PropType<string | string[]>,\n enterFrom: Object as PropType<object>,\n leaveTo: Object as PropType<object>,\n during: Function as PropType<GraphicDuring>,\n enterAnimation: Object as PropType<GraphicAnimationOption>,\n updateAnimation: Object as PropType<GraphicAnimationOption>,\n leaveAnimation: Object as PropType<GraphicAnimationOption>,\n keyframeAnimation: [Object, Array] as PropType<GraphicKeyframeAnimationOption>,\n} as const satisfies Record<GraphicCommonPropKey | GraphicDisplayablePropKey, unknown>;\n\nconst groupProps = {\n width: Number,\n height: Number,\n} as const satisfies Record<GraphicGroupPropKey, unknown>;\n\nconst pathProps = {\n autoBatch: withUndefinedDefault(Boolean),\n} as const satisfies Record<GraphicPathPropKey, unknown>;\n\nconst commonStyleProps = {\n shadowBlur: Number,\n shadowOffsetX: Number,\n shadowOffsetY: Number,\n shadowColor: String,\n opacity: Number,\n blend: String,\n} as const satisfies Record<GraphicCommonStyleKey, unknown>;\n\nconst pathStyleProps = {\n fill: [String, Object] as PropType<Color>,\n stroke: [String, Object] as PropType<Color>,\n decal: Object as PropType<PatternObject>,\n strokePercent: Number,\n strokeNoScale: withUndefinedDefault(Boolean),\n fillOpacity: Number,\n strokeOpacity: Number,\n lineWidth: Number,\n lineDash: withUndefinedDefault([String, Array, Boolean] as PropType<\n \"solid\" | \"dashed\" | \"dotted\" | number[] | false\n >),\n lineDashOffset: Number,\n lineCap: String as PropType<CanvasLineCap>,\n lineJoin: String as PropType<CanvasLineJoin>,\n miterLimit: Number,\n strokeFirst: withUndefinedDefault(Boolean),\n} as const satisfies Record<GraphicPathStyleKey, unknown>;\n\nconst textStyleProps = {\n text: String,\n font: String,\n textFont: String,\n fontStyle: String as PropType<FontStyle>,\n fontWeight: [String, Number] as PropType<FontWeight>,\n fontFamily: String,\n fontSize: [String, Number] as PropType<string | number>,\n align: String as PropType<GraphicTextAlign>,\n verticalAlign: String as PropType<GraphicTextVerticalAlign>,\n lineHeight: Number,\n tag: String,\n backgroundColor: [String, Object] as PropType<string | { image: GraphicImageSource }>,\n padding: [Number, Array] as PropType<number | number[]>,\n margin: [Number, Array] as PropType<number | number[]>,\n borderColor: String,\n borderWidth: Number,\n borderRadius: [Number, Array] as PropType<number | number[]>,\n borderDash: withUndefinedDefault([Array, Boolean] as PropType<number[] | false>),\n borderDashOffset: Number,\n rich: Object as PropType<Record<string, object>>,\n textStrokeWidth: Number,\n textAlign: String as PropType<GraphicTextAlign>,\n textVerticalAlign: String as PropType<GraphicTextVerticalAlign>,\n textLineHeight: Number,\n textShadowBlur: Number,\n textShadowOffsetX: Number,\n textShadowOffsetY: Number,\n textShadowColor: String,\n overflow: String as PropType<GraphicTextOverflow>,\n lineOverflow: String as PropType<\"truncate\">,\n ellipsis: String,\n placeholder: String,\n truncateMinChar: Number,\n} as const satisfies Record<GraphicTextStyleOnlyKey, unknown>;\n\nconst imageStyleProps = {\n image: [String, Object] as PropType<GraphicImageSource>,\n sx: Number,\n sy: Number,\n sWidth: Number,\n sHeight: Number,\n} as const satisfies Record<GraphicImageStyleOnlyKey, unknown>;\n\nexport const commonProps = {\n ...elementProps,\n ...groupProps,\n ...pathProps,\n shape: Object as PropType<Record<string, unknown>>,\n style: Object as PropType<object>,\n shapeTransition: [String, Array] as PropType<string | string[]>,\n styleTransition: [String, Array] as PropType<string | string[]>,\n ...commonStyleProps,\n ...pathStyleProps,\n ...textStyleProps,\n ...imageStyleProps,\n} as const;\n\nexport const textPropOverrides = {\n width: [String, Number] as PropType<string | number>,\n fill: String,\n stroke: String,\n lineDash: withUndefinedDefault([Array, Boolean] as PropType<number[] | false>),\n} as const;\n\nexport type GraphicCommonProps = Omit<ExtractPublicPropTypes<typeof commonProps>, \"width\"> &\n Pick<ExtractPublicPropTypes<typeof textPropOverrides>, \"width\">;\n","import type { ExtractPublicPropTypes, PropType } from \"vue\";\n\nimport type { GraphicComponentType } from \"./component-type\";\nimport { withUndefinedDefault } from \"./props-common\";\n\nexport const SHAPE_KEYS_BY_TYPE = {\n rect: [\"x\", \"y\", \"width\", \"height\", \"r\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n sector: [\"cx\", \"cy\", \"r\", \"r0\", \"startAngle\", \"endAngle\", \"clockwise\", \"cornerRadius\"],\n ring: [\"cx\", \"cy\", \"r\", \"r0\"],\n arc: [\"cx\", \"cy\", \"r\", \"startAngle\", \"endAngle\", \"clockwise\"],\n line: [\"x1\", \"y1\", \"x2\", \"y2\", \"percent\"],\n polyline: [\"points\", \"percent\", \"smooth\", \"smoothConstraint\"],\n polygon: [\"points\", \"smooth\", \"smoothConstraint\"],\n bezierCurve: [\"x1\", \"y1\", \"x2\", \"y2\", \"cpx1\", \"cpy1\", \"cpx2\", \"cpy2\", \"percent\"],\n} as const satisfies Partial<Record<GraphicComponentType, readonly string[]>>;\n\nexport const shapeProps = {\n x: Number,\n y: Number,\n cx: Number,\n cy: Number,\n rx: Number,\n ry: Number,\n r: [Number, Array] as PropType<number | number[]>,\n r0: Number,\n x1: Number,\n y1: Number,\n x2: Number,\n y2: Number,\n cpx1: Number,\n cpy1: Number,\n cpx2: Number,\n cpy2: Number,\n startAngle: Number,\n endAngle: Number,\n percent: Number,\n points: Array as PropType<number[][]>,\n smooth: Number,\n smoothConstraint: Array as PropType<number[][]>,\n clockwise: withUndefinedDefault(Boolean),\n cornerRadius: [Number, Array] as PropType<number | number[]>,\n} as const;\n\nexport type GraphicShapeProps = ExtractPublicPropTypes<typeof shapeProps>;\n","import type { ElementEvent } from \"echarts/core\";\nimport type { ElementEventAlias, WithOnce } from \"../types\";\n\nexport type GraphicEventName = Exclude<ElementEvent[\"type\"], \"globalout\">;\n\nexport const GRAPHIC_EVENTS = {\n click: true,\n dblclick: true,\n mousewheel: true,\n mouseout: true,\n mouseover: true,\n mouseup: true,\n mousedown: true,\n mousemove: true,\n contextmenu: true,\n drag: true,\n dragstart: true,\n dragend: true,\n dragenter: true,\n dragleave: true,\n dragover: true,\n drop: true,\n} as const satisfies Record<GraphicEventName, true>;\n\nexport type GraphicOnEventName = `on${GraphicEventName}`;\n\ntype GraphicEventAlias = Exclude<ElementEventAlias, \"globalOut\">;\n\nexport type GraphicEmits = WithOnce<{\n [key in GraphicEventName | GraphicEventAlias]: (params: ElementEvent) => boolean | void;\n}>;\n","import { createEventInvoker, hasEventHandler, parseOnEvent } from \"../utils\";\nimport type { EventHandler } from \"../utils\";\nimport {\n COMMON_PROP_KEYS,\n COMMON_STYLE_KEYS,\n DISPLAYABLE_PROP_KEYS,\n GROUP_PROP_KEYS,\n PATH_PROP_KEYS,\n PATH_STYLE_KEYS,\n STYLE_KEYS_BY_TYPE,\n TEXT_COMMON_STYLE_KEYS,\n} from \"./props-common\";\nimport { SHAPE_KEYS_BY_TYPE } from \"./props-shape\";\nimport type { GraphicNode } from \"./collector\";\nimport { GRAPHIC_EVENTS } from \"./types\";\n\nexport type GraphicElement = Record<string, unknown> & {\n type: string;\n id: string;\n children?: GraphicElement[];\n};\n\nfunction mergeProps(\n target: Record<string, unknown> | undefined,\n keys: readonly string[],\n props: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n for (const key of keys) {\n const value = props[key];\n if (value !== undefined) {\n (target ??= {})[key] = value;\n }\n }\n return target;\n}\n\nfunction buildNestedProps(\n source: unknown,\n props: Record<string, unknown>,\n keys: readonly string[],\n transition: unknown,\n extraKeys?: readonly string[],\n): Record<string, unknown> | undefined {\n const nested = source as Record<string, unknown> | undefined;\n let result = nested && Object.keys(nested).length > 0 ? { ...nested } : undefined;\n result = mergeProps(result, keys, props);\n if (extraKeys) {\n result = mergeProps(result, extraKeys, props);\n }\n\n if (transition !== undefined) {\n (result ??= {}).transition = transition;\n }\n\n return result;\n}\n\nfunction toEventHandler(value: unknown, once: boolean): EventHandler | undefined {\n const invoke = createEventInvoker(value);\n if (!invoke || !once) {\n return invoke;\n }\n\n let called = false;\n return (...args: unknown[]): unknown => {\n if (called) {\n return;\n }\n called = true;\n return invoke(...args);\n };\n}\n\nfunction mergeHandlers(node: GraphicNode, target: Record<string, unknown>): void {\n const { handlers } = node;\n\n if (node.handlerCache) {\n for (const key of node.handlerCache.keys()) {\n if (!Object.hasOwn(handlers, key)) {\n node.handlerCache.delete(key);\n }\n }\n }\n\n for (const key of Object.keys(handlers)) {\n const value = handlers[key];\n const descriptor = parseOnEvent(key);\n if (!descriptor) {\n continue;\n }\n const event = descriptor.event.toLowerCase();\n if (!Object.hasOwn(GRAPHIC_EVENTS, event)) {\n continue;\n }\n\n const cached = node.handlerCache?.get(key);\n const reused = cached !== undefined && cached.source === value && hasEventHandler(value);\n const handler = reused ? cached.handler : toEventHandler(value, descriptor.once);\n if (!handler) {\n node.handlerCache?.delete(key);\n continue;\n }\n if (!reused) {\n (node.handlerCache ??= new Map()).set(key, { source: value, handler });\n }\n\n const eventKey = `on${event}`;\n const existing = target[eventKey] as EventHandler | undefined;\n if (!existing) {\n target[eventKey] = handler;\n continue;\n }\n\n target[eventKey] = (...args: unknown[]): unknown => {\n const result = existing(...args);\n return handler(...args) || result;\n };\n }\n}\n\nfunction toElement(node: GraphicNode, children?: GraphicElement[]): GraphicElement {\n const { type, id, props } = node;\n const shapeKeys: readonly string[] | undefined =\n SHAPE_KEYS_BY_TYPE[type as keyof typeof SHAPE_KEYS_BY_TYPE];\n const styleKeys: readonly string[] | undefined = shapeKeys\n ? PATH_STYLE_KEYS\n : STYLE_KEYS_BY_TYPE[type as keyof typeof STYLE_KEYS_BY_TYPE];\n const commonStyleKeys = type === \"text\" ? TEXT_COMMON_STYLE_KEYS : COMMON_STYLE_KEYS;\n const out: Record<string, unknown> = {\n type,\n id,\n };\n\n for (const key of COMMON_PROP_KEYS) {\n // Keep the normalized string ID used by the collector and update versions.\n if (key === \"id\") {\n continue;\n }\n const value = props[key];\n if (value !== undefined && !shapeKeys?.includes(key) && !styleKeys?.includes(key)) {\n out[key] = value;\n }\n }\n if (shapeKeys) {\n mergeProps(out, PATH_PROP_KEYS, props);\n }\n\n mergeHandlers(node, out);\n\n if (type === \"group\") {\n mergeProps(out, GROUP_PROP_KEYS, props);\n if (children?.length) {\n out.children = children;\n }\n return out as GraphicElement;\n }\n\n mergeProps(out, DISPLAYABLE_PROP_KEYS, props);\n\n const shape = shapeKeys\n ? buildNestedProps(props.shape, props, shapeKeys, props.shapeTransition)\n : undefined;\n if (shape) {\n out.shape = shape;\n }\n\n const style = buildNestedProps(\n props.style,\n props,\n commonStyleKeys,\n props.styleTransition,\n styleKeys,\n );\n if (style) {\n out.style = style;\n }\n\n return out as GraphicElement;\n}\n\n/** Build the tree in the order supplied by the collector. */\nexport function buildOption(\n nodes: Iterable<GraphicNode>,\n rootId: string,\n): { graphic: { elements: GraphicElement[] } } {\n const byParent = new Map<string | null, GraphicNode[]>();\n const occupiedRootIds = new Set<string>();\n\n for (const node of nodes) {\n occupiedRootIds.add(node.id);\n const list = byParent.get(node.parentId);\n if (list) {\n list.push(node);\n continue;\n }\n byParent.set(node.parentId, [node]);\n }\n\n while (occupiedRootIds.has(rootId)) {\n rootId += \"_\";\n }\n\n const childrenOf = (parentId: string | null): GraphicElement[] | undefined =>\n byParent.get(parentId)?.map((node) => {\n if (node.type !== \"group\") {\n return toElement(node);\n }\n return toElement(node, childrenOf(node.id));\n });\n\n return {\n graphic: {\n elements: [\n {\n type: \"group\",\n id: rootId,\n children: childrenOf(null) ?? [],\n },\n ],\n },\n };\n}\n","import { queuePostFlushCb } from \"vue\";\n\nimport { isIgnorableWatchChange, warn as coreWarn } from \"../utils\";\nimport type { EventHandler } from \"../utils\";\n\nexport type GraphicNode = {\n id: string;\n type: string;\n parentId: string | null;\n props: Record<string, unknown>;\n handlers: Record<string, unknown>;\n handlerCache?: Map<string, { source: unknown; handler: EventHandler }>;\n sourceId: number;\n element?: HTMLElement;\n version?: number;\n};\n\nexport type GraphicCollector = {\n beginPass: () => void;\n register: (node: GraphicRegisterNode) => void;\n unregister: (id: string, sourceId: number) => void;\n warn: (message: string, onceKey: string) => void;\n getNodes: () => readonly GraphicNode[];\n requestFlush: (id?: string, sourceId?: number) => void;\n cancelPendingFlush: () => void;\n setRoot: (root: HTMLElement | undefined) => void;\n dispose: () => void;\n};\n\ntype GraphicRegisterNode = Omit<GraphicNode, \"handlerCache\">;\n\nexport function createCollector(onFlush: () => void): GraphicCollector {\n const nodes = new Map<string, GraphicNode>();\n const seenInPass = new Map<string, number>();\n const warnedKeys = new Set<string>();\n\n let version = 0;\n let pending = false;\n let root: HTMLElement | undefined;\n let observer: MutationObserver | undefined;\n const byElement = new WeakMap<HTMLElement, GraphicNode>();\n let orderedNodes: GraphicNode[] = [];\n let orderDirty = true;\n\n function syncOrder(): boolean {\n if (!root) {\n return false;\n }\n // Vue may submit before MutationObserver delivers its callback. Consume queued\n // records here as well, including when clear() absorbs earlier DOM changes.\n if (observer?.takeRecords().length) {\n orderDirty = true;\n }\n if (!orderDirty) {\n return false;\n }\n orderDirty = false;\n const nextNodes: GraphicNode[] = [];\n const walker = root.ownerDocument.createTreeWalker(root, 1);\n for (let element = walker.nextNode(); element; element = walker.nextNode()) {\n const node = byElement.get(element as HTMLElement);\n if (node && nodes.get(node.id) === node) {\n nextNodes.push(node);\n }\n }\n const changed =\n nextNodes.length !== orderedNodes.length ||\n nextNodes.some((node, index) => node.id !== orderedNodes[index].id);\n orderedNodes = nextNodes;\n return changed;\n }\n\n function setRoot(value: HTMLElement | undefined): void {\n observer?.disconnect();\n root = value;\n orderedNodes = [];\n orderDirty = true;\n if (root) {\n // Wrapper components can move unchanged children without rerendering a G* component.\n observer = new MutationObserver(() => {\n orderDirty = true;\n if (syncOrder()) {\n requestFlush();\n }\n });\n observer.observe(root, { childList: true, subtree: true });\n }\n }\n\n function beginPass(): void {\n seenInPass.clear();\n }\n\n function warn(message: string, onceKey: string): void {\n if (warnedKeys.has(onceKey)) {\n return;\n }\n warnedKeys.add(onceKey);\n coreWarn(message);\n }\n\n function register(node: GraphicRegisterNode): void {\n const seenSource = seenInPass.get(node.id);\n if (seenSource !== undefined && seenSource !== node.sourceId) {\n warn(\n `Duplicate graphic id \"${node.id}\" detected. Updates may be unstable.`,\n `duplicate-id:${node.id}`,\n );\n }\n\n const existing = nodes.get(node.id);\n const sameSource = existing?.sourceId === node.sourceId;\n const unchanged =\n sameSource &&\n existing.type === node.type &&\n existing.parentId === node.parentId &&\n existing.props === node.props &&\n isIgnorableWatchChange(existing.handlers, node.handlers) &&\n existing.element === node.element;\n\n seenInPass.set(node.id, node.sourceId);\n // Props and attrs are stable proxies; their watcher covers value-only changes.\n if (unchanged) {\n return;\n }\n\n const registered = {\n ...node,\n handlerCache: sameSource ? existing?.handlerCache : undefined,\n version: ++version,\n };\n nodes.set(node.id, registered);\n orderDirty = true;\n if (node.element) {\n byElement.set(node.element, registered);\n }\n requestFlush();\n }\n\n function unregister(id: string, sourceId: number): void {\n const existing = nodes.get(id);\n if (!existing || existing.sourceId !== sourceId) {\n return;\n }\n nodes.delete(id);\n orderDirty = true;\n requestFlush();\n }\n\n function requestFlush(id?: string, sourceId?: number): void {\n const node = id === undefined ? undefined : nodes.get(id);\n if (node && node.sourceId === sourceId) {\n node.version = ++version;\n }\n if (pending) {\n return;\n }\n pending = true;\n queuePostFlushCb(() => {\n if (!pending) {\n return;\n }\n pending = false;\n beginPass();\n onFlush();\n });\n }\n\n function getNodes(): readonly GraphicNode[] {\n syncOrder();\n return root ? orderedNodes : Array.from(nodes.values());\n }\n\n function dispose(): void {\n cancelPendingFlush();\n setRoot(undefined);\n nodes.clear();\n }\n\n function cancelPendingFlush(): void {\n pending = false;\n syncOrder();\n beginPass();\n }\n\n return {\n beginPass,\n register,\n unregister,\n warn,\n getNodes,\n requestFlush,\n cancelPendingFlush,\n setRoot,\n dispose,\n };\n}\n","import type { InjectionKey, Ref } from \"vue\";\n\nimport type { GraphicCollector } from \"./collector\";\n\nexport const GRAPHIC_COLLECTOR_KEY: InjectionKey<GraphicCollector> = Symbol(\n \"vue-echarts:graphic-collector\",\n);\nexport const GRAPHIC_PARENT_ID_KEY: InjectionKey<Ref<string | null>> = Symbol(\n \"vue-echarts:graphic-parent-id\",\n);\n","import {\n Teleport,\n defineComponent,\n getCurrentInstance,\n h,\n onBeforeMount,\n onMounted,\n provide,\n shallowRef,\n} from \"vue\";\n\nimport type { GraphicCollector } from \"./collector\";\nimport { GRAPHIC_COLLECTOR_KEY, GRAPHIC_PARENT_ID_KEY } from \"./context\";\n\nexport const GraphicMount = defineComponent({\n name: \"GraphicMount\",\n props: {\n collector: {\n type: Object as () => GraphicCollector,\n required: true,\n },\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance()!;\n const { collector } = props;\n const { beginPass } = collector;\n const detachedRoot = shallowRef<HTMLDivElement>();\n // A pre-existing vnode element means Vue is hydrating the SSR placeholder.\n const hydrating = Boolean(instance.vnode.el);\n const parentId = shallowRef<string | null>(null);\n\n onBeforeMount(() => {\n // Keeping the target inside the host lets iframe adoption finish before child mounted hooks.\n // Hydration waits for onMounted so the target cannot appear as an extra server node.\n const host = instance.parent?.subTree.el as HTMLElement | undefined;\n if (host && !hydrating) {\n const target = host.ownerDocument.createElement(\"div\");\n host.appendChild(target);\n detachedRoot.value = target;\n collector.setRoot(target);\n }\n });\n\n onMounted(() => {\n const ownerDocument = (instance.vnode.el as Node).ownerDocument!;\n const target = detachedRoot.value;\n target?.remove();\n if (target?.ownerDocument !== ownerDocument) {\n detachedRoot.value = ownerDocument.createElement(\"div\");\n collector.setRoot(detachedRoot.value);\n }\n });\n\n provide(GRAPHIC_COLLECTOR_KEY, collector);\n provide(GRAPHIC_PARENT_ID_KEY, parentId);\n\n return () => {\n beginPass();\n // Mount the Teleport after hydration. Older Vue runtimes cannot hydrate an\n // enabled Teleport into an empty target without server-rendered target anchors.\n const target = detachedRoot.value;\n if (!target) {\n return null;\n }\n\n return h(Teleport, { to: target }, slots.default!());\n };\n },\n});\n","import { h, onScopeDispose, onUpdated } from \"vue\";\nimport { use } from \"echarts/core\";\nimport { GraphicComponent } from \"echarts/components\";\nimport { buildOption, type GraphicElement } from \"./build\";\nimport { planUpdate, type Signature } from \"../update\";\nimport { createCollector } from \"./collector\";\nimport { GraphicMount } from \"./mount\";\nimport { registerRuntime } from \"./runtime\";\n\nconst ROOT_ID = \"__ve_graphic_root__\";\n\nexport function registerExtension(): void {\n use([GraphicComponent]);\n\n registerRuntime((ctx) => {\n const { slots, manualUpdate, requestUpdate } = ctx;\n const collector = createCollector(handleFlush);\n let hasGraphicSlot = Boolean(slots.graphic);\n let signature: Signature | undefined;\n let versions = new Map<string, number | undefined>();\n\n function handleFlush(): void {\n if (manualUpdate.value) {\n const nodes = collector.getNodes();\n const changed =\n !slots.graphic ||\n nodes.length !== versions.size ||\n nodes.some((node) => versions.get(node.id) !== node.version);\n if (!signature || !changed) {\n return;\n }\n collector.warn(\n \"`#graphic` slot updates are ignored when `manual-update` is `true`.\",\n \"manual-update-graphic\",\n );\n return;\n }\n requestUpdate();\n }\n\n onScopeDispose(collector.dispose);\n onUpdated(() => {\n const nextHasGraphicSlot = Boolean(slots.graphic);\n if (nextHasGraphicSlot === hasGraphicSlot) {\n return;\n }\n hasGraphicSlot = nextHasGraphicSlot;\n if (!hasGraphicSlot) {\n collector.cancelPendingFlush();\n }\n handleFlush();\n });\n\n return {\n cancelPendingFlush: collector.cancelPendingFlush,\n prepare(option, reset) {\n hasGraphicSlot = Boolean(slots.graphic);\n collector.cancelPendingFlush();\n if (!hasGraphicSlot) {\n return {\n option,\n replace: false,\n commit: () => {\n signature = undefined;\n versions.clear();\n },\n };\n }\n if (option.graphic) {\n collector.warn(\n \"`#graphic` slot is provided, so `option.graphic` is ignored. Remove one of them to avoid ambiguity.\",\n \"option-graphic-override\",\n );\n }\n const nodes = collector.getNodes();\n const nextOption = buildOption(nodes, ROOT_ID);\n const planned = planUpdate(signature, nextOption);\n const replace =\n reset ||\n !signature ||\n planned.plan.notMerge ||\n Boolean(planned.plan.replaceMerge?.length);\n const nextVersions = new Map(nodes.map((node) => [node.id, node.version]));\n const elements: GraphicElement[] = [];\n function collectChanges(element: GraphicElement, parentId?: string): void {\n if (\n nextVersions.has(element.id) &&\n nextVersions.get(element.id) !== versions.get(element.id)\n ) {\n const { children: _, ...props } = element;\n props.parentId = parentId;\n elements.push(props);\n }\n element.children?.forEach((child) => collectChanges(child, element.id));\n }\n if (!replace) {\n nextOption.graphic.elements.forEach((element) => collectChanges(element));\n }\n const patched = { ...option };\n delete patched.graphic;\n if (replace || elements.length) {\n patched.graphic = replace ? nextOption.graphic : { elements };\n }\n return {\n option: patched,\n replace,\n commit: () => {\n signature = planned.signature;\n versions = nextVersions;\n },\n };\n },\n render() {\n if (!slots.graphic) {\n return null;\n }\n return h(GraphicMount, { collector }, { default: slots.graphic });\n },\n };\n });\n}\n","export function resolveIdentity(\n propsId: string | number | undefined,\n vnodeKey: PropertyKey | null | undefined,\n uid: number,\n): string {\n if (propsId != null) {\n return String(propsId);\n }\n // Vue distinguishes numeric and string keys, while ECharts stringifies IDs.\n return typeof vnodeKey === \"string\" ? vnodeKey : `__ve_graphic_${uid}`;\n}\n","import {\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onBeforeUnmount,\n provide,\n shallowRef,\n type Slot,\n type SlotsType,\n watch,\n} from \"vue\";\n\nimport type { Component } from \"../types\";\nimport { warn } from \"../utils\";\nimport { GRAPHIC_COLLECTOR_KEY, GRAPHIC_PARENT_ID_KEY } from \"./context\";\nimport { resolveIdentity } from \"./identity\";\nimport type { GraphicComponentType } from \"./component-type\";\nimport {\n COMMON_PROP_KEYS,\n COMMON_STYLE_KEYS,\n DISPLAYABLE_PROP_KEYS,\n GROUP_PROP_KEYS,\n PATH_PROP_KEYS,\n PATH_STYLE_KEYS,\n STYLE_KEYS_BY_TYPE,\n TEXT_COMMON_STYLE_KEYS,\n commonProps,\n textPropOverrides,\n} from \"./props-common\";\nimport type {\n GraphicCommonPropKey,\n GraphicCommonStyleKey,\n GraphicDisplayablePropKey,\n GraphicGroupPropKey,\n GraphicImageStyleKey,\n GraphicPathPropKey,\n GraphicPathStyleKey,\n GraphicTextAttachmentPropKey,\n GraphicTextCommonStyleKey,\n GraphicTextStyleKey,\n} from \"./props-common\";\nimport { SHAPE_KEYS_BY_TYPE, shapeProps } from \"./props-shape\";\nimport type { GraphicEmits } from \"./types\";\n\nconst componentProps = {\n ...commonProps,\n ...shapeProps,\n} as const;\n\nfunction getRuntimeProps(type: GraphicComponentType) {\n const keys: Array<keyof typeof componentProps> = COMMON_PROP_KEYS.filter(\n (key) => type !== \"text\" || (key !== \"textContent\" && key !== \"textConfig\"),\n );\n if (type === \"group\") {\n keys.push(...GROUP_PROP_KEYS);\n } else {\n const shapeKeys = SHAPE_KEYS_BY_TYPE[type as keyof typeof SHAPE_KEYS_BY_TYPE];\n const styleKeys = shapeKeys\n ? PATH_STYLE_KEYS\n : STYLE_KEYS_BY_TYPE[type as keyof typeof STYLE_KEYS_BY_TYPE];\n const commonStyleKeys = type === \"text\" ? TEXT_COMMON_STYLE_KEYS : COMMON_STYLE_KEYS;\n keys.push(\n \"style\",\n \"styleTransition\",\n ...DISPLAYABLE_PROP_KEYS,\n ...commonStyleKeys,\n ...styleKeys,\n );\n if (shapeKeys) {\n keys.push(\"shape\", \"shapeTransition\", ...PATH_PROP_KEYS, ...shapeKeys);\n }\n }\n const definitions =\n type === \"text\"\n ? { ...componentProps, ...textPropOverrides }\n : { ...componentProps, r: type === \"rect\" ? componentProps.r : Number };\n return Object.fromEntries(keys.map((key) => [key, definitions[key]]));\n}\n\ntype NestedShapePropKey = \"shape\" | \"shapeTransition\";\ntype NestedStylePropKey = \"style\" | \"styleTransition\";\ntype SharedPropKey<T extends GraphicComponentType> = Exclude<\n GraphicCommonPropKey,\n T extends \"text\" ? GraphicTextAttachmentPropKey : never\n>;\ntype StylePropKey<T extends GraphicComponentType> = T extends \"group\"\n ? never\n :\n | NestedStylePropKey\n | (T extends \"text\" ? GraphicTextCommonStyleKey : GraphicCommonStyleKey)\n | (T extends keyof typeof SHAPE_KEYS_BY_TYPE\n ? GraphicPathStyleKey\n : T extends \"text\"\n ? GraphicTextStyleKey\n : T extends \"image\"\n ? GraphicImageStyleKey\n : never);\ntype PathPropKey<T extends GraphicComponentType> = T extends keyof typeof SHAPE_KEYS_BY_TYPE\n ? NestedShapePropKey | GraphicPathPropKey | (typeof SHAPE_KEYS_BY_TYPE)[T][number]\n : never;\ntype GroupPropKey<T extends GraphicComponentType> = T extends \"group\" ? GraphicGroupPropKey : never;\ntype DisplayablePropKey<T extends GraphicComponentType> = T extends \"group\"\n ? never\n : GraphicDisplayablePropKey;\ntype ComponentPropDefinitions<T extends GraphicComponentType> = T extends \"text\"\n ? Omit<typeof componentProps, keyof typeof textPropOverrides> & typeof textPropOverrides\n : T extends \"rect\"\n ? typeof componentProps\n : Omit<typeof componentProps, \"r\"> & { r: NumberConstructor };\ntype ComponentProps<T extends GraphicComponentType> = Pick<\n ComponentPropDefinitions<T>,\n Extract<\n SharedPropKey<T> | GroupPropKey<T> | DisplayablePropKey<T> | PathPropKey<T> | StylePropKey<T>,\n keyof typeof componentProps\n >\n>;\ntype ComponentSlots<T extends GraphicComponentType> = SlotsType<\n T extends \"group\" ? { default?: Slot } : Record<never, never>\n>;\n\n/* @__NO_SIDE_EFFECTS__ */\nexport function createComponent<T extends GraphicComponentType>(\n name: string,\n type: T,\n): GraphicComponent<T> {\n return defineComponent({\n name,\n inheritAttrs: false,\n props: getRuntimeProps(type) as ComponentProps<T>,\n emits: {} as unknown as GraphicEmits,\n setup(props, { attrs, slots }) {\n const instance = getCurrentInstance()!;\n const collector = inject(GRAPHIC_COLLECTOR_KEY, null);\n const parentIdRef = inject(GRAPHIC_PARENT_ID_KEY, null);\n\n if (!collector) {\n warn(`\\`${name}\\` must be used inside \\`#graphic\\` slot.`);\n return () => null;\n }\n const { register: registerNode, unregister, requestFlush } = collector;\n let currentId: string | undefined;\n let element: HTMLElement | undefined;\n\n watch([props, () => attrs], () => requestFlush(currentId, instance.uid), {\n deep: true,\n });\n\n function register(): string {\n const id = resolveIdentity(\n (props as { id?: string | number }).id,\n instance.vnode.key,\n instance.uid,\n );\n if (currentId !== undefined && currentId !== id) {\n unregister(currentId, instance.uid);\n }\n currentId = id;\n\n if (element) {\n registerNode({\n id,\n type,\n parentId: parentIdRef!.value,\n element,\n props: props as Record<string, unknown>,\n handlers: { ...attrs },\n sourceId: instance.uid,\n });\n }\n return id;\n }\n\n const setElement = (value: unknown): void => {\n if (value === element) {\n return;\n }\n element = (value as HTMLElement | null) ?? undefined;\n if (element) {\n register();\n }\n };\n onBeforeUnmount(() => unregister(currentId!, instance.uid));\n\n if (type === \"group\") {\n const providedParent = shallowRef<string | null>(null);\n provide(GRAPHIC_PARENT_ID_KEY, providedParent);\n\n return () => {\n providedParent.value = register();\n const content = (slots as { default?: Slot }).default?.() ?? [];\n return h(\"div\", { ref: setElement }, content);\n };\n }\n\n return () => {\n register();\n return h(\"div\", { ref: setElement });\n };\n },\n }) as GraphicComponent<T>;\n}\n\nexport type GraphicComponent<T extends GraphicComponentType> = Component<\n ComponentProps<T>,\n Record<never, never>,\n GraphicEmits,\n ComponentSlots<T>\n>;\n","import { createComponent, type GraphicComponent } from \"./component-factory\";\n\nexport const GGroup: GraphicComponent<\"group\"> = createComponent(\"GGroup\", \"group\");\nexport const GRect: GraphicComponent<\"rect\"> = createComponent(\"GRect\", \"rect\");\nexport const GCircle: GraphicComponent<\"circle\"> = createComponent(\"GCircle\", \"circle\");\nexport const GEllipse: GraphicComponent<\"ellipse\"> = createComponent(\"GEllipse\", \"ellipse\");\nexport const GText: GraphicComponent<\"text\"> = createComponent(\"GText\", \"text\");\nexport const GLine: GraphicComponent<\"line\"> = createComponent(\"GLine\", \"line\");\nexport const GPolyline: GraphicComponent<\"polyline\"> = createComponent(\"GPolyline\", \"polyline\");\nexport const GPolygon: GraphicComponent<\"polygon\"> = createComponent(\"GPolygon\", \"polygon\");\nexport const GImage: GraphicComponent<\"image\"> = createComponent(\"GImage\", \"image\");\nexport const GSector: GraphicComponent<\"sector\"> = createComponent(\"GSector\", \"sector\");\nexport const GRing: GraphicComponent<\"ring\"> = createComponent(\"GRing\", \"ring\");\nexport const GArc: GraphicComponent<\"arc\"> = createComponent(\"GArc\", \"arc\");\nexport const GBezierCurve: GraphicComponent<\"bezierCurve\"> = createComponent(\n \"GBezierCurve\",\n \"bezierCurve\",\n);\n","import { registerExtension } from \"./extension\";\n\nregisterExtension();\n\nexport type { VChartSlotsExtension } from \"../index\";\nexport type { GraphicComponent } from \"./component-factory\";\nexport type { GraphicEmits, GraphicEventName, GraphicOnEventName } from \"./types\";\nexport type { GraphicCommonProps } from \"./props-common\";\nexport type { GraphicShapeProps } from \"./props-shape\";\n\nexport {\n GGroup,\n GRect,\n GCircle,\n GEllipse,\n GText,\n GLine,\n GPolyline,\n GPolygon,\n GImage,\n GSector,\n GRing,\n GArc,\n GBezierCurve,\n} from \"./components\";\n"],"mappings":";;;;AAiBA,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,CA5BqC,eAAe,YA4BpD;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,kBAAkB,CAAC,SAAS,QAAQ;AAEjD,MAAa,wBAAwB;CAAC;CAAK;CAAM;CAAU;CAAU;AAAW;AAEhF,MAAa,iBAAiB,CAAC,WAAW;AAE1C,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,oBAAoB,CAAC,GAAG,wBAAwB,OAAO;AAEpE,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,kBAAkB;CAC7B,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;AACF;AAqDA,MAAa,qBAAqB;CAChC,MAAM;EAnDN,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAgBM;CACN,OAAO;EAbP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAKO;AACT;AAcA,SAAgB,qBAAwB,MAAS;CAC/C,OAAO;EAAE;EAAM,SAAS,KAAA;CAAU;AACpC;AAmBA,MAAM,eAAe;CACnB,IAAI,CAAC,QAAQ,MAAM;CACnB,MAAM;CACN,GAAG;CACH,GAAG;CACH,UAAU;CACV,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,MAAM,CAAC,QAAQ,MAAM;CACrB,OAAO,CAAC,QAAQ,MAAM;CACtB,KAAK,CAAC,QAAQ,MAAM;CACpB,QAAQ,CAAC,QAAQ,MAAM;CACvB,UAAU;CACV,GAAG;CACH,IAAI;CACJ,QA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"}
|