{"version":3,"file":"3dsource-metabox-modular-configurator-api.mjs","sources":["../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/CommandBase.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/fromCommunicatorEvent.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/interfaces/ToMetaboxMessagePayloads.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/GetPdf.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/ResetCamera.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/ApplyZoom.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/InitShowcase.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/UnrealCommand.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/PlayShowcase.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/PauseShowcase.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/StopShowcase.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/GetScreenshot.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/SetComponent.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/SetComponentMaterial.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/SetComponentType.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/SetEnvironment.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/SetEnvironmentMaterial.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/ShowEmbeddedMenu.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/actions/ShowOverlayInterface.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/helpers/event-dispatcher.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/helpers/communicator.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/helpers/integrate-metabox.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/lib/helpers/save-image.ts","../../../../projects/3dsource/metabox-modular-configurator-api/src/3dsource-metabox-modular-configurator-api.ts"],"sourcesContent":["import type { ToMetaBoxMessageEnvelope } from '../interfaces';\n\n/**\n * Base class for commands sent to the Metabox.\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';\n\nexport const MetaboxModularConfiguratorActions = {\n  setEnvironment: 'setEnvironment',\n  setEnvironmentMaterialById: 'setEnvironmentMaterialById',\n  setComponent: 'setComponent',\n  setComponentType: 'setComponentType',\n  setComponentMaterialById: 'setComponentMaterialById',\n  getPdf: 'getPdf',\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} as const;\n\nexport type ToMetaBoxActions =\n  (typeof MetaboxModularConfiguratorActions)[keyof typeof MetaboxModularConfiguratorActions];\n\n/**\n * @internal\n * @hidden\n */\nexport type ToMetaboxMessagePayload =\n  ToMetaboxMessagePayloads[keyof ToMetaboxMessagePayloads];\n\nexport type Test = Record<ToMetaBoxActions, object>;\n\n/**\n * Interface for messages sent from the application to the Metabox Modular Configurator.\n */\nexport interface ToMetaboxMessagePayloads {\n  [MetaboxModularConfiguratorActions.setEnvironment]: { id: string };\n  [MetaboxModularConfiguratorActions.setEnvironmentMaterialById]: {\n    slotId: string;\n    materialId: string;\n  };\n  [MetaboxModularConfiguratorActions.setComponentType]: { typeId: string };\n  [MetaboxModularConfiguratorActions.setComponent]: {\n    id: string;\n    typeId: string;\n    isRoot: boolean;\n  };\n  [MetaboxModularConfiguratorActions.setComponentMaterialById]: {\n    slotId: string;\n    materialId: string;\n  };\n  [MetaboxModularConfiguratorActions.getScreenshot]: {\n    format: MimeType;\n    size?: { x: number; y: number };\n  };\n  [MetaboxModularConfiguratorActions.getPdf]: void;\n  [MetaboxModularConfiguratorActions.showEmbeddedMenu]: { visible: boolean };\n  [MetaboxModularConfiguratorActions.showOverlayInterface]: {\n    visible: boolean;\n  };\n  [MetaboxModularConfiguratorActions.forceSetDeviceType]: {\n    deviceType: ApplicationDeviceTypes;\n  };\n  [MetaboxModularConfiguratorActions.resetCamera]: void;\n  [MetaboxModularConfiguratorActions.applyZoom]: { zoom: number };\n  [MetaboxModularConfiguratorActions.initShowcase]: { productId: string };\n  [MetaboxModularConfiguratorActions.playShowcase]: void;\n  [MetaboxModularConfiguratorActions.pauseShowcase]: void;\n  [MetaboxModularConfiguratorActions.stopShowcase]: void;\n  [MetaboxModularConfiguratorActions.sendCommandToUnreal]: object;\n}\n\nexport interface ToMetaBoxMessageEnvelope {\n  action: ToMetaBoxActions;\n  payload?: ToMetaboxMessagePayload | never;\n}\n\nexport interface ToMetaBoxMessage {\n  host: 'metaBoxHost';\n  payload: ToMetaBoxMessageEnvelope;\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to get a PDF from Metabox.\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-modular-configurator-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: MetaboxModularConfiguratorActions.getPdf };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.resetCamera };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.applyZoom,\n      payload: { zoom },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Init Showcase for a product in a component on 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 in a component has a sequence.\n * For check this needs to find a showcase property in current product in a component\n * If this property exist you can send init showcase command\n * @internal Use {@link UniversalConfiguratorProduct.product.showcase}\n * @remarks\n * You can send init showcase command only for root components, otherwise we will ignore this 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 * import { InitShowcase, Communicator } from '@3dsource/metabox-modular-configurator-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n *     api.sendCommandToMetaBox(new InitShowcase('ffea6b5c-3a8a-4f56-9417-e605acb5cca3');\n * };\n */\n\nexport class InitShowcase extends CommandBase {\n  /**\n   * Creates an instance of InitShowcase.\n   *\n   * @param {string} productId\n   */\n  constructor(productId: string) {\n    super();\n    this.data = {\n      action: MetaboxModularConfiguratorActions.initShowcase,\n      payload: { productId },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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      payload,\n      action: MetaboxModularConfiguratorActions.sendCommandToUnreal,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.playShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.pauseShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.stopShowcase };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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      payload: { format: mimeType, size },\n      action: MetaboxModularConfiguratorActions.getScreenshot,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a component by its data (ID, typeId, isRoot).\n *\n * @remarks\n * This action sends a message to the Metabox API to set a component using the provided component ID and its component type data.\n *\n * @example\n * import { SetComponent, Communicator } from '@3dsource/metabox-modular-configurator-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.setCommandToMetaBox(new SetComponent(\n *     'ffea6b5c-3a8a-4f56-9417-e605acb5cca3', 'typeId', true\n *   ));\n * };\n */\nexport class SetComponent extends CommandBase {\n  /**\n   * Creates an instance of SetComponent.\n   *\n   * @param {string} id\n   * @param {string} typeId\n   * @param {boolean} isRoot\n   */\n  constructor(id: string, typeId: string, isRoot: boolean) {\n    super();\n    this.data = {\n      payload: { id, typeId, isRoot },\n      action: MetaboxModularConfiguratorActions.setComponent,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set component material by its slot ID and Material ID.\n *\n * @example\n * import { SetComponentMaterial, Communicator } from '@3dsource/metabox-modular-configurator-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.sendCommandToMetaBox(new SetComponentMaterial(\n *     'carpaint',\n *     'dd829d6e-9200-47a7-8d5b-af5df89b7e91',\n *   ));\n * };\n */\nexport class SetComponentMaterial extends CommandBase {\n  /**\n   * Creates an instance of SetComponentMaterial.\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      payload: { slotId, materialId },\n      action: MetaboxModularConfiguratorActions.setComponentMaterialById,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a component type by its ID.\n *\n * @remarks\n * This action sends a message to the Metabox API to set a component type using the provided component type ID.\n *\n * @example\n * import { SetComponentType, Communicator } from '@3dsource/metabox-modular-configurator-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n *   api.setCommandToMetaBox(new SetComponentType(\n *     'ffea6b5c-3a8a-4f56-9417-e605acb5cca3'\n *   ));\n * };\n */\nexport class SetComponentType extends CommandBase {\n  /**\n   * Creates an instance of SetComponentType.\n   *\n   * @param {string} typeId\n   */\n  constructor(typeId: string) {\n    super();\n    this.data = {\n      payload: { typeId },\n      action: MetaboxModularConfiguratorActions.setComponentType,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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      payload: { id: environmentId },\n      action: MetaboxModularConfiguratorActions.setEnvironment,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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      payload: { slotId, materialId },\n      action: MetaboxModularConfiguratorActions.setEnvironmentMaterialById,\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.showEmbeddedMenu,\n      payload: { visible },\n    };\n  }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxModularConfiguratorActions } 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-modular-configurator-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: MetaboxModularConfiguratorActions.showOverlayInterface,\n      payload: { visible },\n    };\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  destroy() {\n    this.listeners = [];\n  }\n\n  /**\n   * Adds an event listener for receiving specific types of messages.\n   *\n   * @param {string} 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 {string} 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 {string} 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","import { EventDispatcher } from './event-dispatcher';\nimport type { CommandBase } from '../actions';\nimport type {\n  FromMetaBoxApiEvents,\n  FromMetaBoxMessage,\n  FromMetaboxMessagePayloads,\n} from '../interfaces';\n\n/**\n * Handles messaging between the host page and embedded to the Metabox content.\n * @internal Use {@link Communicator.createInstance} or the {@link integrateMetabox} helper to instantiate.\n */\nexport class Communicator extends EventDispatcher {\n  /**\n   * Singleton reference to the current communicator instance.\n   */\n  public static instance: Communicator | null = null;\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    super();\n    Communicator.instance?.destroy();\n    Communicator.instance = this;\n    window.addEventListener('message', this.binder);\n  }\n\n  /**\n   * Listens for to the Metabox to signal readiness, then initializes communicator.\n   * @param apiReadyCallback - Called with the new Communicator once to the Metabox is loaded.\n   */\n  static createInstance(apiReadyCallback: (api: Communicator) => void): void {\n    const startHandler = (event: MessageEvent): void => {\n      const message = event.data as FromMetaBoxMessage;\n      if (message?.envelope?.action === 'appLoaded') {\n        apiReadyCallback(new Communicator());\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(): void {\n    super.destroy();\n    window.removeEventListener('message', this.binder);\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    if (!iframe?.contentWindow) {\n      console.warn('to the Metabox IFrame not found or not ready.');\n      return;\n    }\n\n    const message = {\n      host: 'metaBoxHost',\n      payload: { ...data },\n    };\n\n    // Replace '*' with a specific origin in production for better security.\n    iframe.contentWindow.postMessage(message, '*');\n  }\n\n  /**\n   * Registers an event listener for messages dispatched by 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 messageType - Expected message type for filtering ('metaboxData').\n   * @param event - The postMessage event received on a window.\n   */\n  private handleMessageReceived<T extends FromMetaBoxApiEvents>(\n    messageType: T | '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\n    const { eventType, payload } = event.data.envelope;\n    this.dispatchEvent(eventType as T, payload);\n  }\n}\n","import { Communicator } from './communicator';\n\n/**\n * Integrates Metabox Modular Configurator into the provided layout.\n *\n * @remarks\n * This function injects an iframe into a specified container element in the DOM and initializes\n * the communicator for interacting with the Metabox embedded content.\n *\n * @param iframeSrc - The source URL of the Metabox iframe.\n * Additional url parameters:\n * ```javascript\n * sidebar=false - disables the internal Metabox menu\n * introImage=https://example.com/image.png - sets the intro image\n * ```\n * i.e., a final link will look like https://metabox.3dsource.com/metabox-configurator/modular/your-configurator-id?sidebar=false&introImage=https://example.com/image.png\n *\n * @param {string} containerId - The ID of the layout element. Defaults to 'embed3DSource'.\n * @param  apiReadyCallback\n * @throws Error if the container element with the specified ID is not found.\n *\n * @example\n * import {\n *  integrateMetabox,\n * } from '@3dsource/metabox-modular-configurator-api';\n *\n * integrateMetabox(\n *   'https://metabox.3dsource.com/metabox-configurator/modular/12345678-1234-1234-1234-01234567890?introImage=https://example.com/intro.webp&sidebar=false',\n *   'embed3DSource'\n * );\n */\nexport function integrateMetabox(\n  iframeSrc: string,\n  containerId = 'embed3DSource',\n  apiReadyCallback: (api: Communicator) => void,\n): void {\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);\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('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 * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}