import { t } from '../common';
declare type O = Record<string, unknown>;
export declare class StateObject<T extends O> implements t.IStateObjectWritable<T> {
    static create<T extends O>(initial: T): t.IStateObjectWritable<T>;
    static readonly<T extends O>(obj: t.IStateObjectWritable<T>): t.IStateObject<T>;
    static combine: <T_1 extends {
        [key: string]: {
            [x: string]: unknown;
        };
    }>(initial: T_1 | Record<keyof T_1, t.IStateObject<T_1[keyof T_1]>>, dispose$?: import("rxjs").Observable<any> | undefined) => t.StateMerger<T_1>;
    static toObject<T extends O>(input: T): T;
    static isStateObject(input: any): boolean;
    static isProxy(input: any): boolean;
    private constructor();
    dispose(): void;
    private _state;
    private _dispose$;
    readonly dispose$: import("rxjs").Observable<void>;
    private readonly _event$;
    readonly event: t.IStateObjectEvents<T>;
    readonly original: T;
    get isDisposed(): boolean;
    get state(): T;
    get readonly(): t.IStateObject<T>;
    change: t.StateObjectChange<T>;
    changeAsync: t.StateObjectChangeAsync<T>;
    private _changeComplete;
    private fire;
}
export {};
