import { Signal } from '@angular/core';
import { BaseSyncModel, ModelConfig } from '../../../core/src/index';
export interface SyncModelSignalOptions {
    room?: string;
    websocket?: {
        url: string;
    };
    webrtc?: {
        enabled?: boolean;
        signaling?: string[];
    };
    debug?: boolean;
    persist?: boolean;
}
export interface SyncModelSignalResult<T, M extends BaseSyncModel<T>> {
    model: M;
    value: Signal<T>;
    isConnected: Signal<boolean>;
    connectionStatus: Signal<'connected' | 'connecting' | 'offline'>;
    activeUsers: Signal<number>;
    peerInfo: Signal<{
        total: number;
        local: number;
        remote: number;
    }>;
    destroy: () => void;
}
type InferModelType<M> = M extends BaseSyncModel<infer T> ? T : never;
export declare function syncModelSignal<M extends BaseSyncModel<any>>(ModelClass: new (config?: ModelConfig) => M, options?: SyncModelSignalOptions): SyncModelSignalResult<InferModelType<M>, M>;
export {};
