import type { AsyncDeriveFn, OnUseArgument, StoresInput, StoresInputValues, SyncDeriveFn, Unsubscriber } from '../types';
import type { Consumer } from './store';
import { RawStoreComputedOrDerived } from './storeComputedOrDerived';
import type { RawStoreWritable } from './storeWritable';
declare abstract class RawStoreDerived<T, S extends StoresInput> extends RawStoreComputedOrDerived<T> implements Consumer {
    private readonly arrayMode;
    private readonly producers;
    private producerLinks;
    private cleanUpFn;
    flags: number;
    constructor(producers: S, initialValue: T);
    callCleanUpFn(): void;
    startUse(): void;
    endUse(): void;
    areProducersUpToDate(): boolean;
    recompute(): void;
    protected abstract derive(values: S): void;
}
export declare class RawStoreDerivedStore<T, S extends StoresInput> extends RawStoreDerived<T, S> {
    protected readonly derive: (values: StoresInputValues<S>) => void;
    constructor(stores: S, initialValue: T, derive: (values: StoresInputValues<S>) => void);
}
export declare class RawStoreSyncDerived<T, S extends StoresInput> extends RawStoreDerived<T, S> {
    private readonly deriveFn;
    constructor(stores: S, _initialValue: T, deriveFn: SyncDeriveFn<T, S>);
    protected derive(values: StoresInputValues<S>): void;
}
export declare const createOnUseArg: <T>(store: RawStoreWritable<T>) => OnUseArgument<T>;
export declare class RawStoreAsyncDerived<T, S extends StoresInput> extends RawStoreDerived<T, S> {
    private readonly deriveFn;
    private readonly setFn;
    constructor(stores: S, initialValue: T, deriveFn: AsyncDeriveFn<T, S>);
    protected derive(values: StoresInputValues<S>): Unsubscriber | void;
}
export {};
