/// 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; }