import { EditResult } from "../types/handlers";
import { Identity, IdObj } from "../types/utils";
import { TreeProps } from "../types/tree-props";
import { MutableRefObject } from "react";
import { Align, FixedSizeList, ListOnItemsRenderedProps } from "react-window";
import { DefaultRow } from "../components/default-row";
import { DefaultNode } from "../components/default-node";
import { NodeApi } from "./node-api";
import { Actions, RootState } from "../state/root-reducer";
import { DefaultDragPreview } from "../components/default-drag-preview";
import { DefaultContainer } from "../components/default-container";
import { Cursor } from "../dnd/compute-drop";
import { Store } from "redux";
export declare class TreeApi<T> {
    store: Store<RootState, Actions>;
    props: TreeProps<T>;
    list: MutableRefObject<FixedSizeList | null>;
    listEl: MutableRefObject<HTMLDivElement | null>;
    static editPromise: null | ((args: EditResult) => void);
    root: NodeApi<T>;
    visibleNodes: NodeApi<T>[];
    visibleStartIndex: number;
    visibleStopIndex: number;
    idToIndex: {
        [id: string]: number;
    };
    constructor(store: Store<RootState, Actions>, props: TreeProps<T>, list: MutableRefObject<FixedSizeList | null>, listEl: MutableRefObject<HTMLDivElement | null>);
    update(props: TreeProps<T>): void;
    dispatch(action: Actions): import("redux").AnyAction;
    get state(): import("redux").CombinedState<{
        nodes: import("redux").CombinedState<{
            focus: import("../state/focus-slice").FocusState;
            edit: import("../state/edit-slice").EditState;
            open: import("../state/open-slice").OpenSlice;
            selection: import("../state/selection-slice").SelectionState;
            drag: import("../state/drag-slice").DragSlice;
        }>;
        dnd: import("../state/dnd-slice").DndState;
    }>;
    get openState(): import("../state/open-slice").OpenMap;
    get width(): string | number;
    get height(): number;
    get indent(): number;
    get rowHeight(): number;
    get overscanCount(): number;
    get searchTerm(): string;
    get matchFn(): (node: NodeApi<T>) => boolean;
    accessChildren(data: T): T[] | null;
    accessId(data: T): string;
    get firstNode(): NodeApi<T>;
    get lastNode(): NodeApi<T>;
    get focusedNode(): NodeApi<T> | null;
    get mostRecentNode(): NodeApi<T> | null;
    get nextNode(): NodeApi<T> | null;
    get prevNode(): NodeApi<T> | null;
    get(id: string | null): NodeApi<T> | null;
    at(index: number): NodeApi<T> | null;
    nodesBetween(startId: string | null, endId: string | null): NodeApi<T>[];
    indexOf(id: string | null | IdObj): number | null;
    get editingId(): string | null;
    createInternal(): Promise<void>;
    createLeaf(): Promise<void>;
    create(opts?: {
        type?: "internal" | "leaf";
        parentId?: null | string;
        index?: null | number;
    }): Promise<void>;
    delete(node: string | IdObj | null | string[] | IdObj[]): Promise<void>;
    edit(node: string | IdObj): Promise<EditResult>;
    submit(identity: Identity, value: string): Promise<void>;
    reset(): void;
    activate(id: string | IdObj | null): void;
    private resolveEdit;
    get selectedIds(): Set<string>;
    get selectedNodes(): NodeApi<T>[];
    focus(node: Identity, opts?: {
        scroll?: boolean;
    }): void;
    pageUp(): void;
    pageDown(): void;
    select(node: Identity, opts?: {
        align?: Align;
        focus?: boolean;
    }): void;
    deselect(node: Identity): void;
    selectMulti(identity: Identity): void;
    selectContiguous(identity: Identity): void;
    deselectAll(): void;
    selectAll(): void;
    get cursorParentId(): string | null;
    get cursorOverFolder(): boolean;
    get dragNodes(): NodeApi<T>[];
    canDrop(): boolean;
    hideCursor(): void;
    showCursor(cursor: Cursor): void;
    open(identity: Identity): void;
    close(identity: Identity): void;
    toggle(identity: Identity): void;
    openParents(identity: Identity): void;
    openSiblings(node: NodeApi<T>): void;
    openAll(): void;
    closeAll(): void;
    scrollTo(identity: Identity, align?: Align): Promise<void> | undefined;
    get isEditing(): boolean;
    get isFiltered(): boolean;
    get hasFocus(): boolean;
    get hasNoSelection(): boolean;
    get hasOneSelection(): boolean;
    get hasMultipleSelections(): boolean;
    isSelected(id?: string): boolean;
    isOpen(id?: string): boolean;
    isEditable(data: T): boolean;
    isDraggable(data: T): boolean;
    isDragging(node: string | IdObj | null): boolean;
    isFocused(id: string): boolean;
    isMatch(node: NodeApi<T>): boolean;
    willReceiveDrop(node: string | IdObj | null): boolean;
    onFocus(): void;
    onBlur(): void;
    onItemsRendered(args: ListOnItemsRenderedProps): void;
    get renderContainer(): import("react").ElementType<{}> | typeof DefaultContainer;
    get renderRow(): import("react").ElementType<import("..").RowRendererProps<T>> | typeof DefaultRow;
    get renderNode(): import("react").ElementType<import("..").NodeRendererProps<T>> | typeof DefaultNode;
    get renderDragPreview(): import("react").ComponentType<import("..").DragPreviewProps> | typeof DefaultDragPreview;
    get renderCursor(): import("react").ComponentType<import("..").CursorProps> | import("react").NamedExoticComponent<import("..").CursorProps>;
}
