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 declare const PARAM_OPTION_NAMES: {
    CALLBACK_OPTION: string;
};
export interface GenericParamOptionsMenuEntry<T> {
    name: string;
    value: T;
}
export type StringParamOptionsMenuEntry = GenericParamOptionsMenuEntry<string>;
export type NumericParamOptionsMenuEntry = GenericParamOptionsMenuEntry<number>;
export interface MenuNumericParamOptions {
    menu?: {
        entries: NumericParamOptionsMenuEntry[];
    };
}
export interface MenuStringParamOptions {
    menuString?: {
        entries: StringParamOptionsMenuEntry[];
    };
}
export declare enum StringParamLanguage {
    CSS = "css",
    GLSL = "glsl",
    HTML = "html",
    TYPESCRIPT = "typescript",
    JSON = "json"
}
export declare enum FileType {
    AUDIO = "audio",
    TEXTURE_IMAGE = "texture_image",
    TEXTURE_VIDEO = "texture_video",
    GEOMETRY = "geometry",
    FONT = "font",
    SVG = "svg",
    JSON = "json"
}
export type VisibleIfParamOptions = PolyDictionary<number | boolean | string>;
export interface BaseParamOptions {
    cook?: boolean;
    spare?: boolean;
    hidden?: boolean;
    field?: boolean;
    visibleIf?: VisibleIfParamOptions | VisibleIfParamOptions[];
    separatorBefore?: boolean;
    separatorAfter?: boolean;
    joinToPreviousParam?: boolean;
    editable?: boolean;
}
interface ExpressionParamOptions {
    expression?: {
        forEntities?: boolean;
    };
}
interface NumberParamOptions extends BaseParamOptions {
    range?: Number2;
    rangeLocked?: Boolean2;
    step?: number;
}
interface FileParamOptions {
    fileBrowse?: {
        extensions: string[];
    };
}
interface ComputeOnDirtyParamOptions {
    computeOnDirty?: boolean;
}
interface CallbackParamOptions {
    callback?: (node: BaseNodeType, param: BaseParamType) => any;
    callbackString?: string;
}
interface LabelParamOptions {
    label?: string;
}
interface LabelVisibilityParamOptions {
    hideLabel?: boolean;
}
interface ColorConversionOptions {
    conversion?: ColorConversion;
}
export interface BooleanParamOptions extends BaseParamOptions, ComputeOnDirtyParamOptions, MenuNumericParamOptions, ExpressionParamOptions, CallbackParamOptions, LabelParamOptions {
}
export interface ButtonParamOptions extends BaseParamOptions, CallbackParamOptions, LabelParamOptions {
}
export interface ColorParamOptions extends BaseParamOptions, LabelParamOptions, ColorConversionOptions, ExpressionParamOptions, CallbackParamOptions, ComputeOnDirtyParamOptions {
}
export interface FloatParamOptions extends NumberParamOptions, MenuNumericParamOptions, ComputeOnDirtyParamOptions, ExpressionParamOptions, CallbackParamOptions {
}
export interface FolderParamOptions extends BaseParamOptions {
    level?: number;
}
interface ObjectMask {
    inputIndex?: number;
    fromInputOnly?: boolean;
}
type ObjectMaskOptions = ObjectMask | boolean;
export interface IntegerParamOptions extends NumberParamOptions, MenuNumericParamOptions, ComputeOnDirtyParamOptions, ExpressionParamOptions, CallbackParamOptions {
}
export interface NodePathParamOptions extends BaseParamOptions, FileParamOptions, ComputeOnDirtyParamOptions, CallbackParamOptions {
    nodeSelection?: {
        context?: NodeContext;
        types?: Readonly<string[]>;
    };
    dependentOnFoundNode?: boolean;
}
export interface ParamPathParamOptions extends BaseParamOptions, FileParamOptions, ComputeOnDirtyParamOptions, CallbackParamOptions {
    dependentOnFoundParam?: boolean;
    paramSelection?: ParamType | boolean;
}
export interface RampParamOptions extends BaseParamOptions, LabelVisibilityParamOptions {
}
export interface SeparatorParamOptions extends BaseParamOptions {
}
export interface StringParamOptions extends BaseParamOptions, MenuStringParamOptions, FileParamOptions, CallbackParamOptions, ExpressionParamOptions, LabelVisibilityParamOptions {
    multiline?: boolean;
    language?: StringParamLanguage;
    objectMask?: ObjectMaskOptions;
}
interface VectorParamOptions extends BaseParamOptions, LabelParamOptions, ExpressionParamOptions, CallbackParamOptions, ComputeOnDirtyParamOptions {
}
export interface Vector2ParamOptions extends VectorParamOptions {
}
export interface Vector3ParamOptions extends VectorParamOptions {
}
interface QuaternionOptions {
    asQuaternion?: boolean;
}
export interface Vector4ParamOptions extends VectorParamOptions, QuaternionOptions {
}
export interface ParamOptions extends NumberParamOptions, ColorConversionOptions, ComputeOnDirtyParamOptions, FolderParamOptions, ExpressionParamOptions, ButtonParamOptions, FileParamOptions, MenuNumericParamOptions, StringParamOptions, NodePathParamOptions, ParamPathParamOptions, LabelVisibilityParamOptions, QuaternionOptions {
    texture?: {
        env?: boolean;
    };
}
export declare class OptionsController {
    private _param;
    private _programaticVisibleState;
    private _options;
    private _default_options;
    constructor(_param: BaseParamType);
    dispose(): void;
    set(options: ParamOptions): void;
    copy(options_controller: OptionsController): void;
    setOption<K extends keyof ParamOptions>(optionName: K, value: ParamOptions[K]): void;
    private _validateOption;
    private postSetOptions;
    param(): BaseParamType;
    node(): BaseNodeType;
    default(): ParamOptions;
    current(): ParamOptions;
    hasOptionsOverridden(): boolean;
    overriddenOptions(): ParamOptions;
    overriddenOptionNames(): Array<keyof ParamOptions>;
    computeOnDirty(): boolean;
    private _computeOnDirtyCallbackAdded;
    private _handleComputeOnDirty;
    private _computeParam;
    hasCallback(): boolean;
    private _callbackAllowed;
    allowCallback(): void;
    executeCallback(): Promise<void>;
    private getCallback;
    private createCallbackFromString;
    colorConversion(): ColorConversion;
    makesNodeDirtyWhenDirty(): boolean;
    fileBrowseOption(): {
        extensions: string[];
    } | undefined;
    fileBrowseAllowed(): boolean;
    fileBrowseExtensions(): string[] | null;
    separatorBefore(): boolean | undefined;
    separatorAfter(): boolean | undefined;
    joinToPreviousParam(): boolean | undefined;
    setEditableState(state: boolean): void;
    editable(): boolean;
    isExpressionForEntities(): boolean;
    level(): number;
    hasMenu(): boolean;
    private menuOptions;
    private menuStringOptions;
    menuEntries(): Array<NumericParamOptionsMenuEntry | StringParamOptionsMenuEntry>;
    ensureValueInMenuEntries(value: number): number;
    isMultiline(): boolean;
    language(): StringParamLanguage | undefined;
    isCode(): boolean;
    nodeSelectionOptions(): {
        context?: NodeContext | undefined;
        types?: readonly string[] | undefined;
    } | undefined;
    nodeSelectionContext(): NodeContext | undefined;
    nodeSelectionTypes(): readonly string[] | undefined;
    displayObjectMaskSelection(): boolean;
    objectMaskInputIndex(): number;
    objectMaskFromInputOnly(): boolean;
    dependentOnFoundNode(): boolean | undefined;
    dependentOnFoundParam(): boolean | undefined;
    isSelectingParam(): boolean;
    range(): Number2;
    step(): number | undefined;
    asQuaternion(): boolean;
    rangeLocked(): Boolean2;
    ensureInRange(value: number): number;
    isSpare(): boolean;
    textureOptions(): {
        env?: boolean | undefined;
    } | undefined;
    textureAsEnv(): boolean;
    isHidden(): boolean;
    isVisible(): boolean;
    setVisibleState(state: boolean): void;
    label(): string | undefined;
    isLabelHidden(): boolean;
    isFieldHidden(): boolean;
    uiDataDependsOnOtherParams(): boolean;
    visibilityPredecessors(): BaseParamType[];
    private _updateVisibilityAndRemoveDirtyBound;
    private _visibility_graph_node;
    private _ui_data_dependency_set;
    setUiDataDependency(): void;
    private updateVisibilityAndRemoveDirty;
    updateVisibility(): Promise<void>;
}
export {};
