/**
 * @typedef {import("../utils/expression.js").ExpressionFunction & {
 *   subscribe: (listener: () => void) => () => void,
 *   invalidate: () => void,
 *   identifier: () => string
 * }} ExprRefFunction
 */
/**
 * @param {any} x
 * @returns {x is import("../spec/parameter.js").ExprRef}
 */
export function isExprRef(x: any): x is import("../spec/parameter.js").ExprRef;
/**
 * Removes ExprRef from the type and checks that the value is not an ExprRef.
 * This is designed to be used with `activateExprRefProps`.
 *
 * @param {T | import("../spec/parameter.js").ExprRef} x
 * @template T
 * @returns {T}
 */
export function withoutExprRef<T>(x: T | import("../spec/parameter.js").ExprRef): T;
/**
 * @param {import("../spec/parameter.js").Parameter} param
 * @returns {param is import("../spec/parameter.js").VariableParameter}
 */
export function isVariableParameter(param: import("../spec/parameter.js").Parameter): param is import("../spec/parameter.js").VariableParameter;
/**
 * @param {import("../spec/parameter.js").Parameter} param
 * @returns {param is import("../spec/parameter.js").SelectionParameter}
 */
export function isSelectionParameter(param: import("../spec/parameter.js").Parameter): param is import("../spec/parameter.js").SelectionParameter;
/**
 * Validates a parameter name. If the name is invalid, throws an error.
 * Otherwise, returns the name.
 *
 * @param {string} name
 * @returns {string} the name
 */
export function validateParameterName(name: string): string;
/**
 * Computes the default value for a parameter specification.
 *
 * @param {import("../spec/parameter.js").Parameter} param
 * @param {{ createExpression: (expr: string) => ExprRefFunction }} [paramRuntime]
 * @param {ExprRefFunction} [exprFn]
 * @returns {any}
 */
export function getDefaultParamValue(param: import("../spec/parameter.js").Parameter, paramRuntime?: {
    createExpression: (expr: string) => ExprRefFunction;
}, exprFn?: ExprRefFunction): any;
/**
 * Takes a record of properties that may have ExprRefs as values. Converts the
 * ExprRefs to getters and setups a listener that is called when any of the
 * expressions (upstream parameters) change.
 *
 * @param {{ createExpression: (expr: string) => ExprRefFunction, watchExpression?: (expr: string, listener: () => void, options?: { scopeOwned?: boolean, registerDisposer?: (disposer: () => void) => void }) => ExprRefFunction, whenPropagated?: () => Promise<void> }} paramRuntime
 * @param {T} props The properties object
 * @param {(props: ReadonlySet<keyof T>) => void} [listener] Listener to be called when any of the expressions change
 * @param {(disposer: () => void) => void} [registerDisposer]
 * @param {{ batchMode?: "microtask" | "whenPropagated" }} [options]
 * @returns T
 * @template {Record<string, any | import("../spec/parameter.js").ExprRef>} T
 */
export function activateExprRefProps<T extends Record<string, any | import("../spec/parameter.js").ExprRef>>(paramRuntime: {
    createExpression: (expr: string) => ExprRefFunction;
    watchExpression?: (expr: string, listener: () => void, options?: {
        scopeOwned?: boolean;
        registerDisposer?: (disposer: () => void) => void;
    }) => ExprRefFunction;
    whenPropagated?: () => Promise<void>;
}, props: T, listener?: (props: ReadonlySet<keyof T>) => void, registerDisposer?: (disposer: () => void) => void, options?: {
    batchMode?: "microtask" | "whenPropagated";
}): T;
/**
 * Creates a function that always returns the same value.
 *
 * @param {any} value
 * @returns {ExprRefFunction}
 */
export function makeConstantExprRef(value: any): ExprRefFunction;
export type ExprRefFunction = import("../utils/expression.js").ExpressionFunction & {
    subscribe: (listener: () => void) => () => void;
    invalidate: () => void;
    identifier: () => string;
};
//# sourceMappingURL=paramUtils.d.ts.map