import { Constructor, valueof } from '../../../types/GlobalTypes';
import { TypedGlNode, BaseGlNodeType } from './_Base';
import { GlConnectionPointType } from '../utils/io/connections/Gl';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { ShadersCollectionController } from './code/utils/ShadersCollectionController';
import { NetworkNodeType, NodeContext } from '../../poly/NodeContext';
import { GlNodeChildrenMap } from '../../poly/registers/nodes/Gl';
import { SubnetOutputGlNode } from './SubnetOutput';
import { SubnetInputGlNode } from './SubnetInput';
import { NodeCreateOptions } from '../utils/hierarchy/ChildrenController';
import { IntegerParam } from '../../params/Integer';
import { StringParam } from '../../params/String';
import { CodeBuilder } from './code/utils/CodeBuilder';
import { AddBodyLinesOptions } from './code/utils/LinesController';
export declare const ADD_BODY_LINES_OPTIONS: AddBodyLinesOptions;
export declare function TypedSubnetGlParamsConfigMixin<TBase extends Constructor>(Base: TBase): {
    new (...args: any[]): {
        inputs: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
        inputsCount: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputType0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        spare: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
    };
} & TBase;
declare const TypedSubnetGlParamsConfig_base: {
    new (...args: any[]): {
        inputs: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
        inputsCount: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputType0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        spare: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
    };
} & typeof NodeParamsConfig;
declare class TypedSubnetGlParamsConfig extends TypedSubnetGlParamsConfig_base {
}
export declare class AbstractTypedSubnetGlNode<K extends NodeParamsConfig> extends TypedGlNode<K> {
    protected _childrenControllerContext: NodeContext;
    initializeNode(): void;
    protected _expectedInputTypes(): GlConnectionPointType[];
    protected _expectedInputName(index: number): string;
    protected _expectedOutputTypes(): GlConnectionPointType[];
    protected _expectedOutputName(index: number): string;
    childExpectedInputConnectionPointTypes(): GlConnectionPointType[];
    childExpectedOutputConnectionPointTypes(): GlConnectionPointType[];
    childExpectedInputConnectionPointName(index: number): string;
    childExpectedOutputConnectionPointName(index: number): string;
    createNode<S extends keyof GlNodeChildrenMap>(node_class: S, options?: NodeCreateOptions): GlNodeChildrenMap[S];
    createNode<K extends valueof<GlNodeChildrenMap>>(node_class: Constructor<K>, options?: NodeCreateOptions): K;
    children(): BaseGlNodeType[];
    nodesByType<K extends keyof GlNodeChildrenMap>(type: K): GlNodeChildrenMap[K][];
    protected _setLinesPreBlock(shadersCollectionController: ShadersCollectionController): void;
    protected setLinesBlockStart(shadersCollectionController: ShadersCollectionController): void;
    protected setLinesBlockEnd(shadersCollectionController: ShadersCollectionController): void;
    setSubnetInputLines(shadersCollectionController: ShadersCollectionController, childNode: SubnetInputGlNode): void;
    private subnetOutputLines;
    setSubnetOutputLines(shadersCollectionController: ShadersCollectionController, childNode: SubnetOutputGlNode): void;
    setLines(shadersCollectionController: ShadersCollectionController): void;
    protected linesBlockContent(shadersCollectionController: ShadersCollectionController): string[] | undefined;
    private _setLinesBlockContent;
    protected _runCodeBuilder(shadersCollectionController: ShadersCollectionController): CodeBuilder | undefined;
    private _addCodeBuilderDefinition;
    protected _sanitizeBodyLines(lines: string[]): string[];
}
export declare class TypedSubnetGlNode<K extends TypedSubnetGlParamsConfig> extends AbstractTypedSubnetGlNode<K> {
    initializeNode(): void;
    protected _inputTypeParams(): IntegerParam[];
    protected _inputNameParams(): StringParam[];
    setInputType(index: number, type: GlConnectionPointType): void;
    setInputName(index: number, inputName: string): void;
    protected _expectedInputsCount(): number;
    protected _expectedInputTypes(): GlConnectionPointType[];
    protected _expectedInputName(index: number): string;
    protected _expectedOutputTypes(): GlConnectionPointType[];
    protected _expectedOutputName(index: number): string;
}
declare const SubnetGlParamsConfig_base: {
    new (...args: any[]): {
        inputs: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
        inputsCount: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputType0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName0: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName5: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName6: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName7: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName8: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        inputType9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
        inputName9: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
        spare: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FOLDER>;
    };
} & typeof NodeParamsConfig;
declare class SubnetGlParamsConfig extends SubnetGlParamsConfig_base {
}
export declare class SubnetGlNode extends TypedSubnetGlNode<SubnetGlParamsConfig> {
    paramsConfig: SubnetGlParamsConfig;
    static type(): NetworkNodeType;
}
export {};
