import { ShadowlessElement } from '@blockeditor/lit';
import type { ReactiveController } from 'lit';
import type { Ref } from 'lit/directives/ref.js';
import type { CellFocus, MultiSelection, TableViewSelection } from '../../../_common/types.js';
import type { DatabaseCellContainer } from '../components/cell-container.js';
import type { DataViewTable } from '../table-view.js';
export declare class TableSelectionController implements ReactiveController {
    host: DataViewTable;
    __selectionElement: SelectionElement;
    private get focusSelectionElement();
    private get areaSelectionElement();
    constructor(host: DataViewTable);
    private _tableViewSelection?;
    get tableContainer(): Element;
    get viewData(): import("../table-view-manager.js").DataViewTableManager;
    hostConnected(): void;
    private handleSelectionChange;
    private handleDragEvent;
    isValidSelection(selection?: TableViewSelection): boolean;
    private clearSelection;
    get selection(): TableViewSelection | undefined;
    set selection(data: Omit<TableViewSelection, 'viewId' | 'type'> | undefined);
    cellPosition(groupKey: string | undefined, left: number, top: number): (x1: number, x2: number, y1: number, y2: number) => {
        row: MultiSelection;
        column: MultiSelection;
    };
    startDrag(evt: PointerEvent, cell: DatabaseCellContainer): void;
    focusTo(position: 'left' | 'right' | 'up' | 'down'): void;
    selectRange(selection: TableViewSelection, row: MultiSelection, column: MultiSelection): void;
    getCellContainer(groupKey: string | undefined, rowIndex: number, columnIndex: number): DatabaseCellContainer | undefined;
    rows(groupKey: string | undefined): NodeListOf<import("../components/row.js").TableRow>;
    selectionStyleUpdateTask: number;
    updateSelection(tableSelection?: TableViewSelection): void;
    updateSelectionStyle(groupKey: string | undefined, rowSelection?: MultiSelection, columnSelection?: MultiSelection): void;
    updateFocusSelectionStyle(groupKey: string | undefined, focus?: CellFocus, isRowSelection?: boolean, isEditing?: boolean): void;
    getRect(groupKey: string | undefined, top: number, bottom: number, left: number, right: number): {
        top: number;
        left: number;
        width: number;
        height: number;
        scale: number;
    };
    selectRow(index: number): void;
    toggleRow(index: number): void;
    focusFirstCell(): void;
    private scrollToFocus;
    insertRowBefore(rowId: string): void;
    insertRowAfter(groupKey: string | undefined, rowId: string): void;
    private get view();
    deleteRow(rowId: string): void;
    private checkSelection;
    isRowSelection(groupKey: string | undefined, rowIndex: number): boolean;
}
declare class SelectionElement extends ShadowlessElement {
    static styles: import("lit").CSSResult;
    focusRef: Ref<HTMLDivElement>;
    selectionRef: Ref<HTMLDivElement>;
    render(): import("lit").TemplateResult<1>;
}
export {};
//# sourceMappingURL=selection.d.ts.map