import { PartialStateUpdater, WritableStateSource } from '@ngrx/signals';
import { EventCreator } from '@ngrx/signals/events';

type ImmerStateUpdater<State extends object> = (state: NoInfer<State>) => void;
declare function immerPatchState<State extends object>(stateSource: WritableStateSource<State>, ...updaters: Array<Partial<NoInfer<State>> | PartialStateUpdater<NoInfer<State>> | ImmerStateUpdater<State>>): void;
type CaseReducer<State extends object, EventCreators extends EventCreator<string, any>[]> = (event: {
    [K in keyof EventCreators]: ReturnType<EventCreators[K]>;
}[number], state: State) => Partial<State> | PartialStateUpdater<State> | Array<Partial<State> | PartialStateUpdater<State>>;
type CaseReducerResult<State extends object, EventCreators extends EventCreator<string, any>[]> = {
    reducer: CaseReducer<State, EventCreators>;
    events: EventCreators;
};
declare function immerOn<State extends object, EventCreators extends EventCreator<string, any>[]>(...args: [
    ...events: EventCreators,
    reducer: (state: State, action: ReturnType<EventCreators[number]>) => void
]): CaseReducerResult<State, EventCreator<string, any>[]>;

export { immerOn, immerPatchState };
export type { ImmerStateUpdater };
