import { AvatarSDKOptions, SpeakOptions, AvatarEvent, EventCallback } from './types';
export * from './types';
/**
 * The main class for interacting with the A.D.A.M. 3D avatar.
 * This class provides methods for connecting to the avatar, making it speak, and controlling its animations and expressions.
 * @example
 * ```javascript
 * import { AvatarSDK } from 'adam-sdk';
 *
 * const iframe = document.getElementById('avatar-iframe');
 * const sdk = new AvatarSDK(iframe);
 *
 * sdk.on('ready', () => {
 *   console.log('SDK is ready!');
 *   sdk.speak('Hello, world!');
 * });
 *
 * sdk.connect();
 * ```
 */
export declare class AvatarSDK {
    private iframe;
    private targetOrigin;
    private eventListeners;
    private pendingCommands;
    private isReady;
    private handshakeInterval;
    private fastPollInterval;
    private logLevel;
    /**
     * Creates an instance of the AvatarSDK.
     * @param iframeElement The HTMLIFrameElement that contains the avatar.
     * @param options Configuration options for the SDK.
     */
    constructor(iframeElement: HTMLIFrameElement, options?: AvatarSDKOptions);
    /**
     * Establishes a connection with the avatar iframe.
     * This method must be called before any other commands can be sent to the avatar.
     * It returns a promise that resolves when the connection is established.
     * @returns A promise that resolves when the connection is established.
     * @throws An error if the connection times out or the iframe fails to load.
     */
    connect(): Promise<void>;
    /**
     * Makes the avatar speak the provided text.
     * @param text The text for the avatar to speak.
     * @param options Additional options for speech, such as voice, rate, and pitch.
     * @returns A promise that resolves when the command is acknowledged by the iframe.
     * @throws An error if the text is not a non-empty string.
     */
    speak(text: string, options?: SpeakOptions): Promise<any>;
    /**
     * Triggers a specific animation by name.
     * @param name The name of the animation to play.
     * @param loop Whether the animation should loop.
     * @returns A promise that resolves with the command result.
     */
    playAnimation(name: string, loop?: boolean): Promise<any>;
    /**
     * Sets the avatar's facial expression.
     * @param name The name of the expression to set.
     * @returns A promise that resolves with the command result.
     */
    setExpression(name: string): Promise<any>;
    /**
     * Interrupts the current speech or action.
     * @returns A promise that resolves when the interrupt is complete.
     */
    interrupt(): Promise<any>;
    /**
     * Registers an event listener for a specific event.
     * @param eventName The name of the event to listen for.
     * @param callback The callback function to execute when the event is triggered.
     * @example
     * ```javascript
     * sdk.on('speech:start', (payload) => {
     *   console.log('Avatar started speaking:', payload.text);
     * });
     * ```
     */
    on(eventName: AvatarEvent, callback: EventCallback): void;
    /**
     * Removes an event listener for a specific event.
     * @param eventName The name of the event to remove the listener from.
     * @param callback The callback function to remove.
     */
    off(eventName: AvatarEvent, callback: EventCallback): void;
    /**
     * Cleans up resources and removes event listeners.
     * This should be called when the SDK is no longer needed to prevent memory leaks.
     */
    destroy(): void;
    private _sendCommand;
    private _handleMessage;
    private _postMessage;
    private _log;
    private _emitEvent;
}
