import { RefObject, ElementType, ReactElement } from "react"; import { XYCoord } from "react-dnd"; export declare type NodeModel = { id: number | string; parent: number | string; text: string; droppable?: boolean; data?: T; }; export declare type DragItem = NodeModel & { type: symbol; ref: React.MutableRefObject; }; export declare type RenderParams = { depth: number; isOpen: boolean; index: number; isDragging: boolean; isDropTarget: boolean; draggable: boolean; hasChild: boolean; containerRef: RefObject; onToggle(): void; }; export declare type NodeRender = (node: NodeModel, params: RenderParams) => ReactElement; export declare type ClickHandler = (data: NodeModel) => void; export declare type DropHandler = (id: NodeModel["id"], parent: NodeModel["id"], index: number) => void; export declare type CanDropHandler = (id: NodeModel["id"], parent: NodeModel["id"]) => boolean | void; export declare type CanDragHandler = (id: NodeModel["id"]) => boolean; export declare type Classes = { root?: string; container?: string; listItem?: string; dropTarget?: string; draggingSource?: string; placeholder?: string; }; export declare type SortCallback = (a: NodeModel, b: NodeModel) => number; export declare type DragLayerMonitorProps = { item: DragItem; clientOffset: XYCoord | null; isDragging: boolean; }; export declare type DragPreviewRender = (monitorProps: DragLayerMonitorProps) => ReactElement; export declare type PlaceholderRenderParams = { depth: number; }; export declare type PlaceholderRender = (node: NodeModel, params: PlaceholderRenderParams) => ReactElement; export declare type DragOverProps = { onDragEnter: () => void; onDragLeave: () => void; onDrop: () => void; }; export declare type OpenHandler = (targetIds: NodeModel["id"] | NodeModel["id"][], callback?: ChangeOpenHandler) => void; export declare type CloseHandler = (targetIds: NodeModel["id"] | NodeModel["id"][], callback?: ChangeOpenHandler) => void; export declare type ToggleHandler = (id: NodeModel["id"], callback?: ChangeOpenHandler) => void; export declare type ChangeOpenHandler = (newOpenIds: NodeModel["id"][]) => void; export declare type InitialOpen = boolean | NodeModel["id"][]; export declare type DragSourceElement = EventTarget | null; export declare type DragControlState = { isLock: boolean; lock: () => void; unlock: () => void; }; export declare type PlaceholderState = { dropTargetId: NodeModel["id"] | undefined; index: number | undefined; showPlaceholder: (parentId: NodeModel["id"], index: number) => void; hidePlaceholder: () => void; }; export declare type RootProps = Omit, "ref" | "role">; export declare type TreeStateBase = { tree: NodeModel[]; rootId: NodeModel["id"]; classes?: Classes; rootProps?: RootProps; render: NodeRender; dragPreviewRender?: DragPreviewRender; placeholderRender?: PlaceholderRender; }; export declare type TreeState = TreeStateBase & { listComponent: ElementType; listItemComponent: ElementType; placeholderComponent: ElementType; sort: SortCallback | boolean; insertDroppableFirst: boolean; dropTargetOffset: number; initialOpen: InitialOpen; openIds: NodeModel["id"][]; onDrop: DropHandler; canDrop?: CanDropHandler; canDrag?: CanDragHandler; onToggle: ToggleHandler; }; export declare type DropOptions = { dragSourceId: NodeModel["id"]; dropTargetId: NodeModel["id"]; dragSource: NodeModel | undefined; dropTarget: NodeModel | undefined; destinationIndex?: number; }; export declare type TreeProps = TreeStateBase & { listComponent?: ElementType; listItemComponent?: ElementType; placeholderComponent?: ElementType; sort?: SortCallback | boolean; insertDroppableFirst?: boolean; dropTargetOffset?: number; initialOpen?: InitialOpen; onChangeOpen?: ChangeOpenHandler; onDrop: (tree: NodeModel[], options: DropOptions) => void; canDrop?: (tree: NodeModel[], options: DropOptions) => boolean | void; canDrag?: (node: NodeModel | undefined) => boolean; }; export declare type TreeMethods = { open: OpenHandler; close: CloseHandler; openAll(): void; closeAll(): void; };