/**
 * useRealtimeCollaboration Hook - Real-time multi-user collaboration
 * Features: WebSocket connections, user presence, cursor tracking, live updates
 */
export interface CollaborationUser {
    id: string;
    name: string;
    avatar?: string;
    color: string;
    isActive: boolean;
    lastSeen: Date;
    cursor?: {
        x: number;
        y: number;
        element?: string;
    };
    selection?: {
        start: number;
        end: number;
        text: string;
    };
    metadata?: Record<string, any>;
}
export interface CollaborationEvent {
    id: string;
    type: 'user-joined' | 'user-left' | 'cursor-moved' | 'text-changed' | 'message-sent' | 'reaction-added' | 'custom';
    userId: string;
    timestamp: Date;
    data: any;
    conversationId?: string;
}
export interface UseRealtimeCollaborationOptions {
    enabled?: boolean;
    conversationId?: string;
    userId?: string;
    userName?: string;
    userAvatar?: string;
    websocketUrl?: string;
    reconnectInterval?: number;
    maxReconnectAttempts?: number;
    heartbeatInterval?: number;
    cursorUpdateThrottle?: number;
    onUserJoined?: (user: CollaborationUser) => void;
    onUserLeft?: (userId: string) => void;
    onCursorMoved?: (userId: string, cursor: {
        x: number;
        y: number;
    }) => void;
    onEventReceived?: (event: CollaborationEvent) => void;
    onConnectionChange?: (connected: boolean) => void;
}
export interface UseRealtimeCollaborationReturn {
    isConnected: boolean;
    collaborators: CollaborationUser[];
    currentUser: CollaborationUser | null;
    userCursors: Array<{
        userId: string;
        userName: string;
        x: number;
        y: number;
        color: string;
    }>;
    connectionStatus: 'connecting' | 'connected' | 'disconnected' | 'error';
    shareConversation: (conversationId: string) => Promise<string>;
    broadcastEvent: (event: Omit<CollaborationEvent, 'id' | 'timestamp' | 'userId'>) => void;
    broadcastMessage: (message: any) => void;
    updateCursor: (x: number, y: number, element?: string) => void;
    updateSelection: (start: number, end: number, text: string) => void;
    addReaction: (messageId: string, emoji: string) => void;
    removeReaction: (messageId: string, emoji: string) => void;
    sendTypingIndicator: (isTyping: boolean) => void;
    inviteUser: (email: string) => Promise<void>;
    kickUser: (userId: string) => Promise<void>;
    muteUser: (userId: string, duration?: number) => Promise<void>;
    disconnect: () => void;
    reconnect: () => void;
}
export declare const useRealtimeCollaboration: ({ enabled, conversationId, userId, userName, userAvatar, websocketUrl, reconnectInterval, maxReconnectAttempts, heartbeatInterval, cursorUpdateThrottle, onUserJoined, onUserLeft, onCursorMoved, onEventReceived, onConnectionChange }?: UseRealtimeCollaborationOptions) => UseRealtimeCollaborationReturn;
export declare const useAdvancedCollaboration: (options: UseRealtimeCollaborationOptions & {
    enableVoiceChat?: boolean;
    enableVideoChat?: boolean;
    enableScreenShare?: boolean;
    enableFileSharing?: boolean;
}) => {
    voiceChatActive: boolean;
    videoChatActive: boolean;
    screenShareActive: boolean;
    sharedFiles: File[];
    startVoiceChat: () => Promise<void>;
    startVideoChat: () => Promise<void>;
    startScreenShare: () => Promise<void>;
    shareFile: (file: File) => Promise<void>;
    stopVoiceChat: () => void;
    stopVideoChat: () => void;
    stopScreenShare: () => void;
    isConnected: boolean;
    collaborators: CollaborationUser[];
    currentUser: CollaborationUser | null;
    userCursors: Array<{
        userId: string;
        userName: string;
        x: number;
        y: number;
        color: string;
    }>;
    connectionStatus: "connecting" | "connected" | "disconnected" | "error";
    shareConversation: (conversationId: string) => Promise<string>;
    broadcastEvent: (event: Omit<CollaborationEvent, "id" | "timestamp" | "userId">) => void;
    broadcastMessage: (message: any) => void;
    updateCursor: (x: number, y: number, element?: string) => void;
    updateSelection: (start: number, end: number, text: string) => void;
    addReaction: (messageId: string, emoji: string) => void;
    removeReaction: (messageId: string, emoji: string) => void;
    sendTypingIndicator: (isTyping: boolean) => void;
    inviteUser: (email: string) => Promise<void>;
    kickUser: (userId: string) => Promise<void>;
    muteUser: (userId: string, duration?: number) => Promise<void>;
    disconnect: () => void;
    reconnect: () => void;
};
export default useRealtimeCollaboration;
//# sourceMappingURL=useRealtimeCollaboration.d.ts.map