diff --git a/packages/g6/tests/bak/items-edge-line.spec.ts b/packages/g6/tests/bak/items-edge-line.spec.ts
deleted file mode 100644
index bca719c0408..00000000000
--- a/packages/g6/tests/bak/items-edge-line.spec.ts
+++ /dev/null
@@ -1,200 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import lineEdge from '../demo/item/edge/line-edge';
-import { createContext, sleep } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('Items edge line', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/edge/line`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = lineEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-line');
-
-      /**
-       * Click the checkbox to show label.
-       */
-      const $showLabel = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $showLabel.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-show-label',
-      );
-      $showLabel.click();
-
-      /**
-       * Click the checkbox to display selected style.
-       */
-      const $selected = document.querySelectorAll(
-        'input',
-      )[2] as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-selected-style',
-      );
-      $selected.click();
-
-      /**
-       * Click the checkbox to highlight.
-       */
-      const $highlight = document.querySelectorAll(
-        'input',
-      )[3] as HTMLInputElement;
-      $highlight.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-highlight-style',
-      );
-      $highlight.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/edge/line`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = lineEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-line');
-
-      /**
-       * Click the checkbox to show label.
-       */
-      const $showLabel = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $showLabel.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-show-label',
-      );
-      $showLabel.click();
-
-      /**
-       * Click the checkbox to display selected style.
-       */
-      const $selected = document.querySelectorAll(
-        'input',
-      )[2] as HTMLInputElement;
-      $selected.click();
-      await sleep(500);
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-selected-style',
-      );
-      $selected.click();
-
-      /**
-       * Click the checkbox to highlight.
-       */
-      const $highlight = document.querySelectorAll(
-        'input',
-      )[3] as HTMLInputElement;
-      $highlight.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-line-highlight-style',
-      );
-      $highlight.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl/items/edge/line`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = lineEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'items-edge-line');
-
-      /**
-       * Click the checkbox to show label.
-       */
-      const $showLabel = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $showLabel.click();
-      await expect(canvas).toMatchWebGLSnapshot(
-        dir,
-        'items-edge-line-show-label',
-      );
-      $showLabel.click();
-
-      /**
-       * Click the checkbox to display selected style.
-       */
-      const $selected = document.querySelectorAll(
-        'input',
-      )[2] as HTMLInputElement;
-      $selected.click();
-      await sleep(500);
-      await expect(canvas).toMatchWebGLSnapshot(
-        dir,
-        'items-edge-line-selected-style',
-      );
-      $selected.click();
-
-      /**
-       * Click the checkbox to highlight.
-       */
-      const $highlight = document.querySelectorAll(
-        'input',
-      )[3] as HTMLInputElement;
-      $highlight.click();
-      await expect(canvas).toMatchWebGLSnapshot(
-        dir,
-        'items-edge-line-highlight-style',
-      );
-      $highlight.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/items-edge-loop.spec.ts b/packages/g6/tests/bak/items-edge-loop.spec.ts
deleted file mode 100644
index 1125c544837..00000000000
--- a/packages/g6/tests/bak/items-edge-loop.spec.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import loopEdge from '../demo/item/edge/loop-edge';
-import { createContext } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('Items edge line', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/edge/loop`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = loopEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop');
-
-      /**
-       * Click the checkbox to switch clockwise.
-       */
-      const $switchClockwise = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $switchClockwise.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-clockwise');
-      $switchClockwise.click();
-
-      /**
-       * Click the checkbox to set custom distance.
-       */
-      const $dist = document.querySelectorAll('input')[1] as HTMLInputElement;
-      $dist.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-distance');
-      $dist.click();
-
-      /**
-       * Click the button to change loop position.
-       */
-      const $loopPositionBtn = document.querySelectorAll(
-        'button',
-      )[0] as HTMLButtonElement;
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-top-right');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-right');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-loop-bottom-right',
-      );
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-bottom');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-loop-bottom-left',
-      );
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-left');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-top-left');
-      $loopPositionBtn.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/edge/loop`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = loopEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop');
-
-      /**
-       * Click the checkbox to switch clockwise.
-       */
-      const $switchClockwise = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $switchClockwise.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-clockwise');
-      $switchClockwise.click();
-
-      /**
-       * Click the checkbox to set custom distance.
-       */
-      const $dist = document.querySelectorAll('input')[1] as HTMLInputElement;
-      $dist.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-distance');
-      $dist.click();
-
-      /**
-       * Click the button to change loop position.
-       */
-      const $loopPositionBtn = document.querySelectorAll(
-        'button',
-      )[0] as HTMLButtonElement;
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-top-right');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-right');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-loop-bottom-right',
-      );
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-bottom');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-loop-bottom-left',
-      );
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-left');
-      $loopPositionBtn.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-top-left');
-      $loopPositionBtn.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/items-edge-polyline.spec.ts b/packages/g6/tests/bak/items-edge-polyline.spec.ts
deleted file mode 100644
index dd20b934952..00000000000
--- a/packages/g6/tests/bak/items-edge-polyline.spec.ts
+++ /dev/null
@@ -1,230 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import polylineEdge from '../demo/item/edge/polyline-edge';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-
-describe('Items edge polyline', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/edge/polyline`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = polylineEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-polyline');
-
-      /**
-       * Click the checkbox to show label.
-       */
-      const $showLabel = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $showLabel.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-show-label',
-      );
-      $showLabel.click();
-
-      /**
-       * Click the checkbox to display selected style.
-       */
-      const $selected = document.querySelectorAll(
-        'input',
-      )[2] as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-selected-style',
-      );
-      $selected.click();
-
-      /**
-       * Click the checkbox to highlight.
-       */
-      const $highlight = document.querySelectorAll(
-        'input',
-      )[3] as HTMLInputElement;
-      $highlight.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-highlight-style',
-      );
-      $highlight.click();
-
-      /**
-       * Click the checkbox to add border radius.
-       */
-      const $radius = document.querySelectorAll('input')[4] as HTMLInputElement;
-      $radius.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-radius',
-      );
-      $radius.click();
-
-      /**
-       * Click the checkbox to enable automatic obstacle avoidances.
-       */
-      const $obstacle = document.querySelectorAll(
-        'input',
-      )[5] as HTMLInputElement;
-      const $enableObstacleAvoidance = document.querySelectorAll(
-        'input',
-      )[6] as HTMLInputElement;
-
-      /**
-       * Click the checkbox to prevent obstacle to overlap edges.
-       */
-      // const $preventObstacleOverlapEdges = document.querySelectorAll(
-      //   'input',
-      // )[7] as HTMLInputElement;
-      // const $moveObstacle = document.querySelectorAll(
-      //   'input',
-      // )[8] as HTMLInputElement;
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-      // $preventObstacleOverlapEdges.click();
-      // $moveObstacle.click();
-      // await expect(canvas).toMatchSVGSnapshot(
-      //   dir,
-      //   'items-edge-polyline-prevent-overlap-edges',
-      // );
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-      // $preventObstacleOverlapEdges.click();
-      // $moveObstacle.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/edge/polyline`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = polylineEdge({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-polyline');
-
-      /**
-       * Click the checkbox to show label.
-       */
-      const $showLabel = document.querySelectorAll(
-        'input',
-      )[0] as HTMLInputElement;
-      $showLabel.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-show-label',
-      );
-      $showLabel.click();
-
-      /**
-       * Click the checkbox to display selected style.
-       */
-      const $selected = document.querySelectorAll(
-        'input',
-      )[2] as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-selected-style',
-      );
-      $selected.click();
-
-      /**
-       * Click the checkbox to highlight.
-       */
-      const $highlight = document.querySelectorAll(
-        'input',
-      )[3] as HTMLInputElement;
-      $highlight.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-highlight-style',
-      );
-      $highlight.click();
-
-      /**
-       * Click the checkbox to add border radius.
-       */
-      const $radius = document.querySelectorAll('input')[4] as HTMLInputElement;
-      $radius.click();
-      await expect(canvas).toMatchSVGSnapshot(
-        dir,
-        'items-edge-polyline-radius',
-      );
-      $radius.click();
-
-      /**
-       * Click the checkbox to enable automatic obstacle avoidances.
-       */
-      const $obstacle = document.querySelectorAll(
-        'input',
-      )[5] as HTMLInputElement;
-      const $enableObstacleAvoidance = document.querySelectorAll(
-        'input',
-      )[6] as HTMLInputElement;
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-      // await expect(canvas).toMatchSVGSnapshot(
-      //   dir,
-      //   'items-edge-polyline-obstacle-avoidance',
-      // );
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-
-      /**
-       * Click the checkbox to prevent obstacle to overlap edges.
-       */
-      // const $preventObstacleOverlapEdges = document.querySelectorAll(
-      //   'input',
-      // )[7] as HTMLInputElement;
-      // const $moveObstacle = document.querySelectorAll(
-      //   'input',
-      // )[8] as HTMLInputElement;
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-      // $preventObstacleOverlapEdges.click();
-      // $moveObstacle.click();
-      // await expect(canvas).toMatchSVGSnapshot(
-      //   dir,
-      //   'items-edge-polyline-prevent-overlap-edges',
-      // );
-      // $obstacle.click();
-      // $enableObstacleAvoidance.click();
-      // $preventObstacleOverlapEdges.click();
-      // $moveObstacle.click();
-
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/layouts-circular.spec.ts b/packages/g6/tests/bak/layouts-circular.spec.ts
deleted file mode 100644
index 155dc4d70f1..00000000000
--- a/packages/g6/tests/bak/layouts-circular.spec.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import circular from '../demo/layouts/circular';
-import { createContext, sleep } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('Circular layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = circular({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-circular');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = circular({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-circular');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = circular({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-circular');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/layouts-d3force.spec.ts b/packages/g6/tests/bak/layouts-d3force.spec.ts
deleted file mode 100644
index fb2eb58aaaf..00000000000
--- a/packages/g6/tests/bak/layouts-d3force.spec.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import d3force from '../demo/layouts/d3force';
-import { createContext } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('D3Force layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  /**
-   * D3 force has some random result, which is hard to test with screenshots.
-   */
-  it.skip('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = d3force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-d3force');
-
-      // const layoutAnimation = graph.getLayoutCurrentAnimation()!;
-      // layoutAnimation.
-      // layoutAnimation.currentTime = 0;
-      // await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-d3force-0');
-
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = d3force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-d3force');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = d3force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-d3force');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/layouts-dagre.spec.ts b/packages/g6/tests/bak/layouts-dagre.spec.ts
deleted file mode 100644
index 5918aaff0e4..00000000000
--- a/packages/g6/tests/bak/layouts-dagre.spec.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import dagre from '../demo/layouts/dagre';
-import { createContext } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('Dagre layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = dagre({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-dagre');
-      graph.destroy();
-      done();
-    });
-  });
-
-  // TODO: timeout on github ci
-  it.skip('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = dagre({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-dagre');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = dagre({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-dagre');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/layouts-force.spec.ts b/packages/g6/tests/bak/layouts-force.spec.ts
deleted file mode 100644
index 0c8cb904b27..00000000000
--- a/packages/g6/tests/bak/layouts-force.spec.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import force from '../demo/layouts/force';
-import { createContext } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe.skip('Force layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-force');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-force');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = force({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-force');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/layouts-grid.spec.ts b/packages/g6/tests/bak/layouts-grid.spec.ts
deleted file mode 100644
index a7cfdd083a8..00000000000
--- a/packages/g6/tests/bak/layouts-grid.spec.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { resetEntityCounter } from '@antv/g';
-import grid from '../demo/layouts/grid';
-import { createContext } from './utils';
-import './utils/useSnapshotMatchers';
-
-describe('Grid layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
-
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = grid({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-grid');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = grid({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-grid');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
-
-    const graph = grid({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-grid');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-diamond.spec.ts b/packages/g6/tests/bak/node-diamond.spec.ts
deleted file mode 100644
index 4fbcc9ac4ca..00000000000
--- a/packages/g6/tests/bak/node-diamond.spec.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import diamond from '../demo/demo/diamond';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node diamond', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/diamond`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = diamond({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond-restore');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/diamond`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = diamond({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-ellipse.spec.ts b/packages/g6/tests/bak/node-ellipse.spec.ts
deleted file mode 100644
index df2c87aeaa2..00000000000
--- a/packages/g6/tests/bak/node-ellipse.spec.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import ellipse from '../demo/demo/ellipse';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node ellipse', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/ellipse`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = ellipse({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/ellipse`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = ellipse({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-hexagon.spec.ts b/packages/g6/tests/bak/node-hexagon.spec.ts
deleted file mode 100644
index fa42207bb19..00000000000
--- a/packages/g6/tests/bak/node-hexagon.spec.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import hexagon from '../demo/demo/hexagon';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node hexagon', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/hexagon`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = hexagon({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/hexagon`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = hexagon({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-modelRect.spec.ts b/packages/g6/tests/bak/node-modelRect.spec.ts
deleted file mode 100644
index e08ac2e97d8..00000000000
--- a/packages/g6/tests/bak/node-modelRect.spec.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import modelRect from '../demo/demo/modelRect';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node modelRect', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/modelRect`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = modelRect({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect-restore');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/modelRect`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = modelRect({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-star.spec.ts b/packages/g6/tests/bak/node-star.spec.ts
deleted file mode 100644
index 628651193ab..00000000000
--- a/packages/g6/tests/bak/node-star.spec.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import star from '../demo/demo/star';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node star', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/star`;
-    const {
-      backgroundCanvas,
-      labelCanvas,
-      transientLabelCanvas,
-      canvas,
-      transientCanvas,
-      container,
-    } = createContext('canvas', 500, 500);
-
-    const graph = star({
-      container,
-      backgroundCanvas,
-      canvas,
-      labelCanvas,
-      transientLabelCanvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-star');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-star-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-star');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/star`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = star({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-star');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-star-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/bak/node-triangle.spec.ts b/packages/g6/tests/bak/node-triangle.spec.ts
deleted file mode 100644
index 43c4bee187b..00000000000
--- a/packages/g6/tests/bak/node-triangle.spec.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import triangle from '../demo/demo/triangle';
-import './utils/useSnapshotMatchers';
-import { createContext, sleep } from './utils';
-import { triggerEvent } from './utils/event';
-
-describe('node triangle', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
-    const dir = `${__dirname}/snapshots/canvas/items/node/triangle`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('canvas', 500, 500);
-
-    const graph = triangle({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle');
-      //seleted state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle-selected');
-      //normal state
-      triggerEvent(graph, 'mousedown', 100, 100);
-      triggerEvent(graph, 'mouseup', 100, 100);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle');
-      graph.destroy();
-      done();
-    });
-  });
-
-  it('should be rendered correctly with SVG', (done) => {
-    const dir = `${__dirname}/snapshots/svg/items/node/triangle`;
-    const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('svg', 500, 500);
-
-    const graph = triangle({
-      container,
-      backgroundCanvas,
-      canvas,
-      transientCanvas,
-      width: 500,
-      height: 500,
-    });
-
-    graph.on('afterlayout', async () => {
-      await sleep(300);
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle');
-      const $selected = document.querySelector(
-        'input#selected',
-      ) as HTMLInputElement;
-      $selected.click();
-      await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle-seleted');
-      graph.destroy();
-      done();
-    });
-  });
-});
diff --git a/packages/g6/tests/demo/layouts/force.ts b/packages/g6/tests/demo/layouts/force.ts
index 8249e97cad1..8ba40355558 100644
--- a/packages/g6/tests/demo/layouts/force.ts
+++ b/packages/g6/tests/demo/layouts/force.ts
@@ -587,4 +587,5 @@ export default (context: TestCaseContext) => {
       },
     });
   }
+  return graph;
 };
diff --git a/packages/g6/tests/integration/items-edge-line.spec.ts b/packages/g6/tests/integration/items-edge-line.spec.ts
index d5d461a2eb0..158a68823ee 100644
--- a/packages/g6/tests/integration/items-edge-line.spec.ts
+++ b/packages/g6/tests/integration/items-edge-line.spec.ts
@@ -5,7 +5,7 @@ import './utils/useSnapshotMatchers';
 const dir = `${__dirname}/snapshots/items/edge/line`;
 
 describe('Items edge line', () => {
-  it('should be rendered correctly with Canvas2D', (done) => {
+  it('should be rendered correctly', (done) => {
     const {
       backgroundCanvas,
       canvas,
diff --git a/packages/g6/tests/integration/items-edge-loop.spec.ts b/packages/g6/tests/integration/items-edge-loop.spec.ts
new file mode 100644
index 00000000000..64f3e3fb984
--- /dev/null
+++ b/packages/g6/tests/integration/items-edge-loop.spec.ts
@@ -0,0 +1,96 @@
+import loopEdge from '../demo/item/edge/loop-edge';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/items/edge/loop`;
+
+describe('Items edge line', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = loopEdge({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop');
+
+        /**
+         * Click the checkbox to switch clockwise.
+         */
+        const $switchClockwise = document.querySelectorAll(
+          'input',
+        )[0] as HTMLInputElement;
+        $switchClockwise.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-clockwise',
+        );
+        $switchClockwise.click();
+
+        /**
+         * Click the checkbox to set custom distance.
+         */
+        const $dist = document.querySelectorAll('input')[1] as HTMLInputElement;
+        $dist.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-distance',
+        );
+        $dist.click();
+
+        /**
+         * Click the button to change loop position.
+         */
+        const $loopPositionBtn = document.querySelectorAll(
+          'button',
+        )[0] as HTMLButtonElement;
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-top-right',
+        );
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-right');
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-bottom-right',
+        );
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-bottom');
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-bottom-left',
+        );
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-loop-left');
+        $loopPositionBtn.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-loop-top-left',
+        );
+        $loopPositionBtn.click();
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/items-edge-polyline.spec.ts b/packages/g6/tests/integration/items-edge-polyline.spec.ts
new file mode 100644
index 00000000000..60b513b4df2
--- /dev/null
+++ b/packages/g6/tests/integration/items-edge-polyline.spec.ts
@@ -0,0 +1,122 @@
+import polylineEdge from '../demo/item/edge/polyline-edge';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+
+const dir = `${__dirname}/snapshots/items/edge/polyline`;
+
+describe('Items edge polyline', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = polylineEdge({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'items-edge-polyline');
+
+        /**
+         * Click the checkbox to show label.
+         */
+        const $showLabel = document.querySelectorAll(
+          'input',
+        )[0] as HTMLInputElement;
+        $showLabel.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-polyline-show-label',
+        );
+        $showLabel.click();
+
+        /**
+         * Click the checkbox to display selected style.
+         */
+        const $selected = document.querySelectorAll(
+          'input',
+        )[2] as HTMLInputElement;
+        $selected.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-polyline-selected-style',
+        );
+        $selected.click();
+
+        /**
+         * Click the checkbox to highlight.
+         */
+        const $highlight = document.querySelectorAll(
+          'input',
+        )[3] as HTMLInputElement;
+        $highlight.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-polyline-highlight-style',
+        );
+        $highlight.click();
+
+        /**
+         * Click the checkbox to add border radius.
+         */
+        const $radius = document.querySelectorAll(
+          'input',
+        )[4] as HTMLInputElement;
+        $radius.click();
+        await expect(canvas).toMatchSVGSnapshot(
+          dir,
+          'items-edge-polyline-radius',
+        );
+        $radius.click();
+
+        /**
+         * Click the checkbox to enable automatic obstacle avoidances.
+         */
+        const $obstacle = document.querySelectorAll(
+          'input',
+        )[5] as HTMLInputElement;
+        const $enableObstacleAvoidance = document.querySelectorAll(
+          'input',
+        )[6] as HTMLInputElement;
+
+        /**
+         * Click the checkbox to prevent obstacle to overlap edges.
+         */
+        // const $preventObstacleOverlapEdges = document.querySelectorAll(
+        //   'input',
+        // )[7] as HTMLInputElement;
+        // const $moveObstacle = document.querySelectorAll(
+        //   'input',
+        // )[8] as HTMLInputElement;
+        // $obstacle.click();
+        // $enableObstacleAvoidance.click();
+        // $preventObstacleOverlapEdges.click();
+        // $moveObstacle.click();
+        // await expect(canvas).toMatchSVGSnapshot(
+        //   dir,
+        //   'items-edge-polyline-prevent-overlap-edges',
+        // );
+        // $obstacle.click();
+        // $enableObstacleAvoidance.click();
+        // $preventObstacleOverlapEdges.click();
+        // $moveObstacle.click();
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/layouts-circular.spec.ts b/packages/g6/tests/integration/layouts-circular.spec.ts
new file mode 100644
index 00000000000..de0d29e690d
--- /dev/null
+++ b/packages/g6/tests/integration/layouts-circular.spec.ts
@@ -0,0 +1,38 @@
+import circular from '../demo/layouts/circular';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/layouts`;
+
+describe('Circular layout', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = circular({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'circular');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/layouts-d3force.spec.ts b/packages/g6/tests/integration/layouts-d3force.spec.ts
new file mode 100644
index 00000000000..6a3c357674d
--- /dev/null
+++ b/packages/g6/tests/integration/layouts-d3force.spec.ts
@@ -0,0 +1,46 @@
+import d3force from '../demo/layouts/d3force';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/layouts`;
+
+describe('D3Force layout', () => {
+  /**
+   * D3 force has some random result, which is hard to test with screenshots.
+   */
+  it.skip('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = d3force({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'd3force');
+      } finally {
+        // const layoutAnimation = graph.getLayoutCurrentAnimation()!;
+        // layoutAnimation.
+        // layoutAnimation.currentTime = 0;
+        // await expect(canvas).toMatchSVGSnapshot(dir, 'layouts-d3force-0');
+
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/layouts-dagre.spec.ts b/packages/g6/tests/integration/layouts-dagre.spec.ts
new file mode 100644
index 00000000000..7bba46b1d85
--- /dev/null
+++ b/packages/g6/tests/integration/layouts-dagre.spec.ts
@@ -0,0 +1,38 @@
+import dagre from '../demo/layouts/dagre';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/layouts`;
+
+describe('Dagre layout', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = dagre({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'dagre');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/layouts-force.spec.ts b/packages/g6/tests/integration/layouts-force.spec.ts
new file mode 100644
index 00000000000..e800b944f9d
--- /dev/null
+++ b/packages/g6/tests/integration/layouts-force.spec.ts
@@ -0,0 +1,38 @@
+import force from '../demo/layouts/force';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/layouts`;
+
+describe.skip('Force layout', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = force({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'force');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/bak/layouts-force3d.spec.ts b/packages/g6/tests/integration/layouts-force3d.spec.ts
similarity index 59%
rename from packages/g6/tests/bak/layouts-force3d.spec.ts
rename to packages/g6/tests/integration/layouts-force3d.spec.ts
index b0b6fe526fa..663cf340a85 100644
--- a/packages/g6/tests/bak/layouts-force3d.spec.ts
+++ b/packages/g6/tests/integration/layouts-force3d.spec.ts
@@ -1,21 +1,13 @@
-import { resetEntityCounter } from '@antv/g';
 import force3D from '../demo/layouts/force-3d';
 import './utils/useSnapshotMatchers';
 import { createContext } from './utils';
 
-describe('Force3D layout', () => {
-  beforeEach(() => {
-    /**
-     * SVG Snapshot testing will generate a unique id for each element.
-     * Reset to 0 to keep snapshot consistent.
-     */
-    resetEntityCounter();
-  });
+const dir = `${__dirname}/snapshots/layouts`;
 
+describe('Force3D layout', () => {
   it.skip('should be rendered correctly with WebGL', (done) => {
-    const dir = `${__dirname}/snapshots/webgl`;
     const { backgroundCanvas, canvas, transientCanvas, container } =
-      createContext('webgl', 500, 500);
+      createContext(500, 500);
 
     const graph = force3D({
       container,
@@ -28,7 +20,7 @@ describe('Force3D layout', () => {
     });
 
     graph.on('afterlayout', async () => {
-      await expect(canvas).toMatchWebGLSnapshot(dir, 'layouts-force3d');
+      await expect(canvas).toMatchSVGSnapshot(dir, 'force3d');
       graph.destroy();
       done();
     });
diff --git a/packages/g6/tests/integration/layouts-grid.spec.ts b/packages/g6/tests/integration/layouts-grid.spec.ts
new file mode 100644
index 00000000000..0f91fcc56c6
--- /dev/null
+++ b/packages/g6/tests/integration/layouts-grid.spec.ts
@@ -0,0 +1,38 @@
+import grid from '../demo/layouts/grid';
+import { createContext } from './utils';
+import './utils/useSnapshotMatchers';
+
+const dir = `${__dirname}/snapshots/layouts`;
+
+describe('Grid layout', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = grid({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'grid');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-diamond.spec.ts b/packages/g6/tests/integration/node-diamond.spec.ts
new file mode 100644
index 00000000000..f5c257967c3
--- /dev/null
+++ b/packages/g6/tests/integration/node-diamond.spec.ts
@@ -0,0 +1,47 @@
+import diamond from '../demo/demo/diamond';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/diamond`;
+
+describe('node diamond', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = diamond({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-diamond-restore');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-ellipse.spec.ts b/packages/g6/tests/integration/node-ellipse.spec.ts
new file mode 100644
index 00000000000..b606c29c6ee
--- /dev/null
+++ b/packages/g6/tests/integration/node-ellipse.spec.ts
@@ -0,0 +1,47 @@
+import ellipse from '../demo/demo/ellipse';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/ellipse`;
+
+describe('node ellipse', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = ellipse({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-ellipse');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-hexagon.spec.ts b/packages/g6/tests/integration/node-hexagon.spec.ts
new file mode 100644
index 00000000000..d600360e00a
--- /dev/null
+++ b/packages/g6/tests/integration/node-hexagon.spec.ts
@@ -0,0 +1,47 @@
+import hexagon from '../demo/demo/hexagon';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/hexagon`;
+
+describe('node hexagon', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = hexagon({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-hexagon');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-modelRect.spec.ts b/packages/g6/tests/integration/node-modelRect.spec.ts
new file mode 100644
index 00000000000..38695a2f928
--- /dev/null
+++ b/packages/g6/tests/integration/node-modelRect.spec.ts
@@ -0,0 +1,47 @@
+import modelRect from '../demo/demo/modelRect';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/modelRect`;
+
+describe('node modelRect', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = modelRect({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-modelRect-restore');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-star.spec.ts b/packages/g6/tests/integration/node-star.spec.ts
new file mode 100644
index 00000000000..1b5bed8290c
--- /dev/null
+++ b/packages/g6/tests/integration/node-star.spec.ts
@@ -0,0 +1,47 @@
+import star from '../demo/demo/star';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/star`;
+
+describe('node star', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = star({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-star');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-star-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-star');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/node-triangle.spec.ts b/packages/g6/tests/integration/node-triangle.spec.ts
new file mode 100644
index 00000000000..335765dc092
--- /dev/null
+++ b/packages/g6/tests/integration/node-triangle.spec.ts
@@ -0,0 +1,47 @@
+import triangle from '../demo/demo/triangle';
+import './utils/useSnapshotMatchers';
+import { createContext } from './utils';
+import { triggerEvent } from './utils/event';
+
+const dir = `${__dirname}/snapshots/items/node/triangle`;
+
+describe('node triangle', () => {
+  it('should be rendered correctly', (done) => {
+    const {
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+    } = createContext(500, 500);
+
+    const graph = triangle({
+      backgroundCanvas,
+      canvas,
+      container,
+      labelCanvas,
+      transientCanvas,
+      transientLabelCanvas,
+      width: 500,
+      height: 500,
+    });
+
+    graph.on('afterlayout', async () => {
+      try {
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle');
+        //seleted state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle-selected');
+        //normal state
+        triggerEvent(graph, 'mousedown', 100, 100);
+        triggerEvent(graph, 'mouseup', 100, 100);
+        await expect(canvas).toMatchSVGSnapshot(dir, 'node-triangle');
+      } finally {
+        graph.destroy();
+        done();
+      }
+    });
+  });
+});
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-left.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-left.svg
new file mode 100644
index 00000000000..12a8e328fcd
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-left.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.510433,106.122932)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 38.36663257727206,8.659137602339158 C 13.874892905906322 67.78742768306151,-29.420795105789466 24.491739671365735,29.7074949749329 0 L 25.088097312376465,1.9134171618254472"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.923880,0.382683,-0.382683,-0.923880,25.088097,1.913417)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,153.810211,108)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 38.18978704486787,8 C 9.568116932870566 65.24334022399461,-27.053553179126737 28.621670111997304,30.18978704486787 0 L 25.71765108986829,2.2360679774997907"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.894427,0.447214,-0.447214,-0.894427,25.717651,2.236068)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,302.918610,104.592201)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 40.95845381033041,6.49435320175435 C 10.017428556228879 62.51803530338928,-28.81933009778055 18.98712916030125,32.299316207991296 0 L 27.52442196535287,1.4833694656485341"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.954979,0.296674,-0.296674,-0.954979,27.524422,1.483369)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-right.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-right.svg
new file mode 100644
index 00000000000..e1f47801bbf
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom-right.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,106.122932,106.122932)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 8.659137602339158,0 C 67.78742768306151 24.491739671365735,24.491739671365735 67.78742768306151,0 8.659137602339158 L 1.913417161825448,13.278535264895591"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.382683,0.923880,-0.923880,0.382683,1.913417,13.278535)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,208,108)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 8,0 C 65.24334022399461 28.621670111997304,28.621670111997304 65.24334022399461,0 8 L 2.2360679774997902,12.47213595499958"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.447214,0.894427,-0.894427,0.447214,2.236068,12.472136)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,356.122925,104.592201)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 8.659137602339115,0 C 69.77778390811096 18.98712916030125,30.941025254101532 62.51803530338928,0 6.49435320175435 L 2.4172675979766822,10.87120336594458"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.483454,0.875370,-0.875370,0.483454,2.417268,10.871203)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom.svg
new file mode 100644
index 00000000000..d6967275ef5
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-bottom.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,87.974792,114.782074)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 18.14814037625426,0 C 42.63988004762 59.12829008072235,-18.589469130794342 59.12829008072235,5.9022705405713936 0 L 3.988853378745945,4.619397662556434"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.382683,0.923880,-0.923880,-0.382683,3.988853,4.619398)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,185.233551,116)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 22.76645408241032,0 C 51.388124194407624 57.24334022399461,-21.855216029586984 57.24334022399461,6.76645408241032 0 L 4.53038610491053,4.47213595499958"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.447214,0.894427,-0.894427,-0.447214,4.530386,4.472136)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,336.156036,111.086555)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 19.9669093922588,0 C 50.90793464636033 56.02368210163493,-23.219985697525658 56.02368210163493,7.7210395565758745 0 L 5.303771958599192,4.37685016419023"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.483454,0.875370,-0.875370,-0.483454,5.303772,4.376850)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-clockwise.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-clockwise.svg
new file mode 100644
index 00000000000..508231ddec1
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-clockwise.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,87.974792,40.871712)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 18.14814037625426,44.346217560541774 C 42.63988004762 -14.782072520180591,-18.589469130794342 -14.782072520180591,5.9022705405713936 44.346217560541774 L 3.988853378745945,39.72681989798534"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.382683,-0.923880,0.923880,-0.382683,3.988853,39.726818)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,185.233551,41.067493)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 22.76645408241032,42.932505167995956 C 51.388124194407624 -14.310835055998652,-21.855216029586984 -14.310835055998652,6.76645408241032 42.932505167995956 L 4.53038610491053,38.460369212996376"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.447214,-0.894427,0.894427,-0.447214,4.530386,38.460369)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,336.156036,46.895683)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 19.9669093922588,42.017761576226206 C 50.90793464636033 -14.00592052540874,-23.219985697525658 -14.00592052540874,7.7210395565758745 42.017761576226206 L 5.303771958599192,37.640911412035976"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.483454,-0.875370,0.875370,-0.483454,5.303772,37.640911)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-distance.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-distance.svg
new file mode 100644
index 00000000000..93e715dbff1
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-distance.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,84.074188,15.926963)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 9.802874705427428,69.29096493834652 C -28.465468531081534 -23.096988312782173,60.317087777619264 -23.096988312782173,22.048744541110295 69.29096493834652 L 23.962161702935745,64.67156727579008"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.382683,-0.923880,0.923880,0.382683,23.962162,64.671570)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,180.693695,16.917961)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 11.306306948953136,67.08203932499369 C -33.415052601042646 -22.360679774997894,72.02766649894892 -22.360679774997894,27.306306948953136 67.08203932499369 L 29.542374926452926,62.60990336999411"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.447214,-0.894427,0.894427,0.447214,29.542376,62.609905)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,331.196228,23.260693)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 12.680845034597212,65.65275246285346 C -35.664506924936404 -21.884250820951152,73.27206682981375 -21.884250820951152,24.926714870280136 65.65275246285346 L 27.34398246825682,61.275902298663226"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.483454,-0.875370,0.875370,0.483454,27.343983,61.275902)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-left.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-left.svg
new file mode 100644
index 00000000000..0c1461058b5
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-left.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,40.871712,87.974792)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 44.346217560541774,18.14814037625426 C -14.782072520180591 42.63988004762,-14.782072520180591 -18.589469130794342,44.346217560541774 5.9022705405713936 L 39.72681989798534,3.9888533787459464"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.923880,-0.382683,0.382683,-0.923880,39.726818,3.988853)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141.067490,85.233543)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 42.93250516799594,22.76645408241032 C -14.310835055998666 51.388124194407624,-14.310835055998666 -21.855216029586984,42.93250516799594 6.76645408241032 L 38.46036921299636,4.530386104910529"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.894427,-0.447214,0.447214,-0.894427,38.460369,4.530386)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,289.378937,90.807480)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 45.8389847293289,13.784721281207126 C -15.279661576442948 32.77185044150838,-15.279661576442948 -14.38681025585629,45.8389847293289 4.600318904444961 L 41.064090486690475,3.116949438796427"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.954979,-0.296674,0.296674,-0.954979,41.064091,3.116949)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-right.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-right.svg
new file mode 100644
index 00000000000..9abc7de5524
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-right.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,114.782074,87.974792)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,5.902270540571408 C 59.12829008072235 -18.589469130794328,59.12829008072235 42.63988004762001,0 18.148140376254275 L 4.619397662556434,20.061557538079725"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.923880,0.382683,-0.382683,0.923880,4.619398,20.061558)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,216,85.233543)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,6.76645408241032 C 57.24334022399461 -21.855216029586984,57.24334022399461 51.388124194407624,0 22.76645408241032 L 4.47213595499958,25.00252205991011"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.894427,0.447214,-0.447214,0.894427,4.472136,25.002522)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,364.782074,90.807480)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,4.600318904444961 C 61.11864630577185 -14.38681025585629,61.11864630577185 32.77185044150838,0 13.784721281207126 L 4.774894242638425,15.26809074685566"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.954979,0.296674,-0.296674,0.954979,4.774894,15.268091)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-left.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-left.svg
new file mode 100644
index 00000000000..cb107da312e
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-left.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.510433,55.510433)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 29.707494974932892,38.36663257727206 C -29.420795105789473 13.874892905906322,13.874892905906314 -29.420795105789466,38.36663257727205 29.7074949749329 L 36.4532154154466,25.088097312376465"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.382683,-0.923880,0.923880,-0.382683,36.453217,25.088097)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,153.810211,53.810211)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 30.1897870448679,38.18978704486787 C -27.05355317912671 9.568116932870566,9.568116932870595 -27.053553179126737,38.1897870448679 30.18978704486787 L 35.95371906736811,25.71765108986829"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.447214,-0.894427,0.894427,-0.447214,35.953720,25.717651)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,302.918610,61.322254)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 32.29931620799124,34.085544602336334 C -28.819330097780608 15.098415442035083,10.017428556228822 -28.432490701052963,40.958453810330354 27.591191400581984 L 38.54118621235367,23.214341236391753"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(-0.483454,-0.875370,0.875370,-0.483454,38.541187,23.214342)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-right.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-right.svg
new file mode 100644
index 00000000000..4c01dd4f43d
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop-top-right.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,106.122932,55.510433)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,29.707494974932892 C 24.491739671365735 -29.420795105789473,67.78742768306151 13.874892905906314,8.659137602339158 38.36663257727205 L 13.278535264895591,36.4532154154466"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.923880,-0.382683,0.382683,0.923880,13.278535,36.453217)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,208,53.810211)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,30.189787044867863 C 28.621670111997304 -27.053553179126745,65.24334022399461 9.56811693287056,8 38.18978704486786 L 12.47213595499958,35.95371906736807"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.894427,-0.447214,0.447214,0.894427,12.472136,35.953720)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,356.122925,61.322254)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,27.59119140058199 C 30.941025254101532 -28.432490701052956,69.77778390811096 15.09841544203509,8.659137602339115 34.08554460233634 L 13.43403184497754,32.602175136687805"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="3"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.954979,-0.296674,0.296674,0.954979,13.434031,32.602177)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop.svg b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop.svg
new file mode 100644
index 00000000000..5d1f8d6c154
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/loop/items-edge-loop.svg
@@ -0,0 +1,174 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,87.974792,40.871712)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5.902270540571408,44.346217560541774 C -18.589469130794328 -14.782072520180591,42.63988004762001 -14.782072520180591,18.148140376254275 44.346217560541774 L 20.061557538079725,39.72681989798534"
+              stroke-width="7"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.382683,-0.923880,0.923880,0.382683,20.061558,39.726818)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-26" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,185.233551,41.067493)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 6.766454082410348,42.932505167995956 C -21.855216029586956 -14.310835055998652,51.38812419440765 -14.310835055998652,22.76645408241035 42.932505167995956 L 25.002522059910138,38.460369212996376"
+              stroke-width="7"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.447214,-0.894427,0.894427,0.447214,25.002522,38.460369)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-31" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,336.156036,46.895683)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              marker-end="true"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 7.721039556575931,42.017761576226206 C -23.2199856975256 -14.00592052540874,50.90793464636039 -14.00592052540874,19.966909392258856 42.017761576226206 L 22.384176990235538,37.640911412035976"
+              stroke-width="7"
+              stroke="transparent"
+              marker-end="true"
+            />
+            <g transform="matrix(0.483454,-0.875370,0.875370,0.483454,22.384176,37.640911)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,350,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-highlight-style.svg b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-highlight-style.svg
new file mode 100644
index 00000000000..5d80763396d
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-highlight-style.svg
@@ -0,0 +1,119 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="2"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="2"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,400,200)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,300,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+              visibility="hidden"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-radius.svg b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-radius.svg
new file mode 100644
index 00000000000..0fb10c570fa
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-radius.svg
@@ -0,0 +1,119 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 257,0 Q 282 0,282 25 L 282,25 L 282,77"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="1"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,400,200)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,300,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+              visibility="hidden"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-selected-style.svg b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-selected-style.svg
new file mode 100644
index 00000000000..282ab9bf20a
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-selected-style.svg
@@ -0,0 +1,181 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="haloShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              opacity="0.25"
+              stroke-width="12"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+              pointer-events="none"
+            />
+            <path
+              id="haloShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              opacity="0.25"
+              stroke-width="24"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+              pointer-events="none"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="2"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="2"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="2"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="8"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,400,200)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,300,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+              visibility="hidden"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-show-label.svg b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-show-label.svg
new file mode 100644
index 00000000000..212ff6af9ae
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline-show-label.svg
@@ -0,0 +1,119 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="3"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,400,200)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,300,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+              visibility="hidden"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline.svg b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline.svg
new file mode 100644
index 00000000000..10a29137306
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/edge/polyline/items-edge-polyline.svg
@@ -0,0 +1,119 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,118,100)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+              stroke-dasharray="2,2"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 5,0 L 0,0 L 282,0 L 282,77"
+              stroke-width="7"
+              stroke="transparent"
+              stroke-dasharray="2,2"
+            />
+            <g transform="matrix(1,0,0,1,5,0)">
+              <path
+                id="markerStartShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerStartShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+            <g transform="matrix(0,-1,1,0,282,77)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+                stroke-dasharray="2,2"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+                stroke-dasharray="2,2"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,400,200)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-18" fill="none" transform="matrix(1,0,0,1,300,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(0,255,0,0.5)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+              visibility="hidden"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-restore.svg b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-restore.svg
new file mode 100644
index 00000000000..8cf01b962e2
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-restore.svg
@@ -0,0 +1,179 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="0"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="6"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-selected.svg b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-selected.svg
new file mode 100644
index 00000000000..8cf01b962e2
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond-selected.svg
@@ -0,0 +1,179 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="0"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="6"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond.svg b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond.svg
new file mode 100644
index 00000000000..8cf01b962e2
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/diamond/node-diamond.svg
@@ -0,0 +1,179 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="68"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="0"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 16,0 L 32,16 L 16,32 L 0,16 Z"
+              r="16"
+              stroke-width="6"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse-selected.svg b/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse-selected.svg
new file mode 100644
index 00000000000..ace291ccd0f
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse-selected.svg
@@ -0,0 +1,177 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="59"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="59"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+              height="50"
+              width="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,-16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.700000,-13.280000)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 4,0 l 0,0 a 4,4,0,0,1,4,4 l 0,0 a 4,4,0,0,1,-4,4 l 0,0 a 4,4,0,0,1,-4,-4 l 0,0 a 4,4,0,0,1,4,-4 z"
+              height="8"
+              width="8"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-9.280000)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="5"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,-25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse.svg b/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse.svg
new file mode 100644
index 00000000000..ace291ccd0f
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/ellipse/node-ellipse.svg
@@ -0,0 +1,177 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="59"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="59"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <ellipse
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-12)"
+              cx="16"
+              cy="12"
+              r="16"
+              stroke-width="0"
+              rx="16"
+              ry="12"
+              height="50"
+              width="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,-16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.700000,-13.280000)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 4,0 l 0,0 a 4,4,0,0,1,4,4 l 0,0 a 4,4,0,0,1,-4,4 l 0,0 a 4,4,0,0,1,-4,-4 l 0,0 a 4,4,0,0,1,4,-4 z"
+              height="8"
+              width="8"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-9.280000)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="5"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,-25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon-selected.svg b/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon-selected.svg
new file mode 100644
index 00000000000..214c9130483
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon-selected.svg
@@ -0,0 +1,171 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,113.856407,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="70.14359329075097"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="70.14359329075097"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-13.856406,-16)">
+            <polygon
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              points="13.856406460551023,32 5.329070518200751e-15,24.000000000000007 0,8.000000000000004 13.856406460551018,0 27.712812921102035,7.999999999999993 27.712812921102046,23.99999999999999"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,16)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,6.306427,-16.277605)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 4.618802153517008,0 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,4.618802153517008,4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,-4.618802153517008,4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,-4.618802153517008,-4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,4.618802153517008,-4.618802153517008 z"
+              height="9.237604307034015"
+              width="9.237604307034015"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,8.928204,-11.658802)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="6.237604307034015"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon.svg b/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon.svg
new file mode 100644
index 00000000000..214c9130483
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/hexagon/node-hexagon.svg
@@ -0,0 +1,171 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,113.856407,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="70.14359329075097"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="70.14359329075097"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-13.856406,-16)">
+            <polygon
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              points="13.856406460551023,32 5.329070518200751e-15,24.000000000000007 0,8.000000000000004 13.856406460551018,0 27.712812921102035,7.999999999999993 27.712812921102046,23.99999999999999"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,16)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,6.306427,-16.277605)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 4.618802153517008,0 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,4.618802153517008,4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,-4.618802153517008,4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,-4.618802153517008,-4.618802153517008 l 0,0 a 4.618802153517008,4.618802153517008,0,0,1,4.618802153517008,-4.618802153517008 z"
+              height="9.237604307034015"
+              width="9.237604307034015"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,8.928204,-11.658802)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="6.237604307034015"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,16,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-restore.svg b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-restore.svg
new file mode 100644
index 00000000000..787a9abe6a0
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-restore.svg
@@ -0,0 +1,184 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,293,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="keyShape"
+              fill="rgba(255,255,255,1)"
+              d="M 5,0 l 175,0 a 5,5,0,0,1,5,5 l 0,60 a 5,5,0,0,1,-5,5 l -175,0 a 5,5,0,0,1,-5,-5 l 0,-60 a 5,5,0,0,1,5,-5 z"
+              r="16"
+              stroke-width="1"
+              width="185"
+              height="70"
+              stroke="rgba(105,192,255,1)"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="preRect"
+              fill="rgba(92,170,248,1)"
+              d="M 2.5,0 l 0,0 a 2.5,2.5,0,0,1,2.5,2.5 l 0,65 a 2.5,2.5,0,0,1,-2.5,2.5 l 0,0 a 2.5,2.5,0,0,1,-2.5,-2.5 l 0,-65 a 2.5,2.5,0,0,1,2.5,-2.5 z"
+              width="5"
+              height="70"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-82,-8)">
+            <image
+              id="logoIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-58,11.666667)">
+            <text
+              id="description"
+              fill="rgba(194,194,194,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="12"
+              text-anchor="left"
+              visibility="hidden"
+            >
+              Lorem ipsum dolor...
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,76.500000,-8)">
+            <image
+              id="stateIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,400,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-8,-8)">
+            <image
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              width="16"
+              height="16"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-selected.svg b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-selected.svg
new file mode 100644
index 00000000000..787a9abe6a0
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect-selected.svg
@@ -0,0 +1,184 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,293,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="keyShape"
+              fill="rgba(255,255,255,1)"
+              d="M 5,0 l 175,0 a 5,5,0,0,1,5,5 l 0,60 a 5,5,0,0,1,-5,5 l -175,0 a 5,5,0,0,1,-5,-5 l 0,-60 a 5,5,0,0,1,5,-5 z"
+              r="16"
+              stroke-width="1"
+              width="185"
+              height="70"
+              stroke="rgba(105,192,255,1)"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="preRect"
+              fill="rgba(92,170,248,1)"
+              d="M 2.5,0 l 0,0 a 2.5,2.5,0,0,1,2.5,2.5 l 0,65 a 2.5,2.5,0,0,1,-2.5,2.5 l 0,0 a 2.5,2.5,0,0,1,-2.5,-2.5 l 0,-65 a 2.5,2.5,0,0,1,2.5,-2.5 z"
+              width="5"
+              height="70"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-82,-8)">
+            <image
+              id="logoIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-58,11.666667)">
+            <text
+              id="description"
+              fill="rgba(194,194,194,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="12"
+              text-anchor="left"
+              visibility="hidden"
+            >
+              Lorem ipsum dolor...
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,76.500000,-8)">
+            <image
+              id="stateIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,400,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-8,-8)">
+            <image
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              width="16"
+              height="16"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect.svg b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect.svg
new file mode 100644
index 00000000000..787a9abe6a0
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/modelRect/node-modelRect.svg
@@ -0,0 +1,184 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,293,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="82"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="keyShape"
+              fill="rgba(255,255,255,1)"
+              d="M 5,0 l 175,0 a 5,5,0,0,1,5,5 l 0,60 a 5,5,0,0,1,-5,5 l -175,0 a 5,5,0,0,1,-5,-5 l 0,-60 a 5,5,0,0,1,5,-5 z"
+              r="16"
+              stroke-width="1"
+              width="185"
+              height="70"
+              stroke="rgba(105,192,255,1)"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,-35)">
+            <path
+              id="preRect"
+              fill="rgba(92,170,248,1)"
+              d="M 2.5,0 l 0,0 a 2.5,2.5,0,0,1,2.5,2.5 l 0,65 a 2.5,2.5,0,0,1,-2.5,2.5 l 0,0 a 2.5,2.5,0,0,1,-2.5,-2.5 l 0,-65 a 2.5,2.5,0,0,1,2.5,-2.5 z"
+              width="5"
+              height="70"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-82,-8)">
+            <image
+              id="logoIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-58,11.666667)">
+            <text
+              id="description"
+              fill="rgba(194,194,194,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="12"
+              text-anchor="left"
+              visibility="hidden"
+            >
+              Lorem ipsum dolor...
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,76.500000,-8)">
+            <image
+              id="stateIcon"
+              fill="none"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg"
+              width="16"
+              height="16"
+              visibility="hidden"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-92.500000,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,400,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-8,-8)">
+            <image
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              preserveAspectRatio="none"
+              x="0"
+              y="0"
+              href="https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              width="16"
+              height="16"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,-25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/star/node-star-selected.svg b/packages/g6/tests/integration/snapshots/items/node/star/node-star-selected.svg
new file mode 100644
index 00000000000..581e255efc9
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/star/node-star-selected.svg
@@ -0,0 +1,183 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,119.021133,98.453438)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="55.97886895634815"
+              y2="1.0691012721509026"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="55.97886895634815"
+              y2="1.0691012721509026"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-19.021130,-20)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 19.02113032590307,0 L 23.429519718096618,13.932372542187894 L 38.04226065180614,13.819660112501051 L 26.15405419811672,22.317627457812105 L 30.776835371752533,36.180339887498945 L 19.02113032590307,27.5 L 7.265425280053606,36.180339887498945 L 11.888206453689417,22.317627457812105 L 0,13.819660112501051 L 14.61274093370952,13.932372542187894 Z"
+              r="16"
+              stroke-width="0"
+              height="50"
+              width="50"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 19.02113032590307,0 L 23.429519718096618,13.932372542187894 L 38.04226065180614,13.819660112501051 L 26.15405419811672,22.317627457812105 L 30.776835371752533,36.180339887498945 L 19.02113032590307,27.5 L 7.265425280053606,36.180339887498945 L 11.888206453689417,22.317627457812105 L 0,13.819660112501051 L 14.61274093370952,13.932372542187894 Z"
+              r="16"
+              stroke-width="6"
+              height="50"
+              width="50"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,19.021130,-6.180340)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,8.154936,-20.860113)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 6.030056647916491,0 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,6.030056647916491,6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,-6.030056647916491,6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,-6.030056647916491,-6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,6.030056647916491,-6.030056647916491 z"
+              height="12.060113295832982"
+              width="12.060113295832982"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,11.510566,-14.830056)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="9.060113295832982"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/star/node-star.svg b/packages/g6/tests/integration/snapshots/items/node/star/node-star.svg
new file mode 100644
index 00000000000..581e255efc9
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/star/node-star.svg
@@ -0,0 +1,183 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,119.021133,98.453438)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="55.97886895634815"
+              y2="1.0691012721509026"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="55.97886895634815"
+              y2="1.0691012721509026"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-19.021130,-20)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 19.02113032590307,0 L 23.429519718096618,13.932372542187894 L 38.04226065180614,13.819660112501051 L 26.15405419811672,22.317627457812105 L 30.776835371752533,36.180339887498945 L 19.02113032590307,27.5 L 7.265425280053606,36.180339887498945 L 11.888206453689417,22.317627457812105 L 0,13.819660112501051 L 14.61274093370952,13.932372542187894 Z"
+              r="16"
+              stroke-width="0"
+              height="50"
+              width="50"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 19.02113032590307,0 L 23.429519718096618,13.932372542187894 L 38.04226065180614,13.819660112501051 L 26.15405419811672,22.317627457812105 L 30.776835371752533,36.180339887498945 L 19.02113032590307,27.5 L 7.265425280053606,36.180339887498945 L 11.888206453689417,22.317627457812105 L 0,13.819660112501051 L 14.61274093370952,13.932372542187894 Z"
+              r="16"
+              stroke-width="6"
+              height="50"
+              width="50"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,19.021130,-6.180340)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,8.154936,-20.860113)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 6.030056647916491,0 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,6.030056647916491,6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,-6.030056647916491,6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,-6.030056647916491,-6.030056647916491 l 0,0 a 6.030056647916491,6.030056647916491,0,0,1,6.030056647916491,-6.030056647916491 z"
+              height="12.060113295832982"
+              width="12.060113295832982"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,11.510566,-14.830056)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="9.060113295832982"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-25,-25)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 50,0 l 0,50 l-50 0 z"
+              r="16"
+              stroke-width="0"
+              width="50"
+              height="50"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="16"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,25,0)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.946667,-27.666668)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 8.333333333333334,0 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,-8.333333333333334,-8.333333333333334 l 0,0 a 8.333333333333334,8.333333333333334,0,0,1,8.333333333333334,-8.333333333333334 z"
+              height="16.666666666666668"
+              width="16.666666666666668"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,14.500000,-19.333334)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="13.666666666666668"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle-selected.svg b/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle-selected.svg
new file mode 100644
index 00000000000..9bd4f8ec0fb
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle-selected.svg
@@ -0,0 +1,179 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,120.784607,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="63.21538945928933"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="63.21538945928933"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-20.784609,-18)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 20.784609690826528,0 L 41.569219381653056,36 L 0,36 Z"
+              r="12"
+              stroke-width="0"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 20.784609690826528,0 L 41.569219381653056,36 L 0,36 Z"
+              r="12"
+              stroke-width="6"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,3)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="8"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,-18)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.052305,-19.920000)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 6,0 l 0,0 a 6,6,0,0,1,6,6 l 0,0 a 6,6,0,0,1,-6,6 l 0,0 a 6,6,0,0,1,-6,-6 l 0,0 a 6,6,0,0,1,6,-6 z"
+              height="12"
+              width="12"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,12.392305,-13.920000)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="9"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="8"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,-16)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle.svg b/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle.svg
new file mode 100644
index 00000000000..9bd4f8ec0fb
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/items/node/triangle/node-triangle.svg
@@ -0,0 +1,179 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,120.784607,100)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="63.21538945928933"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="63.21538945928933"
+              y2="0"
+              stroke-width="7"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,100,100)">
+          <g transform="matrix(1,0,0,1,-20.784609,-18)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 20.784609690826528,0 L 41.569219381653056,36 L 0,36 Z"
+              r="12"
+              stroke-width="0"
+            />
+            <path
+              id="keyShape"
+              fill="transparent"
+              d="M 20.784609690826528,0 L 41.569219381653056,36 L 0,36 Z"
+              r="12"
+              stroke-width="6"
+              stroke="transparent"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,3)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="8"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,-18)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,9.052305,-19.920000)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 6,0 l 0,0 a 6,6,0,0,1,6,6 l 0,0 a 6,6,0,0,1,-6,6 l 0,0 a 6,6,0,0,1,-6,-6 l 0,0 a 6,6,0,0,1,6,-6 z"
+              height="12"
+              width="12"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,12.392305,-13.920000)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="9"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,200,100)">
+          <g transform="matrix(1,0,0,1,-16,-16)">
+            <path
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              d="M 0,0 l 32,0 l 0,32 l-32 0 z"
+              r="16"
+              stroke-width="0"
+              width="32"
+              height="32"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,0,0)">
+            <text
+              id="iconShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0"
+              font-size="8"
+              font-family="sans-serif"
+              font-weight="normal"
+              font-variant="normal"
+              font-style="normal"
+              stroke-width="0"
+              text-anchor="middle"
+            >
+              label
+            </text>
+          </g>
+          <g transform="matrix(1,0,0,1,0,-16)">
+            <circle
+              id="anchorShape0"
+              fill="rgba(255,0,0,1)"
+              transform="translate(-2,-2)"
+              cx="2"
+              cy="2"
+              stroke-width="1"
+              stroke="rgba(0,0,0,0.65)"
+              r="2"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,7.006667,-17.706667)">
+            <path
+              id="rightTopBadgeBackgroundShape"
+              fill="rgba(0,0,255,1)"
+              d="M 5.333333333333333,0 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,-5.333333333333333,-5.333333333333333 l 0,0 a 5.333333333333333,5.333333333333333,0,0,1,5.333333333333333,-5.333333333333333 z"
+              height="10.666666666666666"
+              width="10.666666666666666"
+            />
+          </g>
+          <g transform="matrix(1,0,0,1,10,-12.373333)">
+            <text
+              id="rightTopBadgeShape"
+              fill="rgba(255,255,255,1)"
+              dominant-baseline="central"
+              paint-order="stroke"
+              dx="0.5"
+              font-size="7.666666666666666"
+              text-anchor="left"
+            >
+              1
+            </text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/layouts/circular.svg b/packages/g6/tests/integration/snapshots/layouts/circular.svg
new file mode 100644
index 00000000000..a98eb99c4df
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/layouts/circular.svg
@@ -0,0 +1,2083 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-108" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,226.904892,51.568275)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="7.172155230940689"
+              y1="0"
+              x2="0"
+              y2="0.7063958143428977"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-111" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,260.150299,223.350098)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="214.2817311745482"
+              x2="175.85645924610594"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-114" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,212.550201,69.765900)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="35.88151774698463"
+              y1="364.31114366423014"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-117" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,262.368164,60.150291)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="171.42070946622187"
+              y2="140.68134787079288"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-120" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,224.285446,62.732067)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="208.5680824741503"
+              y2="139.36074073211432"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-123" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,250,66)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="368"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-126" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,56.964390,226.674500)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="23.620242385749215"
+              y2="118.74698158034016"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-129" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,189.386276,66.792366)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="155.80481512483212"
+              y1="15.34543789994774"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-132" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,63.993237,77.592255)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="121.02150871060282"
+              x2="99.31978743450901"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-135" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,95.019783,95.019783)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="254.78054961580003"
+              x2="254.78054961580003"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-138" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,88.350632,80.535133)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="80.46813022958104"
+              y1="0"
+              x2="0"
+              y2="265.267862989274"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-141" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,68.625015,89.829010)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="115.0299862275963"
+              x2="277.70695403148727"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-144" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,187.574051,296.560425)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="244.47224555652338"
+              y1="0"
+              x2="0"
+              y2="130.67314663517186"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-147" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,116.120995,122.689384)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="165.35472646110372"
+              y2="309.3569195025973"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-150" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,300.331787,300.331787)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="134.51156005281177"
+              y1="0"
+              x2="0"
+              y2="134.51156005281177"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-153" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,111.700089,124.271210)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="58.641783422153466"
+              y2="294.81213672083993"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-156" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,189.386276,436.344177)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="83.70883686994941"
+              y2="8.244589722685305"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-159" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,122.689384,116.120995)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="309.3569195025973"
+              y1="165.35472646110372"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-162" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,123.360718,256.122925)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="129.17548636705362"
+              x2="311.8572111601626"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-165" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,76.537796,184.777023)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="238.68517455476487"
+              y2="238.68517455476487"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-168" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,335.425812,263.303528)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="105.6850701763434"
+              y1="0"
+              x2="0"
+              y2="158.1688819892554"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-171" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,68.345535,189.155884)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="37.111662387764454"
+              y1="186.572909462673"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-174" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,80.916656,176.584763)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="353.39078037405534"
+              y2="70.293792210839"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-177" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,124.271210,394.542816)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="186.572909462673"
+              y2="37.111662387764454"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-180" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,328.104950,81.147049)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="31.440813354665465"
+              y1="319.22391298644834"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-183" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,416.293915,154.885956)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="190.22808837890625"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-186" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,372.427765,372.427765)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="32.552453607499274"
+              x2="32.552453607499274"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-189" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,338.904846,75.374382)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="65.0208992479586"
+              y2="53.36127881351727"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-192" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,331.181244,80.535133)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="80.46812332322997"
+              y2="265.2678627699412"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-195" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,364.235504,154.578522)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="246.02282994120117"
+              x2="48.936980654226204"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-198" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.542347,264.110748)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="73.8012593725777"
+              y1="138.07243479520673"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-201" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,67.953682,116.120995)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="165.35472685884702"
+              x2="309.35693073409084"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-204" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,51.568275,265.922943)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0.7063958143428977"
+              y1="7.172155230940689"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-207" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,149.036255,120.946808)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="232.23481511149146"
+              y1="0"
+              x2="0"
+              y2="282.97893664104777"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-210" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,62.732071,302.321594)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="67.26476214287851"
+              y1="100.6688215381148"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-213" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,64.782074,114.701576)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="129.17548636705362"
+              x2="311.8572111601626"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-216" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,97.816818,146.428299)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="322.8483511115853"
+              y2="172.56603125892855"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-219" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,221.132233,185.831482)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="203.4933897151161"
+              y1="0"
+              x2="0"
+              y2="247.95739191683825"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-222" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,434.775909,189.463318)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="121.0733642578125"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-225" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,89.829010,153.668030)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="115.02998583830028"
+              y2="277.7069427486472"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-228" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,225.092667,334.079041)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="104.53566681994403"
+              x2="195.57249479886977"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-231" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,99.629036,140.454224)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="319.223920609194"
+              y2="31.44081342217362"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-234" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,80.916656,329.658142)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="294.81213672083993"
+              y1="58.64178342215348"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-237" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,154.578522,56.964390)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="23.62024238574923"
+              x2="118.74698158034016"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-240" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,75.374382,66.211113)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="203.49339022419542"
+              y1="0"
+              x2="0"
+              y2="247.9574029431394"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-243" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,149.036255,96.074242)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="232.23481541225158"
+              y2="282.9789440236149"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-246" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,69.868645,99.017120)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="212.2085140432597"
+              x2="64.37275479259239"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-249" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,293.662628,69.153992)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="93.11418026153422"
+              y2="306.9563203167734"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-252" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,187.574051,72.766441)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="244.47224555652338"
+              y2="130.67314663517192"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-255" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,186.766830,258.889130)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="249.92965479408556"
+              y1="0"
+              x2="0"
+              y2="166.9976615797883"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-258" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,226.674500,56.964390)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="118.74698158034016"
+              y1="23.62024238574923"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-261" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,304.329102,439.420471)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="2.0920345406118486"
+              x2="6.896521891294242"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-264" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,65.311043,254.644562)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="335.67182404942116"
+              y2="101.82493452413425"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-267" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,81.224091,326.536682)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="337.55181884765625"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-270" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,401.571655,120.946815)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="4.571978173375214"
+              y1="5.570973669193307"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-273" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,226.292984,396.065918)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="149.81733124245895"
+              y1="0"
+              x2="0"
+              y2="45.4465796326341"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-276" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,185.831482,221.132233)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="247.95739191683825"
+              y1="0"
+              x2="0"
+              y2="203.4933897151161"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-279" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,423.836273,340.647430)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="6.355884843815602"
+              x2="3.3972929843419024"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-282" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,215.626495,69.153992)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="106.26563907424904"
+              y2="350.31087351744293"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-285" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,218.524277,122.689384)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="165.35472646110372"
+              y1="0"
+              x2="0"
+              y2="309.3569195025973"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-288" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,188.245392,332.659607)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="231.74844682656996"
+              y1="0"
+              x2="0"
+              y2="95.99335670070104"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-291" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,226.904892,436.344177)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="8.244589722685305"
+              x2="83.70883686994941"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-294" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,225.092667,334.079041)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="104.53566681994403"
+              x2="195.57249479886977"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-297" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,189.463318,434.775909)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="121.0733642578125"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,450,250)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-15"
+          fill="none"
+          transform="matrix(1,0,0,1,446.157043,289.018066)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-18"
+          fill="none"
+          transform="matrix(1,0,0,1,434.775909,326.536682)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-21"
+          fill="none"
+          transform="matrix(1,0,0,1,416.293915,361.114044)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-24"
+          fill="none"
+          transform="matrix(1,0,0,1,391.421356,391.421356)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-27"
+          fill="none"
+          transform="matrix(1,0,0,1,361.114044,416.293915)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-30"
+          fill="none"
+          transform="matrix(1,0,0,1,326.536682,434.775909)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-33"
+          fill="none"
+          transform="matrix(1,0,0,1,289.018066,446.157043)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-36" fill="none" transform="matrix(1,0,0,1,250,450)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-39"
+          fill="none"
+          transform="matrix(1,0,0,1,210.981934,446.157043)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-42"
+          fill="none"
+          transform="matrix(1,0,0,1,173.463318,434.775909)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-45"
+          fill="none"
+          transform="matrix(1,0,0,1,138.885956,416.293915)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-48"
+          fill="none"
+          transform="matrix(1,0,0,1,108.578644,391.421356)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-51"
+          fill="none"
+          transform="matrix(1,0,0,1,83.706078,361.114044)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-54"
+          fill="none"
+          transform="matrix(1,0,0,1,65.224091,326.536682)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-57"
+          fill="none"
+          transform="matrix(1,0,0,1,53.842945,289.018066)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-60" fill="none" transform="matrix(1,0,0,1,50,250)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-63"
+          fill="none"
+          transform="matrix(1,0,0,1,53.842945,210.981934)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-66"
+          fill="none"
+          transform="matrix(1,0,0,1,65.224091,173.463318)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-69"
+          fill="none"
+          transform="matrix(1,0,0,1,83.706078,138.885956)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-72"
+          fill="none"
+          transform="matrix(1,0,0,1,108.578644,108.578644)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-75"
+          fill="none"
+          transform="matrix(1,0,0,1,138.885956,83.706078)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-78"
+          fill="none"
+          transform="matrix(1,0,0,1,173.463318,65.224091)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-81"
+          fill="none"
+          transform="matrix(1,0,0,1,210.981934,53.842945)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-84" fill="none" transform="matrix(1,0,0,1,250,50)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-87"
+          fill="none"
+          transform="matrix(1,0,0,1,289.018066,53.842945)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-90"
+          fill="none"
+          transform="matrix(1,0,0,1,326.536682,65.224091)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-93"
+          fill="none"
+          transform="matrix(1,0,0,1,361.114044,83.706078)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-96"
+          fill="none"
+          transform="matrix(1,0,0,1,391.421356,108.578644)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-99"
+          fill="none"
+          transform="matrix(1,0,0,1,416.293915,138.885956)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-102"
+          fill="none"
+          transform="matrix(1,0,0,1,434.775909,173.463318)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-105"
+          fill="none"
+          transform="matrix(1,0,0,1,446.157043,210.981934)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/layouts/dagre.svg b/packages/g6/tests/integration/snapshots/layouts/dagre.svg
new file mode 100644
index 00000000000..3d53c0a3caa
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/layouts/dagre.svg
@@ -0,0 +1,584 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g
+    id="g-svg-camera"
+    transform="matrix(1.106195,0,0,1.106195,-4.424778,89.601784)"
+  >
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-52" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,145,23.137857)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 109.31070918894528,0 L 0,21.862141837789054 L 3.061616997868383e-16,25.862141837789054"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,0,25.862143)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-57" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,285.829742,22.327904)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 154.17025383416234,22.6720961520827 L 154.17025383416234,47.6720961520827 L 154.17025383416234,72.6720961520827 L 154.17025383416234,97.6720961520827 L 154.17025383416234,122.6720961520827 L 154.17025383416234,147.6720961520827 L 154.17025383416234,176.6720961520827"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,154.170258,176.672089)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-62" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,145,86)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,9 L 17.911597104658565,21.79399793189897"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(-0.813734,-0.581238,0.581238,-0.813734,17.911596,21.793999)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-67" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,285.067871,25.381382)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 54.932129414482574,19.6186176480295 L 54.932129414482574,23.6186176480295"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,54.932129,23.618618)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-72" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,195.634827,77.770287)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 130.3786617592906,0 L 99.36517817723518,17.229713101141883 L 4.885881819614005,37.76869057018996"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0.977176,-0.212430,0.212430,0.977176,4.885882,37.768692)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-77" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,100,124.772400)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 64.72832035143952,0 L 0,20.22760010982485 L 3.061616997868383e-16,24.22760010982485"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,0,24.227600)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-82" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,195.271683,124.772400)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 64.72832035143952,20.22760010982485 L 64.72832035143952,24.22760010982485"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,64.728317,24.227600)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-87" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,115.271683,174.772400)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 64.72832035143952,20.227600109824863 L 64.72832035143952,24.227600109824863"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,64.728317,24.227600)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-92" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,20,174.772400)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 64.72832035143952,0 L 0,20.227600109824863 L 3.061616997868383e-16,24.227600109824863"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,0,24.227600)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-97" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,20,236)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,9 L 309.06000355141305,32.41363663268282"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(-0.997143,-0.075541,0.075541,-0.997143,309.059998,32.413635)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-102" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,365.416290,236)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 74.58371344592092,0 L 74.58371344592092,9 L 4.817589548149703,28.37947886049201"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0.963518,-0.267644,0.267644,0.963518,4.817590,28.379478)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+        <g id="g-svg-107" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,345.942261,84.855629)">
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 4.057749178334348,10.144372945835855 L 4.057749178334348,35.144372945835855 L 4.057749178334348,60.144372945835855 L 4.057749178334348,85.14437294583585 L 4.057749178334348,110.14437294583585 L 4.057749178334348,135.14437294583587 L 4.057749178334348,164.14437294583587"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <path
+              id="keyShape"
+              fill="none"
+              d="M 0,0 L 0,0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+            <g transform="matrix(0,-1,1,0,4.057749,164.144379)">
+              <path
+                id="markerEndShape"
+                fill="rgba(153,173,209,1)"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="1"
+                stroke="rgba(153,173,209,1)"
+              />
+              <path
+                id="markerEndShape"
+                fill="transparent"
+                d="M 0,5 L 10,0 L 10,10 Z"
+                transform="translate(-5,-5)"
+                stroke-width="7"
+                stroke="transparent"
+              />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,270,20)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-16" fill="none" transform="matrix(1,0,0,1,145,70)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-20" fill="none" transform="matrix(1,0,0,1,440,220)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-24" fill="none" transform="matrix(1,0,0,1,340,70)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-28" fill="none" transform="matrix(1,0,0,1,180,120)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-32" fill="none" transform="matrix(1,0,0,1,100,170)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-36" fill="none" transform="matrix(1,0,0,1,260,170)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-40" fill="none" transform="matrix(1,0,0,1,180,220)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-44" fill="none" transform="matrix(1,0,0,1,20,220)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-48" fill="none" transform="matrix(1,0,0,1,350,270)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/snapshots/layouts/grid.svg b/packages/g6/tests/integration/snapshots/layouts/grid.svg
new file mode 100644
index 00000000000..f56a5567015
--- /dev/null
+++ b/packages/g6/tests/integration/snapshots/layouts/grid.svg
@@ -0,0 +1,2027 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  width="500"
+  height="500"
+  style="background: transparent; position: absolute; outline: none;"
+  color-interpolation-filters="sRGB"
+  tabindex="1"
+>
+  <defs />
+  <g id="g-svg-camera" transform="matrix(1,0,0,1,0,0)">
+    <g id="g-root" fill="none" transform="matrix(1,0,0,1,0,0)">
+      <g id="combo-group" fill="none" transform="matrix(1,0,0,1,0,0)" />
+      <g id="edge-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-108" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,378.880585,57.188950)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="302.28877228700196"
+              x2="75.57220258515679"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-111" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,48.822086,139.310837)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="138.04498664418256"
+              x2="69.02249648169047"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-114" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.386555,49.898598)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="233.5361251949935"
+              x2="389.2269014571658"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-117" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,136.313705,136.313705)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="227.3725830020305"
+              y1="227.3725830020305"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-120" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,140.522278,45.547237)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="302.28878341761424"
+              y1="0"
+              x2="0"
+              y2="75.57219239498306"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-123" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.188950,295.547241)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="302.28877228700196"
+              y2="75.57220258515679"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-126" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,307.666656,291.666656)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="134.66668701171875"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-129" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141,208.333328)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="51.33332824707031"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-132" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,140.522278,212.213898)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="302.28878333401974"
+              y1="75.57218891466394"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-135" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,219.647034,219.647034)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="60.70591124910081"
+              y1="60.70591124910081"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-138" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,139.310837,215.488739)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="138.0449863821433"
+              y2="69.02249319107167"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-141" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,223.512268,213.392975)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="219.64214935059326"
+              y1="73.21404084626968"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-144" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,298.822083,55.977501)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="69.02250661558628"
+              y1="138.04499111397791"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-147" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,217.208527,138.312805)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="223.3743908312041"
+              x2="148.91626509869968"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-150" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,375,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="51.33332824707031"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-153" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,212.213898,57.188950)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="302.28877195262373"
+              x2="75.57218866388038"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-156" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,302.980377,52.980377)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="60.70592495418862"
+              y2="60.70591661749945"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-159" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,219.647034,219.647034)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="144.03925475496018"
+              y1="0"
+              x2="0"
+              y2="144.03925475496018"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-162" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,208.333328,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="134.66665649414062"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-165" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,45.547237,57.188950)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="302.28877203621835"
+              x2="75.57219214419945"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-168" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,136.313705,52.980377)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="60.70591176700128"
+              y1="60.70591454589757"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-171" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.977501,298.822083)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="138.04499111397791"
+              y1="0"
+              x2="0"
+              y2="69.02250661558628"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-174" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,50.541870,138.312805)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="223.37439026867014"
+              x2="148.91625449840888"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-177" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,130.059647,56.845600)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="73.21403987349879"
+              y1="219.64212297196934"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-180" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.386555,216.565262)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="389.2269022329881"
+              y1="0"
+              x2="0"
+              y2="233.5361506048373"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-183" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,298.822083,55.977501)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="138.04499111397791"
+              x2="69.02250661558628"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-186" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,382.155426,55.977501)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="69.02250661558628"
+              y1="138.04499111397791"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-189" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,52.980377,219.647034)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="227.37259705238512"
+              x2="227.37257276637317"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-192" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,51.661789,54.160568)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="391.6788734199406"
+              x2="313.3430908469128"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-195" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,307.666656,208.333328)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="134.66668701171875"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-198" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,52.980377,219.647034)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="60.70591454589757"
+              y1="60.70591176700131"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-201" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.977505,132.155411)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="304.7116616222213"
+              y1="152.35582209324002"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-204" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.188950,212.213898)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="302.28877195262373"
+              y1="75.57218866388038"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-207" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,48.822086,139.310837)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="69.02249648169047"
+              y2="138.04498664418256"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-210" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141,291.666656)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="218"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-213" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,41.666668,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="51.33332824707031"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-216" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,45.547237,57.188950)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="75.57219214419945"
+              y1="302.28877203621835"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-219" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,128.137863,57.355957)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="385.2880938460746"
+              x2="77.05761241986295"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-222" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,44.804527,57.355957)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="77.0576159583299"
+              y1="385.2880939013206"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-225" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,128.880569,57.188950)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="302.28877195262373"
+              x2="75.57218866388035"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-228" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.666668,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="134.6666603088379"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-231" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,125,391)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="51.333343505859375"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-234" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,307.666656,125)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="134.66668701171875"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-237" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,307.666656,375)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="134.66668701171875"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-240" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,458.333344,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="218"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-243" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,291.666656,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="218"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-246" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,300.541870,138.312805)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="148.91627923242083"
+              y1="0"
+              x2="0"
+              y2="223.37439158124948"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-249" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,300.541870,138.312805)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="148.91627923242083"
+              y1="223.37439158124948"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-252" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,125,141)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="51.33332824707031"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-255" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,219.647034,52.980377)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="60.70591454589757"
+              x2="60.70591176700131"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-258" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,221.646133,50.541870)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="148.9162552484542"
+              x2="223.37440502742902"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-261" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,140.178940,46.726311)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="219.64213441606114"
+              y1="73.21404368819606"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-264" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.977505,48.822086)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="152.35582564589805"
+              x2="304.71166175324083"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-267" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.355957,44.804527)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="385.2880939013206"
+              y1="77.0576159583299"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-270" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,56.845600,130.059647)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="219.64212297196934"
+              y1="73.21403987349879"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-273" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,219.647034,52.980377)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="60.70591176700131"
+              y1="60.70591454589757"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-276" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,139.310837,48.822086)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="69.02249648169047"
+              x2="138.04498664418256"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-279" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.666668,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="301.3333320617676"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-282" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="301.3333435058594"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-285" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,55.977505,48.822086)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="69.0224967437297"
+              x2="138.0449903278602"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-288" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.666668,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="217.9999885559082"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-291" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="51.33332824707031"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-294" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,57.666668,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="134.6666603088379"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+        <g id="g-svg-297" fill="none" transform="matrix(1,0,0,1,0,0)">
+          <g transform="matrix(1,0,0,1,141,41.666668)">
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="134.66665649414062"
+              y2="0"
+              stroke-width="1"
+              stroke="rgba(153,173,209,1)"
+            />
+            <line
+              id="keyShape"
+              fill="none"
+              x1="0"
+              y1="0"
+              x2="0"
+              y2="0"
+              stroke-width="3"
+              stroke="transparent"
+            />
+          </g>
+        </g>
+      </g>
+      <g id="node-group" fill="none" transform="matrix(1,0,0,1,0,0)">
+        <g id="g-svg-12" fill="none" transform="matrix(1,0,0,1,208.333328,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-15" fill="none" transform="matrix(1,0,0,1,375,208.333328)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-18"
+          fill="none"
+          transform="matrix(1,0,0,1,41.666668,41.666668)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-21" fill="none" transform="matrix(1,0,0,1,375,41.666668)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-24" fill="none" transform="matrix(1,0,0,1,291.666656,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-27"
+          fill="none"
+          transform="matrix(1,0,0,1,458.333344,208.333328)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-30" fill="none" transform="matrix(1,0,0,1,125,41.666668)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-33" fill="none" transform="matrix(1,0,0,1,375,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-36"
+          fill="none"
+          transform="matrix(1,0,0,1,41.666668,291.666656)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-39"
+          fill="none"
+          transform="matrix(1,0,0,1,208.333328,41.666668)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-42"
+          fill="none"
+          transform="matrix(1,0,0,1,291.666656,41.666668)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-45" fill="none" transform="matrix(1,0,0,1,125,291.666656)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-48"
+          fill="none"
+          transform="matrix(1,0,0,1,208.333328,291.666656)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-51"
+          fill="none"
+          transform="matrix(1,0,0,1,291.666656,291.666656)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-54" fill="none" transform="matrix(1,0,0,1,458.333344,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-57" fill="none" transform="matrix(1,0,0,1,375,291.666656)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-60"
+          fill="none"
+          transform="matrix(1,0,0,1,41.666668,208.333328)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-63"
+          fill="none"
+          transform="matrix(1,0,0,1,458.333344,291.666656)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-66" fill="none" transform="matrix(1,0,0,1,41.666668,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-69" fill="none" transform="matrix(1,0,0,1,125,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-72" fill="none" transform="matrix(1,0,0,1,208.333328,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-75" fill="none" transform="matrix(1,0,0,1,291.666656,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-78" fill="none" transform="matrix(1,0,0,1,125,208.333328)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-81"
+          fill="none"
+          transform="matrix(1,0,0,1,458.333344,41.666668)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-84" fill="none" transform="matrix(1,0,0,1,375,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-87" fill="none" transform="matrix(1,0,0,1,458.333344,375)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-90"
+          fill="none"
+          transform="matrix(1,0,0,1,41.666668,458.333344)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-93"
+          fill="none"
+          transform="matrix(1,0,0,1,208.333328,208.333328)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-96" fill="none" transform="matrix(1,0,0,1,41.666668,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-99"
+          fill="none"
+          transform="matrix(1,0,0,1,291.666656,208.333328)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g
+          id="g-svg-102"
+          fill="none"
+          transform="matrix(1,0,0,1,125,458.333344)"
+        >
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+        <g id="g-svg-105" fill="none" transform="matrix(1,0,0,1,125,125)">
+          <g transform="matrix(1,0,0,1,0,0)">
+            <circle
+              id="keyShape"
+              fill="rgba(34,126,255,1)"
+              transform="translate(-16,-16)"
+              cx="16"
+              cy="16"
+              r="16"
+              stroke-width="0"
+            />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/packages/g6/tests/integration/utils/createNodeGCanvas.ts b/packages/g6/tests/integration/utils/createNodeGCanvas.ts
index 07456f0ec3f..e6443c6ad39 100644
--- a/packages/g6/tests/integration/utils/createNodeGCanvas.ts
+++ b/packages/g6/tests/integration/utils/createNodeGCanvas.ts
@@ -16,11 +16,6 @@ export function createNodeGCanvas(
   const context = new OffscreenCanvasContext(offscreenNodeCanvas);
 
   const renderer = new SVGRenderer();
-  // Remove html plugin to ssr.
-  const htmlRendererPlugin = renderer.getPlugin('html-renderer');
-  renderer.unregisterPlugin(htmlRendererPlugin);
-  const domInteractionPlugin = renderer.getPlugin('dom-interaction');
-  renderer.unregisterPlugin(domInteractionPlugin);
   renderer.registerPlugin(
     new DragAndDropPlugin({ dragstartDistanceThreshold: 10 }),
   );
diff --git a/packages/g6/tests/integration/utils/event.ts b/packages/g6/tests/integration/utils/event.ts
index 536cc3e185f..b88ea33f2c1 100644
--- a/packages/g6/tests/integration/utils/event.ts
+++ b/packages/g6/tests/integration/utils/event.ts
@@ -1,5 +1,4 @@
-import { JSDOM } from 'jsdom';
-import Graph from '../../../src/runtime/graph';
+import { Graph } from '../../../src/runtime/graph';
 
 export function triggerEvent(
   graph: Graph<any, any>,
@@ -7,12 +6,11 @@ export function triggerEvent(
   clientX: number,
   clientY: number,
 ) {
-  const dom = new JSDOM();
   // TODO: TouchEvent
   // const isMouseEvent = type.startsWith('mouse');
   // const isTouchEvent = type.startsWith('touch');
 
-  const event = new dom.window.MouseEvent(type, {
+  const event = new document.defaultView!.MouseEvent(type, {
     clientX,
     clientY,
   });
diff --git a/packages/g6/tests/integration/utils/index.ts b/packages/g6/tests/integration/utils/index.ts
index 99134b5c651..19bcd973339 100644
--- a/packages/g6/tests/integration/utils/index.ts
+++ b/packages/g6/tests/integration/utils/index.ts
@@ -1,3 +1,3 @@
 export * from './canvas';
-// export * from './event';
+export * from './event';
 export * from './sleep';