{
  "version": 3,
  "sources": ["/cdn/shop/t/44/assets/slideshow.js?yurinox_video_thumb_fix=20260603"],
  "sourcesContent": ["import { Component } from '@theme/component';\nimport {\n  center,\n  closest,\n  clamp,\n  getVisibleElements,\n  mediaQueryLarge,\n  prefersReducedMotion,\n  preventDefault,\n  viewTransition,\n} from '@theme/utilities';\nimport { Scroller, scrollIntoView } from '@theme/scrolling';\nimport { MediaStartedPlayingEvent, SlideshowSelectEvent } from '@theme/events';\n\n// The threshold for determining visibility of slides.\nconst SLIDE_VISIBLITY_THRESHOLD = 0.7;\nglobalThis.YURINOX_SLIDESHOW_FIX_VERSION = 'thumbnail-media-click-v2-20260603';\n\n/**\n * Slideshow custom element that allows sliding between content.\n *\n * @typedef {Object} Refs\n * @property {HTMLElement} scroller\n * @property {HTMLElement} slideshowContainer\n * @property {HTMLElement[]} [slides]\n * @property {HTMLElement} [current]\n * @property {HTMLElement[]} [thumbnails]\n * @property {HTMLElement[]} [dots]\n * @property {HTMLButtonElement} [previous]\n * @property {HTMLButtonElement} [next]\n *\n * @extends {Component<Refs>}\n */\nexport class Slideshow extends Component {\n  requiredRefs = ['scroller'];\n\n  async connectedCallback() {\n    super.connectedCallback();\n\n    // Wait for any in-progress view transitions to finish\n    if (viewTransition.current) {\n      await viewTransition.current;\n      // It's possible that the slideshow was disconnected before the view transition finished\n      if (!this.isConnected) return;\n    }\n\n    const { scroller } = this.refs;\n    this.#scroll = new Scroller(scroller, {\n      onScroll: this.#handleScroll,\n      onScrollStart: this.#onTransitionInit,\n      onScrollEnd: this.#onTransitionEnd,\n    });\n\n    scroller.addEventListener('mousedown', this.#handleMouseDown);\n\n    this.addEventListener('mouseenter', this.suspend);\n    this.addEventListener('mouseleave', this.resume);\n    this.addEventListener('pointerenter', this.#handlePointerEnter);\n    this.addEventListener('click', this.#handleThumbnailMediaClick, true);\n    document.addEventListener('visibilitychange', this.#handleVisibilityChange);\n\n    this.#updateControlsVisibility();\n\n    this.disabled = this.isNested || this.disabled;\n\n    this.resume();\n\n    this.current = this.dataset.initialSlide ? parseInt(this.dataset.initialSlide, 10) : 0;\n\n    let visibleSlidesAmount = 0;\n\n    if (this.current !== 0) {\n      this.select(this.current, undefined, { animate: false });\n      visibleSlidesAmount = 1;\n    } else {\n      visibleSlidesAmount = this.#updateVisibleSlides();\n      if (visibleSlidesAmount === 0) {\n        this.select(0, undefined, { animate: false });\n        visibleSlidesAmount = 1;\n      }\n    }\n\n    this.#resizeObserver = new ResizeObserver(async () => {\n      if (viewTransition.current) await viewTransition.current;\n\n      if (visibleSlidesAmount > 1) {\n        this.#updateVisibleSlides();\n      }\n\n      if (this.hasAttribute('auto-hide-controls')) {\n        this.#updateControlsVisibility();\n      }\n    });\n\n    this.#resizeObserver.observe(this.refs.slideshowContainer);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    const { scroller } = this.refs;\n\n    scroller.removeEventListener('mousedown', this.#handleMouseDown);\n    this.removeEventListener('mouseenter', this.suspend);\n    this.removeEventListener('mouseleave', this.resume);\n    this.removeEventListener('pointerenter', this.#handlePointerEnter);\n    this.removeEventListener('click', this.#handleThumbnailMediaClick, true);\n    document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n    this.#scroll?.destroy();\n\n    if (this.#resizeObserver) {\n      this.#resizeObserver.disconnect();\n    }\n  }\n\n  /** Indicates whether the slideshow is nested inside another slideshow. */\n  get isNested() {\n    return this.parentElement?.closest('slideshow-component') !== null;\n  }\n\n  get defaultSlide() {\n    return this.refs.slides?.[this.initialSlideIndex];\n  }\n\n  /**\n   * Selects a slide based on the input index.\n   * @param {number|string|{id: string}} input - The index or id of the slide to select.\n   * @param {Event} [event] - The event that triggered the selection.\n   * @param {Object} [options] - The options for the selection.\n   * @param {boolean} [options.animate=true] - Whether to animate the selection.\n   */\n  async select(input, event, options = {}) {\n    if (this.#disabled || !this.refs.slides?.length) return;\n\n    for (const slide of this.refs.slides) {\n      if (slide.hasAttribute('reveal')) {\n        slide.removeAttribute('reveal');\n        slide.setAttribute('aria-hidden', 'true');\n      }\n    }\n\n    // Figure out the raw desired index (could be -1 if user is on first slide and clicks prev)\n    let requestedIndex = (() => {\n      if (typeof input === 'number') return input;\n      if (typeof input === 'string') return parseInt(input, 10);\n      if ('id' in input) {\n        const requestedSlide = this.refs.slides.find((slide) => slide.getAttribute('slide-id') == input.id);\n\n        if (!requestedSlide || !this.slides) return;\n\n        // Force the slide to be revealed if it is hidden\n        if (requestedSlide.hasAttribute('hidden')) {\n          requestedSlide.setAttribute('reveal', '');\n          requestedSlide.setAttribute('aria-hidden', 'false');\n        }\n\n        return this.slides.indexOf(requestedSlide);\n      }\n    })();\n\n    // Guard if invalid\n    if (requestedIndex === undefined || isNaN(requestedIndex)) return;\n\n    const { slides } = this;\n\n    if (!slides?.length) return;\n    if (!this.infinite) requestedIndex = clamp(requestedIndex, 0, slides.length - 1);\n\n    event?.preventDefault();\n\n    const { current } = this;\n    const { animate = true } = options;\n    const lastIndex = slides.length - 1;\n\n  // Decide the actual target index (clamp for infinite loop)\nlet index = requestedIndex;\nif (requestedIndex < 0) index = lastIndex;\nelse if (requestedIndex > lastIndex) index = 0;\n\nif (index !== current) {\n  this.#pauseSlideMedia(slides[current]);\n  this.dispatchEvent(new MediaStartedPlayingEvent(this));\n}\n\nconst isAdjacentSlide = Math.abs(index - current) <= 1 && requestedIndex >= 0 && requestedIndex <= lastIndex;\n    const { visibleSlides } = this;\n    const instant = prefersReducedMotion() || !animate;\n\n    // If jump is more than 1 or we looped, do the placeholder + reorder trick\n    if (!instant && !isAdjacentSlide && visibleSlides.length === 1) {\n      this.#disabled = true;\n      await this.#scroll.finished; // ensure we're not mid-scroll\n\n      const targetSlide = slides[index];\n      const currentSlide = slides[current];\n      if (!targetSlide || !currentSlide) return;\n\n      // Create a placeholder in the original DOM position of targetSlide\n      const placeholder = document.createElement('slideshow-slide');\n      targetSlide.before(placeholder);\n\n      // Decide whether targetSlide goes before or after currentSlide\n      // so that we scroll a short distance in the correct direction\n      if (requestedIndex < current) {\n        currentSlide.before(targetSlide);\n      } else {\n        currentSlide.after(targetSlide);\n      }\n\n      if (current === 0) this.#scroll.to(currentSlide, { instant: true });\n\n      // Once that scroll finishes, restore the DOM\n      queueMicrotask(async () => {\n        await this.#scroll.finished;\n        this.#disabled = false;\n\n        // Restore the slide back to its original position. This triggers a scroll event.\n        placeholder.replaceWith(targetSlide);\n\n        // Instantly scroll to the target slide as its position will have changed\n        this.#scroll.to(targetSlide, { instant: true });\n      });\n    }\n\n    const slide = slides[index];\n    if (!slide) return;\n\n    const previousIndex = this.current;\n\n    slide.setAttribute('aria-hidden', 'false');\n    this.#scroll.to(slide, { instant });\n    this.current = this.slides?.indexOf(slide) || 0;\n    this.#pauseInactiveSlideMedia(slide);\n\n    setTimeout(() => {\n      const activeSlide = this.slides?.[this.current];\n      this.#pauseInactiveSlideMedia(activeSlide);\n    }, 600);\n\n    this.#centerSelectedThumbnail(index, instant ? 'instant' : 'smooth');\n\n    this.dispatchEvent(\n      new SlideshowSelectEvent({\n        index,\n        previousIndex,\n        userInitiated: event != null,\n        trigger: 'select',\n        slide,\n        id: slide.getAttribute('slide-id'),\n      })\n    );\n  }\n\n  /**\n   * Advances to the next slide.\n   * @param {Event} [event] - The event that triggered the next slide.\n   * @param {Object} [options] - The options for the next slide.\n   * @param {boolean} [options.animate=true] - Whether to animate the next slide.\n   */\n  next(event, options) {\n    event?.preventDefault();\n    this.select(this.nextIndex, event, options);\n  }\n\n  /**\n   * Goes back to the previous slide.\n   * @param {Event} [event] - The event that triggered the previous slide.\n   * @param {Object} [options] - The options for the previous slide.\n   * @param {boolean} [options.animate=true] - Whether to animate the previous slide.\n   */\n  previous(event, options) {\n    event?.preventDefault();\n    this.select(this.previousIndex, event, options);\n  }\n\n  /**\n   * Pauses playable media inside a slide that is being left.\n   * @param {Element | undefined} slide\n   */\n  #pauseSlideMedia(slide) {\n    if (!slide) return;\n\n    for (const media of slide.querySelectorAll('deferred-media, product-model')) {\n      media.pauseMedia?.();\n    }\n\n    for (const video of slide.querySelectorAll('video')) {\n      video.pause();\n    }\n\n    for (const iframe of slide.querySelectorAll('iframe[data-video-type]')) {\n      iframe.contentWindow?.postMessage(\n        iframe.dataset.videoType === 'youtube'\n          ? '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}'\n          : '{\"method\":\"pause\"}',\n        '*'\n      );\n    }\n  }\n\n  /**\n   * Pauses playable media on every slide except the active one.\n   * @param {Element | undefined} activeSlide\n   */\n  #pauseInactiveSlideMedia(activeSlide) {\n    for (const slide of this.slides ?? []) {\n      if (slide === activeSlide) continue;\n\n      this.#pauseSlideMedia(slide);\n    }\n  }\n\n  /**\n   * Starts automatic slide playback.\n   * @param {number} [interval] - The time interval in seconds between slides.\n   */\n  play(interval = this.autoplayInterval) {\n    if (this.#interval) return;\n\n    this.paused = false;\n\n    this.#interval = setInterval(() => {\n      if (this.matches(':hover') || document.hidden) return;\n\n      this.next();\n    }, interval);\n  }\n\n  /**\n   * Pauses automatic slide playback.\n   */\n  pause() {\n    this.paused = true;\n    this.suspend();\n  }\n\n  get paused() {\n    return this.hasAttribute('paused');\n  }\n\n  set paused(value) {\n    if (value) {\n      this.setAttribute('paused', '');\n    } else {\n      this.removeAttribute('paused');\n    }\n  }\n\n  /**\n   * Suspends automatic slide playback.\n   */\n  suspend() {\n    clearInterval(this.#interval);\n    this.#interval = undefined;\n  }\n\n  /**\n   * Resumes automatic slide playback if autoplay is enabled.\n   */\n  resume() {\n    if (!this.autoplay || this.paused) return;\n\n    this.pause();\n    this.play();\n  }\n\n  get autoplay() {\n    return Boolean(this.autoplayInterval);\n  }\n\n  get autoplayInterval() {\n    const interval = this.getAttribute('autoplay');\n    const value = parseInt(`${interval}`, 10);\n\n    if (Number.isNaN(value)) return undefined;\n\n    return value * 1000;\n  }\n\n  /**\n   * The current slide index.\n   * @type {number}\n   */\n  #current = 0;\n\n  get current() {\n    return this.#current;\n  }\n\n  /**\n   * Sets the current slide index and update the DOM\n   * @type {number}\n   */\n  set current(value) {\n    const { current, thumbnails, dots, slides, previous, next } = this.refs;\n\n    this.#current = value;\n\n    if (current) current.textContent = `${value + 1}`;\n\n    for (const controls of [thumbnails, dots]) {\n      controls?.forEach((el, i) => el.setAttribute('aria-selected', `${i === value}`));\n    }\n\n    if (previous) previous.disabled = Boolean(!this.infinite && value === 0);\n    if (next) next.disabled = Boolean(!this.infinite && slides && this.nextIndex >= slides.length);\n  }\n\n  get infinite() {\n    return this.getAttribute('infinite') != null;\n  }\n\n  get visibleSlides() {\n    return getVisibleElements(this.refs.scroller, this.slides, SLIDE_VISIBLITY_THRESHOLD, 'x');\n  }\n\n  get previousIndex() {\n    const { current, visibleSlides } = this;\n    const modifier = visibleSlides.length > 1 ? visibleSlides.length : 1;\n\n    return current - modifier;\n  }\n\n  get nextIndex() {\n    const { current, visibleSlides } = this;\n    const modifier = visibleSlides.length > 1 ? visibleSlides.length : 1;\n\n    return current + modifier;\n  }\n\n  get atStart() {\n    const { current, slides } = this;\n\n    return slides?.length ? current === 0 : false;\n  }\n\n  get atEnd() {\n    const { current, slides } = this;\n\n    return slides?.length ? current === slides.length - 1 : false;\n  }\n\n  /**\n   * Sets the disabled attribute.\n   * @param {boolean} value - The value to set the disabled attribute to.\n   */\n  set disabled(value) {\n    this.setAttribute('disabled', String(value));\n  }\n  /**\n   * Whether the slideshow is disabled.\n   * @type {boolean}\n   */\n  get disabled() {\n    return (\n      this.getAttribute('disabled') === 'true' || (this.hasAttribute('mobile-disabled') && !mediaQueryLarge.matches)\n    );\n  }\n\n  /**\n   * Indicates whether the slideshow is temporarily disabled (e.g., during infinite loop transition).\n   * @type {boolean}\n   */\n  #disabled = false;\n\n  /**\n   * The interval ID for automatic playback.\n   * @type {number|undefined}\n   */\n  #interval = undefined;\n\n  /**\n   * The Scroller instance that manages scrolling.\n   * @type {Scroller}\n   */\n  #scroll;\n\n  /**\n   * The ResizeObserver instance for monitoring scroller size changes\n   * @type {ResizeObserver}\n   */\n  #resizeObserver;\n\n  /**\n   * Callback invoked on user initiated scroll to sync the current slide index\n   * and emit a slide change event if the index has changed.\n   */\n  #handleScroll = () => {\n    const previousIndex = this.#current;\n    const index = this.#sync();\n\n    if (index === previousIndex) return;\n\n    const slide = this.slides?.[index];\n    if (!slide) return;\n\n    this.dispatchEvent(\n      new SlideshowSelectEvent({\n        index,\n        previousIndex,\n        userInitiated: true,\n        trigger: 'scroll',\n        slide,\n        id: slide.getAttribute('slide-id'),\n      })\n    );\n  };\n\n  #onTransitionInit = () => {\n    this.setAttribute('transitioning', '');\n  };\n\n  #onTransitionEnd = () => {\n    this.#updateVisibleSlides();\n    this.removeAttribute('transitioning');\n  };\n\n  /**\n   * Synchronizes the scroll position and updates the current slide index.\n   * @returns {number} The index of the current slide.\n   */\n  #sync = () => {\n    const { slides } = this;\n    if (!slides) return (this.current = 0);\n\n    const visibleSlides = this.visibleSlides;\n\n    if (!visibleSlides.length) return this.current;\n\n    const { axis } = this.#scroll;\n    const { scroller } = this.refs;\n    const centers = visibleSlides.map((slide) => center(slide, axis));\n    const referencePoint = visibleSlides.length > 1 ? scroller.getBoundingClientRect()[axis] : center(scroller, axis);\n    const closestCenter = closest(centers, referencePoint);\n    const closestVisibleSlide = visibleSlides[centers.indexOf(closestCenter)];\n\n    if (!closestVisibleSlide) return (this.current = 0);\n\n    const index = slides.indexOf(closestVisibleSlide);\n\n    return (this.current = index);\n  };\n\n  #dragging = false;\n\n  /**\n   * Handles the 'mousedown' event to start dragging slides.\n   * @param {MouseEvent} event - The mousedown event.\n   */\n  #handleMouseDown = (event) => {\n    const { slides } = this;\n\n    if (!slides || slides.length <= 1) return;\n    if (!(event.target instanceof Element)) return;\n    if (this.disabled || this.#dragging) return;\n\n    // Check if the event target is within a 3D model interactive element\n    // This prevents the slideshow from capturing drag events when interacting with 3D models\n    if (event.target.closest('model-viewer')) {\n      return;\n    }\n\n    event.preventDefault();\n    // Store initial position but don't start handling yet\n    const { axis } = this.#scroll;\n    const startPosition = event[axis];\n\n    const controller = new AbortController();\n    const { signal } = controller;\n    const startTime = performance.now();\n    let previous = startPosition;\n    let velocity = 0;\n    let moved = false;\n    let distanceTravelled = 0;\n\n    this.#dragging = true;\n\n    /**\n     * Handles the 'pointermove' event to update the scroll position.\n     * @param {PointerEvent} event - The pointermove event.\n     */\n    const onPointerMove = (event) => {\n      const current = event[axis];\n      const initialDelta = startPosition - current;\n\n      if (!initialDelta) return;\n\n      if (!moved) {\n        moved = true;\n        this.setPointerCapture(event.pointerId);\n\n        // Prevent clicks once the user starts dragging\n        document.addEventListener('click', preventDefault, { once: true, signal });\n\n        const movingRight = initialDelta < 0;\n        const movingLeft = initialDelta > 0;\n\n        // Check if the current slideshow should handle this drag\n        const closestSlideshow = this.parentElement?.closest('slideshow-component');\n        const isNested = closestSlideshow instanceof Slideshow && closestSlideshow !== this;\n        const cannotMoveInDirection = (movingRight && this.atStart) || (movingLeft && this.atEnd);\n\n        // Abort and let the parent slideshow handle the drag if we're moving in a direction where nested slideshow can't move\n        if (isNested && cannotMoveInDirection) {\n          controller.abort();\n          return;\n        }\n\n        this.pause();\n        this.setAttribute('dragging', '');\n      }\n\n      // Stop the event from bubbling up to parent slideshow components\n      event.stopImmediatePropagation();\n\n      const delta = previous - current;\n      const timeDelta = performance.now() - startTime;\n      velocity = Math.round((delta / timeDelta) * 1000);\n      previous = current;\n      distanceTravelled += Math.abs(delta);\n\n      this.#scroll.by(delta, { instant: true });\n    };\n\n    /**\n     * Handles the 'pointerup' event to stop dragging slides.\n     * @param {PointerEvent} event - The pointerup event.\n     */\n    const onPointerUp = async (event) => {\n      controller.abort();\n      const { current, slides } = this;\n      const { scroller } = this.refs;\n\n      this.#dragging = false;\n\n      if (!slides?.length || !scroller) return;\n\n      const direction = Math.sign(velocity);\n      const next = this.#sync();\n\n      const modifier = current !== next || Math.abs(velocity) < 10 || distanceTravelled < 10 ? 0 : direction;\n      const newIndex = clamp(next + modifier, 0, slides.length - 1);\n\n      const newSlide = slides[newIndex];\n      const currentIndex = this.current;\n\n      if (!newSlide) throw new Error(`Slide not found at index ${newIndex}`);\n\n      this.#scroll.to(newSlide);\n\n      this.removeAttribute('dragging');\n      this.releasePointerCapture(event.pointerId);\n\n      this.#centerSelectedThumbnail(newIndex);\n\n      this.dispatchEvent(\n        new SlideshowSelectEvent({\n          index: newIndex,\n          previousIndex: currentIndex,\n          userInitiated: true,\n          trigger: 'drag',\n          slide: newSlide,\n          id: newSlide.getAttribute('slide-id'),\n        })\n      );\n\n      this.current = newIndex;\n\n      await this.#scroll.finished;\n\n      // It's possible that the user started dragging again before the scroll finished\n      if (this.#dragging) return;\n\n      this.#scroll.snap = true;\n      this.resume();\n    };\n\n    this.#scroll.snap = false;\n\n    document.addEventListener('pointermove', onPointerMove, { signal });\n    document.addEventListener('pointerup', onPointerUp, { signal });\n    /**\n     * pointerDown calls onPointerUp to fix an issue where the first tap-and-drag\n     * on the zoom dialog is captured by the pointerMove/pointerUp listeners,\n     * sometimes causing the slideshow to change slides unexpectedly\n     */\n    document.addEventListener('pointerdown', onPointerUp, { signal });\n    document.addEventListener('pointercancel', onPointerUp, { signal });\n    document.addEventListener('pointercapturelost', onPointerUp, { signal });\n  };\n\n  #handlePointerEnter = () => {\n    this.setAttribute('actioned', '');\n  };\n\n  #handleThumbnailMediaClick = (event) => {\n    if (!(event.target instanceof Element)) return;\n\n    const thumbnail = event.target.closest('button[aria-label^=\"Slide\"]');\n    if (!thumbnail || !this.contains(thumbnail)) return;\n\n    const thumbnailIndex = this.refs.thumbnails?.indexOf(thumbnail);\n    if (thumbnailIndex === undefined || thumbnailIndex < 0) return;\n\n    const targetSlide = this.slides?.[thumbnailIndex];\n    if (!targetSlide) return;\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    void this.select(thumbnailIndex, event);\n\n    for (const delay of [0, 100, 700]) {\n      setTimeout(() => {\n        this.#pauseInactiveSlideMedia(targetSlide);\n      }, delay);\n    }\n  };\n\n  get slides() {\n    return this.refs.slides?.filter((slide) => !slide.hasAttribute('hidden') || slide.hasAttribute('reveal'));\n  }\n\n  /**\n   * The initial slide index.\n   * @type {number}\n   */\n  get initialSlideIndex() {\n    return this.dataset.initialSlide ? parseInt(this.dataset.initialSlide, 10) : 0;\n  }\n\n  /**\n   * Pause the slideshow when the page is hidden.\n   */\n  #handleVisibilityChange = () => (document.hidden ? this.pause() : this.resume());\n\n  #updateControlsVisibility() {\n    if (!this.hasAttribute('auto-hide-controls')) return;\n\n    const { scroller, slideshowControls } = this.refs;\n\n    if (!(slideshowControls instanceof HTMLElement)) return;\n\n    slideshowControls.hidden = scroller.scrollWidth <= scroller.offsetWidth;\n  }\n\n  /**\n   * Centers the selected thumbnail in the thumbnails container\n   * @param {number} index - The index of the selected thumbnail\n   * @param {ScrollBehavior} [behavior] - The scroll behavior.\n   */\n  #centerSelectedThumbnail(index, behavior = 'smooth') {\n    const selectedThumbnail = this.refs.thumbnails?.[index];\n    if (!selectedThumbnail) return;\n\n    const { thumbnailsContainer } = this.refs;\n    if (!thumbnailsContainer || !(thumbnailsContainer instanceof HTMLElement)) return;\n\n    const { slideshowControls } = this.refs;\n    if (!slideshowControls || !(slideshowControls instanceof HTMLElement)) return;\n\n    scrollIntoView(selectedThumbnail, {\n      ancestor: thumbnailsContainer,\n      behavior,\n      block: 'center',\n      inline: 'center',\n    });\n  }\n\n  #updateVisibleSlides() {\n    const { slides } = this;\n    if (!slides || !slides.length) return 0;\n\n    const visibleSlides = this.visibleSlides;\n\n    // Update aria-hidden based on visibility\n    slides.forEach((slide) => {\n      const isVisible = visibleSlides.includes(slide);\n      slide.setAttribute('aria-hidden', `${!isVisible}`);\n    });\n\n    return visibleSlides.length;\n  }\n}\n\nif (!customElements.get('slideshow-component')) {\n  customElements.define('slideshow-component', Slideshow);\n}\n"],
  "mappings": "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",
  "names": ["slide", "event", "slides"]
}
