{"version":3,"file":"index.cjs","sources":["../src/lib/types.ts","../src/lib/utils.ts","../src/lib/localizedContent.ts","../src/lib/step.ts","../src/lib/demo.ts","../src/lib/logging.ts","../src/lib/callbacks.ts","../src/lib/base64ToBlob.ts","../src/lib/visao.ts"],"sourcesContent":["import type { Demo } from './demo';\n\n/**\n * Represents the state of the viewer. Certain methods will need to have a or multiple specific status on order\n * to be executed.\n *\n * > `unmounted` -> viewer's HTML element is yet to be mounted in the DOM.\n *\n * > `mounted` -> viewer's HTML element has been mounted in the DOM.\n *\n * > `loading` -> a 3D model is currently loading into the viewer.\n *\n * > `loaded` -> a 3D is loaded in the viewer and is ready to be manipulated.\n */\nexport enum ViewerStatus {\n  UNMOUNTED = 'unmounted',\n  MOUNTED = 'mounted',\n  LOADING = 'loading',\n  LOADED = 'loaded',\n}\n\n/**\n * @ignore\n */\nexport const statusLevels = {\n  [ViewerStatus.UNMOUNTED]: 1,\n  [ViewerStatus.MOUNTED]: 2,\n  [ViewerStatus.LOADING]: 3,\n  [ViewerStatus.LOADED]: 4,\n};\n\n/**\n * @ignore\n */\nexport enum ViewerAPIMessage {\n  // GETTERS - Request the viewer\n  GET_VIEWER = 'VISAO/GET_VIEWER',\n  GET_STATUS = 'VISAO/GET_STATUS',\n  GET_VARIANT_INFO = 'VISAO/GET_VARIANT_INFO',\n  GET_LANGUAGE_INFO = 'VISAO/GET_LANGUAGE_INFO',\n  GET_ANIMATION_INFO = 'VISAO/GET_ANIMATION_INFO',\n  GET_DIMENSIONS_UNIT = 'VISAO/GET_DIMENSIONS_UNIT',\n  GET_DEMOS = 'VISAO/GET_DEMOS',\n  GET_SCREENSHOT = 'VISAO/GET_SCREENSHOT',\n\n  // SENDERS - Send back to the client\n  SEND_VIEWER = 'VISAO/SEND_VIEWER',\n  SEND_STATUS = 'VISAO/SEND_STATUS',\n  SEND_VARIANT_INFO = 'VISAO/SEND_VARIANT_INFO',\n  SEND_LANGUAGE_INFO = 'VISAO/SEND_LANGUAGE_INFO',\n  SEND_ANIMATION_INFO = 'VISAO/SEND_ANIMATION_INFO',\n  SEND_DIMENSIONS_UNIT = 'VISAO/SEND_DIMENSIONS_UNIT',\n  SEND_DEMOS = 'VISAO/SEND_DEMOS',\n  SEND_SCREENSHOT = 'VISAO/SEND_SCREENSHOT',\n\n  // ACTIONS - Execute in the viewer\n  UPDATE_VARIANT = 'VISAO/UPDATE_VARIANT',\n  REMOVE_VARIANT = 'VISAO/REMOVE_VARIANT',\n  UPDATE_LANGUAGE = 'VISAO/UPDATE_LANGUAGE',\n  UPDATE_DIMENSIONS_UNIT = 'VISAO/UPDATE_DIMENSIONS_UNIT',\n  START_AR = 'VISAO/START_AR',\n  SHOW_STEP = 'VISAO/SHOW_STEP',\n  NEXT_STEP = 'VISAO/NEXT_STEP',\n  PREVIOUS_STEP = 'VISAO/PREVIOUS_STEP',\n  CLOSE_STEP = 'VISAO/CLOSE_STEP',\n  PLAY = 'VISAO/PLAY',\n  PAUSE = 'VISAO/PAUSE',\n  CAPTURE_SCREENSHOT = 'VISAO/CAPTURE_SCREENSHOT',\n  RESET_CAMERA = 'VISAO/RESET_CAMERA',\n  LOCK_CAMERA = 'VISAO/LOCK_CAMERA',\n  UNLOCK_CAMERA = 'VISAO/UNLOCK_CAMERA',\n  SHOW_HELP = 'VISAO/SHOW_HELP',\n  CLOSE_HELP = 'VISAO/CLOSE_HELP',\n  SHOW_QR = 'VISAO/SHOW_QR',\n  CLOSE_QR = 'VISAO/CLOSE_QR',\n  SHOW_DIMENSIONS = 'VISAO/SHOW_DIMENSIONS',\n  CLOSE_DIMENSIONS = 'VISAO/CLOSE_DIMENSIONS',\n  START_AUTO_ROTATE = 'VISAO/START_AUTO_ROTATE',\n  STOP_AUTO_ROTATE = 'VISAO/STOP_AUTO_ROTATE',\n  MUTE_VOICEOVER = 'VISAO/MUTE_VOICEOVER',\n  UNMUTE_VOICEOVER = 'VISAO/UNMUTE_VOICEOVER',\n  START_ANIMATION = 'VISAO/START_ANIMATION',\n  STOP_ANIMATION = 'VISAO/STOP_ANIMATION',\n  UPDATE_VOICEOVER_VOLUME = 'VISAO/UPDATE_VOICEOVER_VOLUME',\n\n  // LEGACY\n  STATUS = 'VISAO/STATUS',\n  GET_VARIANT_INFORMATION = 'VISAO/GET_VARIANT_INFORMATION',\n  GET_LANGUAGE_INFORMATION = 'VISAO/GET_LANGUAGE_INFORMATION',\n}\n\n/**\n * @ignore\n */\nexport enum ViewerAPIMessageSource {\n  VIEWER = 'visao_viewer',\n  API = 'visao_viewer_api',\n}\n\nexport interface StatusPayload {\n  status: ViewerStatus;\n}\n\n/**\n * @ignore\n */\nexport interface UpdateLanguagePayload {\n  language: string;\n}\n\nexport interface LanguageInformationPayload {\n  language: string;\n  languages: string[];\n}\n\n/**\n * @ignore\n */\nexport type UpdateModelVariantPayload =\n  | { modelVariant: string }\n  | { modelVariants: string | string[] };\n\nexport interface VariantInformationPayload {\n  availableModelVariants: string[];\n  selectedModelVariants: string[];\n}\n\nexport enum AnimationRepetitionType {\n  LOOP = 'loop',\n  REPEAT = 'repeat',\n}\n\nexport interface AnimationOptions {\n  repetitionType?: AnimationRepetitionType;\n  repetitionQuantity?: number;\n}\n\n/**\n * @ignore\n */\nexport interface StartAnimationPayload {\n  animation: string;\n  options: AnimationOptions;\n}\n\n/**\n * @ignore\n */\nexport interface StopAnimationPayload {\n  preventPresets?: boolean;\n}\n\nexport interface AnimationInformationPayload {\n  animation: string;\n  animations: string[];\n}\n\nexport type DimensionsUnit = 'mm' | 'cm' | 'm' | 'in' | 'ft';\n\nexport interface DimensionsUnitPayload {\n  unit: DimensionsUnit;\n}\n\nexport interface VoiceoverVolumePayload {\n  volume: number;\n}\n\nexport interface DemosPayload {\n  demos: Demo[];\n}\n\nexport type MimeType = 'image/png' | 'image/jpeg' | 'image/webp';\nexport type FileFormat = 'blob' | 'base64';\n\nexport interface ScreenshotOptions {\n  mimeType: MimeType;\n  fileFormat: FileFormat;\n}\n\nexport const defaultScreenshotOptions: ScreenshotOptions = {\n  mimeType: 'image/png',\n  fileFormat: 'blob',\n};\n\nexport interface ScreenshotPayload {\n  screenshot: string;\n  options: ScreenshotOptions;\n}\n\n/**\n * @ignore\n */\nexport interface ShowStepPayload {\n  step: string;\n}\n\n/**\n * @ignore\n */\nexport type Payload =\n  | StatusPayload\n  | UpdateModelVariantPayload\n  | VariantInformationPayload\n  | StartAnimationPayload\n  | StopAnimationPayload\n  | AnimationInformationPayload\n  | UpdateLanguagePayload\n  | LanguageInformationPayload\n  | DimensionsUnitPayload\n  | ScreenshotPayload\n  | ScreenshotOptions\n  | DemosPayload\n  | ShowStepPayload\n  | VoiceoverVolumePayload;\n\n/**\n * @ignore\n */\nexport type CallbackFn = (payload: any) => void;\n\n/**\n * @ignore\n */\nexport type CallbackId = string;\n\n/**\n * @ignore\n */\nexport type Callback = { id: CallbackId; fn: CallbackFn };\n\n/**\n * @ignore\n */\nexport interface CallbackStore {\n  [key: string]: Callback[];\n}\n\nexport type ViewerStatusListenerCallback = (status: ViewerStatus) => void;\n\nexport type GetLanguageInformationCallback = (\n  languageInformation: LanguageInformationPayload,\n) => void;\n\nexport type GetVariantInformationCallback = (\n  variantInformation: VariantInformationPayload,\n) => void;\n\nexport type GetAnimationInformationCallback = (\n  animationInformation: AnimationInformationPayload,\n) => void;\n\nexport type GetDimensionsUnitCallback = (\n  dimensionsUnitPayload: DimensionsUnitPayload,\n) => void;\n\nexport type GetDemosCallback = (demos: DemosPayload) => void;\n\nexport type GetScreenshotCallback = (screenshot: Blob | string) => void;\n\nexport type ViewerElement = HTMLIFrameElement | null;\n\n/**\n * @ignore\n */\nexport interface Message {\n  source: ViewerAPIMessageSource;\n  type: ViewerAPIMessage;\n  payload?: Payload;\n  callbackId?: CallbackId;\n}\n","import type { Message, ViewerAPIMessageSource } from './types';\n\n/**\n * @ignore\n */\ntype MessageHandler = (event: MessageEvent) => void;\n\n/**\n * @ignore\n */\nexport const listenToMessages = (\n  incomingMessageHandler: MessageHandler\n): void => {\n  window.addEventListener('message', incomingMessageHandler);\n};\n\n/**\n * @ignore\n */\nexport const unListenToMessages = (\n  incomingMessageHandler: MessageHandler\n): void => {\n  window.removeEventListener('message', incomingMessageHandler);\n};\n\n/**\n * @ignore\n */\nexport const parseIncomingMessage = (\n  event: MessageEvent,\n  source: ViewerAPIMessageSource\n): Message | undefined => {\n  try {\n    if (!event.data || typeof event.data !== 'string') {\n      return undefined;\n    }\n\n    const message = JSON.parse(event.data) as Message;\n\n    if (message?.source !== source) {\n      return undefined;\n    }\n\n    return message;\n  } catch (error) {\n    console.error(\n      `${source} - Could not parse the latest message`,\n      event,\n      error\n    );\n    return undefined;\n  }\n};\n","export class LocalizedContent {\n  public readonly language: string = 'en';\n  public readonly content: string = '';\n  public readonly duration: number = 0;\n\n  constructor(props: Partial<LocalizedContent> = {}) {\n    Object.assign(this, props);\n  }\n}\n","import type { LocalizedContent } from './localizedContent';\n\nexport class Step {\n  public readonly id: string = '';\n  public readonly name: string = '';\n  public readonly position: number = 0;\n  public readonly localizations: LocalizedContent[] = [];\n\n  constructor(props: Partial<Step> = {}) {\n    Object.assign(this, props);\n  }\n}\n","import type { Step } from './step';\nimport type { LocalizedContent } from './localizedContent';\n\nexport class Demo {\n  public readonly id: string = '';\n  public readonly name: string = '';\n  public readonly steps: Step[] = [];\n  public readonly localizations: LocalizedContent[] = [];\n\n  constructor(props: Partial<Demo> = {}) {\n    Object.assign(this, props);\n  }\n}\n","export function logErrorBlock(messageBlock: string[] = []): void {\n  const header = 'VISAO > An error occurred while using the viewer API:';\n  console.error([header, ...messageBlock].join('\\n\\t\\t'));\n}\n","import type { Callback, CallbackFn, CallbackId, CallbackStore } from './types';\n\n/**\n * @ignore\n */\nexport class Callbacks {\n  private readonly store: CallbackStore;\n\n  constructor(store: CallbackStore) {\n    this.store = store;\n  }\n\n  public getFrom(key: string): Callback[] {\n    return this.store[key] ?? [];\n  }\n\n  public addTo(key: string, callbackFn: CallbackFn): CallbackId {\n    const callback: Callback = { id: Date.now().toString(), fn: callbackFn };\n    this.store[key] = [...this.getFrom(key), callback];\n    return callback.id;\n  }\n\n  public removeByCallbackFunctionFrom(\n    key: string,\n    callbackFn: CallbackFn,\n  ): void {\n    this.store[key] = this.getFrom(key).filter(\n      (callback: Callback) => callback.fn !== callbackFn,\n    );\n  }\n\n  public removeByCallbackIdFrom(key: string, callbackId?: CallbackId): void {\n    if (!callbackId) {\n      return;\n    }\n\n    this.store[key] = this.getFrom(key).filter(\n      (callback: Callback) => callback.id !== callbackId,\n    );\n  }\n\n  public executeFor(key: string, payload: any): void {\n    this.getFrom(key).forEach((callback: Callback) => {\n      callback.fn(payload);\n    });\n  }\n}\n","/**\n * @ignore\n */\nexport const base64ToBlob = (base64: string): Blob => {\n  const base64Parts = base64.split(',');\n  if (base64Parts.length < 2) {\n    throw new Error('Invalid base64 string');\n  }\n\n  // Decode base64 to binary string\n  const byteString: string = atob(base64Parts[1]!);\n\n  // Extract the mime type from the base64 header\n  const mimeString: string = base64Parts[0]!.split(':')[1]!.split(';')[0]!;\n\n  // Create a Uint8Array from the binary string\n  const byteArray: Uint8Array = new Uint8Array(byteString.length);\n\n  for (let i = 0; i < byteString.length; i++) {\n    byteArray[i] = byteString.charCodeAt(i);\n  }\n\n  // Return the Blob object\n  return new Blob([byteArray], { type: mimeString });\n};\n","import {\n  DemosPayload,\n  DimensionsUnitPayload,\n  GetDemosCallback,\n  GetDimensionsUnitCallback,\n  GetLanguageInformationCallback,\n  GetScreenshotCallback,\n  GetVariantInformationCallback,\n  LanguageInformationPayload,\n  Message,\n  statusLevels,\n  StatusPayload,\n  DimensionsUnit,\n  VariantInformationPayload,\n  ViewerAPIMessage,\n  ViewerAPIMessageSource,\n  ViewerElement,\n  ViewerStatus,\n  ViewerStatusListenerCallback,\n  ScreenshotPayload,\n  ScreenshotOptions,\n  defaultScreenshotOptions,\n  GetAnimationInformationCallback,\n  AnimationInformationPayload,\n  AnimationOptions,\n} from './types';\nimport { logErrorBlock } from './logging';\nimport { listenToMessages, parseIncomingMessage } from './utils';\nimport { Callbacks } from './callbacks';\nimport { base64ToBlob } from './base64ToBlob';\n\n/**\n * The Visao class is the starting point of the Visao viewer api.\n * It encapsulates all the necessary calls to interact with your viewers from your\n * own code base.\n */\nexport class Visao {\n  private id: string;\n  private viewerElementInternal: ViewerElement = null;\n  private status: ViewerStatus = ViewerStatus.UNMOUNTED;\n  private readonly callbacks: Callbacks;\n\n  private get viewerElement(): ViewerElement {\n    if (this.viewerElementInternal) {\n      return this.viewerElementInternal;\n    }\n\n    if (this.id) {\n      this.viewerElementInternal = document.getElementById(\n        this.id,\n      ) as HTMLIFrameElement;\n      return this.viewerElementInternal;\n    }\n\n    return null;\n  }\n\n  /**\n   * #### Description\n   * The constructor requires an element id given to the iframe tag/component\n   * defined in your application. Internally, we take care of finding the element\n   * in the DOM once the component is mounted.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * const instance = new Visao(\"viewer-iframe-id\");\n   * ```\n   *\n   * @param id\n   * The id of the viewer element.\n   */\n  constructor(id: string) {\n    this.id = id;\n    this.callbacks = new Callbacks({\n      [ViewerAPIMessage.GET_STATUS]: [],\n      [ViewerAPIMessage.GET_LANGUAGE_INFO]: [],\n      [ViewerAPIMessage.GET_VARIANT_INFO]: [],\n      [ViewerAPIMessage.GET_ANIMATION_INFO]: [],\n      [ViewerAPIMessage.GET_DEMOS]: [],\n      [ViewerAPIMessage.GET_DIMENSIONS_UNIT]: [],\n      [ViewerAPIMessage.GET_SCREENSHOT]: [],\n    });\n    listenToMessages(this.handleIncomingMessage);\n  }\n\n  /**\n   * #### Description\n   * > Manually set the reference of the viewer from the id.\n   *\n   * #### Usage:\n   *\n   * ```typescript\n   * visao.setViewerElementFromId('viewer-id');\n   * ```\n   *\n   *  @param id\n   *  HTML element id representing the viewer\n   */\n  public setViewerElementFromId(id: string): void {\n    this.id = id;\n    this.viewerElementInternal = document.getElementById(\n      id,\n    ) as HTMLIFrameElement;\n  }\n\n  /**\n   * #### Description\n   * > Manually set the reference of the viewer element.\n   *\n   * #### Usage:\n   *\n   * ```typescript\n   * const element = document.getElementById('viewer-id');\n   * visao.setViewerElement(element);\n   * ```\n   *\n   *  @param viewerElement\n   *  HTML element representing the viewer\n   */\n  public setViewerElement(viewerElement: ViewerElement): void {\n    this.viewerElementInternal = viewerElement;\n  }\n\n  /**\n   * #### Description\n   * > Listens to the state of the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToViewerStatus((newViewerStatus: ViewerStatus) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToViewerStatus(callback: ViewerStatusListenerCallback): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_STATUS, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes a viewer status listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToViewerStatus(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToViewerStatus}\n   */\n  public unListenToViewerStatus(callback: ViewerStatusListenerCallback): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_STATUS,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Listens to any change to variants in the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToVariantInfoChange((variantInformation: VariantInformationPayload) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToVariantInfoChange(\n    callback: GetVariantInformationCallback,\n  ): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_VARIANT_INFO, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes a variant info change listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToVariantInfoChange(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToVariantInfoChange}\n   */\n  public unListenToVariantInfoChange(\n    callback: GetVariantInformationCallback,\n  ): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_VARIANT_INFO,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Listens to any change to animations in the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToAnimationInfoChange((animationInformation: AnimationInformationPayload) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToAnimationInfoChange(\n    callback: GetAnimationInformationCallback,\n  ): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_ANIMATION_INFO, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes an animation info change listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToAnimationInfoChange(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToAnimationInfoChange}\n   */\n  public unListenToAnimationInfoChange(\n    callback: GetAnimationInformationCallback,\n  ): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_ANIMATION_INFO,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Listens to any change to the language in the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToLanguageInfoChange((languageInformation: LanguageInformationPayload) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToLanguageInfoChange(\n    callback: GetLanguageInformationCallback,\n  ): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_LANGUAGE_INFO, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes a language info change listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToLanguageInfoChange(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToLanguageInfoChange}\n   */\n  public unListenToLanguageInfoChange(\n    callback: GetLanguageInformationCallback,\n  ): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_LANGUAGE_INFO,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Listens to any change to dimensions unit in the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToDimensionsUnitChange((dimensionsUnitPayload: DimensionsUnitPayload) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToDimensionsUnitChange(\n    callback: GetDimensionsUnitCallback,\n  ): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_DIMENSIONS_UNIT, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes a dimensions unit change listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToDimensionsUnitChange(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToDimensionsUnitChange}\n   */\n  public unListenToDimensionsUnitChange(\n    callback: GetDimensionsUnitCallback,\n  ): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_DIMENSIONS_UNIT,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Listens to any change to the demos in the viewer. It will notify by calling\n   * the provided parameter callback providing the new state everytime\n   * the state changes.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.listenToDemosChange((demos: DemosPayload) => {\n   *   // Do Something\n   * });\n   * ```\n   *\n   * @param callback\n   * Callback to execute when a change happen\n   */\n  public listenToDemosChange(callback: GetDemosCallback): void {\n    this.callbacks.addTo(ViewerAPIMessage.GET_DEMOS, callback);\n  }\n\n  /**\n   * #### Description\n   * > Removes a demos change listener.\n   *\n   * #### Usage\n   *\n   * ```typescript\n   * visao.unListenToDemosChange(callback);\n   * ```\n   *\n   * @param callback\n   * Callback which matches the one provided to a previously called {@link listenToDemosChange}\n   */\n  public unListenToDemosChange(callback: GetDemosCallback): void {\n    this.callbacks.removeByCallbackFunctionFrom(\n      ViewerAPIMessage.GET_DEMOS,\n      callback,\n    );\n  }\n\n  /**\n   * #### Description\n   * >  Get the data for all the demos and their steps.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Get the demos data\n   * let demos;\n   * visao.getDemos((payload) => {\n   *   demos = payload.demos;\n   *   // Do something with the data\n   * });\n   * ```\n   * @param callback\n   * Callback with a payload as parameter which includes the list of demos.\n   */\n  public getDemos(callback: GetDemosCallback): void {\n    const callbackId = this.callbacks.addTo(\n      ViewerAPIMessage.GET_DEMOS,\n      callback,\n    );\n\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.GET_DEMOS,\n        callbackId,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Displays the provided demo step.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   *\n   * ```typescript\n   * const stepUUID = '6ed63afa-2dc6-4182-9f36-f9d623423821';\n   * visao.showStep(stepUUID);\n   *\n   * // or\n   *\n   * const stepLocalizedTitleEN = 'Shoe laces';\n   * visao.showStep(stepLocalizedTitleEN);\n   *\n   * // or\n   *\n   * const stepLocalizedTitleFR = 'Lacets de chaussures';\n   * visao.showStep(stepLocalizedTitleFR);\n   * ```\n   *\n   * @param step The step’s **ID** (recommended) or one of it's **localized titles**.\n   * Using the ID is preferred because it’s always unique.\n   * The title is a localized field and may not be unique. The first matching step found will be activated.\n   */\n  public showStep(step: string): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.SHOW_STEP,\n        payload: {\n          step,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Closes currently displayed demo step.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.closeStep();\n   * ```\n   */\n  public closeStep(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.CLOSE_STEP,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Displays the previous demo step.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.previousStep();\n   * ```\n   */\n  public previousStep(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.PREVIOUS_STEP,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Displays the next demo step.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.nextStep();\n   * ```\n   */\n  public nextStep(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.NEXT_STEP,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Starts the demo steps player.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.play();\n   * ```\n   */\n  public play(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.PLAY,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Pauses the demo steps player.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.pause();\n   * ```\n   */\n  public pause(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.PAUSE,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Gets the current language information\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.getLanguageInformation((info) => {\n   *   const currentLanguage = info.language;\n   *   const availableLanguages = info.languages;\n   * });\n   * ```\n   *\n   *  @param callback\n   *  The callback will contain the currently displayed languages as well as all the supported languages in the viewer.\n   */\n  public getLanguageInformation(\n    callback: GetLanguageInformationCallback,\n  ): void {\n    const callbackId = this.callbacks.addTo(\n      ViewerAPIMessage.GET_LANGUAGE_INFO,\n      callback,\n    );\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.GET_LANGUAGE_INFO,\n        callbackId,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Tells the viewer to change the language of the different localized content if it can be found.\n   * This will be visible on UI components like tooltips, menus, flyers, etc...\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Change the viewer language to french\n   * visao.changeLanguage('fr');\n   * ```\n   *\n   *  @param language\n   *  The language abbreviation to apply. An exhaustive list of all valid languages\n   *  can be found **[here](https://github.com/annexare/Countries/blob/master/data/languages.json)**.\n   */\n  public changeLanguage(language: string): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UPDATE_LANGUAGE,\n        payload: {\n          language,\n        },\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Display one or more configuration/variant(s)\n   * of the current 3D model if they can be found.\n   *\n   * #### Usage:\n   * A 3D model of a shoe may support multiple independent variants,\n   * such as color options for the shoe body, laces, and sole.\n   * You can apply a single variant (e.g., just the body color),\n   * or multiple variants at once (e.g., body, laces, and sole).\n   *\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Change only the shoe body color to green\n   * visao.showModelVariant('green');\n   *\n   * // Apply multiple variants: green body, white laces, and black sole\n   * visao.showModelVariant(['green', 'white_laces', 'black_sole']);\n   * ```\n   *\n   *  @param modelVariants\n   *  A unique key or array of keys representing one or more variants that can be matched in the current 3D model schema.\n   */\n  public showModelVariant(modelVariants: string | string[]): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UPDATE_VARIANT,\n        payload: {\n          modelVariants,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Remove one or more applied configuration/variant(s)\n   * from the current 3D model if they are currently active.\n   *\n   * #### Usage:\n   * A 3D model of a shoe may have multiple variants applied simultaneously,\n   * such as different colors for the body, laces, and sole.\n   * You can remove a single variant, or several at once.\n   *\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Remove the green body color variant\n   * visao.removeModelVariant('green');\n   *\n   * // Remove multiple variants: white laces and black sole\n   * visao.removeModelVariant(['white_laces', 'black_sole']);\n   * ```\n   *\n   *  @param modelVariants\n   *  A unique key that can be matched inside the current 3D model schema.\n   */\n  public removeModelVariant(modelVariants: string | string[]): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.REMOVE_VARIANT,\n        payload: {\n          modelVariants,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Get the 3D model's variants/configurations information from the Visao viewer.\n   * A configuration/variant is a structure with selected properties within the 3D model file,\n   * which will determine how the 3D model will be displayed.\n   *\n   * #### Usage:\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * A 3D model of a shoe may have multiple variants applied simultaneously,\n   * such as different colors for the body, laces, and sole.\n   *\n   * ```typescript\n   * // Get the configurations/variants information\n   * let variantsDisplayed;\n   * let availableVariants;\n   * visao.getVariantInformation((info) => {\n   *   variantsDisplayed = info.selectedModelVariants;\n   *   availableVariants = info.availableModelVariants;\n   *   // Do something with the data\n   * });\n   * ```\n   *\n   *  @param callback\n   *  The configuration/variant information will be the parameter of the provided callback once called.\n   */\n  public getVariantInformation(callback: GetVariantInformationCallback): void {\n    const callbackId = this.callbacks.addTo(\n      ViewerAPIMessage.GET_VARIANT_INFO,\n      callback,\n    );\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.GET_VARIANT_INFO,\n        callbackId,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Get the 3D model's animation information from the Visao viewer.\n   *\n   * #### Usage:\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Get the animation information\n   * let availableAnimations;\n   * let currentAnimation;\n   * visao.getAnimationInformation((info) => {\n   *   availableAnimations = info.animations;\n   *   currentAnimation = info.animation;\n   *   // Do something with the data\n   * });\n   * ```\n   *\n   *  @param callback\n   *  The animation information will be the parameter of the provided callback once called.\n   */\n  public getAnimationInformation(\n    callback: GetAnimationInformationCallback,\n  ): void {\n    const callbackId = this.callbacks.addTo(\n      ViewerAPIMessage.GET_ANIMATION_INFO,\n      callback,\n    );\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.GET_ANIMATION_INFO,\n        callbackId,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Start the passed animation.\n   *\n   * #### Usage:\n   * Default or step animations will be overridden by the new animation.\n   *\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Start the animation\n   * visao.startAnimation(animation);\n   * ```\n   * ```typescript\n   * // Start the animation with options\n   * visaoAPI.startAnimation(anim, {\n   *         repetitionType: AnimationRepetitionType.REPEAT,\n   *         repetitionQuantity: 2,\n   *       })\n   * ```\n   *\n   *  @param animation\n   *  The animation name to start\n   *\n   *\n   *  @param options\n   *  The animation options\n   */\n  public startAnimation(\n    animation: string,\n    options: AnimationOptions = {},\n  ): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.START_ANIMATION,\n        payload: {\n          animation,\n          options,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Stop the current animation.\n   *\n   * #### Usage:\n   * Viewer preset animations (default or step) will be restored. This can be prevented by parameter preventPresets being set to true.\n   *\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Stop the animation (preset animation will be restored if available)\n   * visao.stopAnimation();\n   * ```\n   *\n   * ```typescript\n   * // Stop the animation (preset animation will not be restored)\n   * visao.stopAnimation(true);\n   * ```\n   *\n   *  @param preventPresets\n   *  Whether preset (default & step) animations should be prevented from being restored, Default: false\n   */\n  public stopAnimation(preventPresets = false): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.STOP_ANIMATION,\n        payload: {\n          preventPresets,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Sets the dimensions unit.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * const unit = 'm';\n   * visao.setDimensionsUnit(unit);\n   * ```\n   *\n   * @param unit\n   * The new unit.\n   */\n  public setDimensionsUnit(unit: DimensionsUnit): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UPDATE_DIMENSIONS_UNIT,\n        payload: {\n          unit,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Starts the augmented reality feature.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute. This feature only\n   *  works on devices supporting augmented reality.\n   *\n   * ```typescript\n   * visao.startAR();\n   * ```\n   */\n  public startAR(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.START_AR,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Reset the viewer's camera to its original state.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.resetCamera();\n   * ```\n   */\n  public resetCamera(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.RESET_CAMERA,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Captures a screenshot of the viewer's 3D model.\n   * This will trigger a download of the image.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.captureScreenshot({\n   *  mimeType: 'image/png',\n   * });\n   * ```\n   * @param options\n   * {@link ScreenshotOptions}\n   * Optional screenshot options which can include the `mimeType` and `fileFormat`.\n   * The default values are `mimeType: 'image/png'` and `fileFormat: 'blob'`.\n   */\n  public captureScreenshot(options: Partial<ScreenshotOptions> = {}): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.CAPTURE_SCREENSHOT,\n        payload: {\n          ...defaultScreenshotOptions,\n          ...options,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * >  Captures a screenshot of the viewer's 3D model and then returns the image blob.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * // Get the screenshot blob\n   * visao.getScreenshot((screenshot: Blob | string) => {\n   *   // Do something with the screenshot\n   * }, {\n   *   mimeType: 'image/png',\n   *   fileFormat: 'blob',\n   * });\n   * ```\n   * @param callback\n   * Callback which includes the captured screenshot blob as parameter.\n   * @param options\n   * {@link ScreenshotOptions}\n   * Optional screenshot options which can include the `mimeType` and `fileFormat`.\n   * The default values are `mimeType: 'image/png'` and `fileFormat: 'blob'`.\n   */\n  public getScreenshot(\n    callback: GetScreenshotCallback,\n    options: Partial<ScreenshotOptions> = {},\n  ): void {\n    const callbackId = this.callbacks.addTo(\n      ViewerAPIMessage.GET_SCREENSHOT,\n      callback,\n    );\n\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.GET_SCREENSHOT,\n        callbackId,\n        payload: {\n          ...defaultScreenshotOptions,\n          ...options,\n        },\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Locks the viewer's camera controls.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.lockCamera();\n   * ```\n   */\n  public lockCamera(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.LOCK_CAMERA,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Unlocks the viewer's camera controls.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.unlockCamera();\n   * ```\n   */\n  public unlockCamera(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UNLOCK_CAMERA,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Shows the viewer's help panel.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.showHelp();\n   * ```\n   */\n  public showHelp(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.SHOW_HELP,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Closes the viewer's help panel.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.closeHelp();\n   * ```\n   */\n  public closeHelp(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.CLOSE_HELP,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Shows the viewer's QR code panel.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.showQR();\n   * ```\n   */\n  public showQR(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.SHOW_QR,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Closes the viewer's QR code panel.\n   *\n   * #### Usage\n   *  > :warning: **{@link ViewerStatus}**  must be either at **{@link ViewerStatus.MOUNTED}**,\n   *  **{@link ViewerStatus.LOADING}**, **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.closeQR();\n   * ```\n   */\n  public closeQR(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.CLOSE_QR,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Shows the viewer's dimensions.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.showDimensions();\n   * ```\n   */\n  public showDimensions(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.SHOW_DIMENSIONS,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Closes the viewer's dimensions.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.closeDimensions();\n   * ```\n   */\n  public closeDimensions(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.CLOSE_DIMENSIONS,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Starts the viewer's auto-rotation.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.startAutoRotate();\n   * ```\n   */\n  public startAutoRotate(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.START_AUTO_ROTATE,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Stops the viewer's auto-rotation.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.LOADED}** to execute.\n   *\n   * ```typescript\n   * visao.stopAutoRotate();\n   * ```\n   */\n  public stopAutoRotate(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.STOP_AUTO_ROTATE,\n      },\n      ViewerStatus.LOADED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Mutes the viewer's voiceover.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.MOUNTED}** to execute.\n   *\n   * ```typescript\n   * visao.muteVoiceover();\n   * ```\n   */\n  public muteVoiceover(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.MUTE_VOICEOVER,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Un-mutes the viewer's voiceover.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.MOUNTED}** to execute.\n   *\n   * ```typescript\n   * visao.unmuteVoiceover();\n   * ```\n   */\n  public unmuteVoiceover(): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UNMUTE_VOICEOVER,\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  /**\n   * #### Description\n   * > Sets to volume level of the viewer's voiceover.\n   *\n   * #### Usage\n   * > :warning: **{@link ViewerStatus}**  must be at **{@link ViewerStatus.MOUNTED}** to execute.\n   *\n   * ```typescript\n   * const volume = 0.75;  // 75% volume\n   * visao.setVoiceoverVolume(volume);\n   * ```\n   *\n   * @param volume\n   * The new volume. Between `0.00` and `1.00`. Representing `0%` and `100%` volume respectively.\n   */\n  public setVoiceoverVolume(volume: number): void {\n    this.executeAction(\n      {\n        type: ViewerAPIMessage.UPDATE_VOICEOVER_VOLUME,\n        payload: {\n          volume,\n        },\n      },\n      ViewerStatus.MOUNTED,\n    );\n  }\n\n  private handleIncomingMessage = (event: MessageEvent): void => {\n    const message = parseIncomingMessage(event, ViewerAPIMessageSource.VIEWER);\n\n    if (!message) {\n      return;\n    }\n\n    switch (message.type) {\n      case ViewerAPIMessage.SEND_STATUS: {\n        const { status } = message.payload as StatusPayload;\n\n        this.status = status;\n\n        if (status === ViewerStatus.MOUNTED) {\n          this.setViewerElement(\n            document.getElementById(this.id) as HTMLIFrameElement,\n          );\n        }\n\n        this.callbacks.executeFor(ViewerAPIMessage.GET_STATUS, status);\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_LANGUAGE_INFO: {\n        const languageInformation =\n          message.payload as LanguageInformationPayload;\n        this.callbacks.executeFor(\n          ViewerAPIMessage.GET_LANGUAGE_INFO,\n          languageInformation,\n        );\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_LANGUAGE_INFO,\n          message.callbackId,\n        );\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_VARIANT_INFO: {\n        const variantInformation = message.payload as VariantInformationPayload;\n        this.callbacks.executeFor(\n          ViewerAPIMessage.GET_VARIANT_INFO,\n          variantInformation,\n        );\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_VARIANT_INFO,\n          message.callbackId,\n        );\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_ANIMATION_INFO: {\n        const animationInformation =\n          message.payload as AnimationInformationPayload;\n        this.callbacks.executeFor(\n          ViewerAPIMessage.GET_ANIMATION_INFO,\n          animationInformation,\n        );\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_ANIMATION_INFO,\n          message.callbackId,\n        );\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_DIMENSIONS_UNIT: {\n        const dimensionsUnitPayload = message.payload as DimensionsUnitPayload;\n        this.callbacks.executeFor(\n          ViewerAPIMessage.GET_DIMENSIONS_UNIT,\n          dimensionsUnitPayload,\n        );\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_DIMENSIONS_UNIT,\n          message.callbackId,\n        );\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_SCREENSHOT: {\n        const {\n          screenshot,\n          options: { fileFormat },\n        } = message.payload as ScreenshotPayload;\n        try {\n          const formattedScreenshot =\n            fileFormat === 'blob' ? base64ToBlob(screenshot) : screenshot;\n          this.callbacks.executeFor(\n            ViewerAPIMessage.GET_SCREENSHOT,\n            formattedScreenshot,\n          );\n        } catch (e) {\n          logErrorBlock(['Unable to capture the screenshot image']);\n        }\n\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_SCREENSHOT,\n          message.callbackId,\n        );\n        break;\n      }\n\n      case ViewerAPIMessage.SEND_DEMOS: {\n        const demos = message.payload as DemosPayload;\n        this.callbacks.executeFor(ViewerAPIMessage.GET_DEMOS, demos);\n        this.callbacks.removeByCallbackIdFrom(\n          ViewerAPIMessage.GET_DEMOS,\n          message.callbackId,\n        );\n        break;\n      }\n    }\n  };\n\n  private executeAction(\n    action: Omit<Message, 'source'>,\n    statusNeeded?: ViewerStatus,\n  ): void {\n    this.logInvalidViewerElement();\n    this.logForInsufficientStatusLevel(statusNeeded);\n    const message: Message = { ...action, source: ViewerAPIMessageSource.API };\n    this.viewerElement?.contentWindow?.postMessage(\n      JSON.stringify(message),\n      '*',\n    );\n  }\n\n  private logInvalidViewerElement(): void {\n    if (!this.viewerElement) {\n      logErrorBlock([\n        `Viewer HTML element cannot be found in the DOM with the id \"${this.id}\".`,\n        'Make sure the visao iframe is properly mounted in the DOM before calling this method.',\n      ]);\n    }\n  }\n\n  private logForInsufficientStatusLevel(statusNeeded?: ViewerStatus): void {\n    if (\n      statusNeeded &&\n      !this.validateStatusHasReachedNeededLevel(statusNeeded)\n    ) {\n      logErrorBlock([\n        'The viewer is not ready for this action.',\n        `Minimum viewer status needed: [${statusNeeded}]`,\n        `Current viewer status: [${this.status}]`,\n      ]);\n    }\n  }\n\n  private validateStatusHasReachedNeededLevel(\n    statusNeeded: ViewerStatus,\n  ): boolean {\n    return statusLevels[this.status] >= statusLevels[statusNeeded];\n  }\n}\n"],"names":["ViewerStatus","ViewerAPIMessage","ViewerAPIMessageSource","AnimationRepetitionType"],"mappings":"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"}