import type SeriesModelType from 'echarts/types/src/model/Series';
import SeriesModel from 'echarts/lib/model/Series';
import type { default as TreeType, TreeNode } from 'echarts/types/src/data/Tree';
import type SeriesData from 'echarts/types/src/data/SeriesData';
import type { SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin } from 'echarts/types/src/util/types';
import type { LayoutRect } from 'echarts/types/src/util/layout';
import type { GroupProps, PathProps, PathState, TextProps } from 'zrender';
import { NODE_TYPE, STATE } from './twoWayTreeLayout';
type State = {
    [key in typeof STATE[keyof typeof STATE]]: PathState;
};
export type RootNodeRenderOption = {
    /** 项目（节点）的渲染配置 */
    item?: GroupProps & {
        /** 子元素节点 */
        children?: {
            [name: string]: PathProps & {
                type?: string;
            } & {
                states?: State;
            };
            /** 主文本元素 */
            text?: TextProps & {
                states?: State;
            };
            /** 副文本元素 */
            attachment?: TextProps & {
                states?: State;
            };
        };
    };
    /** 线（边）的渲染配置 */
    line?: {
        /** 子元素节点 */
        children?: {
            [name: string]: PathProps & {
                type?: string;
            } & {
                states?: State;
            };
            line?: PathProps & {
                states?: State;
            };
        };
    };
};
export type NormalNodeRenderOption = RootNodeRenderOption;
export type GroupNodeRenderOption = {
    /** 项目（节点）的渲染配置 */
    item?: GroupProps & {
        /** 子元素节点 */
        children?: {
            [name: string]: PathProps & {
                type?: string;
            } & {
                states?: State;
            };
            /** 标签文本元素 */
            labelText?: TextProps & {
                states?: State;
            };
        };
    };
    /** 线（边）的渲染配置 */
    line?: {
        /** 子元素节点 */
        children?: {
            [name: string]: PathProps & {
                type?: string;
            } & {
                states?: State;
            };
            line?: PathProps & {
                states?: State;
            };
        };
    };
};
type RenderOption = {
    [NODE_TYPE.ROOT]?: RootNodeRenderOption;
    [NODE_TYPE.NORMAL]?: NormalNodeRenderOption;
    [NODE_TYPE.GROUP]?: GroupNodeRenderOption;
};
export interface TwoWayTreeSeriesNodeItemOption {
    type: typeof NODE_TYPE[keyof typeof NODE_TYPE];
    /** 节点的位置（左子树，还是右子树） */
    position?: 'left' | 'right';
    /** 节点的名称，用来标识每一个节点 */
    name?: string;
    /** 节点的值，在 tooltip 中显示 */
    value?: string;
    /** 是否折叠起来（只对 type = 'group' 的节点有效） */
    collapsed?: boolean;
    /** v0.0.23+ 是否默认选中（只对 type = 'root' | 'normal' 的节点有效），且只在该节点的父节点默认展开时有效 */
    selected?: boolean;
    /** 渲染配置 */
    render: RootNodeRenderOption | NormalNodeRenderOption | GroupNodeRenderOption;
    /** 孩子节点 */
    children?: TwoWayTreeSeriesNodeItemOption[];
}
export interface TwoWayTreeSeriesOption extends SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin {
    type: 'dvTwoWayTree';
    data: TwoWayTreeSeriesNodeItemOption;
    /** 画布的背景色 */
    backgroundColor?: string;
    /** 是否支持折叠和展开 */
    expandAndCollapse?: boolean;
    /** 初始展开的树深度（根节点的深度可认为为 0） */
    initialTreeDepth?: number;
    /** 选中时高亮祖先节点 */
    selectedHighlightAncestor?: boolean;
    /** v0.2.2+ 点击 group 类型节点之后清除选中状态 */
    clearSelectedAfterClickGroupNode?: boolean;
    /** v0.2.2+ 点击交互后聚焦的画布视区中心位置 */
    viewCenterAfterClick?: [number, number] | ((arg: {
        node: TreeNode;
        data: TwoWayTreeSeriesNodeItemOption;
        isExpand?: boolean;
        isSelected?: boolean;
    }) => [number, number]);
    /** 节点的渲染配置 */
    render?: RenderOption;
}
export type TwoWayTreeSeriesModelClazz = TwoWayTreeSeriesModel & SeriesModelType<TwoWayTreeSeriesOption>;
/**
 * 设置为初始状态
 */
export declare function setToInitialState(seriesModel: TwoWayTreeSeriesModelClazz): void;
export default class TwoWayTreeSeriesModel extends SeriesModel<TwoWayTreeSeriesOption> {
    static readonly type = "series.dvTwoWayTree";
    readonly type = "series.dvTwoWayTree";
    static defaultOption: TwoWayTreeSeriesOption;
    /**
     * Prevent from auto set z, zlevel, z2 by the framework.
     */
    preventAutoZ: boolean;
    layoutInfo: LayoutRect;
    leftTree: TreeType<TwoWayTreeSeriesModelClazz>;
    rightTree: TreeType<TwoWayTreeSeriesModelClazz>;
    /**
     * Init a tree data structure from data in option series
     */
    getInitialData(this: TwoWayTreeSeriesModelClazz, option: TwoWayTreeSeriesOption): SeriesData;
}
export {};
