import { LauncherAR } from "../ar/launcher-ar";
import { PlattarController } from "./controllers/plattar-controller";
/**
 * This is the primary <plattar-embed /> node that allows easy embedding
 * of Plattar related content
 */
export default class PlattarEmbed extends HTMLElement {
    private _currentType;
    private _observerState;
    private _controller;
    private _currentSceneID;
    private _currentServer;
    private _observer;
    constructor();
    get viewer(): HTMLElement | null;
    /**
     * Begin observing all changes to this DOM element
     */
    connectedCallback(): void;
    /**
     * creates a brand new instance of this embed
     */
    create(): PlattarController | null;
    /**
     * Locks the observer so attribute changes do not trigger anything
     */
    lockObserver(): void;
    /**
     * Unlocks the observer so attribute changes will start to re-trigger properly
     */
    unlockObserver(): void;
    /**
     * Destroys the active instance of this embed and resets internal state to default
     */
    destroy(): void;
    /**
     * this is only used for backwards-compatible legacy embed types typically
     * embedding products with variations (without a scene-id)
     */
    private _CreateLegacyEmbed;
    /**
     * creates the embed
     * this can also be called when attributes/state changes so embeds can be re-loaded
     */
    private _CreateEmbed;
    initAR(): Promise<LauncherAR>;
    startAR(): Promise<void>;
    startViewer(): Promise<HTMLElement>;
    startQRCode(options?: any | undefined | null): Promise<HTMLElement>;
    /**
     * This will remove the currently active Renderer
     *
     * @returns - true if removed successfully, false otherwise
     */
    removeRenderer(): boolean;
    /**
     * This is called by the observer if any of the embed attributes have changed
     * based on the state of the embed, we update the internal structure accordingly
     */
    private _OnAttributesUpdated;
    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
}
