import { SignalListener } from "./parts/listener.js";
import { accessed } from "./parts/accessed_symbol.js";
export declare class Signal<V> {
    #private;
    static unwrap: <A>(anything: any) => A extends Signal<infer V_1> ? V_1 : A;
    [accessed]: boolean;
    constructor(v: V);
    /** @deprecated use `on` method instead */
    subscribe(listener: SignalListener<V>): () => void;
    on(listener: SignalListener<V>): () => void;
    once(listener: SignalListener<V>): () => void;
    clear(): void;
    publish(): Promise<void>;
    get wait(): Promise<V>;
    get value(): V;
    set value(v: V);
    /** set the signal value and publish, only if a deep change is detected (uses deep.equal to scan whole object trees) */
    setDeep(v: V): void;
    /** set the signal value and publish, even if there's no change detected */
    setAndPublish(v: V): void;
    /** set the signal value, but do not publish (perhaps to prevent views rerendering) */
    setWithoutPublish(v: V): void;
    /** @deprecated use `setWithoutPublish` instead */
    setValueNoPublish(v: V): void;
}
