{
  "version": 3,
  "sources": ["/cdn/shop/t/13/assets/lumenearz-product-top.js?top=20260513a"],
  "sourcesContent": ["(function () {\n  const setQuantity = (root, quantity) => {\n    const input = root.querySelector('[data-product-top-quantity-input]');\n    const nextQuantity = Math.max(1, Number.parseInt(quantity, 10) || 1);\n\n    root.dataset.productTopQuantity = String(nextQuantity);\n\n    if (!input) return;\n\n    const min = Number.parseInt(input.getAttribute('min'), 10);\n    input.value = String(Math.max(Number.isNaN(min) ? 1 : min, nextQuantity));\n    input.dispatchEvent(new Event('input', { bubbles: true }));\n    input.dispatchEvent(new Event('change', { bubbles: true }));\n  };\n\n  const setupBundleOptions = (root) => {\n    const group = root.querySelector('[data-product-top-bundle-group]');\n    const options = group ? Array.from(group.querySelectorAll('[data-product-top-quantity]')) : [];\n\n    if (!group || !options.length) return;\n\n    const setActive = (option) => {\n      options.forEach((button) => {\n        const isActive = button === option;\n\n        button.classList.toggle('is-active', isActive);\n        button.setAttribute('aria-checked', String(isActive));\n        button.tabIndex = isActive ? 0 : -1;\n      });\n\n      setQuantity(root, option.dataset.productTopQuantity);\n    };\n\n    options.forEach((button, index) => {\n      button.addEventListener('click', () => setActive(button));\n      button.addEventListener('keydown', (event) => {\n        const keyMap = {\n          ArrowRight: 1,\n          ArrowDown: 1,\n          ArrowLeft: -1,\n          ArrowUp: -1,\n        };\n        let nextIndex = index;\n\n        if (event.key in keyMap) {\n          event.preventDefault();\n          nextIndex = (index + keyMap[event.key] + options.length) % options.length;\n        } else if (event.key === 'Home') {\n          event.preventDefault();\n          nextIndex = 0;\n        } else if (event.key === 'End') {\n          event.preventDefault();\n          nextIndex = options.length - 1;\n        } else {\n          return;\n        }\n\n        setActive(options[nextIndex]);\n        options[nextIndex].focus();\n      });\n    });\n\n    setActive(options.find((option) => option.classList.contains('is-active')) || options[0]);\n  };\n\n  const setButtonText = (root) => {\n    const submitButton = root.querySelector('[data-product-top-submit]');\n    const submitText = submitButton && submitButton.querySelector('span');\n\n    if (!submitButton || !submitText || submitButton.disabled) return;\n\n    submitText.textContent = submitButton.dataset.readyText || submitText.textContent;\n  };\n\n  const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n  const getGallerySlides = (track) => Array.from(track.querySelectorAll(':scope > [id^=\"Slide-\"]'));\n\n  const getClosestSlideIndex = (track, slides) => {\n    const currentLeft = track.scrollLeft;\n\n    return slides.reduce((closestIndex, slide, index) => {\n      const closestDistance = Math.abs(slides[closestIndex].offsetLeft - currentLeft);\n      const slideDistance = Math.abs(slide.offsetLeft - currentLeft);\n\n      return slideDistance < closestDistance ? index : closestIndex;\n    }, 0);\n  };\n\n  const syncGalleryState = (gallery, index) => {\n    const galleryShell = gallery.closest('[data-lx-product-gallery]') || gallery.parentElement;\n    const viewer = gallery.querySelector('[id^=\"GalleryViewer\"]');\n    const track = viewer && viewer.querySelector('[id^=\"Slider-Gallery\"]');\n    const slides = track ? getGallerySlides(track) : [];\n    const activeSlide = slides[index];\n    const controls = viewer && viewer.querySelector(':scope > .slider-buttons');\n    const previousButton = galleryShell && galleryShell.querySelector('[data-lx-product-gallery-prev]');\n    const nextButton = galleryShell && galleryShell.querySelector('[data-lx-product-gallery-next]');\n    const nativePreviousButton = controls && controls.querySelector('button[name=\"previous\"]');\n    const nativeNextButton = controls && controls.querySelector('button[name=\"next\"]');\n    const currentCounter = controls && controls.querySelector('.slider-counter--current');\n    const totalCounter = controls && controls.querySelector('.slider-counter--total');\n\n    if (!track || !activeSlide || !slides.length) return;\n\n    const previousActiveSlide = slides.find((slide) => slide.classList.contains('is-active'));\n\n    slides.forEach((slide, slideIndex) => {\n      slide.classList.toggle('is-active', slideIndex === index);\n    });\n\n    if (previousButton) previousButton.hidden = slides.length < 2;\n    if (nextButton) nextButton.hidden = slides.length < 2;\n    if (nativePreviousButton) nativePreviousButton.toggleAttribute('disabled', index === 0);\n    if (nativeNextButton) nativeNextButton.toggleAttribute('disabled', index === slides.length - 1);\n    if (currentCounter) currentCounter.textContent = String(index + 1);\n    if (totalCounter) totalCounter.textContent = String(slides.length);\n\n    if (previousActiveSlide !== activeSlide && typeof gallery.playActiveMedia === 'function') {\n      gallery.playActiveMedia(activeSlide);\n    }\n\n    const activeMediaId = activeSlide.dataset.mediaId;\n    if (!activeMediaId) return;\n\n    const activeThumbnailItem = gallery.querySelector(`[data-target=\"${activeMediaId}\"]`);\n    if (activeThumbnailItem && typeof gallery.setActiveThumbnail === 'function') {\n      gallery.setActiveThumbnail(activeThumbnailItem);\n      return;\n    }\n\n    gallery.querySelectorAll('[data-target] button[aria-current]').forEach((button) => button.removeAttribute('aria-current'));\n    activeThumbnailItem?.querySelector('button')?.setAttribute('aria-current', 'true');\n  };\n\n  const scrollGalleryTo = (gallery, index, behavior = 'smooth', wrap = false) => {\n    const viewer = gallery.querySelector('[id^=\"GalleryViewer\"]');\n    const track = viewer && viewer.querySelector('[id^=\"Slider-Gallery\"]');\n    const slides = track ? getGallerySlides(track) : [];\n    const nextIndex = wrap && slides.length ? (index + slides.length) % slides.length : clamp(index, 0, slides.length - 1);\n    const nextSlide = slides[nextIndex];\n\n    if (!track || !nextSlide) return;\n\n    track.scrollTo({\n      left: nextSlide.offsetLeft,\n      behavior,\n    });\n    syncGalleryState(gallery, nextIndex);\n  };\n\n  const setupProductGallery = (root) => {\n    const galleryShell = root.querySelector('[data-lx-product-gallery]');\n    const gallery = galleryShell ? galleryShell.querySelector('media-gallery') : root.querySelector('media-gallery');\n    const viewer = gallery && gallery.querySelector('[id^=\"GalleryViewer\"]');\n    const track = viewer && viewer.querySelector('[id^=\"Slider-Gallery\"]');\n    const previousButton = galleryShell && galleryShell.querySelector('[data-lx-product-gallery-prev]');\n    const nextButton = galleryShell && galleryShell.querySelector('[data-lx-product-gallery-next]');\n\n    if (!gallery || !viewer || !track || gallery.dataset.lxGalleryInitialized === 'true') {\n      return;\n    }\n\n    gallery.dataset.lxGalleryInitialized = 'true';\n\n    let syncFrame = 0;\n    const requestSync = () => {\n      window.cancelAnimationFrame(syncFrame);\n      syncFrame = window.requestAnimationFrame(() => {\n        const slides = getGallerySlides(track);\n        if (!slides.length) return;\n        syncGalleryState(gallery, getClosestSlideIndex(track, slides));\n      });\n    };\n\n    const handleArrowClick = (direction) => (event) => {\n      const slides = getGallerySlides(track);\n      if (!slides.length) return;\n\n      event.preventDefault();\n\n      const currentIndex = getClosestSlideIndex(track, slides);\n      scrollGalleryTo(gallery, currentIndex + direction, 'smooth', true);\n    };\n\n    previousButton?.addEventListener('click', handleArrowClick(-1));\n    nextButton?.addEventListener('click', handleArrowClick(1));\n\n    viewer.addEventListener(\n      'wheel',\n      (event) => {\n        const maxScrollLeft = track.scrollWidth - track.clientWidth;\n        if (maxScrollLeft <= 1) return;\n\n        const horizontalDelta = Math.abs(event.deltaX) >= Math.abs(event.deltaY) * 0.6 ? event.deltaX : 0;\n        const shiftedVerticalDelta = event.shiftKey ? event.deltaY : 0;\n        const delta = horizontalDelta || shiftedVerticalDelta;\n        const nextScrollLeft = clamp(track.scrollLeft + delta, 0, maxScrollLeft);\n\n        if (!delta || nextScrollLeft === track.scrollLeft) return;\n\n        event.preventDefault();\n        track.scrollLeft = nextScrollLeft;\n        requestSync();\n      },\n      { passive: false }\n    );\n\n    track.addEventListener('scroll', requestSync, { passive: true });\n\n    gallery.querySelectorAll('[data-target]').forEach((thumbnail) => {\n      thumbnail.addEventListener('click', () => {\n        window.setTimeout(requestSync, 0);\n      });\n    });\n\n    window.addEventListener('resize', requestSync);\n    window.requestAnimationFrame(requestSync);\n  };\n\n  const initRoot = (root) => {\n    if (!root) return;\n\n    setupProductGallery(root);\n    if (root.dataset.productTopInitialized === 'true') return;\n\n    root.dataset.productTopInitialized = 'true';\n    setupBundleOptions(root);\n    setButtonText(root);\n  };\n\n  const init = (scope = document) => {\n    scope.querySelectorAll('.lumenearz-product-top').forEach(initRoot);\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => init());\n  } else {\n    init();\n  }\n\n  document.addEventListener('shopify:section:load', (event) => init(event.target));\n})();\n"],
  "mappings": "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",
  "names": []
}
