import Model from '../model/Model.js'; 
 | 
import SeriesData from './SeriesData.js'; 
 | 
import { DimensionLoose, ParsedValue, OptionDataValue, OptionDataItemObject } from '../util/types.js'; 
 | 
import { Dictionary } from 'zrender/lib/core/types.js'; 
 | 
declare type TreeTraverseOrder = 'preorder' | 'postorder'; 
 | 
declare type TreeTraverseCallback<Ctx> = (this: Ctx, node: TreeNode) => boolean | void; 
 | 
declare type TreeTraverseOption = { 
 | 
    order?: TreeTraverseOrder; 
 | 
    attr?: 'children' | 'viewChildren'; 
 | 
}; 
 | 
interface TreeNodeOption extends Pick<OptionDataItemObject<OptionDataValue>, 'name' | 'value'> { 
 | 
    children?: TreeNodeOption[]; 
 | 
} 
 | 
export declare class TreeNode { 
 | 
    name: string; 
 | 
    depth: number; 
 | 
    height: number; 
 | 
    parentNode: TreeNode; 
 | 
    /** 
 | 
     * Reference to list item. 
 | 
     * Do not persistent dataIndex outside, 
 | 
     * besause it may be changed by list. 
 | 
     * If dataIndex -1, 
 | 
     * this node is logical deleted (filtered) in list. 
 | 
     */ 
 | 
    dataIndex: number; 
 | 
    children: TreeNode[]; 
 | 
    viewChildren: TreeNode[]; 
 | 
    isExpand: boolean; 
 | 
    readonly hostTree: Tree<Model>; 
 | 
    constructor(name: string, hostTree: Tree<Model>); 
 | 
    /** 
 | 
     * The node is removed. 
 | 
     */ 
 | 
    isRemoved(): boolean; 
 | 
    /** 
 | 
     * Travel this subtree (include this node). 
 | 
     * Usage: 
 | 
     *    node.eachNode(function () { ... }); // preorder 
 | 
     *    node.eachNode('preorder', function () { ... }); // preorder 
 | 
     *    node.eachNode('postorder', function () { ... }); // postorder 
 | 
     *    node.eachNode( 
 | 
     *        {order: 'postorder', attr: 'viewChildren'}, 
 | 
     *        function () { ... } 
 | 
     *    ); // postorder 
 | 
     * 
 | 
     * @param options If string, means order. 
 | 
     * @param options.order 'preorder' or 'postorder' 
 | 
     * @param options.attr 'children' or 'viewChildren' 
 | 
     * @param cb If in preorder and return false, 
 | 
     *                      its subtree will not be visited. 
 | 
     */ 
 | 
    eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    /** 
 | 
     * Update depth and height of this subtree. 
 | 
     */ 
 | 
    updateDepthAndHeight(depth: number): void; 
 | 
    getNodeById(id: string): TreeNode; 
 | 
    contains(node: TreeNode): boolean; 
 | 
    /** 
 | 
     * @param includeSelf Default false. 
 | 
     * @return order: [root, child, grandchild, ...] 
 | 
     */ 
 | 
    getAncestors(includeSelf?: boolean): TreeNode[]; 
 | 
    getAncestorsIndices(): number[]; 
 | 
    getDescendantIndices(): number[]; 
 | 
    getValue(dimension?: DimensionLoose): ParsedValue; 
 | 
    setLayout(layout: any, merge?: boolean): void; 
 | 
    /** 
 | 
     * @return {Object} layout 
 | 
     */ 
 | 
    getLayout(): any; 
 | 
    getModel<T = unknown>(): Model<T>; 
 | 
    getLevelModel(): Model; 
 | 
    /** 
 | 
     * @example 
 | 
     *  setItemVisual('color', color); 
 | 
     *  setItemVisual({ 
 | 
     *      'color': color 
 | 
     *  }); 
 | 
     */ 
 | 
    setVisual(key: string, value: any): void; 
 | 
    setVisual(obj: Dictionary<any>): void; 
 | 
    /** 
 | 
     * Get item visual 
 | 
     * FIXME: make return type better 
 | 
     */ 
 | 
    getVisual(key: string): unknown; 
 | 
    getRawIndex(): number; 
 | 
    getId(): string; 
 | 
    /** 
 | 
     * index in parent's children 
 | 
     */ 
 | 
    getChildIndex(): number; 
 | 
    /** 
 | 
     * if this is an ancestor of another node 
 | 
     * 
 | 
     * @param node another node 
 | 
     * @return if is ancestor 
 | 
     */ 
 | 
    isAncestorOf(node: TreeNode): boolean; 
 | 
    /** 
 | 
     * if this is an descendant of another node 
 | 
     * 
 | 
     * @param node another node 
 | 
     * @return if is descendant 
 | 
     */ 
 | 
    isDescendantOf(node: TreeNode): boolean; 
 | 
} 
 | 
declare class Tree<HostModel extends Model = Model, LevelOption = any> { 
 | 
    type: 'tree'; 
 | 
    root: TreeNode; 
 | 
    data: SeriesData; 
 | 
    hostModel: HostModel; 
 | 
    levelModels: Model<LevelOption>[]; 
 | 
    private _nodes; 
 | 
    constructor(hostModel: HostModel); 
 | 
    /** 
 | 
     * Travel this subtree (include this node). 
 | 
     * Usage: 
 | 
     *    node.eachNode(function () { ... }); // preorder 
 | 
     *    node.eachNode('preorder', function () { ... }); // preorder 
 | 
     *    node.eachNode('postorder', function () { ... }); // postorder 
 | 
     *    node.eachNode( 
 | 
     *        {order: 'postorder', attr: 'viewChildren'}, 
 | 
     *        function () { ... } 
 | 
     *    ); // postorder 
 | 
     * 
 | 
     * @param options If string, means order. 
 | 
     * @param options.order 'preorder' or 'postorder' 
 | 
     * @param options.attr 'children' or 'viewChildren' 
 | 
     * @param cb 
 | 
     * @param context 
 | 
     */ 
 | 
    eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void; 
 | 
    getNodeByDataIndex(dataIndex: number): TreeNode; 
 | 
    getNodeById(name: string): TreeNode; 
 | 
    /** 
 | 
     * Update item available by list, 
 | 
     * when list has been performed options like 'filterSelf' or 'map'. 
 | 
     */ 
 | 
    update(): void; 
 | 
    /** 
 | 
     * Clear all layouts 
 | 
     */ 
 | 
    clearLayouts(): void; 
 | 
    /** 
 | 
     * data node format: 
 | 
     * { 
 | 
     *     name: ... 
 | 
     *     value: ... 
 | 
     *     children: [ 
 | 
     *         { 
 | 
     *             name: ... 
 | 
     *             value: ... 
 | 
     *             children: ... 
 | 
     *         }, 
 | 
     *         ... 
 | 
     *     ] 
 | 
     * } 
 | 
     */ 
 | 
    static createTree<T extends TreeNodeOption, HostModel extends Model>(dataRoot: T, hostModel: HostModel, beforeLink?: (data: SeriesData) => void): Tree<HostModel, any>; 
 | 
} 
 | 
export default Tree; 
 |