interface EmbedParams {
    [key: string]: any;
}
interface EmbedOption {
    id: string;
    version?: string;
    businessID: string;
    fitContent?: boolean;
    showLoader?: boolean;
    locale?: string;
    appearance?: string;
    customCSS?: string | string[];
    embedParams?: EmbedParams;
}
// Define event types
declare enum EventType {
    IFRAME_LOAD = "iframe:load",
    EMBED_IFRAME_READY = "iframe:ready",
    IFRAME_ERROR = "iframe:error",
    IFRAME_RESIZE = "iframe:resize"
}
interface IframeResizeType {
    height: number;
}
interface EventDataMap {
    [EventType.EMBED_IFRAME_READY]?: any;
    [EventType.IFRAME_ERROR]?: any;
    [EventType.IFRAME_LOAD]?: any;
    [EventType.IFRAME_RESIZE]?: IframeResizeType;
}
// Define callback interface
// Define callback interface based on event data
type EventCallbacks = {
    [K in keyof EventDataMap]?: ((data: EventDataMap[K]) => void)[];
};
declare class InstabookEmbed extends EventTarget {
    iframe: HTMLIFrameElement | undefined;
    iframeContainer: HTMLElement | null;
    loaderElement?: HTMLElement | null;
    iframeId: string;
    options: EmbedOption;
    private isReady;
    eventCallbacks: EventCallbacks;
    customStyles: HTMLStyleElement | null;
    constructor(options: EmbedOption);
    init(): void;
    // Register callback for a specific event type
    on<T extends EventType>(eventType: T, callback: (eventData?: EventDataMap[T]) => void): void;
    // Remove an event listener for a specific event type
    removeEventListener<T extends EventType>(eventType: T, callback: (data: EventDataMap[T]) => void): void;
    addEventListener<T extends EventType>(eventType: T, callback: (data: EventDataMap[T]) => void): void;
    private triggerEvent;
    // Stop the video
    reload(): void;
    // Get video duration
    getSomething(): number;
    // Send a message to the iframe
    sendMessage(message: string, data: any): void;
    // Event handler for messages
    private handleMessage;
    buildQueryString({ params, origin }: {
        params?: EmbedParams;
        origin: string;
    }): string;
    private onResize;
    private onReady;
    private onLoad;
    private onError;
    // Create the iframe
    private createIframe;
    reset(): void;
}
export { InstabookEmbed as default };
