{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/media-gallery.js?codex_gallery_fix=20260609b"],
  "sourcesContent": ["import { Component } from '@theme/component';\r\nimport { ThemeEvents, VariantUpdateEvent, ZoomMediaSelectedEvent } from '@theme/events';\r\n\r\n/**\r\n * A custom element that renders a media gallery.\r\n *\r\n * @typedef {object} Refs\r\n * @property {import('./zoom-dialog').ZoomDialog} [zoomDialogComponent] - The zoom dialog component.\r\n * @property {import('./slideshow').Slideshow} [slideshow] - The slideshow component.\r\n * @property {HTMLElement[]} [media] - The media elements.\r\n *\r\n * @extends Component<Refs>\r\n */\r\nexport class MediaGallery extends Component {\r\n  connectedCallback() {\r\n    super.connectedCallback();\r\n    this.#removeLowQualityGalleryMedia();\r\n\r\n    const { signal } = this.#controller;\r\n    const target = this.closest('.shopify-section, dialog');\r\n\r\n    target?.addEventListener(ThemeEvents.variantUpdate, this.#handleVariantUpdate, { signal });\r\n    this.refs.zoomDialogComponent?.addEventListener(ThemeEvents.zoomMediaSelected, this.#handleZoomMediaSelected, {\r\n      signal,\r\n    });\r\n    requestAnimationFrame(() => this.#selectInitialVariantMedia());\r\n  }\r\n\r\n  #controller = new AbortController();\r\n\r\n  #mediaSelectionRequest = 0;\r\n\r\n  disconnectedCallback() {\r\n    super.disconnectedCallback();\r\n\r\n    this.#controller.abort();\r\n  }\r\n\r\n  /**\r\n   * Handles a variant update event by selecting the variant media when possible.\r\n   *\r\n   * @param {VariantUpdateEvent} event - The variant update event.\r\n   */\r\n  #handleVariantUpdate = async (event) => {\r\n    const source = event.detail.data.html;\r\n    const variantMediaId = event.detail.resource?.featured_media?.id;\r\n\r\n    if (source) {\r\n      const newMediaGallery = source.querySelector('media-gallery');\r\n\r\n      if (newMediaGallery) {\r\n        this.replaceWith(newMediaGallery);\r\n        newMediaGallery.removeLowQualityMedia?.();\r\n        if (variantMediaId) {\r\n          this.#scheduleMediaSelection(newMediaGallery, String(variantMediaId));\r\n        }\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (variantMediaId && (!this.#isLowQualityMediaId(String(variantMediaId)) || this.#isVariantMediaId(String(variantMediaId)))) {\r\n      this.#selectMediaById(String(variantMediaId));\r\n      this.#scheduleMediaSelection(this, String(variantMediaId));\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Public hook used after this element is inserted with replaceWith().\r\n   */\r\n  removeLowQualityMedia() {\r\n    this.#removeLowQualityGalleryMedia();\r\n  }\r\n\r\n  /**\r\n   * Selects a media item by Shopify media id.\r\n   * @param {string} mediaId - Shopify media ID.\r\n   * @returns {boolean}\r\n   */\r\n  selectMediaById(mediaId) {\r\n    return this.#selectMediaById(mediaId);\r\n  }\r\n\r\n  /**\r\n   * Selects a media item by Shopify media id.\r\n   * @param {string} mediaId - Shopify media ID.\r\n   * @returns {boolean}\r\n   */\r\n  #selectMediaById(mediaId) {\r\n    if (!mediaId) return false;\r\n    if (this.#isLowQualityMediaId(mediaId) && !this.#isVariantMediaId(mediaId)) return false;\r\n\r\n    const slide = this.refs?.slideshow?.refs?.slides?.find((item) => item.getAttribute('slide-id') === mediaId);\n    if (slide) {\r\n      this.slideshow?.select({ id: mediaId }, undefined, { animate: false });\r\n      this.#syncSelectedSlide(mediaId);\r\n      return true;\r\n    }\r\n\r\n    const safeMediaId = globalThis.CSS?.escape ? CSS.escape(mediaId) : mediaId.replaceAll('\"', '\\\\\"');\r\n    const media = this.querySelector(`[data-media-id=\"${safeMediaId}\"]`);\r\n    const mediaContainer = media?.closest('[ref=\"media[]\"], .product-media-container, slideshow-slide');\r\n    if (!mediaContainer) return false;\r\n\r\n    mediaContainer.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' });\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Keeps the visible slide and thumbnails in sync when media is selected before\r\n   * the slideshow internals finish reacting to a variant change.\r\n   * @param {string} mediaId - Shopify media ID.\r\n   */\r\n  #syncSelectedSlide(mediaId) {\r\n    this.#syncGalleryElementById(this, mediaId);\r\n  }\r\n\r\n  /**\r\n   * Keeps an arbitrary gallery element in sync. Useful immediately after\r\n   * replacing this element with Section Rendering API HTML.\r\n   * @param {Element} gallery\r\n   * @param {string} mediaId\r\n   */\r\n  #syncGalleryElementById(gallery, mediaId) {\r\n    const slides = Array.from(gallery.querySelectorAll('slideshow-slide'));\r\n    const selectedIndex = slides.findIndex((slide) => slide.getAttribute('slide-id') === mediaId);\r\n    if (selectedIndex < 0) return;\r\n\r\n    slides.forEach((slide) => {\r\n      const isSelected = slide.getAttribute('slide-id') === mediaId;\r\n      slide.setAttribute('aria-hidden', isSelected ? 'false' : 'true');\r\n      slide.toggleAttribute('active', isSelected);\r\n    });\r\n\r\n    gallery.querySelectorAll('slideshow-controls[thumbnails] .slideshow-controls__thumbnail').forEach((thumbnail, index) => {\r\n      const isSelected = index === selectedIndex;\r\n      thumbnail.setAttribute('aria-current', isSelected ? 'true' : 'false');\r\n      thumbnail.toggleAttribute('active', isSelected);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Re-applies the selected media after late variant/gallery rendering settles.\r\n   * @param {Element} gallery\r\n   * @param {string} mediaId\r\n   */\r\n  #scheduleMediaSelection(gallery, mediaId) {\r\n    const target = gallery.closest('.shopify-section, dialog') || document;\r\n    const requestId = `${Date.now()}-${++this.#mediaSelectionRequest}`;\r\n    target.__allbetterMediaSelectionRequest = requestId;\r\n    const isCurrentSelection = () => {\r\n      if (target.__allbetterMediaSelectionRequest !== requestId) return false;\r\n\r\n      const variantJson = target.querySelector('variant-picker script[type=\"application/json\"]')?.textContent;\r\n      if (!variantJson) return true;\r\n\r\n      try {\r\n        const variant = JSON.parse(variantJson);\r\n        const currentMediaId = variant?.featured_media?.id;\r\n        return !currentMediaId || String(currentMediaId) === mediaId;\r\n      } catch (error) {\r\n        return true;\r\n      }\r\n    };\r\n    const applyMedia = () => {\r\n      if (!isCurrentSelection()) return;\r\n      gallery.selectMediaById?.(mediaId);\r\n      this.#syncGalleryElementById(gallery, mediaId);\r\n    };\r\n\r\n    requestAnimationFrame(applyMedia);\r\n    [150, 750, 1800, 3600, 6200].forEach((delay) => {\r\n      window.setTimeout(applyMedia, delay);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Aligns the gallery with the variant selected in the picker on first load.\r\n   */\r\n  #selectInitialVariantMedia() {\r\n    const target = this.closest('.shopify-section, dialog') || document;\r\n    const variantJson = target.querySelector('variant-picker script[type=\"application/json\"]')?.textContent;\r\n    if (!variantJson) return;\r\n\r\n    try {\r\n      const variant = JSON.parse(variantJson);\r\n      const mediaId = variant?.featured_media?.id;\r\n      if (mediaId) this.#selectMediaById(String(mediaId));\r\n    } catch (error) {\r\n      // Ignore malformed variant JSON and keep the merchant-defined first image.\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes imported swatch/thumbnail files from the main product gallery.\r\n   * Those files can be attached as variant media but are too small for the gallery.\r\n   */\r\n  #removeLowQualityGalleryMedia() {\r\n    const removedSlideIndexes = new Set();\r\n\r\n    this.querySelectorAll('slideshow-slide').forEach((slide, index) => {\r\n      if (!this.#elementHasLowQualityImage(slide)) return;\r\n      if (this.#elementHasVariantMediaId(slide)) return;\r\n\r\n      removedSlideIndexes.add(index);\r\n      slide.remove();\r\n    });\r\n\r\n    if (removedSlideIndexes.size) {\r\n      this.querySelectorAll('slideshow-controls[thumbnails]').forEach((controls) => {\r\n        controls\r\n          .querySelectorAll('.slideshow-controls__thumbnail')\r\n          .forEach((thumbnail, index) => {\r\n            if (removedSlideIndexes.has(index) || (this.#elementHasLowQualityImage(thumbnail) && !this.#elementHasVariantMediaId(thumbnail))) thumbnail.remove();\r\n          });\r\n      });\r\n    }\r\n\r\n    this.querySelectorAll('[ref=\"media[]\"], .dialog-thumbnails-list__thumbnail').forEach((item) => {\r\n      if (this.#elementHasVariantMediaId(item)) return;\r\n      if (this.#elementHasLowQualityImage(item)) item.remove();\r\n    });\r\n\r\n    const firstSlide = this.refs?.slideshow?.refs?.slides?.[0] || this.querySelector('slideshow-slide');\n    firstSlide?.setAttribute('aria-hidden', 'false');\r\n  }\r\n\r\n  /**\r\n   * @param {string} mediaId\r\n   * @returns {boolean}\r\n   */\r\n  #isLowQualityMediaId(mediaId) {\r\n    const safeMediaId = globalThis.CSS?.escape ? CSS.escape(mediaId) : mediaId.replaceAll('\"', '\\\\\"');\r\n    const media = this.querySelector(`[data-media-id=\"${safeMediaId}\"], slideshow-slide[slide-id=\"${safeMediaId}\"]`);\r\n\r\n    return this.#elementHasLowQualityImage(media);\r\n  }\r\n\r\n  /**\r\n   * @param {Element | null | undefined} element\r\n   * @returns {boolean}\r\n   */\r\n  #elementHasVariantMediaId(element) {\r\n    if (!element) return false;\r\n\r\n    const mediaId =\r\n      element.getAttribute('slide-id') ||\r\n      element.getAttribute('data-media-id') ||\r\n      element.querySelector('[slide-id]')?.getAttribute('slide-id') ||\r\n      element.querySelector('[data-media-id]')?.getAttribute('data-media-id');\r\n\r\n    return this.#isVariantMediaId(mediaId);\r\n  }\r\n\r\n  /**\r\n   * @param {string | null | undefined} mediaId\r\n   * @returns {boolean}\r\n   */\r\n  #isVariantMediaId(mediaId) {\r\n    if (!mediaId) return false;\r\n\r\n    const target = this.closest('.shopify-section, dialog') || document;\r\n    const mediaIds = new Set();\r\n\r\n    target.querySelectorAll('variant-picker script[data-instant-variant-media-map]').forEach((script) => {\r\n      try {\r\n        const variants = JSON.parse(script.textContent || '[]');\r\n        if (!Array.isArray(variants)) return;\r\n\r\n        variants.forEach((variant) => {\r\n          const variantMediaId = variant?.mediaId || variant?.featured_media?.id;\r\n          if (variantMediaId) mediaIds.add(String(variantMediaId));\r\n        });\r\n      } catch (error) {\r\n        // Ignore malformed variant maps and keep the normal cleanup behavior.\r\n      }\r\n    });\r\n\r\n    target.querySelectorAll('variant-picker script[type=\"application/json\"]').forEach((script) => {\r\n      try {\r\n        const variant = JSON.parse(script.textContent || '{}');\r\n        const variantMediaId = variant?.featured_media?.id;\r\n        if (variantMediaId) mediaIds.add(String(variantMediaId));\r\n      } catch (error) {\r\n        // Ignore malformed variant JSON and keep the normal cleanup behavior.\r\n      }\r\n    });\r\n\r\n    return mediaIds.has(String(mediaId));\r\n  }\r\n\r\n  /**\r\n   * @param {Element | null | undefined} element\r\n   * @returns {boolean}\r\n   */\r\n  #elementHasLowQualityImage(element) {\r\n    if (!element) return false;\r\n\r\n    const src = [...element.querySelectorAll('img')]\r\n      .map((image) => image.currentSrc || image.src || image.getAttribute('src') || image.getAttribute('srcset') || '')\r\n      .join(' ')\r\n      .toLowerCase();\r\n\r\n    return src.includes('_ss64') || src.includes('_ac_sy550');\r\n  }\r\n\r\n  /**\r\n   * Handles the 'zoom-media:selected' event.\r\n   * @param {ZoomMediaSelectedEvent} event - The zoom-media:selected event.\r\n   */\r\n  #handleZoomMediaSelected = async (event) => {\r\n    this.slideshow?.select(event.detail.index, undefined, { animate: false });\r\n  };\r\n\r\n  /**\r\n   * Zooms the media gallery.\r\n   *\r\n   * @param {number} index - The index of the media to zoom.\r\n   * @param {PointerEvent} event - The pointer event.\r\n   */\r\n  zoom(index, event) {\r\n    this.refs.zoomDialogComponent?.open(index, event);\r\n  }\r\n\r\n  /**\r\n   * Preloads an image.\r\n   * @param {number} index - The index of the media to preload.\r\n   */\r\n  preloadImage(index) {\r\n    const zoomDialogMedia = this.refs.zoomDialogComponent?.refs.media[index];\r\n    if (!zoomDialogMedia) return;\r\n\r\n    this.refs.zoomDialogComponent?.loadHighResolutionImage(zoomDialogMedia);\r\n  }\r\n\r\n  get slideshow() {\r\n    return this.refs.slideshow;\r\n  }\r\n\r\n  get media() {\r\n    return this.refs.media;\r\n  }\r\n\r\n  get presentation() {\r\n    return this.dataset.presentation;\r\n  }\r\n}\r\n\r\nif (!customElements.get('media-gallery')) {\r\n  customElements.define('media-gallery', MediaGallery);\r\n}\r\n"],
  "mappings": "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",
  "names": []
}
