import * as d3 from 'd3';
import { ISvgParams } from './interfaces';
import { Tree } from './Tree';
import { TreeNode } from './TreeNode';
declare abstract class TreeLayout {
    tree: Tree;
    svgParams: ISvgParams;
    constructor(tree: Tree, svgParams: ISvgParams);
    abstract calcTree(scaling: boolean): void;
    abstract calcBranchPath(): TreeLayout;
    abstract labelPlace(id: number): string;
    abstract labelAnchor(id: number): string;
    calcLabelDims(): TreeLayout;
    /**
     * Helper function to render names
     *
     * @param {TreeNode} node
     * @param {d3.Selection<any, any, any, any>} svg
     * @param {boolean} [tmp=false]
     * @returns
     * @memberof TreeLayout
     */
    renderNames(node: TreeNode, svg: d3.Selection<any, any, any, any>, tmp?: boolean): d3.Selection<SVGTextElement, any, any, any>;
    /**
     * Helper function to update names
     *
     * @param {TreeNode} node
     * @param {d3.Selection<any, any, any, any>} svg
     * @param {boolean} [tmp=false]
     * @returns
     * @memberof TreeLayout
     */
    updateNames(node: TreeNode, label: d3.Selection<any, any, any, any>, duration?: number): void;
    /**
     * It gets the longest label. It skips labels marked to not show.
     *
     * @returns {number}
     * @memberof TreeLayout
     */
    protected getLongestLabel(): number;
}
export { TreeLayout };
