///
import { IFrameProvider } from './iframe/provider';
import { EventEmitter, type EventEmitterAPI } from './utils/event-emitter';
import { VisibleArea } from './utils/dom/viewport';
import type { Debounce, Callback } from './types';
import type { Mediator, MediatorAPI } from './mediator';
import type { Container, EnterViewportOptions } from './container';
import { BaseLayout } from './layouts/base-layout';
/**
* Widget facade available to the user
*/
export interface WidgetAPI extends EventEmitterAPI, Record {
params: Record;
destroy(): void;
}
/**
* Widget facade available in the iframe
*/
export interface WidgetProviderAPI extends EventEmitterAPI, Record {
url: string;
mediator: MediatorAPI;
params: Record;
destroy(): void;
subscribeVisibleAreaChange(callback: Callback): void;
getVisibleArea(): VisibleArea;
scrollTo(top: number, duration: number): void;
resize(): void;
}
/**
* Widget configuration
*/
export interface WidgetConfig {
/** Unique widget name */
name: string;
/** Widget initialization function, should render the widget */
initialize(this: Widget): void;
/** Widget deletion function, this function should be called by the user when deleting the widget */
destroy?(this: Widget): void;
/**
* A factory that exports the facade available to the user.
* By default, exports `properties` passed to the widget and properties that the iframe exports
*/
externalize?(this: Widget): Record;
/** A factory that exports the facade available in the iframe */
externalizeAsProvider?(this: Widget): Record;
/** Function to slow down the processing of Viewport changes, if it is absent, the standard debounce is used */
reduceViewportChange?: Debounce;
}
/**
* Widget
*
* @event destroy Widget deletion event
*/
export declare class Widget extends EventEmitter {
/** Widget identifier */
id: string;
/** Widget name */
name: string;
/** Widget configuration */
config: WidgetConfig;
/** Widget properties */
properties: Record;
/** External parameters for the widget */
params: Record;
mediator: Mediator;
layout?: BaseLayout;
container: Container;
iframe?: IFrameProvider;
private destroyed;
/**
* Creating a new widget instance
*
* @param mediator Mediator
* @param id Widget identifier
* @param config Widget configuration
* @param properties Widget properties, this object is copied as is into the widget and supplements it with these properties
* @param params Some external parameters for the widget.
* You can specify an object with any properties, except for reserved ones (and properties starting with _):
* - mediator
* - id
* - config
* - name
* - properties
* - params
* - initialize
* - updateViewport
* - destroy
* - createIFrame
* - externalize
* - externalizeAsProvider
* - whenContainerInViewport
* - reduceViewportChange
*/
constructor(mediator: Mediator, id: string, config: WidgetConfig, properties: Record, params?: Record);
/**
* Widget initialization function
*/
initialize(): Promise<{
on: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
once: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
emit: (eventName: string | symbol, ...args: any[]) => boolean;
params: Record;
destroy: () => void;
}>;
updateViewport(): void;
/**
* Destroy the widget and stop listening events
*/
destroy: () => void;
/**
* Create an iframe
*
* @param url The URL where the iframe is located
*/
createIFrame(url: string): IFrameProvider;
/**
* Set a container for the widget
*/
addToContainer(container: Container): void;
/**
* A factory that exports the facade available to the external user
*/
externalize(): {
on: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
once: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
emit: (eventName: string | symbol, ...args: any[]) => boolean;
params: Record;
destroy: () => void;
};
/**
* A factory that exports the facade available in the iframe
*/
externalizeAsProvider(): {
on: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
once: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
emit: (eventName: string | symbol, ...args: any[]) => boolean;
url: string;
mediator: {
on: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
once: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => import("events")<[never]>;
emit: (eventName: string | symbol, ...args: any[]) => boolean;
buildWidget: {
(name: string, containerElement: string | HTMLElement, params?: Record | undefined): Promise;
(name: string, params?: Record | undefined): Promise;
};
initializeDOMElements: () => void;
};
params: Record;
destroy: () => void;
subscribeVisibleAreaChange: (callback: Callback) => (() => void) | undefined;
getVisibleArea: () => VisibleArea;
scrollTo: (top: number, duration?: number) => Promise;
resize: (() => void) | undefined;
};
/**
* Wait when the container enters the viewport from the top
*/
whenContainerInViewport(options: EnterViewportOptions): Promise;
/**
* Scroll to a specific part of the iframe
*
* @param top The coordinate relative to the top-left corner of the iframe to scroll to
* @param duration Scroll animation time, default is 200
*/
private iFrameScrollTo;
/**
* Callback for iframe viewport change (whether the iframe is visible or not)
*/
private subscribeVisibleAreaChange;
private subscribeEvents;
private unsubscribeEvents;
private getIFrameVisibleArea;
}