import { VariantProps } from 'class-variance-authority';
import * as React from "react";
declare const treeItemVariants: (props?: ({
    variant?: "primary" | "secondary" | "ghost" | null | undefined;
    shape?: "full" | "minimal" | "sharp" | null | undefined;
    size?: "sm" | "md" | "lg" | "xl" | null | undefined;
} & import('class-variance-authority/dist/types').ClassProp) | undefined) => string;
export interface FlattenedNode<T> {
    id: string;
    item: T;
    parentId: string | null;
    depth: number;
    isExpanded: boolean;
    hasChildren: boolean;
}
export interface TreeViewProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect">, VariantProps<typeof treeItemVariants> {
    data: T[];
    getId: (item: T) => string;
    getChildren: (item: T) => T[] | undefined | null;
    canHaveChildren?: (item: T) => boolean;
    renderItem: (item: T, options: {
        isExpanded: boolean;
        isSelected: boolean;
        depth: number;
        isDragging: boolean;
    }) => React.ReactNode;
    selectedId?: string | null;
    onSelect?: (id: string, item: T) => void;
    multiSelect?: boolean;
    selectedIds?: string[];
    onSelectChange?: (ids: string[], items: T[]) => void;
    expandedIds?: string[];
    onExpandedChange?: (expandedIds: string[]) => void;
    indentSize?: number;
    enableDragAndDrop?: boolean;
    onMoveNode?: (args: {
        activeId: string;
        activeIds: string[];
        parentId: string | null;
        index: number;
    }) => void;
}
export declare function TreeView<T>({ data, getId, getChildren, canHaveChildren, renderItem, selectedId, onSelect, multiSelect, selectedIds, onSelectChange, expandedIds: controlledExpandedIds, onExpandedChange, variant, shape, size, indentSize, enableDragAndDrop, onMoveNode, className, ...props }: TreeViewProps<T>): import("react/jsx-runtime").JSX.Element;
export declare function useTreeHistory<T>(initialData: T[]): {
    data: T[];
    updateData: (newData: T[] | ((prev: T[]) => T[])) => void;
    undo: () => void;
    redo: () => void;
    canUndo: boolean;
    canRedo: boolean;
};
export {};
