From 396236405809dd697d6f9c64093f3c4a7e1636bd Mon Sep 17 00:00:00 2001 From: Ovilia Date: Thu, 5 Sep 2024 14:49:03 +0800 Subject: [PATCH 1/8] feat(sankey): sankey support roam --- src/chart/sankey/SankeySeries.ts | 14 +++- src/chart/sankey/SankeyView.ts | 71 ++++++++++++++++ test/sankey-roam.html | 135 +++++++++++++++++++++++++++++++ 3 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 test/sankey-roam.html diff --git a/src/chart/sankey/SankeySeries.ts b/src/chart/sankey/SankeySeries.ts index 9dca447cad..1826ea4e7d 100644 --- a/src/chart/sankey/SankeySeries.ts +++ b/src/chart/sankey/SankeySeries.ts @@ -34,12 +34,14 @@ import { GraphEdgeItemObject, OptionDataValueNumeric, DefaultEmphasisFocus, - CallbackDataParams + CallbackDataParams, + RoamOptionMixin } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; import { LayoutRect } from '../../util/layout'; import { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup'; +import View from '../../coord/View'; type FocusNodeAdjacency = boolean | 'inEdges' | 'outEdges' | 'allEdges'; @@ -95,7 +97,8 @@ export interface SankeyLevelOption extends SankeyNodeStateOption, SankeyEdgeStat export interface SankeySeriesOption extends SeriesOption, ExtraStateOption>, SankeyBothStateOption, - BoxLayoutOptionMixin { + BoxLayoutOptionMixin, + RoamOptionMixin { type?: 'sankey' /** @@ -148,6 +151,8 @@ class SankeySeriesModel extends SeriesModel { static readonly type = 'series.sankey'; readonly type = SankeySeriesModel.type; + coordinateSystem: View; + levelModels: Model[]; layoutInfo: LayoutRect; @@ -297,6 +302,11 @@ class SankeySeriesModel extends SeriesModel { layoutIterations: 32, + // true | false | 'move' | 'scale', see module:component/helper/RoamController. + roam: false, + center: null, + zoom: 1, + label: { show: true, position: 'right', diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index e84b7f7ee8..47cf89e513 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -31,6 +31,11 @@ import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle'; import { getECData } from '../../util/innerStore'; import { isString, retrieve3 } from 'zrender/src/core/util'; import type { GraphEdge } from '../../data/Graph'; +import RoamController from '../../component/helper/RoamController'; +import type { RoamControllerHost } from '../../component/helper/roamHelper'; +import { onIrrelevantElement } from '../../component/helper/cursorHelper'; +import * as roamHelper from '../../component/helper/roamHelper'; +import View from '../../coord/View'; class SankeyPathShape { x1 = 0; @@ -111,6 +116,17 @@ class SankeyView extends ChartView { private _data: SeriesData; + private _controller: RoamController; + private _controllerHost: RoamControllerHost; + + init(ecModel: GlobalModel, api: ExtensionAPI): void { + this._controller = new RoamController(api.getZr()); + + this._controllerHost = { + target: this.group + } as RoamControllerHost; + } + render(seriesModel: SankeySeriesModel, ecModel: GlobalModel, api: ExtensionAPI) { const sankeyView = this; const graph = seriesModel.getGraph(); @@ -131,6 +147,14 @@ class SankeyView extends ChartView { group.x = layoutInfo.x; group.y = layoutInfo.y; + const viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + viewCoordSys.setBoundingRect(layoutInfo.x, layoutInfo.y, width, height); + viewCoordSys.setCenter(seriesModel.get('center'), api); + viewCoordSys.setZoom(seriesModel.get('zoom')); + + this._updateController(seriesModel, ecModel, api); + // generate a bezire Curve for each edge graph.eachEdge(function (edge) { const curve = new SankeyPath(); @@ -346,6 +370,53 @@ class SankeyView extends ChartView { } dispose() { + this._controller && this._controller.dispose(); + this._controllerHost = null; + } + + private _updateController( + seriesModel: SankeySeriesModel, + ecModel: GlobalModel, + api: ExtensionAPI + ) { + const controller = this._controller; + const controllerHost = this._controllerHost; + const group = this.group; + controller.setPointerChecker(function (e, x, y) { + const rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) + && !onIrrelevantElement(e, api, seriesModel); + }); + + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + + controller + .off('pan') + .off('zoom') + .on('pan', (e) => { + roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'sankeyRoam', + dx: e.dx, + dy: e.dy + }); + }) + .on('zoom', (e) => { + roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'sankeyRoam', + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + // Only update label layout on zoom + api.updateLabelLayout(); + }); } } diff --git a/test/sankey-roam.html b/test/sankey-roam.html new file mode 100644 index 0000000000..ad749941f5 --- /dev/null +++ b/test/sankey-roam.html @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + From 041ae22280ecb4e8f4afd8adda9ff83f155466ca Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 23 Sep 2024 14:23:48 +0800 Subject: [PATCH 2/8] fix(sankey): fix a lint problem --- src/chart/sankey/SankeyView.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index 47cf89e513..20ef1303c0 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -32,6 +32,7 @@ import { getECData } from '../../util/innerStore'; import { isString, retrieve3 } from 'zrender/src/core/util'; import type { GraphEdge } from '../../data/Graph'; import RoamController from '../../component/helper/RoamController'; +// eslint-disable-next-line no-duplicate-imports import type { RoamControllerHost } from '../../component/helper/roamHelper'; import { onIrrelevantElement } from '../../component/helper/cursorHelper'; import * as roamHelper from '../../component/helper/roamHelper'; From e3cad60c5479cca0138f0b3a89152f90f392140c Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 23 Sep 2024 14:37:40 +0800 Subject: [PATCH 3/8] fix(sankey): fix a lint problem --- src/chart/sankey/SankeyView.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index 20ef1303c0..4581392826 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -33,7 +33,6 @@ import { isString, retrieve3 } from 'zrender/src/core/util'; import type { GraphEdge } from '../../data/Graph'; import RoamController from '../../component/helper/RoamController'; // eslint-disable-next-line no-duplicate-imports -import type { RoamControllerHost } from '../../component/helper/roamHelper'; import { onIrrelevantElement } from '../../component/helper/cursorHelper'; import * as roamHelper from '../../component/helper/roamHelper'; import View from '../../coord/View'; @@ -118,14 +117,14 @@ class SankeyView extends ChartView { private _data: SeriesData; private _controller: RoamController; - private _controllerHost: RoamControllerHost; + private _controllerHost: roamHelper.RoamControllerHost; init(ecModel: GlobalModel, api: ExtensionAPI): void { this._controller = new RoamController(api.getZr()); this._controllerHost = { target: this.group - } as RoamControllerHost; + } as roamHelper.RoamControllerHost; } render(seriesModel: SankeySeriesModel, ecModel: GlobalModel, api: ExtensionAPI) { From 15dba643c2d6c0df5e7f572481f376a4b63340eb Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 10 Mar 2025 16:02:52 +0800 Subject: [PATCH 4/8] fix(sankey): center changes when re-render --- src/chart/sankey/SankeySeries.ts | 10 +++++++++- src/chart/sankey/SankeyView.ts | 33 +++++++++++++++++++++----------- src/chart/sankey/install.ts | 21 +++++++++++++++++++- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/src/chart/sankey/SankeySeries.ts b/src/chart/sankey/SankeySeries.ts index 1826ea4e7d..ed83af164c 100644 --- a/src/chart/sankey/SankeySeries.ts +++ b/src/chart/sankey/SankeySeries.ts @@ -41,7 +41,7 @@ import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; import { LayoutRect } from '../../util/layout'; import { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup'; -import View from '../../coord/View'; +import type View from '../../coord/View'; type FocusNodeAdjacency = boolean | 'inEdges' | 'outEdges' | 'allEdges'; @@ -218,6 +218,14 @@ class SankeySeriesModel extends SeriesModel { dataItem.localY = localPosition[1]; } + setCenter(center: number[]) { + this.option.center = center; + } + + setZoom(zoom: number) { + this.option.zoom = zoom; + } + /** * Return the graphic data structure * diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index 4581392826..6bc93ffd57 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -111,7 +111,7 @@ class SankeyView extends ChartView { readonly type = SankeyView.type; private _model: SankeySeriesModel; - + private _mainGroup = new graphic.Group(); private _focusAdjacencyDisabled = false; private _data: SeriesData; @@ -125,12 +125,14 @@ class SankeyView extends ChartView { this._controllerHost = { target: this.group } as roamHelper.RoamControllerHost; + + this.group.add(this._mainGroup); } render(seriesModel: SankeySeriesModel, ecModel: GlobalModel, api: ExtensionAPI) { const sankeyView = this; const graph = seriesModel.getGraph(); - const group = this.group; + const group = this._mainGroup; const layoutInfo = seriesModel.layoutInfo; // view width const width = layoutInfo.width; @@ -144,15 +146,7 @@ class SankeyView extends ChartView { group.removeAll(); - group.x = layoutInfo.x; - group.y = layoutInfo.y; - - const viewCoordSys = seriesModel.coordinateSystem = new View(); - viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); - viewCoordSys.setBoundingRect(layoutInfo.x, layoutInfo.y, width, height); - viewCoordSys.setCenter(seriesModel.get('center'), api); - viewCoordSys.setZoom(seriesModel.get('zoom')); - + this._updateViewCoordSys(seriesModel, api); this._updateController(seriesModel, ecModel, api); // generate a bezire Curve for each edge @@ -418,6 +412,23 @@ class SankeyView extends ChartView { api.updateLabelLayout(); }); } + + private _updateViewCoordSys(seriesModel: SankeySeriesModel, api: ExtensionAPI) { + const layoutInfo = seriesModel.layoutInfo; + const width = layoutInfo.width; + const height = layoutInfo.height; + + const viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + + viewCoordSys.setBoundingRect(0, 0, width, height); + + viewCoordSys.setCenter(seriesModel.get('center'), api); + viewCoordSys.setZoom(seriesModel.get('zoom')); + + this._mainGroup.x = layoutInfo.x; + this._mainGroup.y = layoutInfo.y; + } } /** diff --git a/src/chart/sankey/install.ts b/src/chart/sankey/install.ts index b4f2fd493d..b3da093bfb 100644 --- a/src/chart/sankey/install.ts +++ b/src/chart/sankey/install.ts @@ -25,6 +25,8 @@ import sankeyLayout from './sankeyLayout'; import sankeyVisual from './sankeyVisual'; import { Payload } from '../../util/types'; import GlobalModel from '../../model/Global'; +import { updateCenterAndZoom, RoamPayload } from '../../action/roamHelper'; +import type ExtensionAPI from '../../core/ExtensionAPI'; interface SankeyDragNodePayload extends Payload { localX: number @@ -53,4 +55,21 @@ export function install(registers: EChartsExtensionInstallRegisters) { }); }); -} \ No newline at end of file + registers.registerAction({ + type: 'sankeyRoam', + event: 'sankeyRoam', + update: 'none' + }, function (payload: RoamPayload, ecModel: GlobalModel, api: ExtensionAPI) { + ecModel.eachComponent({ + mainType: 'series', subType: 'sankey', query: payload + }, function (seriesModel: SankeySeriesModel) { + const coordSys = seriesModel.coordinateSystem; + const res = updateCenterAndZoom(coordSys, payload, undefined, api); + + seriesModel.setCenter + && seriesModel.setCenter(res.center); + seriesModel.setZoom + && seriesModel.setZoom(res.zoom); + }); + }); +} From 3078ef45e972f18a23bd03ecba74c54e47058df1 Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 10 Mar 2025 16:03:26 +0800 Subject: [PATCH 5/8] test(sankey): test case to test sankey roam --- test/sankey-roam.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/sankey-roam.html b/test/sankey-roam.html index ad749941f5..259d7b04d0 100644 --- a/test/sankey-roam.html +++ b/test/sankey-roam.html @@ -119,11 +119,15 @@ }; var chart = testHelper.create(echarts, 'main0', { title: [ - 'Sankey Roam' + 'Sankey Roam', + 'Pan and then click "Update" and the center should be kept' ], option: option, // height: 300, - // buttons: [{text: 'btn-txt', onclick: function () {}}], + buttons: [{text: 'Update', onclick: function () { + option.series.links[0].value = Math.random() * 10; + chart.setOption(option); + }}], // recordCanvas: true, }); }); From e910d37008356d3aee1e01e20cd3d24a70a63dd7 Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 10 Mar 2025 16:05:31 +0800 Subject: [PATCH 6/8] fix(sankey): fix import --- src/chart/sankey/SankeyView.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index 6bc93ffd57..e48e6d7433 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -32,7 +32,6 @@ import { getECData } from '../../util/innerStore'; import { isString, retrieve3 } from 'zrender/src/core/util'; import type { GraphEdge } from '../../data/Graph'; import RoamController from '../../component/helper/RoamController'; -// eslint-disable-next-line no-duplicate-imports import { onIrrelevantElement } from '../../component/helper/cursorHelper'; import * as roamHelper from '../../component/helper/roamHelper'; import View from '../../coord/View'; From a03a4a73dd115d5e11c5a4409fc6e4f1c775fc8d Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 24 Mar 2025 18:05:57 +0800 Subject: [PATCH 7/8] refactor(roam): move roam controller logic to helper --- src/chart/sankey/SankeyView.ts | 47 +----------------------- src/chart/tree/TreeView.ts | 45 +++++------------------ src/component/helper/roamHelper.ts | 57 ++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 82 deletions(-) diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index e48e6d7433..0496fa50c9 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -146,7 +146,7 @@ class SankeyView extends ChartView { group.removeAll(); this._updateViewCoordSys(seriesModel, api); - this._updateController(seriesModel, ecModel, api); + roamHelper.updateController(seriesModel, api, group, this._controller, this._controllerHost); // generate a bezire Curve for each edge graph.eachEdge(function (edge) { @@ -367,51 +367,6 @@ class SankeyView extends ChartView { this._controllerHost = null; } - private _updateController( - seriesModel: SankeySeriesModel, - ecModel: GlobalModel, - api: ExtensionAPI - ) { - const controller = this._controller; - const controllerHost = this._controllerHost; - const group = this.group; - controller.setPointerChecker(function (e, x, y) { - const rect = group.getBoundingRect(); - rect.applyTransform(group.transform); - return rect.contain(x, y) - && !onIrrelevantElement(e, api, seriesModel); - }); - - controller.enable(seriesModel.get('roam')); - controllerHost.zoomLimit = seriesModel.get('scaleLimit'); - controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); - - controller - .off('pan') - .off('zoom') - .on('pan', (e) => { - roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy); - api.dispatchAction({ - seriesId: seriesModel.id, - type: 'sankeyRoam', - dx: e.dx, - dy: e.dy - }); - }) - .on('zoom', (e) => { - roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); - api.dispatchAction({ - seriesId: seriesModel.id, - type: 'sankeyRoam', - zoom: e.scale, - originX: e.originX, - originY: e.originY - }); - // Only update label layout on zoom - api.updateLabelLayout(); - }); - } - private _updateViewCoordSys(seriesModel: SankeySeriesModel, api: ExtensionAPI) { const layoutInfo = seriesModel.layoutInfo; const width = layoutInfo.width; diff --git a/src/chart/tree/TreeView.ts b/src/chart/tree/TreeView.ts index be32e5887b..dcb2950fa5 100644 --- a/src/chart/tree/TreeView.ts +++ b/src/chart/tree/TreeView.ts @@ -277,44 +277,17 @@ class TreeView extends ChartView { ecModel: GlobalModel, api: ExtensionAPI ) { - const controller = this._controller; - const controllerHost = this._controllerHost; - const group = this.group; - controller.setPointerChecker(function (e, x, y) { - const rect = group.getBoundingRect(); - rect.applyTransform(group.transform); - return rect.contain(x, y) - && !onIrrelevantElement(e, api, seriesModel); - }); - - controller.enable(seriesModel.get('roam')); - controllerHost.zoomLimit = seriesModel.get('scaleLimit'); - controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); - - controller - .off('pan') - .off('zoom') - .on('pan', (e) => { - roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy); - api.dispatchAction({ - seriesId: seriesModel.id, - type: 'treeRoam', - dx: e.dx, - dy: e.dy - }); - }) + roamHelper.updateController( + seriesModel, + api, + this.group, + this._controller, + this._controllerHost + ); + + this._controller .on('zoom', (e) => { - roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); - api.dispatchAction({ - seriesId: seriesModel.id, - type: 'treeRoam', - zoom: e.scale, - originX: e.originX, - originY: e.originY - }); this._updateNodeAndLinkScale(seriesModel); - // Only update label layout on zoom - api.updateLabelLayout(); }); } diff --git a/src/component/helper/roamHelper.ts b/src/component/helper/roamHelper.ts index 0ed6b819fc..096c2e85cd 100644 --- a/src/component/helper/roamHelper.ts +++ b/src/component/helper/roamHelper.ts @@ -18,6 +18,17 @@ */ import Element from 'zrender/src/Element'; +import { SeriesModel } from '../../echarts.all'; +import ExtensionAPI from '../../core/ExtensionAPI'; +import Group from 'zrender/src/graphic/Group'; +import RoamController from './RoamController'; +import { onIrrelevantElement } from './cursorHelper'; +import { SeriesOption } from '../../export/option'; +import { CoordinateSystem } from '../../coord/CoordinateSystem'; +import View from '../../coord/View'; +import TreeSeriesModel from '../../chart/tree/TreeSeries'; +import SankeySeriesModel from '../../chart/sankey/SankeySeries'; +import { RoamOptionMixin } from '../../util/types'; export interface RoamControllerHost { target: Element; @@ -62,3 +73,49 @@ export function updateViewOnZoom(controllerHost: RoamControllerHost, zoomDelta: target.dirty(); } + +export function updateController( + seriesModel: SeriesModel, + api: ExtensionAPI, + group: Group, + controller: RoamController, + controllerHost: RoamControllerHost, +) { + controller.setPointerChecker(function (e, x, y) { + const rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) + && !onIrrelevantElement(e, api, seriesModel); + }); + + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + const coordinate = seriesModel.coordinateSystem; + controllerHost.zoom = coordinate ? (coordinate as View).getZoom() : 1; + const type = seriesModel.type + 'Roam'; + + controller + .off('pan') + .off('zoom') + .on('pan', (e) => { + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type, + dx: e.dx, + dy: e.dy + }); + }) + .on('zoom', (e) => { + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type, + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + // Only update label layout on zoom + api.updateLabelLayout(); + }); +} From be096e7c8409385f9c4c026686bf0829c345776d Mon Sep 17 00:00:00 2001 From: Ovilia Date: Mon, 24 Mar 2025 18:09:25 +0800 Subject: [PATCH 8/8] fix(roam): fix import --- src/chart/sankey/SankeyView.ts | 1 - src/chart/tree/TreeView.ts | 1 - src/component/helper/roamHelper.ts | 9 +++------ 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/chart/sankey/SankeyView.ts b/src/chart/sankey/SankeyView.ts index 0496fa50c9..eb78454852 100644 --- a/src/chart/sankey/SankeyView.ts +++ b/src/chart/sankey/SankeyView.ts @@ -32,7 +32,6 @@ import { getECData } from '../../util/innerStore'; import { isString, retrieve3 } from 'zrender/src/core/util'; import type { GraphEdge } from '../../data/Graph'; import RoamController from '../../component/helper/RoamController'; -import { onIrrelevantElement } from '../../component/helper/cursorHelper'; import * as roamHelper from '../../component/helper/roamHelper'; import View from '../../coord/View'; diff --git a/src/chart/tree/TreeView.ts b/src/chart/tree/TreeView.ts index dcb2950fa5..62dfbba541 100644 --- a/src/chart/tree/TreeView.ts +++ b/src/chart/tree/TreeView.ts @@ -26,7 +26,6 @@ import * as bbox from 'zrender/src/core/bbox'; import View from '../../coord/View'; import * as roamHelper from '../../component/helper/roamHelper'; import RoamController from '../../component/helper/RoamController'; -import {onIrrelevantElement} from '../../component/helper/cursorHelper'; import {parsePercent} from '../../util/number'; import ChartView from '../../view/Chart'; import TreeSeriesModel, { TreeSeriesOption, TreeSeriesNodeItemOption } from './TreeSeries'; diff --git a/src/component/helper/roamHelper.ts b/src/component/helper/roamHelper.ts index 096c2e85cd..8f87a9e001 100644 --- a/src/component/helper/roamHelper.ts +++ b/src/component/helper/roamHelper.ts @@ -22,13 +22,10 @@ import { SeriesModel } from '../../echarts.all'; import ExtensionAPI from '../../core/ExtensionAPI'; import Group from 'zrender/src/graphic/Group'; import RoamController from './RoamController'; +import type { SeriesOption } from '../../export/option'; +import type View from '../../coord/View'; +import type { RoamOptionMixin } from '../../util/types'; import { onIrrelevantElement } from './cursorHelper'; -import { SeriesOption } from '../../export/option'; -import { CoordinateSystem } from '../../coord/CoordinateSystem'; -import View from '../../coord/View'; -import TreeSeriesModel from '../../chart/tree/TreeSeries'; -import SankeySeriesModel from '../../chart/sankey/SankeySeries'; -import { RoamOptionMixin } from '../../util/types'; export interface RoamControllerHost { target: Element;