import { Constructor } from '../../../../types/GlobalTypes';
import { BaseNodeClass, BaseNodeType } from '../../_Base';
import { NodeContext } from '../../../poly/NodeContext';
import { CoreNodeSelection } from '../../../../core/NodeSelection';
import { ParamsInitData } from '../io/IOController';
import { BaseOperationContainer } from '../../../operations/container/_Base';
import { CoreNodeSerializer } from '../CoreNodeSerializer';
type OutputNodeFindMethod = (() => BaseNodeType) | undefined;
type TraverseNodeCallback = (node: BaseNodeType) => void;
type TraverseNodeConditionCallback = (node: BaseNodeType) => boolean;
export interface NodeCreateOptions {
    paramsInitValueOverrides?: ParamsInitData;
    nodeName?: string;
    serializerClass?: typeof CoreNodeSerializer;
}
export declare class HierarchyChildrenController {
    protected node: BaseNodeType;
    private _context;
    private _childrenByName;
    private _childrenIdByType;
    private _childrenByType;
    private _childrenAndGrandchildrenByContext;
    private _selection;
    get selection(): CoreNodeSelection;
    constructor(node: BaseNodeType, _context: NodeContext);
    dispose(): void;
    get context(): NodeContext;
    private _outputNodeFindMethod;
    setOutputNodeFindMethod(method: OutputNodeFindMethod): void;
    outputNode(): BaseNodeType | undefined;
    setChildName(node: BaseNodeType, newName: string): void;
    private _nextAvailableChildName;
    nodeContextSignature(): string;
    availableChildrenClasses(): import("../../../../types/GlobalTypes").PolyDictionary<typeof BaseNodeClass>;
    isValidChildType(node_type: string): boolean;
    createNode<K extends BaseNodeType>(nodeClassOrString: string | Constructor<K>, options?: NodeCreateOptions): K;
    private _createAndInitNode;
    private _findNodeClass;
    createOperationContainer(operationType: string, operationContainerName: string, options?: NodeCreateOptions): BaseOperationContainer<any>;
    private _addNode;
    removeNode(childNode: BaseNodeType): void;
    private _addToNodesByType;
    private _removeFromNodesByType;
    private _addToChildrenAndGrandchildrenByContext;
    private _removeFromChildrenAndGrandchildrenByContext;
    nodesByType(type: string, target?: BaseNodeType[]): BaseNodeType[];
    childByName(name: string): BaseNodeType | null;
    hasChildrenAndGrandchildrenWithContext(context: NodeContext): boolean;
    private _children;
    private _childrenNames;
    private _updateCache;
    children(): Readonly<BaseNodeType[]>;
    childrenNames(): Readonly<string[]>;
    traverseChildren(callback: TraverseNodeCallback, conditionCallback?: TraverseNodeConditionCallback): void;
}
export {};
