import { BBox } from 'rbush';
import { CellRangeCoords, CartesianDirection } from "@sheetxl/common";
/**
 * A value is not required
 */
export interface RangeCoordsRTreeNode<V = any> extends CellRangeCoords {
    value?: V;
}
export type RangeVisitorResults<V = any> = {
    update?: RangeCoordsRTreeNode<V>;
    delete?: boolean;
    break?: boolean;
} | void;
export type RangeVisitor<V = any> = (range: RangeCoordsRTreeNode<V>) => RangeVisitorResults<V>;
/** handler for shifting ranges */
export type RangeShiftProcessor<T> = (after: RangeCoordsRTreeNode<T>, before: RangeCoordsRTreeNode<T>, intersect: CellRangeCoords, isPartial: boolean, isColShift: boolean, shiftAmount: number) => RangeCoordsRTreeNode<T> | void;
/**
 * A sharable RTree that used CellRangeCoords
 */
export default class RangeCoordsRTree<V = any> {
    private _shared;
    private _isolated;
    private _defaultEntries;
    constructor(defaultEntries?: number);
    /**
     * Visits all ranges with options mutations from visitor.
     */
    visitRanges(range: CellRangeCoords, visitor: RangeVisitor<V>, sort?: CartesianDirection): void;
    isEmpty(): boolean;
    size(): number;
    /**
     * Returns a set of ranges that intersect with the given range.
     * @param range The range to intersect
     * @param enclosed
     * @returns
     */
    search(range: CellRangeCoords, enclosed?: boolean): RangeCoordsRTreeNode<V>[];
    all(): RangeCoordsRTreeNode<V>[];
    collides(box: BBox): boolean;
    toJSON(): any;
    clone(): RangeCoordsRTree<V>;
    private _copyTree;
    private _getReadTree;
    /**
     * items is a special performance optimization to allow a single bulk load
     */
    private _getWritableTree;
    remove(item: RangeCoordsRTreeNode<V>, equals?: (a: RangeCoordsRTreeNode<V>, b: RangeCoordsRTreeNode<V>) => boolean): RangeCoordsRTree<V>;
    insert(item: RangeCoordsRTreeNode<V>): RangeCoordsRTree<V>;
    load(items: ReadonlyArray<RangeCoordsRTreeNode<V>>): RangeCoordsRTree<V>;
    clear(): RangeCoordsRTree<V>;
    fromJSON(data: any): RangeCoordsRTree<V>;
}
export { RangeCoordsRTree };
//# sourceMappingURL=RangeCoordsRTree.d.ts.map