import { CoreGraphNode } from '../../core/graph/CoreGraphNode';
import { BaseNodeType } from '../nodes/_Base';
import { OptionsController } from './utils/OptionsController';
import { ExpressionController } from './utils/ExpressionController';
import { EmitController } from './utils/EmitController';
import { ParamSerializer } from './utils/Serializer';
import { StatesController } from './utils/StatesController';
import { TypedMultipleParam } from './_Multiple';
import { FloatParam } from './Float';
import { ParamType } from '../poly/ParamType';
import { ParamEvent } from '../poly/ParamEvent';
import { PolyScene } from '../scene/PolyScene';
import { ParamInitValuesTypeMap } from '../params/types/ParamInitValuesTypeMap';
import { ParamValuesTypeMap } from '../params/types/ParamValuesTypeMap';
import { ParamValueSerializedTypeMap, ParamValuePreConversionSerializedTypeMap } from '../params/types/ParamValueSerializedTypeMap';
import { ParamInitValueSerializedTypeMap } from './types/ParamInitValueSerializedTypeMap';
declare type ComputeCallback = (value: void) => void;
export declare abstract class TypedParam<T extends ParamType> extends CoreGraphNode {
    protected _default_value: ParamInitValuesTypeMap[T];
    protected _raw_input: ParamInitValuesTypeMap[T];
    protected _value: ParamValuesTypeMap[T];
    protected _node: BaseNodeType;
    protected _parent_param: TypedMultipleParam<any> | undefined;
    protected _components: FloatParam[] | undefined;
    protected _compute_resolves: ComputeCallback[] | undefined;
    private _options;
    get options(): OptionsController;
    private _emit_controller;
    get emitController(): EmitController;
    protected _expression_controller: ExpressionController<T> | undefined;
    get expression_controller(): ExpressionController<T> | undefined;
    private _serializer;
    get serializer(): ParamSerializer;
    private _states;
    get states(): StatesController;
    constructor(scene: PolyScene, node: BaseNodeType);
    dispose(): void;
    initialize_param(): void;
    static type(): ParamType;
    type(): T;
    get is_numeric(): boolean;
    setName(name: string): void;
    get value(): ParamValuesTypeMap[T];
    abstract get default_value_serialized(): ParamInitValueSerializedTypeMap[T];
    abstract get raw_input_serialized(): ParamInitValueSerializedTypeMap[T];
    abstract get value_serialized(): ParamValueSerializedTypeMap[T];
    copy_value(param: BaseParamType): void;
    protected _copy_value(param: TypedParam<T>): void;
    get value_pre_conversion_serialized(): ParamValuePreConversionSerializedTypeMap[T];
    convert(raw_val: any): ParamValuesTypeMap[T] | null;
    static are_raw_input_equal(val1: any, val2: any): boolean;
    is_raw_input_equal(other_raw_input: ParamInitValuesTypeMap[T]): any;
    static are_values_equal(val1: any, val2: any): boolean;
    is_value_equal(other_val: ParamValuesTypeMap[T]): any;
    protected _clone_raw_input(raw_input: ParamInitValuesTypeMap[T]): ParamInitValuesTypeMap[T];
    set(raw_input: ParamInitValuesTypeMap[T]): void;
    protected _prefilter_invalid_raw_input(raw_input: any): ParamInitValuesTypeMap[T];
    get default_value(): ParamInitValuesTypeMap[T];
    get is_default(): boolean;
    get raw_input(): ParamInitValuesTypeMap[T];
    protected process_raw_input(): void;
    private _is_computing;
    compute(): Promise<void>;
    protected process_computation(): Promise<void>;
    set_init_value(init_value: ParamInitValuesTypeMap[T]): void;
    _setup_node_dependencies(node: BaseNodeType | null): void;
    get node(): BaseNodeType;
    parent(): BaseNodeType;
    set_parent_param(param: TypedMultipleParam<any>): void;
    get parent_param(): TypedMultipleParam<any> | undefined;
    has_parent_param(): boolean;
    fullPath(): string;
    path_relative_to(node: BaseNodeType | BaseParamType): string;
    emit(event_name: ParamEvent): void;
    get components(): FloatParam[] | undefined;
    get component_names(): Readonly<string[]>;
    get is_multiple(): boolean;
    init_components(): void;
    has_expression(): boolean;
    toJSON(): import("./utils/Serializer").ParamSerializerData;
}
export declare type BaseParamType = TypedParam<ParamType>;
export declare class BaseParamClass extends TypedParam<ParamType> {
    get default_value_serialized(): string;
    get raw_input_serialized(): string;
    get value_serialized(): string;
}
export {};
