import type { CategoryManifest, NodeManifest } from '../schema/node-definition';
export interface CategoryTreeNode extends CategoryManifest {
    nestedCategories: CategoryTreeNode[];
    nodes: NodeManifest[];
}
export interface CategoryTreeFilterOptions {
    categoryFilter?: (category: CategoryTreeNode) => boolean;
    nodeFilter?: (node: NodeManifest) => boolean;
}
export interface ConnectionValidator {
    isValidCategoryForConnection(categoryId: string): boolean;
    canNodeConnect(nodeType: string): boolean;
}
export declare class CategoryTree {
    private rootCategories;
    private rootNodes;
    private categoryMap;
    constructor(categories: CategoryManifest[], nodes: NodeManifest[]);
    static buildMap(tree: CategoryTreeNode[]): Map<string, CategoryTreeNode>;
    static fromPrebuilt(rootCategories: CategoryTreeNode[], rootNodes: NodeManifest[]): CategoryTree;
    buildTree(categories: CategoryManifest[], nodes: NodeManifest[]): {
        rootCategories: CategoryTreeNode[];
        rootNodes: NodeManifest[];
    };
    getRootCategories(): CategoryTreeNode[];
    getRootNodes(): NodeManifest[];
    findCategory(categoryId: string): CategoryTreeNode | null;
    getSubtree(categoryId: string): CategoryTree;
    filter(options?: CategoryTreeFilterOptions): CategoryTree;
    filterBySearch(searchTerm: string): CategoryTree;
    filterByConnections(validator: ConnectionValidator): CategoryTree;
    flattenSinglePath(): CategoryTree;
    flatten(): CategoryTree;
    isEmpty(): boolean;
    getAllCategories(): CategoryTreeNode[];
    getAllNodes(): NodeManifest[];
    getCategoryCount(): number;
    getNodeCount(): number;
}
//# sourceMappingURL=CategoryTree.d.ts.map