import { PayloadAction } from "@reduxjs/toolkit";
import { NodeId } from "../../../data/types";
import { EditorNodeDragItem } from "../../../wysiwyg/types";
interface DropIndexBetween {
    type: "between";
    index: number;
    nodeId: NodeId;
}
interface DropIndexNewStack {
    type: "newStack";
    index: number;
    nodeId: NodeId;
    childId: NodeId;
    location: "before" | "after";
}
export type DropIndex = DropIndexBetween | DropIndexNewStack;
export interface DragState {
    dropIndex: DropIndex | null;
    dragMetadata: DraggingMetadata | null;
    gridLinesVisibleNodeId: NodeId | null;
}
interface DraggingMetadata {
    insertBehavior: EditorNodeDragItem["insertBehavior"];
}
export declare const dragAndDropSlice: import("@reduxjs/toolkit").Slice<DragState, {
    updateDropIndex: (state: import("immer/dist/internal").WritableDraft<DragState>, action: PayloadAction<{
        dropIndex: DropIndex | null;
    }>) => void;
    updateDragMetadata: (state: import("immer/dist/internal").WritableDraft<DragState>, action: PayloadAction<DraggingMetadata | null>) => void;
    updateGridLinesVisibleNodeIdRaw: (state: import("immer/dist/internal").WritableDraft<DragState>, action: PayloadAction<{
        nodeId: NodeId | null;
    }>) => void;
}, "dragAndDrop">;
export declare const updateDropIndex: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
    dropIndex: DropIndex | null;
}, "dragAndDrop/updateDropIndex">, updateDragMetadata: import("@reduxjs/toolkit").ActionCreatorWithPayload<DraggingMetadata | null, "dragAndDrop/updateDragMetadata">, updateGridLinesVisibleNodeIdRaw: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
    nodeId: NodeId | null;
}, "dragAndDrop/updateGridLinesVisibleNodeIdRaw">;
export declare const dragAndDropReducer: import("redux").Reducer<DragState>;
export {};
//# sourceMappingURL=drag-and-drop.d.ts.map