import { BasePlugin } from '../base.plugin';
import { ColumnOrderHandler } from './order-column.handler';
import type { ColumnPropProp, ColumnRegular, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders, DimensionColPin } from "../../types/index";
export declare const COLUMN_DRAG_MOVE_EVENT = "columndragmousemove";
export declare const COLUMN_DRAG_END_EVENT = "columndragend";
export declare const BEFORE_COLUMN_DRAG_END_EVENT = "beforecolumndragend";
export declare const COLUMN_DRAG_START_EVENT = "columndragstart";
export type DragStartEventDetails = {
    event: MouseEvent;
    data: ColumnPropProp;
};
export type ColumnDragStartEventData = ColumnPropProp;
export type StaticData = {
    startPos: number;
    startItem: PositionItem;
    pin?: DimensionColPin;
    dataEl: HTMLElement;
    scrollEl: Element;
    gridEl: HTMLElement;
    cols: DimensionSettingsState;
};
type LocalSubscriptions = Record<string, LocalSubscription>;
type LocalSubscription = {
    target: Element | Document;
    callback(...params: any[]): void;
};
export type ColumnDragEventData = {
    /**
     * Reordered columns for the affected column viewport.
     */
    columns: ColumnRegular[];
    elRect: DOMRect;
    gridRect: DOMRect;
    /**
     * Physical column indexes in their current visual order.
     */
    order: number[];
    scrollOffset: number;
    type: DimensionCols;
};
export type BeforeColumnDragEndEventData = StaticData & {
    startPosition: PositionItem;
    newPosition: PositionItem;
    newItem?: ColumnRegular;
};
declare global {
    interface HTMLRevoGridElementEventMap {
        [COLUMN_DRAG_START_EVENT]: ColumnDragStartEventData;
        [COLUMN_DRAG_MOVE_EVENT]: MouseEvent;
        [BEFORE_COLUMN_DRAG_END_EVENT]: BeforeColumnDragEndEventData;
        [COLUMN_DRAG_END_EVENT]: ColumnDragEventData;
    }
}
export declare class ColumnMovePlugin extends BasePlugin {
    protected moveFunc: import("lodash").DebouncedFunc<(e: MouseEvent) => void>;
    protected staticDragData: StaticData | null;
    protected dragData: ColumnDragEventData | null;
    readonly orderUi: ColumnOrderHandler;
    readonly localSubscriptions: LocalSubscriptions;
    constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders);
    dragStart({ event, data }: DragStartEventDetails): void;
    doMove(e: MouseEvent): void;
    move(e: MouseEvent): void;
    onMouseOut(_: MouseEvent): void;
    onMouseUp(e: MouseEvent): void;
    protected clearLocalSubscriptions(): void;
    clearOrder(): void;
    /**
     * Clearing subscription
     */
    clearSubscriptions(): void;
    protected getData({ gridEl, dataEl, pin }: StaticData, order: number[], source?: ColumnRegular[]): ColumnDragEventData;
    protected getDimension(type: MultiDimensionType): DimensionSettingsState;
}
export declare function getLeftRelative(absoluteX: number, gridPos: number, offset: number): number;
export {};
