import { BoolFunc } from "./utils";
import * as handlers from "./handlers";
import * as renderers from "./renderers";
import { ElementType, MouseEventHandler } from "react";
import { ListOnScrollProps } from "react-window";
import { NodeApi } from "../interfaces/node-api";
import { OpenMap } from "../state/open-slice";
import { useDragDropManager } from "react-dnd";
export interface TreeProps<T> {
    data?: readonly T[];
    initialData?: readonly T[];
    onCreate?: handlers.CreateHandler<T>;
    onMove?: handlers.MoveHandler<T>;
    onRename?: handlers.RenameHandler<T>;
    onDelete?: handlers.DeleteHandler<T>;
    children?: ElementType<renderers.NodeRendererProps<T>>;
    renderRow?: ElementType<renderers.RowRendererProps<T>>;
    renderDragPreview?: ElementType<renderers.DragPreviewProps>;
    renderCursor?: ElementType<renderers.CursorProps>;
    renderContainer?: ElementType<{}>;
    rowHeight?: number;
    overscanCount?: number;
    width?: number | string;
    height?: number;
    indent?: number;
    paddingTop?: number;
    paddingBottom?: number;
    padding?: number;
    childrenAccessor?: string | ((d: T) => readonly T[] | null);
    idAccessor?: string | ((d: T) => string);
    openByDefault?: boolean;
    selectionFollowsFocus?: boolean;
    disableMultiSelection?: boolean;
    disableEdit?: string | boolean | BoolFunc<T>;
    disableDrag?: string | boolean | BoolFunc<T>;
    disableDrop?: string | boolean | ((args: {
        parentNode: NodeApi<T>;
        dragNodes: NodeApi<T>[];
        index: number;
    }) => boolean);
    onActivate?: (node: NodeApi<T>) => void;
    onSelect?: (nodes: NodeApi<T>[]) => void;
    onScroll?: (props: ListOnScrollProps) => void;
    onToggle?: (id: string) => void;
    onFocus?: (node: NodeApi<T>) => void;
    selection?: string;
    initialOpenState?: OpenMap;
    searchTerm?: string;
    searchMatch?: (node: NodeApi<T>, searchTerm: string) => boolean;
    className?: string | undefined;
    rowClassName?: string | undefined;
    dndRootElement?: globalThis.Node | null;
    onClick?: MouseEventHandler;
    onContextMenu?: MouseEventHandler;
    dndManager?: ReturnType<typeof useDragDropManager>;
}
