import { NestedTableKeyedItem, NestedTableNestedModeState } from '../../state';
import { NestedTableNodeState } from '../../state/NestedTableState/NestedTableNodeState';
import { DragAndDropState, IndexedItem } from '../DragAndDrop';
import { ActionMove, CollectionState, ComputedQuery, FiltersMap } from '@wix/bex-core';
export interface NestedTableDragAndDropStateParams<C extends string> {
    readonly nestedState: NestedTableNestedModeState<C>;
}
export interface NestedDragEndEvent<C extends string, T, F extends FiltersMap> {
    from: IndexedItem<T>;
    after: IndexedItem<{}> | null;
    over: IndexedItem<{}>;
    parentId: string | undefined;
    filters: ComputedQuery<F>['filters'];
    node: NestedTableNodeState<C, T, F>;
}
export interface DragAndDropDisabledParams<T> {
    from: IndexedItem<T>;
    over: IndexedItem<{}>;
}
export declare class NestedTableDragAndDropState<C extends string> {
    readonly tableState: import("../../state").TableState<any, any>;
    readonly dnd: DragAndDropState<any, any>;
    readonly nestedState: NestedTableNestedModeState<C>;
    _isExpandedBeforeDrag?: boolean;
    constructor(params: NestedTableDragAndDropStateParams<C>);
    _onCancel: () => Promise<boolean | null>;
    private _createNewParentData;
    _createDragEndEvent({ setNewParent, }?: {
        setNewParent?: boolean;
    }): ActionMove<any> | null;
    _createSimpleDragEndEvent<T, F extends FiltersMap>(dragEndEvent: ActionMove<T>, node: NestedTableNodeState<C, T, F>): {
        parentId: string | undefined;
        node: NestedTableNodeState<C, T, F>;
        from: IndexedItem<any>;
        after: IndexedItem<any> | null;
        over: IndexedItem<any>;
        filters: Partial<{
            [x: string]: unknown;
        }>;
    };
    _move(): void;
    getStickyColumnsCount({ stickyColumns, horizontalScroll, }: {
        stickyColumns: number;
        showSelection?: boolean;
        horizontalScroll?: boolean;
    }): number;
    get dragEventItems(): {
        overItem: NestedTableKeyedItem<C, any, any>;
        activeItem: NestedTableKeyedItem<C, any, any>;
    } | null;
    get dragEventDirectionItems(): {
        nextItem: NestedTableKeyedItem<C, any, any>;
        previousItem: NestedTableKeyedItem<C, any, any>;
        overItem: NestedTableKeyedItem<C, any, any>;
        activeItem: NestedTableKeyedItem<C, any, any>;
    } | null;
    get dragEventDepth(): {
        depth: number;
        nextItem: NestedTableKeyedItem<C, any, any>;
        previousItem: NestedTableKeyedItem<C, any, any>;
        activeItem: NestedTableKeyedItem<C, any, any>;
        overItem: NestedTableKeyedItem<C, any, any>;
    } | null;
    get activeNode(): NestedTableNodeState<C, unknown, FiltersMap> | null | undefined;
    get dragEventParentAndAfter(): {
        node?: undefined;
        after?: undefined;
        activeItem?: undefined;
        overItem?: undefined;
    } | {
        node: NestedTableNodeState<C, any, any>;
        after: NestedTableKeyedItem<C, any, any>;
        activeItem: NestedTableKeyedItem<C, any, any>;
        overItem: NestedTableKeyedItem<C, any, any>;
    } | {
        node: NestedTableNodeState<C, any, any> | undefined;
        after: null;
        activeItem: NestedTableKeyedItem<C, any, any>;
        overItem: NestedTableKeyedItem<C, any, any>;
    } | {
        activeItem: NestedTableKeyedItem<C, any, any>;
        overItem: NestedTableKeyedItem<C, any, any>;
        node?: undefined;
        after?: undefined;
    };
    get reachedMaxDepth(): boolean;
    get dragAndDropDisabled(): {
        errorMessage: string;
    } | null | undefined;
    get isSameEntityAsOtherLevels(): boolean | undefined;
    initCollection<T, F extends FiltersMap>(collection: CollectionState<T, F>): import("mobx").IReactionDisposer;
    init(): () => void;
}
//# sourceMappingURL=NestedTableDragAndDropState.d.ts.map