{
  "version": 3,
  "sources": ["/cdn/shop/t/51/assets/section-roomden-loop-rail.js?roomden_autoplay=1"],
  "sourcesContent": ["if (!customElements.get('roomden-loop-rail')) {\n  customElements.define(\n    'roomden-loop-rail',\n    class RoomdenLoopRail extends HTMLElement {\n      connectedCallback() {\n        if (this.loopInitialized) return;\n        this.loopInitialized = true;\n        this.track = this.querySelector('[data-loop-track]');\n        this.originalItems = Array.from(this.track?.querySelectorAll('[data-loop-original]') || []);\n\n        if (!this.track || this.originalItems.length < 2) {\n          this.loopInitialized = false;\n          return;\n        }\n\n        this.previousButton = this.querySelector('[data-loop-previous]');\n        this.nextButton = this.querySelector('[data-loop-next]');\n        this.autoplayEnabled = this.dataset.autoplay === 'true';\n        this.autoplayDelay = Number(this.dataset.autoplayDelay) || 4000;\n        this.pauseReasons = new Set();\n        this.resumeTimers = new Map();\n        this.reduceMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n        this.handleScroll = this.handleScroll.bind(this);\n        this.handlePrevious = () => {\n          this.moveByItem(-1);\n          this.updateAutoplay();\n        };\n        this.handleNext = () => {\n          this.moveByItem(1);\n          this.updateAutoplay();\n        };\n        this.handleMouseEnter = () => this.pauseAutoplay('hover');\n        this.handleMouseLeave = () => this.resumeAutoplay('hover', 800);\n        this.handleFocusIn = () => this.pauseAutoplay('focus');\n        this.handleFocusOut = (event) => {\n          if (!this.contains(event.relatedTarget)) this.resumeAutoplay('focus', 800);\n        };\n        this.handlePointerDown = () => this.pauseAutoplay('pointer');\n        this.handlePointerEnd = () => {\n          if (this.pauseReasons.has('pointer')) this.resumeAutoplay('pointer', 2500);\n        };\n        this.handleVisibilityChange = () => this.updateAutoplay();\n        this.handleMotionPreferenceChange = () => this.updateAutoplay();\n\n        this.addMirrorItems();\n        this.track.addEventListener('scroll', this.handleScroll, { passive: true });\n        this.previousButton?.addEventListener('click', this.handlePrevious);\n        this.nextButton?.addEventListener('click', this.handleNext);\n        this.addEventListener('mouseenter', this.handleMouseEnter);\n        this.addEventListener('mouseleave', this.handleMouseLeave);\n        this.addEventListener('focusin', this.handleFocusIn);\n        this.addEventListener('focusout', this.handleFocusOut);\n        this.track.addEventListener('pointerdown', this.handlePointerDown, { passive: true });\n        window.addEventListener('pointerup', this.handlePointerEnd, { passive: true });\n        window.addEventListener('pointercancel', this.handlePointerEnd, { passive: true });\n        document.addEventListener('visibilitychange', this.handleVisibilityChange);\n        this.reduceMotionQuery.addEventListener('change', this.handleMotionPreferenceChange);\n\n        this.resizeObserver = new ResizeObserver(() => this.measure(false));\n        this.resizeObserver.observe(this.track);\n        this.intersectionObserver = new IntersectionObserver(\n          (entries) => {\n            this.isInViewport = entries[0]?.isIntersecting || false;\n            this.updateAutoplay();\n          },\n          { threshold: 0.35 }\n        );\n        this.intersectionObserver.observe(this);\n        this.setAttribute('data-loop-ready', '');\n        requestAnimationFrame(() => {\n          this.measure(true);\n          this.updateAutoplay();\n        });\n      }\n\n      disconnectedCallback() {\n        clearTimeout(this.scrollTimer);\n        this.resumeTimers?.forEach((timer) => clearTimeout(timer));\n        this.resumeTimers?.clear();\n        clearInterval(this.autoplayTimer);\n        this.resizeObserver?.disconnect();\n        this.intersectionObserver?.disconnect();\n        this.track?.removeEventListener('scroll', this.handleScroll);\n        this.previousButton?.removeEventListener('click', this.handlePrevious);\n        this.nextButton?.removeEventListener('click', this.handleNext);\n        this.removeEventListener('mouseenter', this.handleMouseEnter);\n        this.removeEventListener('mouseleave', this.handleMouseLeave);\n        this.removeEventListener('focusin', this.handleFocusIn);\n        this.removeEventListener('focusout', this.handleFocusOut);\n        this.track?.removeEventListener('pointerdown', this.handlePointerDown);\n        window.removeEventListener('pointerup', this.handlePointerEnd);\n        window.removeEventListener('pointercancel', this.handlePointerEnd);\n        document.removeEventListener('visibilitychange', this.handleVisibilityChange);\n        this.reduceMotionQuery?.removeEventListener('change', this.handleMotionPreferenceChange);\n        this.track?.querySelectorAll('[data-loop-clone]').forEach((item) => item.remove());\n        this.removeAttribute('data-loop-ready');\n        this.loopInitialized = false;\n      }\n\n      addMirrorItems() {\n        const before = document.createDocumentFragment();\n        const after = document.createDocumentFragment();\n\n        this.originalItems.forEach((item) => {\n          before.appendChild(this.createMirror(item, 'before'));\n          after.appendChild(this.createMirror(item, 'after'));\n        });\n\n        this.track.prepend(before);\n        this.track.append(after);\n        this.beforeStartItem = this.track.querySelector('[data-loop-clone=\"before\"]');\n        this.afterStartItem = this.track.querySelector('[data-loop-clone=\"after\"]');\n      }\n\n      createMirror(item, position) {\n        const mirror = item.cloneNode(true);\n        mirror.removeAttribute('data-loop-original');\n        mirror.removeAttribute('id');\n        mirror.removeAttribute('data-shopify-editor-block');\n        mirror.setAttribute('data-loop-clone', position);\n        mirror.setAttribute('aria-hidden', 'true');\n        return mirror;\n      }\n\n      contentOffset(item) {\n        const itemRect = item.getBoundingClientRect();\n        const trackRect = this.track.getBoundingClientRect();\n        return itemRect.left - trackRect.left + this.track.scrollLeft;\n      }\n\n      measure(resetToStart) {\n        if (!this.originalItems[0] || !this.afterStartItem) return;\n\n        const oldCycleWidth = this.cycleWidth || 0;\n        const oldStart = this.primaryStart || 0;\n        const logicalProgress = oldCycleWidth\n          ? (((this.track.scrollLeft - oldStart) % oldCycleWidth) + oldCycleWidth) % oldCycleWidth / oldCycleWidth\n          : 0;\n\n        this.primaryStart = this.contentOffset(this.originalItems[0]);\n        this.nextStart = this.contentOffset(this.afterStartItem);\n        this.cycleWidth = this.nextStart - this.primaryStart;\n\n        if (!this.cycleWidth) return;\n\n        this.isAdjusting = true;\n        this.track.scrollLeft = resetToStart\n          ? this.primaryStart\n          : this.primaryStart + logicalProgress * this.cycleWidth;\n        requestAnimationFrame(() => { this.isAdjusting = false; });\n      }\n\n      handleScroll() {\n        if (this.isAdjusting || !this.cycleWidth) return;\n        clearTimeout(this.scrollTimer);\n        this.scrollTimer = setTimeout(() => this.normalizePosition(), 90);\n      }\n\n      normalizePosition() {\n        if (!this.cycleWidth) return;\n\n        let normalizedLeft = this.track.scrollLeft;\n        while (normalizedLeft < this.primaryStart) normalizedLeft += this.cycleWidth;\n        while (normalizedLeft >= this.nextStart) normalizedLeft -= this.cycleWidth;\n\n        if (Math.abs(normalizedLeft - this.track.scrollLeft) < 1) return;\n\n        this.isAdjusting = true;\n        this.track.scrollLeft = normalizedLeft;\n        requestAnimationFrame(() => { this.isAdjusting = false; });\n      }\n\n      moveByItem(direction) {\n        const firstItem = this.originalItems[0];\n        const secondItem = this.originalItems[1];\n        const itemStep = secondItem\n          ? this.contentOffset(secondItem) - this.contentOffset(firstItem)\n          : firstItem.getBoundingClientRect().width;\n        const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n        this.track.scrollBy({\n          left: itemStep * direction,\n          behavior: reduceMotion ? 'auto' : 'smooth',\n        });\n      }\n\n      pauseAutoplay(reason) {\n        clearTimeout(this.resumeTimers.get(reason));\n        this.resumeTimers.delete(reason);\n        this.pauseReasons.add(reason);\n        this.updateAutoplay();\n      }\n\n      resumeAutoplay(reason, delay = 0) {\n        clearTimeout(this.resumeTimers.get(reason));\n        const resume = () => {\n          this.resumeTimers.delete(reason);\n          this.pauseReasons.delete(reason);\n          this.updateAutoplay();\n        };\n\n        if (delay) {\n          this.resumeTimers.set(reason, setTimeout(resume, delay));\n        } else {\n          resume();\n        }\n      }\n\n      updateAutoplay() {\n        clearInterval(this.autoplayTimer);\n\n        if (\n          !this.autoplayEnabled ||\n          this.reduceMotionQuery.matches ||\n          !this.isInViewport ||\n          document.hidden ||\n          this.pauseReasons.size > 0\n        ) return;\n\n        this.autoplayTimer = setInterval(() => this.moveByItem(1), this.autoplayDelay);\n      }\n    }\n  );\n}\n"],
  "mappings": "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",
  "names": []
}
