import { Constructor, PolyDictionary } from '../../../../types/GlobalTypes';
import { BaseNodeType } from '../../_Base';
import { NodeContext } from '../../../poly/NodeContext';
import { CoreNodeSelection } from '../../../../core/NodeSelection';
import { ParamsInitData } from '../io/IOController';
import { BaseOperationContainer } from '../../../../core/operations/container/_Base';
declare type OutputNodeFindMethod = (() => BaseNodeType) | undefined;
export declare class HierarchyChildrenController {
    protected node: BaseNodeType;
    private _context;
    private _children;
    private _children_by_type;
    private _children_and_grandchildren_by_context;
    private _selection;
    get selection(): CoreNodeSelection;
    constructor(node: BaseNodeType, _context: NodeContext);
    dispose(): void;
    get context(): NodeContext;
    private _output_node_find_method;
    set_output_node_find_method(method: OutputNodeFindMethod): void;
    output_node(): BaseNodeType | undefined;
    set_child_name(node: BaseNodeType, new_name: string): void;
    node_context_signature(): string;
    available_children_classes(): PolyDictionary<typeof import("../../_Base").BaseNodeClass>;
    is_valid_child_type(node_type: string): boolean;
    createNode<K extends BaseNodeType>(node_class_or_string: string | Constructor<K>, params_init_value_overrides?: ParamsInitData, node_type?: string): K;
    private _create_and_init_node;
    private _find_node_class;
    create_operation_container(operation_type: string, operation_container_name: string, params_init_value_overrides?: ParamsInitData): BaseOperationContainer;
    add_node(child_node: BaseNodeType): BaseNodeType;
    removeNode(child_node: BaseNodeType): void;
    _add_to_nodesByType(node: BaseNodeType): void;
    _remove_from_nodesByType(node: BaseNodeType): void;
    add_to_children_and_grandchildren_by_context(node: BaseNodeType): void;
    remove_from_children_and_grandchildren_by_context(node: BaseNodeType): void;
    nodesByType(type: string): BaseNodeType[];
    child_by_name(name: string): BaseNodeType;
    has_children_and_grandchildren_with_context(context: NodeContext): boolean;
    children(): BaseNodeType[];
    children_names(): string[];
    traverse_children(callback: (arg0: BaseNodeType) => void): void;
}
export {};
