import { Mirror } from '../../../rrweb-snapshot';
import { default as CrossOriginIframeMirror } from './cross-origin-iframe-mirror';
import { eventWithoutTime, serializedNodeWithId, mutationCallBack } from '../../../types';
import { StylesheetManager } from './stylesheet-manager';

export declare class IframeManager {
    private iframes;
    private crossOriginIframeMap;
    crossOriginIframeMirror: CrossOriginIframeMirror;
    crossOriginIframeStyleMirror: CrossOriginIframeMirror;
    crossOriginIframeRootIdMap: WeakMap<HTMLIFrameElement, number>;
    private iframeContentDocumentMap;
    private iframeObserverCleanupMap;
    private mirror;
    private mutationCb;
    private wrappedEmit;
    private loadListener?;
    private stylesheetManager;
    private recordCrossOriginIframes;
    constructor(options: {
        mirror: Mirror;
        mutationCb: mutationCallBack;
        stylesheetManager: StylesheetManager;
        recordCrossOriginIframes: boolean;
        wrappedEmit: (e: eventWithoutTime, isCheckout?: boolean) => void;
    });
    addIframe(iframeEl: HTMLIFrameElement): void;
    getIframeContentDocument(iframeEl: HTMLIFrameElement): Document | undefined;
    setObserverCleanup(iframeEl: HTMLIFrameElement, cleanup: () => void): void;
    getObserverCleanup(iframeEl: HTMLIFrameElement): (() => void) | undefined;
    removeIframe(iframeEl: HTMLIFrameElement): void;
    addLoadListener(cb: (iframeEl: HTMLIFrameElement) => unknown): void;
    attachIframe(iframeEl: HTMLIFrameElement, childSn: serializedNodeWithId): void;
    private handleMessage;
    private transformCrossOriginEvent;
    private replace;
    private replaceIds;
    private replaceStyleIds;
    private replaceIdOnNode;
    private patchRootIdOnNode;
}
