export interface DragDropState<T = unknown> {
    isDragging: boolean;
    draggedItem: T;
    sourceContainer: string;
    targetContainer: string | null;
    targetElement: HTMLElement | null;
    invalidDrop?: boolean;
}
export interface DragDropCallbacks<T = unknown> {
    onDragStart?: (state: DragDropState<T>) => void;
    onDragEnter?: (state: DragDropState<T>) => void;
    onDragLeave?: (state: DragDropState<T>) => void;
    onDragOver?: (state: DragDropState<T>) => void;
    onDrop?: (state: DragDropState<T>) => Promise<void> | void;
    onDragEnd?: (state: DragDropState<T>) => void;
}
export interface DragDropAttributes {
    draggingClass?: string;
    dragOverClass?: string;
}
export interface DragDropOptions<T = unknown> {
    dragData?: T;
    container: string;
    disabled?: boolean;
    callbacks?: DragDropCallbacks<T>;
    attributes?: DragDropAttributes;
}
