import { type Accessor, AccessorProp, type EncodedAccessor, type Scope } from "../common/types";
export type SignalFn = (scope: Scope) => void;
export type Signal<T = unknown, U extends Scope = Scope> = (scope: U, value: T) => void;
export declare function _let<T>(id: EncodedAccessor, fn?: SignalFn): (scope: Scope, value: T) => T;
export declare function _let_change<T>(id: EncodedAccessor, fn?: SignalFn): (scope: Scope, value: T, valueChange?: (v: T) => void) => T;
export declare function _const<T>(valueAccessor: EncodedAccessor, fn?: SignalFn): Signal<T>;
export declare function _or(id: number, fn: SignalFn, defaultPending?: number, scopeIdAccessor?: EncodedAccessor): Signal<never>;
export declare function _for_closure(ownerLoopNodeAccessor: EncodedAccessor, fn: SignalFn): SignalFn;
export declare function _if_closure(ownerConditionalNodeAccessor: EncodedAccessor, branch: number, fn: SignalFn): SignalFn;
export declare function subscribeToScopeSet(ownerScope: Scope, accessor: Accessor, scope: Scope): void;
export declare function _closure(...closureSignals: ReturnType<typeof _closure_get>[]): (scope: Scope) => void;
export declare function _closure_get(valueAccessor: EncodedAccessor, fn: SignalFn, getOwnerScope?: (scope: Scope) => Scope, resumeId?: string): SignalFn & {
    scopeInstancesAccessor: string;
    signalIndexAccessor: string;
    index: number;
};
export declare function _child_setup(setup: Signal<never> & {
    _: Signal<Scope>;
}): Signal<never, Scope> & {
    _: Signal<Scope>;
};
export declare function _var(scope: Scope, childAccessor: EncodedAccessor, signal: Signal<unknown>): void;
export declare const _return: (scope: Scope, value: unknown) => any;
export declare function _return_change(scope: Scope, changeHandler?: ((value: unknown) => void) | null | false): void;
export declare const _var_change: (scope: Scope, value: unknown, name?: string) => void;
export declare function _id({ [AccessorProp.Global]: $global }: Scope): string;
export declare function _script(id: string, fn: (scope: Scope) => void): (scope: Scope) => void;
export declare function _el_read<T>(value: T): T;
type Hoistable<T> = () => T;
type Hoisted<T> = Hoistable<T> & Iterable<T>;
export declare function _hoist<T>(...path: Accessor[]): (scope: Scope) => Hoisted<T>;
export declare function _hoist_resume<T>(id: string, ...path: Accessor[]): (scope: Scope) => Hoisted<T>;
export {};
