///
import type BaseEventEmitter from 'events';
import { Provider } from 'magic-transport';
import { type VisibleArea } from '../utils/dom/viewport';
import { EventEmitter } from '../utils/event-emitter';
import type { ContentElement } from '../layouts/content-element';
import type { Callback, Debounce, Size, Promisify } from '../types';
import type { Widget, WidgetProviderAPI } from '../widget';
import type { IFrameConsumerAPI } from './consumer';
import { Resizer } from './provider-resizer';
/**
* Provider facade available in the iframe
*/
export interface IFrameProviderAPI extends WidgetProviderAPI {
resize(): void;
setSize(size: Size): void;
}
/**
* Wrapper over an iframe
*
* @event viewportChange Event when the viewport of the element changes
* @event destroy Termination of the provider
*/
export declare class IFrameProvider extends EventEmitter implements ContentElement {
id: string;
url: string;
resizer?: Resizer;
transport?: Provider;
consumer?: Promisify;
provider?: BaseEventEmitter & IFrameProviderAPI;
element: HTMLIFrameElement;
private widget;
private viewportManager?;
private consumerOrigin;
private reduceViewportChange?;
private destroyed;
/**
* Creating a new provider instance
*
* @param url URL to load the iframe from
* @param widget Widget object
* @param id Unique widget identifier
* @param reduceViewportChange Method to debounce viewport change tracking
*/
constructor(url: string, widget: Widget, id: string, reduceViewportChange?: Debounce);
/**
* Get the current iframe element
*/
getElement(): HTMLIFrameElement;
/**
* Create an iframe element
*/
createElement(): void;
/**
* Initialization of the iframe provider
*/
initialize(): Promise & IFrameConsumerAPI>>;
/**
* Subscription to changes in the visible area of the iframe
*
* @param callback Callback function
*/
subscribeVisibleAreaChange(callback: Callback): () => void;
/**
* Get the visible area of the iframe
*/
getVisibleArea(): VisibleArea;
private subscribeViewportChange;
/**
* Scroll event handler
*/
updateViewport: () => void;
/**
* Recalculate iframe sizes
*/
resize(): void;
/**
* Method called when removing the iframe
*/
destroy: () => void;
}