import { Observable, Subscription } from 'rxjs';
import { ComponentStore } from '@ngrx/component-store';
import * as i0 from '@angular/core';
import { Type, Provider } from '@angular/core';

/**
 * Immer wrapper around `ImmerComponentStore` to mutate state
 * with `updater` and `setState`
 */
declare class ImmerComponentStore<State extends object> extends ComponentStore<State> {
    constructor(defaultState?: State);
    updater<ProvidedType = void, OriginType = ProvidedType, ValueType = OriginType, ReturnType = OriginType extends void ? () => void : (observableOrValue: ValueType | Observable<ValueType>) => Subscription>(updaterFn: (state: State, value: OriginType) => void | State): ReturnType;
    setState(stateOrUpdaterFn: State | ((state: State) => void | State)): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ImmerComponentStore<any>, [{ optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ImmerComponentStore<any>>;
}

/**
 * @description
 * Immer wrapper around `provideComponentStore()` in `@ngrx/component-store`.
 * @returns the ImmerComponentStore class registered as a provider
 */
declare function provideImmerComponentStore<T extends object>(componentStoreClass: Type<ImmerComponentStore<T>>): Provider[];

export { ImmerComponentStore, provideImmerComponentStore };
