{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/media-gallery.js?v=154207211298275592001790720035"],
  "sourcesContent": ["import { Component } from '@theme/component';\nimport { ThemeEvents, ZoomMediaSelectedEvent } from '@theme/events';\nimport { StandardEvents, ProductSelectEvent } from '@shopify/events';\n\n/**\n * A custom element that renders a media gallery.\n *\n * @typedef {object} Refs\n * @property {import('./zoom-dialog').ZoomDialog} [zoomDialogComponent] - The zoom dialog component.\n * @property {import('./slideshow').Slideshow} [slideshow] - The slideshow component.\n * @property {HTMLElement[]} [media] - The media elements.\n *\n * @extends Component<Refs>\n */\nexport class MediaGallery extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { signal } = this.#controller;\n    const target = this.closest('.shopify-section, dialog');\n\n    target?.addEventListener(StandardEvents.productSelect, this.#handleProductSelect, { signal });\n    this.refs.zoomDialogComponent?.addEventListener(ThemeEvents.zoomMediaSelected, this.#handleZoomMediaSelected, {\n      signal,\n    });\n  }\n\n  #controller = new AbortController();\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.#controller.abort();\n  }\n\n  /**\n   * Handles a product select event by replacing the current media gallery with a new one.\n   *\n   * @param {ProductSelectEvent} event - The product select event.\n   */\n  #handleProductSelect = (event) => {\n    if (!(event.target instanceof Element) || event.target.closest('product-card')) return;\n\n    event.promise\n      .then(({ detail }) => {\n        if (!detail?.html) return;\n\n        const { html } = detail;\n        const newMediaGallery = html.querySelector('media-gallery');\n        if (!newMediaGallery) return;\n\n        this.replaceWith(newMediaGallery);\n      })\n      .catch((error) => {\n        if (error?.name !== 'AbortError') console.warn('[media-gallery] Event promise rejected:', error);\n      });\n  };\n\n  /**\n   * Handles the 'zoom-media:selected' event.\n   * @param {ZoomMediaSelectedEvent} event - The zoom-media:selected event.\n   */\n  #handleZoomMediaSelected = async (event) => {\n    this.slideshow?.select(event.detail.index, undefined, { animate: false });\n  };\n\n  /**\n   * Zooms the media gallery.\n   *\n   * @param {number} index - The index of the media to zoom.\n   * @param {PointerEvent} event - The pointer event.\n   */\n  zoom(index, event) {\n    this.refs.zoomDialogComponent?.open(index, event);\n  }\n\n  /**\n   * Preloads an image.\n   * @param {number} index - The index of the media to preload.\n   */\n  preloadImage(index) {\n    const zoomDialogMedia = this.refs.zoomDialogComponent?.refs.media[index];\n    if (!zoomDialogMedia) return;\n\n    this.refs.zoomDialogComponent?.loadHighResolutionImage(zoomDialogMedia);\n  }\n\n  get slideshow() {\n    return this.refs.slideshow;\n  }\n\n  get media() {\n    return this.refs.media;\n  }\n\n  get presentation() {\n    return this.dataset.presentation;\n  }\n}\n\nif (!customElements.get('media-gallery')) {\n  customElements.define('media-gallery', MediaGallery);\n}\n"],
  "mappings": "AAAA,OAAS,cAAiB,mBAC1B,OAAS,gBAA2C,gBACpD,OAAS,mBAA0C,kBAY5C,aAAM,qBAAqB,SAAU,CAC1C,mBAAoB,CAClB,MAAM,kBAAkB,EAExB,KAAM,CAAE,MAAO,EAAI,KAAK,YACT,KAAK,QAAQ,0BAA0B,GAE9C,iBAAiB,eAAe,cAAe,KAAK,qBAAsB,CAAE,MAAO,CAAC,EAC5F,KAAK,KAAK,qBAAqB,iBAAiB,YAAY,kBAAmB,KAAK,yBAA0B,CAC5G,MACF,CAAC,CACH,CAEA,YAAc,IAAI,gBAElB,sBAAuB,CACrB,MAAM,qBAAqB,EAE3B,KAAK,YAAY,MAAM,CACzB,CAOA,qBAAwB,OAAU,CAC5B,EAAE,MAAM,kBAAkB,UAAY,MAAM,OAAO,QAAQ,cAAc,GAE7E,MAAM,QACH,KAAK,CAAC,CAAE,MAAO,IAAM,CACpB,GAAI,CAAC,QAAQ,KAAM,OAEnB,KAAM,CAAE,IAAK,EAAI,OACX,gBAAkB,KAAK,cAAc,eAAe,EACrD,iBAEL,KAAK,YAAY,eAAe,CAClC,CAAC,EACA,MAAO,OAAU,CACZ,OAAO,OAAS,cAAc,QAAQ,KAAK,0CAA2C,KAAK,CACjG,CAAC,CACL,EAMA,yBAA2B,MAAO,OAAU,CAC1C,KAAK,WAAW,OAAO,MAAM,OAAO,MAAO,OAAW,CAAE,QAAS,EAAM,CAAC,CAC1E,EAQA,KAAK,MAAO,MAAO,CACjB,KAAK,KAAK,qBAAqB,KAAK,MAAO,KAAK,CAClD,CAMA,aAAa,MAAO,CAClB,MAAM,gBAAkB,KAAK,KAAK,qBAAqB,KAAK,MAAM,KAAK,EAClE,iBAEL,KAAK,KAAK,qBAAqB,wBAAwB,eAAe,CACxE,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,KAAK,KACnB,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,QAAQ,YACtB,CACF,CAEK,eAAe,IAAI,eAAe,GACrC,eAAe,OAAO,gBAAiB,YAAY",
  "names": []
}
