/**
 * MasterTabCoordinator - 主从标签管理类，在多标签环境中，选出一个主标签
 *
 * 支持功能：
 * - 检测标签页打开/关闭/隐藏/显示
 * - 主从标签页选举（基于页面活动时间）
 * - 单实例应用模式
 * - 标签页间消息传递
 * - 状态同步
 * - 心跳停止（当长时间无其他标签页活动时）
 */
export declare class MasterTabCoordinator {
    private static instance;
    private channelName;
    private channel;
    private tabId;
    private isClosing;
    private isMaster;
    private isHidden;
    private isInitialized;
    private masterTabId;
    private lastActiveTime;
    private lastHeartbeatReceived;
    private heartbeatInterval;
    private _isHeartbeatStopped;
    private heartbeatMode;
    private otherTabsDetected;
    private heartbeatStopTimeout;
    private firstHeartbeatAfterRestore;
    private knownTabsCache;
    private cleanupTimeout;
    private masterElectionTimeout;
    private options;
    private static readonly DEFAULT_OPTIONS;
    /**
     * 获取 TabManager 实例（单例模式）
     */
    static getInstance(options?: Partial<TabManagerOptions>): MasterTabCoordinator;
    /**
     * 私有构造函数，防止直接创建实例
     */
    private constructor();
    /**
     * 设置活动追踪
     */
    private setupActivityTracking;
    /**
     * 更新活动时间
     */
    private updateActivityTime;
    /**
     * 更新选项
     */
    updateOptions(options: Partial<TabManagerOptions>): void;
    private eventHandlers;
    /**
     * 添加事件监听器
     */
    on<K extends keyof TabManagerEvents>(event: K, handler: TabManagerEvents[K]): this;
    /**
     * 移除事件监听器
     */
    off<K extends keyof TabManagerEvents>(event: K, handler: TabManagerEvents[K]): this;
    /**
     * 触发事件
     */
    private emit;
    /**
     * 添加或更新标签页信息
     */
    private setTabInfo;
    /**
     * 删除标签页信息
     */
    private deleteTabInfo;
    /**
     * 更新心跳调度
     * 根据当前状态设置心跳频率
     */
    private updateHeartbeatSchedule;
    /**
     * 停止心跳发送
     */
    private stopHeartbeat;
    /**
     * 恢复心跳发送
     */
    private restoreHeartbeat;
    /**
     * 收到其他标签页消息时的处理
     * 这是恢复心跳的唯一途径
     */
    private handleExternalMessage;
    /**
     * 初始化 MasterTabCoordinator
     */
    initialize(): this;
    /**
     * 重新初始化 (例如当通道名称改变时)
     */
    private reinitialize;
    /**
     * 销毁 TabManager
     */
    destroy(): void;
    /**
     * 生成唯一的标签页 ID
     */
    private generateTabId;
    /**
     * 日志记录
     */
    private log;
    /**
     * 发送消息
     */
    private sendMessage;
    /**
     * 发送心跳
     */
    private sendHeartbeat;
    /**
     * 发送关闭消息
     */
    private sendCloseMessage;
    /**
     * 清理过期标签页
     */
    private cleanupStaleTabs;
    /**
     * 执行主标签页选举
     */
    private electMaster;
    /**
     * 处理重复标签页
     */
    private handleDuplicate;
    /**
     * 处理状态同步请求
     */
    private handleStateSyncRequest;
    /**
     * 请求状态同步
     */
    requestStateSync(): void;
    /**
     * 处理页面可见性变化
     */
    private handleVisibilityChange;
    /**
     * 处理页面卸载
     */
    private handleBeforeUnload;
    /**
     * 处理接收到的消息
     */
    private handleMessage;
    /**
     * 发送自定义消息到所有标签页
     * 即使心跳已停止，也会发送此消息
     */
    broadcast(data: any): void;
    /**
     * 获取当前是否为主标签页
     */
    isMasterTab(): boolean;
    /**
     * 获取当前标签页是否隐藏
     */
    isTabHidden(): boolean;
    /**
     * 获取当前标签页 ID
     */
    getTabId(): string;
    /**
     * 获取主标签页 ID
     */
    getMasterTabId(): string | null;
    /**
     * 获取已知标签页数量
     */
    getTabCount(): number;
    /**
     * 获取所有已知标签页
     */
    getKnownTabs(): Map<string, {
        lastSeen: number;
        isHidden?: boolean;
        lastActive?: number;
    }>;
    /**
     * 获取当前心跳模式
     */
    getHeartbeatMode(): "active" | "stopped";
    /**
     * 手动更新活动时间
     * 可在用户重要交互时调用
     */
    updateLastActiveTime(): void;
    /**
     * 获取心跳是否已停止
     */
    isHeartbeatStopped(): boolean;
    /**
     * 设置要同步的应用状态
     */
    setState(state: any): void;
    /**
     * 获取当前应用状态
     */
    getState(): any;
}
interface TabManagerOptions {
    channelName: string;
    debug: boolean;
    allowMultipleTabs: boolean;
    heartbeatIntervalMs: number;
    heartbeatStopThresholdMs: number;
    initialDetectionTimeMs: number;
    tabTimeoutMs: number;
    redirectUrl: string;
    redirectDelay: number;
    state?: any;
}
interface TabManagerEvents {
    master: () => void;
    slave: () => void;
    tabOpened: (tabId: string, data: any) => void;
    tabClosed: (tabId: string) => void;
    tabHidden: (tabId: string) => void;
    tabVisible: (tabId: string) => void;
    message: (message: any, tabId: string) => void;
    duplicate: () => void;
    stateReceived: (state: any) => void;
}
export default MasterTabCoordinator;
