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 RowComponent } from '../../core/row/RowComponent';
import { default as Tabulator } from '../../core/Tabulator';
import { default as Group } from '../GroupRows/Group';

type SenderFunction = (this: MoveRows, fromRow: RowComponent | undefined, toRow: RowComponent | undefined, toTable: Tabulator) => void;
type ReceiverFunction = (this: MoveRows, fromRow: RowComponent | undefined, toRow: RowComponent | undefined, fromTable: Tabulator) => boolean;
export default class MoveRows extends Module {
    static readonly moduleName = "moveRow";
    static readonly senders: Record<string, SenderFunction>;
    static readonly receivers: Record<string, ReceiverFunction>;
    placeholderElement: HTMLElement;
    hoverElement: HTMLElement | false;
    checkTimeout: ReturnType<typeof setTimeout> | false;
    checkPeriod: number;
    moving: Row | false;
    toRow: Row | false;
    toRowAfter: boolean;
    hasHandle: boolean;
    startY: number;
    startX: number;
    tableRowDropEvent: ((e: Event) => void) | false;
    touchMove: boolean;
    connection: string | string[] | false;
    connectionSelectorsTables: string | string[] | false;
    connectionSelectorsElements: string | string[] | false;
    connectionElements: HTMLElement[];
    connections: Array<{
        element: HTMLElement;
        table: Tabulator;
    }>;
    connectedTable: Tabulator | false;
    connectedRow: Row | false;
    constructor(table: Tabulator);
    createPlaceholderElement(): HTMLElement;
    initialize(): void;
    initializeGroupHeader(group: Group): void;
    initializeRow(row: Row): void;
    initializeColumn(column: Column): void;
    initializeCell(cell: any): void;
    bindTouchEvents(row: Row, element: HTMLElement): void;
    _bindMouseMove(): void;
    _unbindMouseMove(): void;
    startMove(e: MouseEvent | TouchEvent, row: Row): void;
    setStartPosition(e: MouseEvent | TouchEvent, row: Row): void;
    endMove(e?: MouseEvent | TouchEvent): void;
    moveRow(row: Row | Group, after: boolean): void;
    moveHover(e: MouseEvent | TouchEvent): void;
    moveHoverTable(e: MouseEvent | TouchEvent): void;
    moveHoverConnections(e: MouseEvent | TouchEvent): void;
    elementRowDrop(e: Event, element: HTMLElement, row: Row | false): void;
    connectToTables(row: Row): void;
    disconnectFromTables(): void;
    connect(table: Tabulator, row: Row): boolean;
    disconnect(table: Tabulator): boolean;
    dropComplete(table: Tabulator, row: Row | false, success: boolean): void;
    tableRowDrop(e: Event, row: Row | Group | false): void;
    commsReceived(table: Tabulator, action: string, data: any): void;
}
export {};
