import { PointRange } from './point-range';
import * as Point from './point';
import * as Matrix from './matrix';
/** Selection from a spreadsheet */
export declare abstract class Selection {
    /** Get concrete range of the selection in the given data */
    abstract toRange(data: Matrix.Matrix<unknown>): PointRange | null;
    /** Normalize the selection according to the given data */
    abstract normalizeTo(data: Matrix.Matrix<unknown>): this;
    /** Determines whether the given row is entirely selected in given selection */
    abstract hasEntireRow(row: number): boolean;
    /** Determines whether the given column is entirely selected in given selection */
    abstract hasEntireColumn(column: number): boolean;
    /** Get the number of selected points according to given data */
    abstract size(data: Matrix.Matrix<unknown>): number;
    /** Determines whether the given point is within the selection */
    abstract has(data: Matrix.Matrix<unknown>, point: Point.Point): boolean;
    /** Determines whether the given selection is equal to this selection */
    abstract equals(selection: Selection): boolean;
}
/** Selection of no cells */
export declare class EmptySelection extends Selection {
    toRange(data: Matrix.Matrix<unknown>): PointRange | null;
    normalizeTo(_: Matrix.Matrix<unknown>): this;
    hasEntireRow(): boolean;
    hasEntireColumn(): boolean;
    size(): number;
    has(): boolean;
    equals(selection: Selection): boolean;
}
/** Selection of a range of cells */
export declare class RangeSelection extends Selection {
    range: PointRange;
    constructor(range: PointRange);
    toRange(_: Matrix.Matrix<unknown>): PointRange | null;
    normalizeTo(data: Matrix.Matrix<unknown>): this;
    hasEntireRow(): boolean;
    hasEntireColumn(): boolean;
    size(data: Matrix.Matrix<unknown>): number;
    has(data: Matrix.Matrix<unknown>, point: Point.Point): boolean;
    equals(selection: Selection): boolean;
}
/** Selection of an entire part of the spreadsheet */
export declare abstract class EntireSelection extends Selection {
}
/** Selection of the entire worksheet */
export declare class EntireWorksheetSelection extends EntireSelection {
    toRange(data: Matrix.Matrix<unknown>): PointRange;
    normalizeTo(): this;
    hasEntireColumn(): boolean;
    hasEntireRow(): boolean;
    size(data: Matrix.Matrix<unknown>): number;
    has(): boolean;
    equals(selection: Selection): boolean;
}
/** Selection of an entire axis in the spreadsheet */
export declare abstract class EntireAxisSelection extends EntireSelection {
    /** Selection start index, integer */
    readonly start: number;
    /** Selection end index, integer */
    readonly end: number;
    /**
     * @param start - row index where the selection starts, integer
     * @param end - row index where the selection ends, integer
     * @throws {@link InvalidIndexError}
     */
    constructor(start: number, end: number);
    equals(selection: Selection): boolean;
}
/** Selection of entire rows in the spreadsheet */
export declare class EntireRowsSelection extends EntireAxisSelection {
    toRange(data: Matrix.Matrix<unknown>): PointRange;
    normalizeTo(data: Matrix.Matrix<unknown>): this;
    hasEntireRow(row: number): boolean;
    hasEntireColumn(): boolean;
    size(data: Matrix.Matrix<unknown>): number;
    has(_: Matrix.Matrix<unknown>, point: Point.Point): boolean;
}
/** Selection of entire columns in the spreadsheet */
export declare class EntireColumnsSelection extends EntireAxisSelection {
    toRange(data: Matrix.Matrix<unknown>): PointRange;
    normalizeTo(data: Matrix.Matrix<unknown>): this;
    hasEntireRow(): boolean;
    hasEntireColumn(column: number): boolean;
    size(data: Matrix.Matrix<unknown>): number;
    has(_: Matrix.Matrix<unknown>, point: Point.Point): boolean;
}
/** Get the point range of given matrix */
export declare function getMatrixRange(data: Matrix.Matrix<unknown>): PointRange;
/** Determines whether the given value is a valid index */
export declare function isIndex(value: number): boolean;
/** Error thrown when passing a non-index value where an index value is expected */
export declare class InvalidIndexError extends Error {
    constructor(name: string);
}
