import PositionType from '../PositionType';
import SizeType from '../SizeType';
import ChildrenSorterStrategy from './ChildrenSorterStrategy';
type NodeKey = 'order' | 'position' | 'size' | 'freeDisplacement' | 'shrink';
declare class Node {
    private _id;
    _parent: Node | null;
    private _sorter;
    private _properties;
    _children: Node[];
    _branchHeight: number;
    _heightChanged: boolean;
    constructor(id: number, size: SizeType, position: PositionType, sorter: ChildrenSorterStrategy);
    getId(): number;
    hasFreeDisplacementChanged(): boolean;
    setShrunken(value: boolean): void;
    areChildrenShrunken(): boolean;
    setOrder(order: number): void;
    resetPositionState(): void;
    resetOrderState(): void;
    resetFreeState(): void;
    getOrder(): number;
    hasOrderChanged(): boolean;
    hasPositionChanged(): boolean;
    hasSizeChanged(): boolean;
    getPosition(): PositionType;
    setSize(size: SizeType): void;
    getSize(): SizeType;
    setFreeDisplacement(displacement: PositionType): void;
    getFreeDisplacement(): PositionType;
    setPosition(position: PositionType): void;
    private setProperty;
    private getProperty;
    isPropertyChanged(key: NodeKey): boolean;
    getSorter(): ChildrenSorterStrategy;
    /** @return {String} returns id, order, position, size and shrink information */
    toString(): string;
}
export default Node;
