import type { Atom, AtomOptions, Observer, Subscription } from '@tanstack/store';
export declare function subscribeNoEffect(): Subscription;
/**
 * Ember-native signal implementation.
 * In future ember >7.3 `tracked` will be available by itself
 * so the class wrapper will not be needed for those versions
 */
export declare class Signal<T> {
    #private;
    _value: T;
    constructor(value: T, options: AtomOptions<T> | undefined);
    subscribe(listenerOrObserver: Observer<T> | ((value: T) => void)): Subscription;
    get(): T;
    set(value: T | ((prev: T) => T)): void;
    get value(): T;
    set value(next: T);
    update(fn: (value: T) => T): void;
}
export declare class ComputedSignal<T> {
    #private;
    constructor(compute: () => T);
    get(): T;
    subscribe: typeof subscribeNoEffect;
    get value(): T;
}
export declare function signal<T>(value: T, options: AtomOptions<T> | undefined): Signal<T>;
/**
 * Creates an Ember-native writable atom, satisfying the `@tanstack/store`
 * `Atom` contract so it can be passed to `options.atoms`. Because it is backed
 * by a `@tracked` Signal, reading `atom.get()` directly in a template or
 * getter is reactive — unlike a foreign `@tanstack/store` atom, whose reads
 * create no Glimmer tag dependency.
 *
 * Takes a plain initial value only; there is no derived/function overload.
 */
export declare function createAtom<T>(initialValue: T, options?: AtomOptions<T>): Atom<T>;
export declare function computed<T>(fn: () => T): ComputedSignal<T>;
//# sourceMappingURL=signal.d.ts.map