import { Ref } from 'vue';
type UseDragOptionsBase = {
    /** DataTransfer MIME type used by setDragData/getDragData. */
    dataType?: string;
};
type UseDragOptionsWithItems<TItem> = UseDragOptionsBase & {
    /** Optional sortable item model. When provided, `onDrop` reorders it. */
    items: Ref<TItem[]>;
    /** Returns the stable drag ID for an item in `items`. */
    getItemId: (item: TItem) => string;
};
type UseDragOptionsWithoutItems = UseDragOptionsBase & {
    /** Disallow sortable item state unless `getItemId` is also supplied. */
    items?: never;
    /** Disallow item ID resolution without sortable item state. */
    getItemId?: never;
};
export type UseDragOptions<TItem = unknown> = UseDragOptionsWithItems<TItem> | UseDragOptionsWithoutItems;
export type DragGhostOptions = {
    /** Width of the generated drag preview in pixels. */
    width: number;
    /** Height of the generated drag preview in pixels. */
    height: number;
    /** Classes applied to the generated preview element. */
    className?: string;
    /** Horizontal cursor offset inside the preview. */
    offsetX?: number;
    /** Vertical cursor offset inside the preview. */
    offsetY?: number;
};
export declare function reorderItems<T>(items: T[], draggedItem: T, targetItem: T): T[];
export declare function setDragData(event: DragEvent, value: string, dataType?: string): void;
export declare function getDragData(event: DragEvent, dataType?: string): string | undefined;
export declare function setDragGhost(event: DragEvent, options: DragGhostOptions): (() => void) | undefined;
export declare function useDrag<TItem = unknown>(options?: UseDragOptions<TItem>): {
    activeItemId: Ref<string | undefined, string | undefined>;
    activeItem: import('vue').ComputedRef<TItem | undefined>;
    draggedItemId: Ref<string | undefined, string | undefined>;
    draggedItem: import('vue').ComputedRef<TItem | undefined>;
    originalItems: Ref<TItem[] | undefined, TItem[] | undefined>;
    reorderItems: typeof reorderItems;
    setDragData: (event: DragEvent, value: string) => void;
    getDragData: (event: DragEvent) => string | undefined;
    setDragGhost: (event: DragEvent, ghostOptions: DragGhostOptions) => (() => void) | undefined;
    cleanupDragGhost: () => void;
    startDrag: (event: DragEvent, itemId: string, ghostOptions?: DragGhostOptions) => void;
    dragOver: (event: DragEvent, itemId: string) => void;
    getDropData: (event: DragEvent) => string | undefined;
    onDrop: (event: DragEvent, targetItemId: string) => void;
    resetDragState: () => void;
};
export {};
