import { StatedLibraryInterface, StatedLibraryObservable, StateEvent } from '@stated-library/interface';
export declare type LibOpts<RawState, State> = {
    deriveState?: (state: RawState) => State;
    createObs?: ObservableCtor<any>;
};
export declare type GetUpdates<State, RawState> = (state: State) => Partial<RawState>;
interface Observable<Value> extends StatedLibraryObservable<Value> {
    next: (value: Value) => void;
}
declare type ObservableCtor<Value> = (initialValue: Value) => Observable<Value>;
export declare function bindMethodsFromProto(obj: any): void;
declare class StatedLibBase<RawState, State = RawState, Meta = {}> implements StatedLibraryInterface<RawState, State, Meta> {
    opts: LibOpts<RawState, State>;
    stateEvent$: StatedLibraryObservable<StateEvent<RawState, State, Meta>>;
    state$: StatedLibraryObservable<State>;
    constructor(initialState: RawState, opts?: LibOpts<RawState, State>);
    static bindMethods(obj: any): void;
    readonly state: State;
    setState(rawState: RawState, event: string, meta?: Meta): void;
    updateState(updatesOrGetUpdates: Partial<RawState> | GetUpdates<State, RawState>, event: string, meta?: Meta): void;
    resetState(rawState: RawState, event: string, meta?: Meta): void;
}
export default StatedLibBase;
export { StatedLibBase };
