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 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.41"></script>
125
- <script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.0"></script>
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.41"></script>
125
- <script src="https://cdn.jsdelivr.net/npm/vue-echarts@8.3.0"></script>
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 { c as ElementEventAlias, f as PublicComponent, l as FontStyle, p as WithOnce, t as VChartSlotsExtension, u as FontWeight } from "./index-BujxhN-1.js";
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/component-type.d.ts
238
- type GraphicComponentType = "group" | "rect" | "circle" | "ellipse" | "text" | "line" | "polyline" | "polygon" | "image" | "sector" | "ring" | "arc" | "bezierCurve";
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 | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement>;
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 | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;
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> = PublicComponent<ComponentProps<T>, Record<never, never>, GraphicEmits, ComponentSlots<T>>;
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 { GArc, GBezierCurve, GCircle, GEllipse, GGroup, GImage, GLine, GPolygon, GPolyline, GRect, GRing, GSector, GText, type GraphicCommonProps, type GraphicEmits, type GraphicEventName, type GraphicOnEventName, type GraphicShapeProps, type VChartSlotsExtension };
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, s as isBrowser, t as planUpdate } from "./update-CWPvYl2M.js";
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 orderedIds = [];
515
+ let orderedNodes = [];
516
+ let orderDirty = true;
516
517
  function syncOrder() {
517
518
  if (!root) return false;
518
- const ids = [];
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 = ids.length !== orderedIds.length || ids.some((id, index) => id !== orderedIds[index]);
528
- orderedIds = ids;
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
- orderedIds = [];
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 && (node.element !== void 0 || existing.order === nextOrder);
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 ? orderedIds.map((id) => nodes.get(id)) : nodes.values();
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 contentReady = shallowRef(isBrowser() && !instance.vnode.el);
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
- return h(Teleport, {
663
- to: target ?? "body",
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 = Array.from(collector.getNodes());
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 = Array.from(collector.getNodes());
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
- const { children, ...props } = element;
720
- if (nextVersions.has(element.id) && nextVersions.get(element.id) !== versions.get(element.id)) elements.push({
721
- ...props,
722
- parentId
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 = null;
790
+ let currentId;
794
791
  let element;
795
- watch([props, () => attrs], () => requestFlush(currentId ?? void 0, instance.uid), { deep: true });
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 !== null && currentId !== id) unregister(currentId, instance.uid);
795
+ if (currentId !== void 0 && currentId !== id) unregister(currentId, instance.uid);
799
796
  currentId = id;
800
797
  if (element) registerNode({
801
798
  id,
@@ -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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"}