import * as Y from 'yjs';
import { SimpleSyncProvider } from '../providers/SimpleSyncProvider';
import type { ConnectionStatus, ModelConfig, PresenceInfo, Unsubscribe, UserInfo } from '../types';
declare const BaseSyncModel_base: import("mobx-keystone")._Model<unknown, {
    id: import("mobx-keystone").OptionalModelProp<string>;
    room: import("mobx-keystone").OptionalModelProp<string>;
}, never, never>;
export declare abstract class BaseSyncModel<T = unknown> extends BaseSyncModel_base {
    ydoc: Y.Doc;
    protected provider: SimpleSyncProvider | null;
    private providerResolver;
    private providerPromise;
    protected bindingDisposer: (() => void) | null;
    connectionStatus: ConnectionStatus;
    presenceInfo: PresenceInfo;
    protected config: ModelConfig;
    private subscriptions;
    constructor(config?: ModelConfig);
    protected abstract initializeYjsStructure(): void;
    protected abstract setupYjsBinding(): void;
    abstract getValue(): T;
    abstract setValue(value: T): void;
    connect(options?: Partial<ModelConfig['provider']>): void;
    awaitProvider(): Promise<SimpleSyncProvider>;
    disconnect(): void;
    subscribe(callback: (value: T) => void): Unsubscribe;
    subscribeToConnection(callback: (status: ConnectionStatus) => void): Unsubscribe;
    subscribeToPresence(callback: (presence: PresenceInfo) => void): Unsubscribe;
    get isConnected(): boolean;
    get activeUsers(): number;
    setUserInfo(user: Partial<UserInfo>): void;
    private handleStatusChange;
    private handlePeersChange;
    private handleAwarenessChange;
    private handleSynced;
    private updateConnectionStatus;
    destroy(): void;
    getSnapshot(): {
        value: T;
        connectionStatus: ConnectionStatus;
        presenceInfo: PresenceInfo;
        room: string;
    };
    enableDebug(): void;
    disableDebug(): void;
}
export {};
