import * as React from 'react';
export interface TreeNode {
    id: string;
    label: string;
    icon?: React.ReactNode;
    type?: string;
    children?: TreeNode[];
    /** Whether the node can be expanded (defaults to true if children exist) */
    expandable?: boolean;
    expanded?: boolean;
    /** Async loader for lazy children */
    lazyLoad?: () => Promise<TreeNode[]>;
    /** Arbitrary user data */
    data?: unknown;
}
export interface TreeViewProps extends Omit<React.ComponentProps<'div'>, 'onSelect' | 'onDoubleClick'> {
    /** Tree data */
    data: TreeNode[];
    /** Callback when a node is selected */
    onSelect?: (node: TreeNode) => void;
    /** Callback when a node is double-clicked */
    onDoubleClick?: (node: TreeNode) => void;
    /** Callback when a node is expanded */
    onExpand?: (node: TreeNode) => void;
    /** The id of the selected node (controlled) */
    selectedId?: string | null;
    /** Default expanded node ids */
    defaultExpandedIds?: string[];
    /** Whether to show a search/filter input */
    searchable?: boolean;
    /** Custom class for items */
    itemClassName?: string;
}
declare function TreeView({ className, data, onSelect, onDoubleClick, onExpand, selectedId: controlledSelectedId, defaultExpandedIds, searchable, itemClassName, ...props }: TreeViewProps): import("react/jsx-runtime").JSX.Element;
interface TreeItemProps {
    node: TreeNode;
    depth: number;
    expanded: Set<string>;
    selectedId: string | null;
    onToggle: (node: TreeNode) => void;
    onSelect: (node: TreeNode) => void;
    onDoubleClick?: ((node: TreeNode) => void) | undefined;
    matchesFilter: (node: TreeNode, query: string) => boolean;
    filterQuery: string;
    loadingNodes: Set<string>;
    lazyChildren: Map<string, TreeNode[]>;
    itemClassName?: string | undefined;
}
declare function TreeItem({ node, depth, expanded, selectedId, onToggle, onSelect, onDoubleClick, matchesFilter, filterQuery, loadingNodes, lazyChildren, itemClassName, }: TreeItemProps): import("react/jsx-runtime").JSX.Element;
export { TreeView, TreeItem };
//# sourceMappingURL=tree-view.d.ts.map