import { type ComponentPublicInstance } from 'vue';
import { type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';
export type InstructionType = Instruction['type'];
export interface DragSource {
    kind: string;
    id: string;
    data: Record<string | symbol, unknown>;
}
export interface RowDropEvent {
    source: DragSource;
    target: {
        kind: string;
        id: string;
    };
    instruction: InstructionType;
}
export interface ZoneDropEvent {
    source: DragSource;
    zoneId: string;
    data: Record<string, unknown>;
}
export interface RowConfig {
    kind: string;
    data?: Record<string, unknown>;
    canDrop?: (source: DragSource) => boolean;
    blockInstructions?: (source: DragSource) => InstructionType[];
    resolveInstruction?: (params: {
        input: {
            clientX: number;
            clientY: number;
        };
        element: Element;
        source: DragSource;
    }) => InstructionType | null;
    dragHandle?: (element: HTMLElement) => HTMLElement | null;
}
export interface ZoneConfig {
    data?: Record<string, unknown>;
    canDrop?: (source: DragSource) => boolean;
}
export interface UseTreeDndOptions {
    onRowDrop: (event: RowDropEvent) => void;
    onZoneDrop?: (event: ZoneDropEvent) => void;
}
type TemplateRefEl = Element | ComponentPublicInstance | null;
export declare function useTreeDnd(options: UseTreeDndOptions): {
    rowRef: (id: string, config: RowConfig) => (el: TemplateRefEl) => void;
    zoneRef: (id: string, config: ZoneConfig) => (el: TemplateRefEl) => void;
    instructionFor: (id: string) => InstructionType | null;
    isZoneActive: (id: string) => boolean;
};
export {};
