import { SelectRangeType } from '../../../../../../types/src/table';
import { default as Cell } from '../../core/cell/Cell';
import { default as Column } from '../../core/column/Column';
import { default as Module } from '../../core/Module';
import { default as Row } from '../../core/row/Row';
import { default as Tabulator } from '../../core/Tabulator';
import { default as Range } from './Range';

export default class SelectRange extends Module {
    static moduleName: string;
    static moduleInitOrder: number;
    static moduleExtensions: {
        clipboard: {
            pasteActions: {
                range: (data: any[]) => any[];
            };
            pasteParsers: {
                range: (clipboard: string) => false | any[];
            };
        };
        export: {
            columnLookups: {
                range: (this: Tabulator) => any[];
            };
            rowLookups: {
                range: () => any[];
            };
        };
        keybindings: {
            actions: Record<string, (this: SelectRange, e: KeyboardEvent) => void>;
            bindings: {
                rangeExpandDown: string;
                rangeExpandJumpDown: string[];
                rangeExpandJumpLeft: string[];
                rangeExpandJumpRight: string[];
                rangeExpandJumpUp: string[];
                rangeExpandLeft: string;
                rangeExpandRight: string;
                rangeExpandUp: string;
                rangeJumpDown: string[];
                rangeJumpLeft: string[];
                rangeJumpRight: string[];
                rangeJumpUp: string[];
            };
        };
    };
    selecting: SelectRangeType;
    mousedown: boolean;
    ranges: Range[];
    overlay: HTMLElement | null;
    rowHeader: Column | null;
    layoutChangeTimeout: ReturnType<typeof setTimeout> | null;
    columnSelection: boolean;
    rowSelection: boolean;
    maxRanges: number;
    activeRange: Range | false;
    blockKeydown: boolean;
    keyDownEvent: (e: KeyboardEvent) => void;
    mouseUpEvent: (e: MouseEvent) => void;
    rangeContainer: HTMLElement | null;
    activeRangeCellElement: HTMLElement | null;
    hoverRangeCellElement: HTMLElement | null;
    hoveredCell: Cell | null;
    constructor(table: Tabulator);
    initialize(): void;
    initializeTable(): void;
    initializeWatchers(): void;
    initializeColumn(column: Column): void;
    updateHeaderColumn(): void;
    getRanges(): import('../../../../../../atoms/src/components/table/table.ts').RangeComponent[];
    getRangesData(): any[][];
    addRangeFromComponent(start: any, end: any): Range;
    cellGetRanges(cell: any): import('../../../../../../atoms/src/components/table/table.ts').RangeComponent[];
    rowGetRanges(row: any): import('../../../../../../atoms/src/components/table/table.ts').RangeComponent[];
    colGetRanges(col: any): import('../../../../../../atoms/src/components/table/table.ts').RangeComponent[];
    _handleMouseUp(): void;
    _handleKeyDown(e: KeyboardEvent): void;
    initializeFocus(cell: Cell): void;
    restoreFocus(): boolean;
    handleColumnResized(column: Column): void;
    handleColumnMoving(_event: any, column: Column): void;
    handleColumnMoved(from: Column): void;
    handleColumnMouseDown(event: MouseEvent, column: Column): void;
    handleColumnMouseMove(e: MouseEvent, column: Column): void;
    renderCell(cell: any): void;
    handleCellMouseDown(event: MouseEvent, cell: any): void;
    handleCellMouseMove(e: MouseEvent, cell: any): void;
    handleCellMouseOut(): void;
    handleCellClick(_e: MouseEvent, cell: any): void;
    handleEditingCell(cell: any): void;
    finishEditingCell(): void;
    keyNavigate(dir: string, e: KeyboardEvent): void;
    keyNavigateRange(e: KeyboardEvent, dir: string, jump: boolean, expand: boolean): void;
    navigate(jump: boolean, expand: boolean, dir: string): boolean | undefined;
    rangeRemoved(removed: Range): void;
    findJumpRow(column: Column, rows: Row[], reverse: any, emptyStart: boolean, emptySide: boolean): any;
    findJumpCol(row: any, columns: any, reverse: any, emptyStart: boolean, emptySide: boolean): any;
    findJumpItem(emptyStart: boolean, emptySide: boolean, items: any, valueResolver: any): any;
    findJumpCellLeft(rowPos: number, colPos: number): number;
    findJumpCellRight(rowPos: number, colPos: number): number;
    findJumpCellUp(rowPos: number, colPos: number): number;
    findJumpCellDown(rowPos: number, colPos: number): number;
    newSelection(event: any, element: any): void;
    autoScroll(range: Range, row: any, column: any): void;
    layoutChange(): void;
    redraw(force: any): void;
    layoutElement(visibleRows?: any): void;
    layoutRow(row: any): void;
    layoutColumn(column: any): void;
    layoutRanges(): void;
    clearActiveRangeCellElement(): void;
    clearHoverRangeCellElement(): void;
    layoutHoverRangeCellElement(cell?: Cell): void;
    getCell(rowIdx: number, colIdx: number): import('../../../../../../types/src/table').ICell | null;
    getActiveCell(): import('../../../../../../types/src/table').ICell | null;
    getRowByRangePos(pos: number): import('../../../../../../types/src/table').IRow;
    getColumnByRangePos(pos: number): import('../../../../../../types/src/table').IColumn;
    getTableRows(): import('../../../../../../types/src/table').IRow[];
    getTableColumns(): import('../../../../../../types/src/table').IColumn[];
    addRange(start: any, end: any): Range;
    resetRanges(): Range;
    tableDestroyed(): void;
    selectedRows(component: boolean): any[];
    selectedColumns(component?: boolean): any[];
    getRowHeaderWidth(): number;
    isEmpty(value: any): boolean;
}
