import { BaseNodeType } from '../../_Base';
import { BaseParamType } from '../../../params/_Base';
import { ParamOptions } from '../../../params/utils/OptionsController';
import { CoreGraphNode } from '../../../../core/graph/CoreGraphNode';
import { FloatParam } from '../../../params/Float';
import { ParamType } from '../../../poly/ParamType';
import { ParamConstructorMap } from '../../../params/types/ParamConstructorMap';
import { ParamInitValuesTypeMap } from '../../../params/types/ParamInitValuesTypeMap';
import { ParamValuesTypeMap } from '../../../params/types/ParamValuesTypeMap';
import { ParamInitValueSerializedTypeMap } from '../../../params/types/ParamInitValueSerializedTypeMap';
import { ParamInitData } from '../io/IOController';
export type OnSceneLoadHook = () => void;
type PostCreateParamsHook = () => void;
export interface ParamOptionToAdd<T extends ParamType> {
    name: string;
    type: T;
    initValue: ParamInitValueSerializedTypeMap[T];
    rawInput: ParamInitValueSerializedTypeMap[T];
    options?: ParamOptions;
}
export interface ParamsUpdateOptions {
    namesToDelete?: string[];
    toAdd?: ParamOptionToAdd<ParamType>[];
}
export declare class ParamsController {
    readonly node: BaseNodeType;
    private _param_create_mode;
    private _params_created;
    private _paramsByName;
    private _paramsList;
    private _paramNames;
    private _non_spare_params;
    private _spare_params;
    private _non_spare_param_names;
    private _spare_param_names;
    private _params_node;
    private _params_added_since_last_params_eval;
    private _post_create_params_hook_names;
    private _post_create_params_hooks;
    private _on_scene_load_hooks;
    private _on_scene_load_hook_names;
    constructor(node: BaseNodeType);
    dispose(): void;
    private initDependencyNode;
    init(): void;
    private _postCreateParams;
    postCreateSpareParams(): void;
    updateParams(options: ParamsUpdateOptions): void;
    private _initFromParamsConfig;
    private _initParamAccessors;
    private _removeUnneededAccessors;
    get params_node(): CoreGraphNode | undefined;
    get all(): BaseParamType[];
    get non_spare(): BaseParamType[];
    get spare(): BaseParamType[];
    get names(): string[];
    get non_spare_names(): string[];
    get spare_names(): string[];
    private set_with_type;
    set_float(paramName: string, value: ParamInitValuesTypeMap[ParamType.FLOAT]): void;
    set_vector3(paramName: string, value: ParamInitValuesTypeMap[ParamType.VECTOR3]): void;
    has_param(paramName: string): boolean;
    has(paramName: string): boolean;
    get(paramName: string): BaseParamType | null;
    paramWithType<T extends ParamType>(param_name: string, type: T): ParamConstructorMap[T] | undefined;
    getFloat(param_name: string): FloatParam;
    value(paramName: string): string | number | boolean | import("three").Vector2 | import("three").Vector3 | import("three").Vector4 | import("three").Color | import("../../../params/ramp/RampValue").RampValue | import("../../../../core/Walker").TypedParamPathParamValue | import("../../../../core/Walker").TypedNodePathParamValue | null | undefined;
    valueWithType<T extends ParamType>(paramName: string, type: T): ParamValuesTypeMap[T];
    boolean(paramName: string): boolean;
    float(paramName: string): number;
    integer(paramName: string): number;
    string(paramName: string): string;
    vector2(paramName: string): import("three").Vector2;
    vector3(paramName: string): import("three").Vector3;
    color(paramName: string): import("three").Color;
    param(paramName: string): BaseParamType | null;
    private _deleteParam;
    addParam<T extends ParamType>(type: T, paramName: string, defaultValue: ParamInitValuesTypeMap[T], options?: ParamOptions, initData?: ParamInitData<T>): ParamConstructorMap[T] | undefined;
    private _updateCaches;
    _evalParam(param: BaseParamType): Promise<void>;
    private _promises;
    evalParams(params: BaseParamType[]): Promise<void>;
    paramsEvalRequired(): boolean;
    evalAll(): Promise<void>;
    onParamsCreated(hook_name: string, hook: PostCreateParamsHook): void;
    addOnSceneLoadHook(param_name: string, method: OnSceneLoadHook): void;
    private _runPostCreateParamsHooks;
    runOnSceneLoadHooks(): void;
}
export {};
