export interface UseDragAndDropParams {
    onAddFiles: (files: File[]) => void;
    /** When true, listeners are not attached (e.g. mobile, channel disabled). */
    disabled?: boolean;
    /**
     * Per-event filter. Return `false` to skip this drop entirely (no preventDefault,
     * no onAddFiles). Default: accept every file drop. Used to coordinate multiple
     * instances on the same page so each one only consumes drops in its own pane —
     * e.g. main channel vs. thread.
     */
    shouldAccept?: (event: DragEvent) => boolean;
}
/**
 * Window-level drag-and-drop for file uploads. While enabled, the entire
 * viewport accepts file drops — the caller does not need to render a visual
 * affordance.
 *
 * When disabled, no listeners are attached, so the browser's default drop
 * behavior (open the file) is preserved.
 *
 * When multiple instances are mounted concurrently (e.g. main channel composer
 * + thread composer on desktop), each one passes a `shouldAccept` predicate so
 * exactly one consumes any given drop based on its position in the DOM.
 */
export declare const useDragAndDrop: ({ onAddFiles, disabled, shouldAccept }: UseDragAndDropParams) => void;
