import * as React from "react"; import type { Dir, FileTree, FileTreeNode } from "./file-tree"; import type { Subject } from "./tree/subject"; import type { WindowRef } from "./types"; /** * A plugin hook for adding drag and drop to the file tree. * * @param fileTree - A file tree * @param config - Configuration options * @param config.windowRef - A React ref created by useRef() or an HTML element for the * container viewport you're rendering the list inside of. * @param config.dragOverExpandTimeout - Timeout for expanding a directory when a draggable * element enters it. */ export declare function useDnd(fileTree: FileTree, config: UseDndConfig): UseDndPlugin; export declare type DndEvent = { type: "start"; /** * The node that is being dragged */ node: FileTreeNode; } | { type: "end"; /** * The node that is being dragged */ node: FileTreeNode; } | { type: "enter"; /** * The node that is being dragged */ node: FileTreeNode; /** * The directory that the node is being dragged over */ dir: Dir; } | { type: "expanded"; /** * The node that is being dragged */ node: FileTreeNode; /** * The directory that the node is being dragged over */ dir: Dir; } | { type: "leave"; /** * The node that is being dragged */ node: FileTreeNode; /** * The directory that the node was being dragged over */ dir: Dir; } | { type: "drop"; /** * The node that is being dragged */ node: FileTreeNode; /** * The directory that the node is being dragged over */ dir: Dir; }; export interface DndProps { draggable: true; onDragStart: React.MouseEventHandler; onDragEnd: React.MouseEventHandler; onDragOver: React.MouseEventHandler; onDragEnter: React.MouseEventHandler; onDragLeave: React.MouseEventHandler; onDrop: React.MouseEventHandler; } export interface UseDndConfig { /** * Timeout for expanding a directory when a draggable element enters it. */ dragOverExpandTimeout?: number; /** * A React ref created by useRef() or an HTML element for the container viewport * you're rendering the list inside of. */ windowRef: WindowRef; } export interface UseDndPlugin { /** * A subject that emits drag 'n drop events. */ didChange: Subject | null>; /** * Get the drag 'n drop props for a given node ID. */ getProps: (nodeId: number) => DndProps | React.HTMLAttributes; }