import { BoolFunc } from "./utils"; import * as handlers from "./handlers"; import * as renderers from "./renderers"; import { ElementType, MouseEventHandler } from "react"; import { ListOnScrollProps, CommonProps as ReactWindowCommonProps } from "react-window"; import { NodeApi } from "../interfaces/node-api"; import { OpenMap } from "../state/open-slice"; import { useDragDropManager, DndProviderProps } from "react-dnd"; /** Returns the height in pixels for a given node's row. */ export type RowHeightAccessor = (node: NodeApi) => number; export interface TreeProps { data?: readonly T[]; initialData?: readonly T[]; onCreate?: handlers.CreateHandler; onMove?: handlers.MoveHandler; onRename?: handlers.RenameHandler; onDelete?: handlers.DeleteHandler; children?: ElementType>; renderRow?: ElementType>; renderDragPreview?: ElementType; renderCursor?: ElementType; renderContainer?: ElementType<{}>; rowHeight?: number | RowHeightAccessor; 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; disableDeselectOnClick?: boolean; disableSelect?: string | boolean | BoolFunc; disableEdit?: string | boolean | BoolFunc; disableDrag?: string | boolean | BoolFunc; disableDrop?: string | boolean | ((args: { parentNode: NodeApi; dragNodes: NodeApi[]; index: number; }) => boolean); onActivate?: (node: NodeApi) => void; onSelect?: (nodes: NodeApi[]) => void; onScroll?: (props: ListOnScrollProps) => void; onToggle?: (id: string) => void; onFocus?: (node: NodeApi) => void; selection?: string; initialOpenState?: OpenMap; searchTerm?: string; searchMatch?: (node: NodeApi, searchTerm: string) => boolean; "aria-label"?: string; "aria-labelledby"?: string; className?: string | undefined; rowClassName?: string | undefined; dndRootElement?: globalThis.Node | null; onClick?: MouseEventHandler; onContextMenu?: MouseEventHandler; dndBackend?: Extract, { backend: unknown; }>["backend"]; dndManager?: ReturnType; dragType?: string | ((node: NodeApi) => string); outerElementType?: ReactWindowCommonProps["outerElementType"]; innerElementType?: ReactWindowCommonProps["innerElementType"]; }