import { IObservable, IReader, ITransaction, ISettableObservable, IObservableWithChange } from "../base.js";
import { IChangeTracker } from "../changeTracker.js";
import { DisposableStore, EqualityComparer, IDisposable } from "../commonFacade/deps.js";
import { DebugOwner, IDebugNameData } from "../debugName.js";
import { IDerivedReader } from "./derivedImpl.js";
export declare function derived<T, TChange = void>(computeFn: (reader: IDerivedReader<TChange>) => T): IObservableWithChange<T, TChange>;
export declare function derived<T, TChange = void>(owner: DebugOwner, computeFn: (reader: IDerivedReader<TChange>) => T): IObservableWithChange<T, TChange>;
export declare function derivedWithSetter<T>(owner: DebugOwner | undefined, computeFn: (reader: IReader) => T, setter: (value: T, transaction: ITransaction | undefined) => void): ISettableObservable<T>;
export declare function derivedOpts<T>(options: IDebugNameData & {
    equalsFn?: EqualityComparer<T>;
    onLastObserverRemoved?: (() => void);
}, computeFn: (reader: IReader) => T): IObservable<T>;
export declare function derivedHandleChanges<T, TDelta, TChangeSummary>(options: IDebugNameData & {
    changeTracker: IChangeTracker<TChangeSummary>;
    equalityComparer?: EqualityComparer<T>;
}, computeFn: (reader: IDerivedReader<TDelta>, changeSummary: TChangeSummary) => T): IObservableWithChange<T, TDelta>;
export declare function derivedWithStore<T>(computeFn: (reader: IReader, store: DisposableStore) => T): IObservable<T>;
export declare function derivedWithStore<T>(owner: DebugOwner, computeFn: (reader: IReader, store: DisposableStore) => T): IObservable<T>;
export declare function derivedDisposable<T extends IDisposable | undefined>(computeFn: (reader: IReader) => T): IObservable<T>;
export declare function derivedDisposable<T extends IDisposable | undefined>(owner: DebugOwner, computeFn: (reader: IReader) => T): IObservable<T>;
