{
  "version": 3,
  "sources": ["/cdn/shop/t/77/assets/vama-collection-infinite-scroll.js?n=99"],
  "sourcesContent": ["(function () {\n  'use strict';\n\n  var SELECTOR_ROOT = '#CollectionAjaxContent';\n  var SELECTOR_GRID = '.product-grid-container';\n  var SELECTOR_PAGINATION = '.pagination';\n  var SELECTOR_NEXT = '.pagination .next a';\n  var LOADING_CLASS = 'vama-infinite-loading';\n\n  var state = {\n    loading: false,\n    nextUrl: null,\n    observer: null,\n    sentinel: null,\n    suppressObserver: false,\n    fetchedUrls: {},\n    seenIds: {},\n  };\n\n  function qs(sel, root) {\n    return (root || document).querySelector(sel);\n  }\n\n  function getRoot() {\n    return qs(SELECTOR_ROOT);\n  }\n\n  function normalizeUrl(href) {\n    if (!href) return null;\n    try {\n      var u = new URL(href, window.location.origin);\n      // Drop cache-busting noise; keep filter/sort/page/q\n      u.searchParams.delete('n');\n      return u.pathname + u.search;\n    } catch (e) {\n      return href;\n    }\n  }\n\n  function getNextUrl(root) {\n    var a = qs(SELECTOR_NEXT, root || document);\n    return a ? normalizeUrl(a.getAttribute('href')) : null;\n  }\n\n  function productKey(el) {\n    if (!el || !el.getAttribute) return null;\n    return (\n      el.getAttribute('data-product-id') ||\n      el.getAttribute('data-product-handle') ||\n      el.getAttribute('data-product-id') ||\n      null\n    );\n  }\n\n  function seedSeenFromGrid() {\n    state.seenIds = {};\n    var grid = qs(SELECTOR_GRID, getRoot());\n    if (!grid) return;\n    Array.prototype.forEach.call(grid.children, function (el) {\n      var key = productKey(el);\n      if (key) state.seenIds[key] = true;\n    });\n  }\n\n  function ensureSentinel(root) {\n    var existing = qs('.vama-infinite-sentinel', root);\n    if (existing) return existing;\n    state.suppressObserver = true;\n    var s = document.createElement('div');\n    s.className = 'vama-infinite-sentinel';\n    s.setAttribute('aria-hidden', 'true');\n    root.appendChild(s);\n    state.suppressObserver = false;\n    return s;\n  }\n\n  function removeSentinel() {\n    if (!state.sentinel) return;\n    state.suppressObserver = true;\n    state.sentinel.remove();\n    state.suppressObserver = false;\n    state.sentinel = null;\n    if (state.observer) {\n      state.observer.disconnect();\n      state.observer = null;\n    }\n  }\n\n  function setLoading(on) {\n    state.loading = on;\n    var root = getRoot();\n    if (!root) return;\n    root.classList.toggle(LOADING_CLASS, !!on);\n    var status = qs('.vama-infinite-status', root);\n    if (!status) {\n      state.suppressObserver = true;\n      status = document.createElement('div');\n      status.className = 'vama-infinite-status';\n      status.setAttribute('role', 'status');\n      root.appendChild(status);\n      state.suppressObserver = false;\n    }\n    status.textContent = on ? 'Loading more\u2026' : '';\n    status.hidden = !on;\n  }\n\n  function hidePagination(root) {\n    var pag = qs(SELECTOR_PAGINATION, root);\n    if (pag) pag.classList.add('vama-infinite-hide-pagination');\n  }\n\n  // Keep live pagination in sync so a re-init cannot re-read a stale \"next\"\n  function syncPagination(remoteRoot) {\n    var root = getRoot();\n    if (!root) return;\n    var localPag = qs(SELECTOR_PAGINATION, root);\n    var remotePag = qs(SELECTOR_PAGINATION, remoteRoot);\n    state.suppressObserver = true;\n    if (localPag && remotePag) {\n      var imported = document.importNode(remotePag, true);\n      imported.classList.add('vama-infinite-hide-pagination');\n      localPag.replaceWith(imported);\n    } else if (localPag && !remotePag) {\n      localPag.remove();\n    }\n    state.suppressObserver = false;\n    hidePagination(root);\n  }\n\n  function parseProducts(html) {\n    var doc = new DOMParser().parseFromString(html, 'text/html');\n    var remoteRoot = qs(SELECTOR_ROOT, doc) || doc;\n    var grid = qs(SELECTOR_GRID, remoteRoot);\n    var products = grid\n      ? Array.prototype.slice.call(grid.children)\n      : [];\n    var next = getNextUrl(remoteRoot);\n    return { products: products, nextUrl: next, remoteRoot: remoteRoot };\n  }\n\n  function appendProducts(products) {\n    var grid = qs(SELECTOR_GRID, getRoot());\n    if (!grid || !products.length) return 0;\n    var frag = document.createDocumentFragment();\n    var added = 0;\n    products.forEach(function (el) {\n      var key = productKey(el);\n      if (key && state.seenIds[key]) return;\n      if (key) state.seenIds[key] = true;\n      frag.appendChild(document.importNode(el, true));\n      added += 1;\n    });\n    if (!added) return 0;\n    grid.appendChild(frag);\n\n    if (window.theme && typeof window.theme.reinitProductGridItem === 'function') {\n      try { window.theme.reinitProductGridItem(grid); } catch (e) {}\n    } else if (window.AOS && typeof window.AOS.refreshHard === 'function') {\n      try { window.AOS.refreshHard(); } catch (e) {}\n    }\n    return added;\n  }\n\n  function stopInfinite() {\n    state.nextUrl = null;\n    removeSentinel();\n    hidePagination(getRoot());\n  }\n\n  function loadNext() {\n    if (state.loading || !state.nextUrl) return;\n    var url = state.nextUrl;\n    if (state.fetchedUrls[url]) {\n      stopInfinite();\n      return;\n    }\n\n    // Claim this URL immediately so IntersectionObserver can't double-fetch\n    state.fetchedUrls[url] = true;\n    state.nextUrl = null;\n    setLoading(true);\n\n    fetch(url, {\n      credentials: 'same-origin',\n      headers: { 'X-Requested-With': 'XMLHttpRequest' },\n    })\n      .then(function (res) {\n        if (!res.ok) throw new Error('HTTP ' + res.status);\n        return res.text();\n      })\n      .then(function (html) {\n        var parsed = parseProducts(html);\n        var added = appendProducts(parsed.products);\n        syncPagination(parsed.remoteRoot);\n\n        var next = parsed.nextUrl;\n        // Stop if nothing new, no next, or next points at a page we already loaded\n        if (!added || !next || state.fetchedUrls[next] || next === url) {\n          stopInfinite();\n          return;\n        }\n        state.nextUrl = next;\n      })\n      .catch(function () {\n        // Allow a single retry of this URL on the next scroll\n        delete state.fetchedUrls[url];\n        state.nextUrl = url;\n      })\n      .finally(function () {\n        setLoading(false);\n      });\n  }\n\n  function bindObserver() {\n    var root = getRoot();\n    if (!root) return;\n    if (state.observer) {\n      state.observer.disconnect();\n      state.observer = null;\n    }\n\n    // Fresh bind (first load or filter/sort replace): reset tracking from DOM\n    state.fetchedUrls = {};\n    seedSeenFromGrid();\n    state.nextUrl = getNextUrl(root);\n    hidePagination(root);\n\n    if (!state.nextUrl) {\n      removeSentinel();\n      return;\n    }\n\n    // Mark the current page so we never re-fetch it as \"next\"\n    state.fetchedUrls[normalizeUrl(window.location.pathname + window.location.search)] = true;\n\n    state.sentinel = ensureSentinel(root);\n    state.observer = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting) loadNext();\n        });\n      },\n      { root: null, rootMargin: '600px 0px', threshold: 0 }\n    );\n    state.observer.observe(state.sentinel);\n  }\n\n  function init() {\n    if (!getRoot()) return;\n    bindObserver();\n  }\n\n  // Theme ajax filter/sort replaces CollectionAjaxContent children \u2014 rebind\n  function watchAjaxReplace() {\n    if (typeof MutationObserver === 'undefined') return;\n    var content = qs(SELECTOR_ROOT);\n    if (!content) return;\n    var mo = new MutationObserver(function () {\n      if (state.suppressObserver || state.loading) return;\n      clearTimeout(watchAjaxReplace._t);\n      watchAjaxReplace._t = setTimeout(function () {\n        if (state.suppressObserver || state.loading) return;\n        init();\n      }, 80);\n    });\n    mo.observe(content, { childList: true, subtree: false });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      init();\n      watchAjaxReplace();\n    });\n  } else {\n    init();\n    watchAjaxReplace();\n  }\n\n  document.addEventListener('shopify:section:load', function (e) {\n    if (e.target && e.target.querySelector && e.target.querySelector(SELECTOR_ROOT)) {\n      init();\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
