import { ComponentDefinition, NodeId, NodeType, NodeTypeWithChildren, NodeTypeWithPopover } from "../../data/types";
export declare abstract class PostOrderAbstractNodeVisitor<T = void> {
    abstract visitNode(node: NodeType, parent: NodeTypeWithChildren | null, childResults: T[] | null, popoverResults: T | null): T;
}
export declare function postOrderTraverseCustomComponent<T>(definition: ComponentDefinition, visitor: PostOrderAbstractNodeVisitor<T>, rootNodeId?: NodeId): T;
export declare abstract class PreOrderAbstractNodeVisitor {
    abstract visitNode(node: NodeType, parent: NodeTypeWithChildren | null, popoverAnchorNode: NodeTypeWithPopover | null): void;
}
export declare function preOrderTraverseCustomComponent(definition: ComponentDefinition, visitor: PreOrderAbstractNodeVisitor, rootNodeId?: NodeId): void;
//# sourceMappingURL=custom-component-traverser.d.ts.map