import { BaseParamType } from '../_Base';
import { BaseNodeType } from '../../nodes/_Base';
import { ParamType } from '../../poly/ParamType';
import { NodeContext } from '../../poly/NodeContext';
import { ColorConversion } from '../../../core/Color';
import { Boolean2, Number2, PolyDictionary } from '../../../types/GlobalTypes';
export interface NumericParamOptionsMenuEntry {
    name: string;
    value: number;
}
export interface StringParamOptionsMenuEntry {
    name: string;
    value: string;
}
export interface MenuNumericParamOptions {
    menu?: {
        entries: NumericParamOptionsMenuEntry[];
    };
}
export interface MenuStringParamOptions {
    menu?: {
        entries: StringParamOptionsMenuEntry[];
    };
}
export declare enum StringParamLanguage {
    TYPESCRIPT = "typescript"
}
export declare enum FileType {
    TEXTURE = "texture",
    GEOMETRY = "geometry"
}
export declare type VisibleIfParamOptions = PolyDictionary<number | boolean>;
interface BaseParamOptions {
    cook?: boolean;
    spare?: boolean;
    hidden?: boolean;
    field?: boolean;
    visibleIf?: VisibleIfParamOptions | VisibleIfParamOptions[];
}
interface ExpressionParamOptions {
    expression?: {
        forEntities?: boolean;
    };
}
interface NumberParamOptions extends BaseParamOptions {
    range?: Number2;
    rangeLocked?: Boolean2;
    step?: number;
}
interface FileParamOptions {
    fileBrowse?: {
        type: FileType[];
    };
}
interface ComputeOnDirtyParamOptions {
    computeOnDirty?: boolean;
}
interface CallbackParamOptions {
    callback?: (node: BaseNodeType, param: BaseParamType) => any;
    callbackString?: string;
}
interface LabelParamOptions {
    label?: string;
}
interface ColorConversionOptions {
    conversion?: ColorConversion;
}
export interface BooleanParamOptions extends BaseParamOptions, ComputeOnDirtyParamOptions, MenuNumericParamOptions, ExpressionParamOptions, CallbackParamOptions {
}
export interface ButtonParamOptions extends BaseParamOptions, CallbackParamOptions, LabelParamOptions {
}
export interface ColorParamOptions extends BaseParamOptions, ColorConversionOptions, ExpressionParamOptions, CallbackParamOptions, ComputeOnDirtyParamOptions {
}
export interface FloatParamOptions extends NumberParamOptions, MenuNumericParamOptions, ComputeOnDirtyParamOptions, ExpressionParamOptions, CallbackParamOptions {
}
export interface FolderParamOptions extends BaseParamOptions {
    level?: number;
}
export interface IntegerParamOptions extends NumberParamOptions, MenuNumericParamOptions, CallbackParamOptions {
}
export interface OperatorPathParamOptions extends BaseParamOptions, FileParamOptions, ComputeOnDirtyParamOptions, CallbackParamOptions {
    nodeSelection?: {
        context?: NodeContext;
        types?: Readonly<string[]>;
    };
    dependentOnFoundNode?: boolean;
    paramSelection?: ParamType | boolean;
}
export interface RampParamOptions extends BaseParamOptions {
}
export interface SeparatorParamOptions extends BaseParamOptions {
}
export interface StringParamOptions extends BaseParamOptions, FileParamOptions, CallbackParamOptions, ExpressionParamOptions {
    multiline?: boolean;
    language?: StringParamLanguage;
}
interface VectorParamOptions extends BaseParamOptions, ExpressionParamOptions, CallbackParamOptions, ComputeOnDirtyParamOptions {
}
export interface Vector2ParamOptions extends VectorParamOptions {
}
export interface Vector3ParamOptions extends VectorParamOptions {
}
export interface Vector4ParamOptions extends VectorParamOptions {
}
export interface ParamOptions extends NumberParamOptions, ColorConversionOptions, ComputeOnDirtyParamOptions, FolderParamOptions, ExpressionParamOptions, ButtonParamOptions, FileParamOptions, MenuNumericParamOptions, StringParamOptions, OperatorPathParamOptions {
    texture?: {
        env?: boolean;
    };
}
export declare class OptionsController {
    private _param;
    private _programatic_visible_state;
    private _options;
    private _default_options;
    constructor(_param: BaseParamType);
    dispose(): void;
    set(options: ParamOptions): void;
    copy(options_controller: OptionsController): void;
    set_option<K extends keyof ParamOptions>(name: K, value: ParamOptions[K]): void;
    private post_set_options;
    param(): BaseParamType;
    node(): BaseNodeType;
    default(): ParamOptions;
    current(): ParamOptions;
    has_options_overridden(): boolean;
    overridden_options(): ParamOptions;
    overridden_option_names(): Array<keyof ParamOptions>;
    computeOnDirty(): boolean;
    private _computeOnDirty_callback_added;
    private _handle_computeOnDirty;
    private _compute_param;
    has_callback(): boolean;
    private _callbackAllowed;
    allowCallback(): void;
    execute_callback(): void;
    private get_callback;
    private create_callback_from_string;
    color_conversion(): ColorConversion | undefined;
    makes_node_dirty_when_dirty(): boolean;
    file_browse_option(): {
        type: FileType[];
    } | undefined;
    file_browse_allowed(): boolean;
    file_browse_type(): FileType[] | null;
    is_expression_for_entities(): boolean;
    level(): number;
    has_menu(): boolean;
    private menu_options;
    menu_entries(): NumericParamOptionsMenuEntry[];
    has_menu_radio(): boolean;
    is_multiline(): boolean;
    language(): StringParamLanguage | undefined;
    is_code(): boolean;
    node_selection_options(): {
        context?: NodeContext | undefined;
        types?: readonly string[] | undefined;
    } | undefined;
    node_selection_context(): NodeContext | undefined;
    node_selection_types(): readonly string[] | undefined;
    dependent_on_found_node(): boolean | undefined;
    is_selecting_param(): boolean;
    param_selection_options(): boolean | ParamType | undefined;
    param_selection_type(): ParamType | undefined;
    range(): Number2;
    step(): number | undefined;
    private range_locked;
    ensure_in_range(value: number): number;
    is_spare(): boolean;
    texture_options(): {
        env?: boolean | undefined;
    } | undefined;
    texture_as_env(): boolean;
    is_hidden(): boolean;
    is_visible(): boolean;
    set_visible_state(state: boolean): void;
    label(): string | undefined;
    is_label_hidden(): boolean;
    is_field_hidden(): boolean;
    ui_data_depends_on_other_params(): boolean;
    visibility_predecessors(): BaseParamType[];
    private _update_visibility_and_remove_dirty_bound;
    private _visibility_graph_node;
    private _ui_data_dependency_set;
    set_ui_data_dependency(): void;
    private update_visibility_and_remove_dirty;
    update_visibility(): Promise<void>;
}
export {};
