import Model from 'echarts/lib/model/Model';
import SeriesModel from 'echarts/lib/model/Series';
import type SeriesData from 'echarts/lib/data/SeriesData';
import Tree, { TreeNode, default as TreeType } from 'echarts/lib/data/Tree';
import { TreeSeriesLeavesOption } from 'echarts/lib/chart/tree/TreeSeries';
import type { SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin, ZRColor } from 'echarts/lib/util/types';
import { BoundingRect } from 'echarts/lib/util/graphic';
import { graphic } from 'echarts';
import { Path, PathProps, TextProps, Line, LineProps, PolygonProps } from 'zrender';
import { ECSymbol } from 'echarts/lib/util/symbol';
export type RelationTreeNode = TreeNode & {
    index: number;
    open?: boolean;
    nodeElGroup: graphic.Group;
    lineElGroup?: graphic.Group;
};
export interface GroupNodeArray {
    [key: number | string]: RelationTreeNode[];
}
type RenderOption = {
    text?: {
        style?: {
            text: string;
        };
    };
    attachment?: {
        style?: {
            text?: string;
        };
    }[];
    logo?: string;
};
export interface RelationshipDiagramSeriesNodeItemOption {
    type?: string;
    /** 优先级 */
    priority?: number;
    /** 节点名字 */
    name?: string;
    /** 水印 */
    watermark?: string;
    /** 节点背景颜色 */
    backgroundColor?: string[];
    /** 渲染配置 */
    render?: RenderOption | RenderOption[];
    /** 孩子节点 */
    children?: RelationshipDiagramSeriesNodeItemOption[];
    /** 是否折叠节点 */
    collapsed?: boolean;
    /** 父节点id */
    parentId?: string | number;
    /** 默认的主树 */
    __treeIndex?: number;
}
export interface RelationshipDiagramSeriesOption extends SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin {
    type?: 'dvRelationshipDiagram';
    data?: RelationshipDiagramSeriesNodeItemOption[];
    /** 初始展开的树深度（根节点的深度可认为为 0） */
    initialTreeDepth?: number;
    /** 是否折叠节点 */
    collapsed?: boolean;
    /** 背景颜色 */
    dvBackground?: {
        show?: boolean;
        color?: string[];
        padding?: number[];
    };
    /** 节点渲染方法 */
    dvNodeRender?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, createEl?: (elOption: {
        type: string;
    }) => Path<PathProps>, group?: graphic.Group, createSymbol?: (symbolType: string, x: number, y: number, w: number, h: number, color?: ZRColor, keepAspect?: boolean) => ECSymbol, node?: RelationTreeNode) => graphic.Group;
    dvLineRender?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, createEl?: (elOption: {
        type: string;
    }) => Path<PathProps>, group?: graphic.Group, node?: RelationTreeNode) => graphic.Group;
    /** 节点的间距 */
    dvNodeGap?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, node?: RelationTreeNode, spaceArray?: number[], widthArray?: number[]) => void;
    /** 水印 */
    dvWatermark?: {
        show?: boolean;
        watermark?: TextProps[];
    };
    /** 同级分支线 */
    dvLevelLine?: {
        show?: boolean;
        padding?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, node?: RelationTreeNode) => number[];
        style?: Line;
    };
    /** 每一级节点竖直方向的间距 */
    dvVerticalSpacingBetweenNode?: number[];
    /** 首屏自适应 */
    dvAdapt?: boolean;
    /** 导向线 */
    dvToNextTreeLine?: {
        show?: boolean;
        lineStyle?: LineProps & {
            lineWidth: number;
            stroke: string;
        };
        arrowStyle: PolygonProps & {
            lineWidth: number;
            fill: string;
            scale: number;
        };
    };
    leaves?: TreeSeriesLeavesOption;
}
export type RelationshipDiagramSeriesModelClazz = RelationshipDiagramSeriesModel;
export default class RelationshipDiagramSeriesModel extends SeriesModel<RelationshipDiagramSeriesOption> {
    static readonly type = "series.dvRelationshipDiagram";
    readonly type = "series.dvRelationshipDiagram";
    static defaultOption: RelationshipDiagramSeriesOption;
    /**
     * Prevent from auto set z, zlevel, z2 by the framework.
     */
    preventAutoZ: boolean;
    maxDepth: number;
    treesLength: number;
    groupNodeArray: GroupNodeArray;
    treeMaxX: number[];
    treeMaxY: number[];
    layoutInfo: BoundingRect;
    trees: TreeType<RelationshipDiagramSeriesModelClazz>[];
    getInitialData(this: RelationshipDiagramSeriesModelClazz, option: RelationshipDiagramSeriesOption): SeriesData;
    createRelationTree(root: RelationshipDiagramSeriesNodeItemOption, leavesModel: Model<TreeSeriesLeavesOption>): Tree<this, any>;
}
export {};
