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