{"version":3,"file":"3dsource-metabox-front-api.mjs","sources":["../../../../projects/3dsource/metabox-front-api/src/lib/actions/CommandBase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/fromCommunicatorEvent.ts","../../../../projects/3dsource/metabox-front-api/src/lib/interfaces/ToMetaboxMessagePayloads.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/MetaboxConfig.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetPdf.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetCallToActionInformation.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ResetCamera.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ApplyZoom.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/InitShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/PlayShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/UnrealCommand.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/PauseShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/StopShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetScreenshot.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetProduct.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetProductMaterial.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetEnvironment.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetEnvironmentMaterial.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ShowEmbeddedMenu.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ShowOverlayInterface.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/WatchCallbacks.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/event-dispatcher.ts","../../../../projects/3dsource/metabox-front-api/src/lib/constants/common.ts","../../../../projects/3dsource/metabox-front-api/src/lib/constants/version.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/communicator.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/prepare-iframe-src.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/integrate-metabox.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/save-image.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/url-utils.ts","../../../../projects/3dsource/metabox-front-api/src/3dsource-metabox-front-api.ts"],"sourcesContent":["import type { ToMetaBoxMessageEnvelope } from '../interfaces';\n\n/**\n * Base class for commands sent to the Metabox API.\n */\nexport class CommandBase {\n  data!: ToMetaBoxMessageEnvelope;\n}\n","import type { Communicator } from '../helpers';\nimport type {\n  FromMetaBoxApiEvents,\n  FromMetaboxMessagePayloads,\n} from '../interfaces';\nimport type { Observable } from 'rxjs';\nimport { fromEvent } from 'rxjs';\n\n/**\n * Wrapper helper function to use it with rxJs the same as `fromEvent` to listen to events from the Communicator.\n * @param {Communicator} target\n * @param eventName\n */\nexport function fromCommunicatorEvent<T extends FromMetaBoxApiEvents>(\n  target: Communicator,\n  eventName: T,\n) {\n  return fromEvent(target, eventName) as Observable<\n    FromMetaboxMessagePayloads[T]\n  >;\n}\n","import type { MimeType } from '../actions';\nimport type { ApplicationDeviceTypes } from './application-device-types';\nimport type { MetaboxHost } from '../constants';\nimport type { MetaboxCommandConfig } from './metabox-config';\n\nexport const MetaboxBasicConfiguratorActions = {\n  metaboxConfig: 'metaboxConfig',\n  setEnvironment: 'setEnvironment',\n  setEnvironmentMaterialById: 'setEnvironmentMaterialById',\n  setProduct: 'setProduct',\n  setProductMaterialById: 'setProductMaterialById',\n  getPdf: 'getPdf',\n  getCallToActionInformation: 'getCallToActionInformation',\n  getScreenshot: 'getScreenshot',\n  showEmbeddedMenu: 'showEmbeddedMenu',\n  forceSetDeviceType: 'forceSetDeviceType',\n  showOverlayInterface: 'showOverlayInterface',\n  resetCamera: 'resetCamera',\n  applyZoom: 'applyZoom',\n  initShowcase: 'initShowcase',\n  playShowcase: 'playShowcase',\n  pauseShowcase: 'pauseShowcase',\n  stopShowcase: 'stopShowcase',\n  sendCommandToUnreal: 'sendCommandToUnreal',\n  watchCallbacks: 'watchCallbacks',\n} as const;\n\nexport type ToMetaBoxActions =\n  (typeof MetaboxBasicConfiguratorActions)[keyof typeof MetaboxBasicConfiguratorActions];\n\n/**\n * @internal\n * @hidden\n */\nexport type ToMetaboxMessagePayload =\n  ToMetaboxMessagePayloads[keyof ToMetaboxMessagePayloads];\n\n/**\n * Interface for messages sent from the application to the Basic Metabox API.\n */\nexport interface ToMetaboxMessagePayloads {\n  [MetaboxBasicConfiguratorActions.metaboxConfig]: {\n    appId: string;\n    config: MetaboxCommandConfig;\n  };\n  [MetaboxBasicConfiguratorActions.setProduct]: { productId: string };\n  [MetaboxBasicConfiguratorActions.setEnvironment]: { id: string };\n  [MetaboxBasicConfiguratorActions.getPdf]: void;\n  [MetaboxBasicConfiguratorActions.getCallToActionInformation]: void;\n  [MetaboxBasicConfiguratorActions.watchCallbacks]: void;\n  [MetaboxBasicConfiguratorActions.getScreenshot]: {\n    format: MimeType;\n    size?: { x: number; y: number };\n  };\n  [MetaboxBasicConfiguratorActions.setProductMaterialById]: {\n    slotId: string;\n    materialId: string;\n  };\n  [MetaboxBasicConfiguratorActions.setEnvironmentMaterialById]: {\n    slotId: string;\n    materialId: string;\n  };\n  [MetaboxBasicConfiguratorActions.showEmbeddedMenu]: { visible: boolean };\n  [MetaboxBasicConfiguratorActions.showOverlayInterface]: { visible: boolean };\n  [MetaboxBasicConfiguratorActions.forceSetDeviceType]: {\n    deviceType: ApplicationDeviceTypes;\n  };\n  [MetaboxBasicConfiguratorActions.resetCamera]: void;\n  [MetaboxBasicConfiguratorActions.applyZoom]: { zoom: number };\n  [MetaboxBasicConfiguratorActions.initShowcase]: void;\n  [MetaboxBasicConfiguratorActions.playShowcase]: void;\n  [MetaboxBasicConfiguratorActions.pauseShowcase]: void;\n  [MetaboxBasicConfiguratorActions.stopShowcase]: void;\n  [MetaboxBasicConfiguratorActions.sendCommandToUnreal]: object;\n}\n\nexport interface ToMetaBoxMessageEnvelope {\n  action: ToMetaBoxActions;\n  payload?: ToMetaboxMessagePayload | never;\n}\n\nexport interface ToMetaBoxMessage {\n  host: typeof MetaboxHost;\n  payload: ToMetaBoxMessageEnvelope;\n}\n","import { CommandBase } from './CommandBase';\nimport type { MetaboxCommandConfig } from '../interfaces';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to send Metabox Config to Metabox Basic Configurator.\n * @remarks\n * Automatically sent when the Communicator instance is ready.\n */\n\nexport class MetaboxConfig extends CommandBase {\n  /**\n   * Creates an instance of MetaboxConfig.\n   * @param {string} appId - The unique identifier for the Communicator Instance\n   * @param {MetaboxCommandConfig} config - optional initial config: standalone - if true - disable metabox custom template and all logic\n   */\n  constructor(appId: string, config: MetaboxCommandConfig) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.metaboxConfig,\n      payload: { appId, config },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to get a PDF from Metabox Basic Configurator.\n * @remarks\n * This class sends a message to the Metabox API to generate a PDF based on the current configuration.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetPdf, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new GetPdf());\n * };\n */\n\nexport class GetPdf extends CommandBase {\n  /**\n   * Creates an instance of GetPdf.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.getPdf };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to get a Call To Action Information from Metabox Basic Configurator.\n * @remarks\n * This class sends a message to the Metabox API to generate Call To Action information based on the current configuration and sends it to the endpoint url from the cta information.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetCallToActionInformation, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new GetCallToActionInformation());\n * };\n */\n\nexport class GetCallToActionInformation extends CommandBase {\n  /**\n   * Creates an instance of GetCallToActionInformation.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.getCallToActionInformation,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to send to unreal and reset camera to initial.\n * @remarks\n * This class sends a message to the Metabox API to reset the camera on a scene.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { ResetCamera, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new ResetCamera());\n * };\n */\n\nexport class ResetCamera extends CommandBase {\n  /**\n   * Creates an instance of ResetCamera.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.resetCamera };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to ApplyZoom and change zoom camera on a scene.\n * @remarks\n * This class sends a command to the Metabox API to change zoom on a scene.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { ApplyZoom, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new ApplyZoom(10));\n *     api.sendCommandToMetabox(new ApplyZoom(-10));\n * };\n */\n\nexport class ApplyZoom extends CommandBase {\n  /**\n   * Creates an instance of ApplyZoom.\n   *\n   * @param {...number} zoom\n   */\n  constructor(zoom: number) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.applyZoom,\n      payload: { zoom },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Init Showcase for a product a scene and start a sequence for the product.\n * @remarks\n * This class sends a command to the Metabox API to init showcase if the product has a sequence.\n * For check this needs to find a showcase property in the current product.\n * If this property exists, you can send init showcase command.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * ```typescript\n * import { InitShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new InitShowcase());\n * };\n */\nexport class InitShowcase extends CommandBase {\n  /**\n   * Creates an instance of InitShowcase.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.initShowcase,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Play Showcase for a product when it already init, and you call pause, for example, before it.\n * @remarks\n * This class sends a command to the Metabox API to play showcase for a product if it is already initialized and pause.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { PlayShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new PlayShowcase());\n * };\n */\n\nexport class PlayShowcase extends CommandBase {\n  /**\n   * Creates an instance of PlayShowcase.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.playShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * @internal\n * @hidden\n * Represents a command to send Unreal command.\n */\nexport class UnrealCommand extends CommandBase {\n  constructor(payload: object) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.sendCommandToUnreal,\n      payload,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Pause Showcase for a product when it already init and play, and you call pause.\n * @remarks\n * This class sends a command to the Metabox API to pause showcase for a product if it is already initialized and play.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { PauseShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new PauseShowcase());\n * };\n */\n\nexport class PauseShowcase extends CommandBase {\n  /**\n   * Creates an instance of PauseShowcase.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.pauseShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Stop Showcase for a product when it already init, and you want to destroy it.\n * @remarks\n * This class sends a command to the Metabox API to Stop showcase for a product if it is already initialized.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { StopShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetabox(new StopShowcase());\n * };\n */\n\nexport class StopShowcase extends CommandBase {\n  /**\n   * Creates an instance of StopShowcase.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.stopShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Image format.\n * @remarks\n * This type represents the allowed image formats.\n */\nexport type MimeType = 'image/png' | 'image/jpeg' | 'image/webp';\n\n/**\n * Represents a command to get a screenshot.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetScreenshot, Communicator, saveImage } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   // Listen for events from to the Metabox API\n *   api.addEventListener('screenshot', (data) => {\n *     // Process the get screenshot response\n *    saveImage(data, 'Render.png');\n *   });\n *   api.sendCommandToMetabox(new GetScreenshot('image/png', { x: 1024, y: 1024 }));\n * };\n */\nexport class GetScreenshot extends CommandBase {\n  /**\n   * Constructs an instance of GetScreenshot.\n   * @param {MimeType} mimeType - The output format.\n   * @param {{ x: number; y: number }} [size] - Optional size in pixels.\n   */\n  constructor(mimeType: MimeType, size?: { x: number; y: number }) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.getScreenshot,\n      payload: { format: mimeType, size },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a product by its ID.\n *\n * @remarks\n * This action sends a message to the Metabox API to set a product using the provided product ID.\n *\n * @example\n * import { SetProduct, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.setCommandToMetaBox(new SetProduct(\n *     'ffea6b5c-3a8a-4f56-9417-e605acb5cca3'\n *   ));\n * };\n */\nexport class SetProduct extends CommandBase {\n  /**\n   * Creates an instance of SetProduct.\n   *\n   * @param {string} productId - The product ID.\n   */\n  constructor(productId: string) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.setProduct,\n      payload: { productId },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a material by its slot ID and Material ID.\n *\n * @example\n * import { SetProductMaterial, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.sendCommandToMetabox(new SetProductMaterial(\n *     'carpaint',\n *     'dd829d6e-9200-47a7-8d5b-af5df89b7e91',\n *   ));\n * };\n */\nexport class SetProductMaterial extends CommandBase {\n  /**\n   * Creates an instance of SetProductMaterial.\n   *\n   * @param {string} slotId - The slot ID.\n   * @param {string} materialId - The material ID.\n   */\n  constructor(slotId: string, materialId: string) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.setProductMaterialById,\n      payload: { slotId, materialId },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set the environment by its ID.\n *\n * @example\n * import { SetEnvironment, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   // Change the environment to '55555555-1234-1234-1234-01234567890'\n *   api.sendCommandToMetabox(new SetEnvironment('55555555-1234-1234-1234-01234567890'));\n * };\n */\nexport class SetEnvironment extends CommandBase {\n  /**\n   * Creates an instance of SetEnvironment.\n   *\n   * @param {string} environmentId - The environment ID.\n   */\n  constructor(environmentId: string) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.setEnvironment,\n      payload: { id: environmentId },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set an environment material by its slot ID and Material ID.\n *\n * @example\n * import { SetEnvironmentMaterial, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *    api.sendCommandToMetabox(new SetEnvironmentMaterial(\n *     'carpaint',\n *     'dd829d6e-9200-47a7-8d5b-af5df89b7e91',\n *    ));\n * };\n */\nexport class SetEnvironmentMaterial extends CommandBase {\n  /**\n   * Creates an instance of SetEnvironmentMaterial.\n   *\n   * @param {string} slotId - The slot ID.\n   * @param {string} materialId - The material ID.\n   */\n  constructor(slotId: string, materialId: string) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.setEnvironmentMaterialById,\n      payload: { slotId, materialId },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to toggle the Embedded to the Metabox Menu.\n *\n * @example\n * import { ShowEmbeddedMenu, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.setCommandToMetaBox(new ShowEmbeddedMenu(true));\n * };\n */\nexport class ShowEmbeddedMenu extends CommandBase {\n  /**\n   * Creates an instance of ShowEmbeddedMenu.\n   *\n   * @param {boolean} visible - A flag indicating whether the embedded menu should be visible.\n   */\n  constructor(visible: boolean) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.showEmbeddedMenu,\n      payload: { visible },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to toggle the Unreal Overlay Interface Menu.\n *\n * @remarks\n * This action sends a message to the Metabox API to toggle the visibility of the Unreal overlay UI.\n *\n * @example\n * import { ShowOverlayInterface, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.setCommandToMetaBox(new ShowOverlayInterface(true));\n * };\n */\nexport class ShowOverlayInterface extends CommandBase {\n  /**\n   * Creates an instance of ShowOverlayInterface.\n   *\n   * @param {boolean} visible - A flag indicating whether the Unreal overlay UI should be visible.\n   */\n  constructor(visible: boolean) {\n    super();\n    this.data = {\n      action: MetaboxBasicConfiguratorActions.showOverlayInterface,\n      payload: { visible },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * @experimental\n * @internal\n * @hidden\n * @remarks\n * Represents a command to watch Unreal callbacks from Unreal engine.\n * Can be useful for custom solutions.\n */\nexport class WatchCallbacks extends CommandBase {\n  /**\n   * Creates an instance of WatchCallbacks.\n   *\n   * @remarks\n   * This constructor does not require any parameters.\n   */\n  constructor() {\n    super();\n    this.data = { action: MetaboxBasicConfiguratorActions.watchCallbacks };\n  }\n}\n","/**\n * Represents a callback listener for specific message types.\n * Used internally by EventDispatcher to store event listeners.\n *\n * @public\n */\nexport interface Listener {\n  /** The message type this listener is registered for */\n  messageType: string;\n  /** The callback function to execute when a message of the specified type is received */\n  callback: (data: unknown) => void;\n}\n\n/**\n * EventDispatcher is a class that manages event listeners and dispatches events to them.\n */\nexport class EventDispatcher {\n  /**\n   * Storage for callback listeners by message type.\n   */\n  listeners: Listener[] = [];\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  destroy(key: string) {\n    this.listeners = [];\n  }\n\n  /**\n   * Adds an event listener for receiving specific types of messages.\n   *\n   * @param messageType - The message type to listen for.\n   * @param callback - The callback function to execute when a message is received.\n   */\n  addEventListener(\n    messageType: string,\n    callback: (data: unknown) => void,\n  ): this {\n    this.listeners.push({ messageType, callback });\n    return this;\n  }\n\n  /**\n   * Dispatches an event to all listeners of a specific message type.\n   *\n   * @param messageType - The message type.\n   * @param data - The data associated with the event.\n   */\n  dispatchEvent(messageType: string, data: unknown): this {\n    this.listeners\n      .filter((listener) => listener.messageType === messageType)\n      .forEach((listener) => listener.callback(data));\n    return this;\n  }\n\n  /**\n   * Removes an event listener for a specific type of message.\n   *\n   * @param messageType - The message type.\n   * @param callback - The callback function to remove.\n   */\n  removeEventListener(\n    messageType: string,\n    callback: (data: unknown) => void,\n  ): this {\n    this.listeners = this.listeners.filter(\n      (listener) =>\n        !(\n          listener.messageType === messageType && listener.callback === callback\n        ),\n    );\n    return this;\n  }\n}\n","export const Metabox = 'metabox_v3';\nexport const MetaboxHost = 'metaboxHost_v3';\nexport const MetaboxData = 'metaboxData_v3';\nexport const AppLoaded = 'appLoaded_v3';\nexport const MetaboxDomain = 'metabox.3dsource.com';\nexport const BasicRouteUrl = 'metabox-configurator/basic';\n","export const VERSION = '3.0.5';\n","import { EventDispatcher } from './event-dispatcher';\nimport type { CommandBase } from '../actions';\nimport { MetaboxConfig } from '../actions';\nimport type {\n  FromMetaBoxApiEvents,\n  FromMetaBoxMessage,\n  FromMetaboxMessagePayloads,\n  MCAppLoaded,\n  MetaboxCommandConfig,\n  MetaboxEnvironment,\n} from '../interfaces';\nimport {\n  AppLoaded,\n  Metabox,\n  MetaboxData,\n  MetaboxHost,\n  VERSION,\n} from '../constants';\n\nconst communicatorMap = new Map<string, { instance: Communicator }>();\n\n/**\n * Handles messaging between the host page and embedded Metabox content.\n * @internal Use {@link Communicator.createInstance} or the {@link integrateMetabox} helper to instantiate.\n */\nexport class Communicator extends EventDispatcher {\n  /**\n   * Bound handler for incoming postMessage events.\n   */\n  private binder = this.handleMessageReceived.bind(this, MetaboxData);\n\n  /**\n   * Constructs a Communicator, replacing any existing instance, and begins listening for messages.\n   * @internal\n   */\n  constructor(\n    data: MCAppLoaded['payload'],\n    environment: MetaboxEnvironment,\n    config?: Partial<MetaboxCommandConfig>,\n  ) {\n    super();\n    const { appId = 'unknown', version = VERSION } = data ?? {};\n    const key = `${version}_${environment}_${appId}`;\n    communicatorMap.get(key)?.instance.destroy(key);\n    communicatorMap.set(key, { instance: this });\n    window.addEventListener('message', this.binder);\n    this.sendCommandToMetabox(\n      new MetaboxConfig(appId, {\n        ...config,\n        hostUrl: location.href,\n        apiVersion: VERSION,\n      }),\n    );\n  }\n\n  /**\n   * Listens for Metabox to signal readiness, then initializes communicator.\n   * @param apiReadyCallback - Called with the new Communicator once to the Metabox is loaded.\n   * @param {MetaboxEnvironment} environment - The environment in which the Communicator is running.\n   * @param {MetaboxCommandConfig} config - optional initial config: standalone - if true - disable metabox custom template and all logic\n   */\n  static createInstance(\n    apiReadyCallback: (api: Communicator) => void,\n    environment: MetaboxEnvironment,\n    config?: Partial<MetaboxCommandConfig>,\n  ): void {\n    const startHandler = (event: MessageEvent): void => {\n      const message = event.data as FromMetaBoxMessage;\n      if (message?.envelope?.action === AppLoaded && message.host === Metabox) {\n        apiReadyCallback(\n          new Communicator(message.envelope.payload, environment, config),\n        );\n        window.removeEventListener('message', startHandler);\n      }\n    };\n\n    window.addEventListener('message', startHandler);\n  }\n\n  /**\n   * Cleans up resources and stops listening for messages.\n   */\n  public override destroy(key: string): void {\n    super.destroy(key);\n    window.removeEventListener('message', this.binder);\n  }\n\n  static clearAll() {\n    if (communicatorMap.size === 0) {\n      return;\n    }\n\n    communicatorMap.forEach((value, key) => value.instance.destroy(key));\n    communicatorMap.clear();\n  }\n\n  static getCommunicator(key: string) {\n    return communicatorMap.get(key);\n  }\n\n  /**\n   * Posts a command to the Metabox iframe.\n   * @param command - An action command containing data to send.\n   */\n  public sendCommandToMetabox<T extends CommandBase>(command: T): void {\n    const { data } = command;\n    const iframe = document.getElementById(\n      'embeddedContent',\n    ) as HTMLIFrameElement;\n\n    const message = {\n      host: MetaboxHost,\n      payload: { ...data },\n    };\n\n    if (!iframe?.contentWindow) {\n      console.warn(\n        'to the Metabox IFrame not found or not ready. Message sends to the same window',\n      );\n      window.postMessage({ ...message, target: 'metabox' }, '*');\n      return;\n    }\n\n    // Replace '*' with a specific origin in production for better security.\n    iframe.contentWindow.postMessage({ ...message, target: 'child' }, '*');\n  }\n\n  /**\n   * Registers an event listener for messages dispatched by to the Metabox.\n   * @override\n   */\n  override addEventListener<T extends FromMetaBoxApiEvents>(\n    messageType: T,\n    callback: (data: FromMetaboxMessagePayloads[T]) => void,\n  ) {\n    return super.addEventListener(\n      messageType,\n      callback as (data: unknown) => void,\n    );\n  }\n\n  /**\n   * Dispatches a typed event to all registered listeners.\n   * @override\n   */\n  override dispatchEvent<T extends FromMetaBoxApiEvents>(\n    messageType: T,\n    data: FromMetaboxMessagePayloads[T],\n  ) {\n    return super.dispatchEvent(messageType, data);\n  }\n\n  /**\n   * Removes a previously registered event listener.\n   * @override\n   */\n  override removeEventListener<T extends FromMetaBoxApiEvents>(\n    messageType: T,\n    callback: (data: FromMetaboxMessagePayloads[T]) => void,\n  ) {\n    return super.removeEventListener(\n      messageType,\n      callback as (data: unknown) => void,\n    );\n  }\n\n  /**\n   * Filters and dispatches incoming messages from to the Metabox.\n   * @param {FromMetaBoxApiEvents | 'metaboxData' } messageType - Expected message type for filtering ('metaboxData').\n   * @param {MessageEvent} event - The postMessage event received on a window.\n   */\n  private handleMessageReceived<T extends FromMetaBoxApiEvents>(\n    messageType: T | typeof MetaboxData,\n    event: MessageEvent,\n  ): void {\n    // Optionally validate event.origin for security.\n    if (messageType !== MetaboxData || event.data?.host !== Metabox) {\n      return;\n    }\n    const data = event.data?.envelope;\n    this.dispatchEvent(data?.eventType as T, data?.payload);\n  }\n}\n","import type { IntegrateMetaboxConfig } from '../interfaces';\nimport { BasicRouteUrl, MetaboxDomain } from '../constants';\n\nexport const prepareIframeSrc = (\n  configuratorId: string,\n  config?: IntegrateMetaboxConfig,\n) => {\n  const base = `https://${config?.domain || MetaboxDomain}/${BasicRouteUrl}/${configuratorId}`;\n  const params = new URLSearchParams();\n\n  if (config?.introImage) {\n    params.set('introImage', config.introImage);\n  }\n  if (config?.introVideo) {\n    params.set('introVideo', config.introVideo);\n  }\n  if (config?.loadingImage) {\n    params.set('loadingImage', config.loadingImage);\n  }\n  if (config?.state) {\n    params.set('state', decodeURIComponent(config.state));\n  }\n\n  const query = params.toString();\n  return query ? `${base}?${query}` : base;\n};\n","import { Communicator } from './communicator';\nimport type { IntegrateMetaboxConfig } from '../interfaces';\nimport { prepareIframeSrc } from './prepare-iframe-src';\n\n/**\n * Integrates the Metabox Basic Configurator into the page by injecting an iframe and\n * initializing a Communicator instance for host-to-iframe messaging.\n *\n * @remarks\n * - Builds a secure iframe URL using the provided configuratorId and config options.\n * - Ensures the resulting URL uses HTTPS and that the target container exists.\n * - Removes any previously embedded iframe with id \"embeddedContent\" before inserting a new one.\n *\n * @param {string} configuratorId - The Basic Configurator ID (not a full URL). It is appended to\n * `https://{domain}/metabox-configurator/basic/{configuratorId}` to form the iframe src.\n *\n * @param {string} [containerId='embed3DSource'] - The id of the container element where the iframe will be injected.\n *\n * @param {(api: Communicator) => void} apiReadyCallback - Called when the Communicator instance is created on the host side.\n *\n * @param {IntegrateMetaboxConfig} config - Optional configuration used to build the iframe URL and initialize the communicator.\n * Supported fields:\n *  - standalone?: boolean — if true, disables Metabox custom template and related logic.\n *  - introImage?: string — URL to an image shown on the intro screen (added as ?introImage=...).\n *  - introVideo?: string — URL to a video shown on the intro screen (added as ?introVideo=...).\n *  - loadingImage?: string — URL to an image displayed while loading (added as ?loadingImage=...).\n *  - state?: string — Predefined state for configurator for initial loading (added as ?state=...).\n *  - domain?: string — custom domain for testing (defaults to metabox.3dsource.com). HTTPS is enforced.\n *\n * @throws Error If configuratorId or containerId are empty strings.\n * @throws Error If the computed iframe URL is invalid or does not use HTTPS.\n * @throws Error If the container element with the provided id cannot be found.\n *\n * @example\n * import { integrateMetabox } from '@3dsource/metabox-front-api';\n *\n * integrateMetabox(\n *   'configurator-id',\n *   'embed3DSource',\n *   (api) => {\n *     // Communicator is ready to use\n *   },\n *   {\n *     standalone: false,\n *     introImage: 'https://example.com/intro.png',\n *     loadingImage: 'https://example.com/loading.png',\n *   },\n * );\n */\nexport function integrateMetabox(\n  configuratorId: string,\n  containerId = 'embed3DSource',\n  apiReadyCallback: (api: Communicator) => void,\n  config?: IntegrateMetaboxConfig,\n) {\n  if (!configuratorId.trim()) {\n    throw new Error(\n      'integrateMetabox: configuratorId must be a non-empty string',\n    );\n  }\n  const iframeSrc = prepareIframeSrc(configuratorId, config);\n  let parsedUrl: URL;\n  try {\n    parsedUrl = new URL(iframeSrc);\n  } catch {\n    throw new Error('integrateMetabox: Provided iframeSrc is not a valid URL');\n  }\n  if (parsedUrl.protocol !== 'https:') {\n    throw new Error('integrateMetabox: iframeSrc must use HTTPS protocol');\n  }\n  if (!containerId.trim()) {\n    throw new Error('integrateMetabox: containerId must be a non-empty string');\n  }\n\n  const container = document.getElementById(containerId);\n  if (!container) {\n    throw new Error(`Container element with id ${containerId} not found`);\n  }\n\n  const existingIframe = document.getElementById('embeddedContent');\n  if (existingIframe) {\n    existingIframe.remove();\n  }\n\n  Communicator.createInstance(apiReadyCallback, 'host', config);\n\n  const style = document.createElement('style');\n  style.innerHTML = `\n        #${containerId} {\n          width: 100%;\n          height: 100%;\n          overflow: hidden;\n          position: relative;\n        }\n    `;\n  document.head.appendChild(style);\n\n  const iframe = document.createElement('iframe');\n  iframe.setAttribute('allow', 'autoplay; fullscreen; encrypted-media');\n  iframe.setAttribute('referrerPolicy', 'no-referrer-when-downgrade');\n  iframe.setAttribute('id', 'embeddedContent');\n  iframe.style.border = '0';\n  iframe.style.width = '100%';\n  iframe.style.height = '100%';\n  iframe.style.overflow = 'hidden';\n  iframe.src = iframeSrc;\n  container.appendChild(iframe);\n}\n","/**\n * Saves an image by triggering a download.\n *\n * @remarks\n * This function creates an anchor element, sets its `href` attribute to the provided image URL,\n * and triggers a click event to initiate a download with the specified filename.\n *\n * @param {string} imageUrl - The URL of the image to save.\n * @param {string} filename - The name of the file to save.\n */\nexport function saveImage(imageUrl: string, filename: string): void {\n  const a = document.createElement('a');\n  a.href = imageUrl;\n  a.download = filename;\n  document.body.appendChild(a);\n  a.click();\n  document.body.removeChild(a);\n}\n","/**\n * Sets the URL parameters based on the provided state.\n *\n * @remarks\n * This function updates the current URL by replacing its search parameters with the key-value pairs from the provided state object.\n *\n * @param {Record<string, string>} state - An object containing key-value pairs to set as URL parameters.\n */\nexport function setUrlParams(state: Record<string, string>): void {\n  const url = new URL(window.location.href);\n  url.search = '';\n  Object.entries(state).forEach(([key, value]) => {\n    url.searchParams.set(key, value);\n  });\n  history.replaceState(null, '', url.toString());\n}\n\n/**\n * Retrieves the URL parameters as an object.\n *\n * @remarks\n * This function parses the current URL's search parameters and returns them as a key-value object.\n *\n * @returns An object containing the URL parameters.\n */\nexport function getUrlParams(): Record<string, string> {\n  const urlParams = new URLSearchParams(window.location.search);\n  const selections: Record<string, string> = {};\n  urlParams.forEach((value, key) => {\n    selections[key] = value;\n  });\n  return selections;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}