{
  "version": 3,
  "sources": ["/cdn/shop/t/1/assets/ryze-shop-all.js?cb=20260512-shop-demand-inline-2"],
  "sourcesContent": ["(() => {\n  const ready = () => {\n    hydrateShopDemandImages();\n    initPurchaseOptions();\n    document.querySelectorAll('[data-ryze-shop-filters]').forEach((root) => {\n      initShopDemandFilters(root);\n    });\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', ready, { once: true });\n  } else {\n    ready();\n  }\n\n  function initPurchaseOptions() {\n    document.querySelectorAll('[data-ryze-purchase-options]').forEach((root) => {\n      root.querySelectorAll('[data-ryze-purchase-option]').forEach((button) => {\n        button.addEventListener('click', () => {\n          root.querySelectorAll('[data-ryze-purchase-option]').forEach((option) => {\n            option.classList.toggle('is-selected', option === button);\n          });\n        });\n      });\n    });\n  }\n\n  function initShopDemandFilters(root) {\n    const shell = document.querySelector('[data-ryze-shop-filter-shell]');\n    const placeholder = document.querySelector('[data-ryze-shop-filter-placeholder]');\n    const buttons = Array.from(root.querySelectorAll('[data-target]'));\n    const sections = buttons\n      .map((button) => {\n        const targetId = button.dataset.target;\n        const target = document.getElementById(targetId);\n        return target ? { button, target } : null;\n      })\n      .filter(Boolean);\n\n    if (!sections.length) return;\n\n    let stickStart = 0;\n\n    const getStickyTop = () => {\n      const gutter = window.matchMedia('(max-width: 989px)').matches ? 8 : 12;\n      const visibleHeaderBottom = Array.from(\n        document.querySelectorAll(\n          '.shopify-section-group-header-group, .section-header, .announcement-bar-section, [data-ryze-header-group]'\n        )\n      )\n        .filter((element) => element !== shell && !element.contains(shell))\n        .reduce((maxBottom, element) => {\n          const style = getComputedStyle(element);\n          const rect = element.getBoundingClientRect();\n\n          if (\n            (style.position !== 'sticky' && style.position !== 'fixed') ||\n            style.display === 'none' ||\n            style.visibility === 'hidden' ||\n            style.opacity === '0' ||\n            rect.bottom <= 0 ||\n            rect.height <= 0\n          ) {\n            return maxBottom;\n          }\n\n          return Math.max(maxBottom, rect.bottom);\n        }, 0);\n\n      return visibleHeaderBottom + gutter;\n    };\n\n    const getOffset = () => {\n      const header = Number.parseFloat(\n        getComputedStyle(document.body).getPropertyValue('--header-group-height') || '0'\n      );\n      const shellHeight = shell?.getBoundingClientRect().height || 0;\n      return header + shellHeight + 20;\n    };\n\n    const measureShell = () => {\n      if (!shell) return;\n\n      const wasStuck = shell.classList.contains('is-stuck');\n      if (wasStuck) {\n        shell.classList.remove('is-stuck');\n        placeholder?.classList.remove('is-active');\n      }\n\n      const shellHeight = shell.getBoundingClientRect().height;\n      const stickyTop = getStickyTop();\n      stickStart = shell.getBoundingClientRect().top + window.scrollY - stickyTop;\n      shell.style.setProperty('--ryze-shop-filter-height', `${shellHeight}px`);\n      shell.style.setProperty('--ryze-shop-filter-top', `${stickyTop}px`);\n      placeholder?.style.setProperty('--ryze-shop-filter-height', `${shellHeight}px`);\n\n      if (wasStuck) {\n        shell.classList.add('is-stuck');\n        placeholder?.classList.add('is-active');\n      }\n    };\n\n    const setActive = (button) => {\n      buttons.forEach((item) => {\n        item.classList.toggle('is-active', item === button);\n      });\n    };\n\n    buttons.forEach((button) => {\n      button.addEventListener('click', () => {\n        const target = document.getElementById(button.dataset.target);\n        if (!target) return;\n\n        const top = target.getBoundingClientRect().top + window.scrollY - getOffset();\n        window.scrollTo({ top, behavior: 'smooth' });\n        setActive(button);\n      });\n    });\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        if (window.scrollY < 80) return;\n\n        const visible = entries\n          .filter((entry) => entry.isIntersecting)\n          .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0];\n\n        if (!visible) return;\n        const current = sections.find((entry) => entry.target === visible.target);\n        if (!current) return;\n        setActive(current.button);\n      },\n      {\n        rootMargin: '-34% 0px -55% 0px',\n        threshold: [0.1, 0.2, 0.35, 0.5],\n      }\n    );\n\n    sections.forEach(({ target }) => observer.observe(target));\n\n    const stickWatcher = () => {\n      if (!shell) return;\n\n      const shouldStick = window.scrollY >= stickStart;\n      shell.classList.toggle('is-stuck', shouldStick);\n      placeholder?.classList.toggle('is-active', shouldStick);\n    };\n\n    measureShell();\n    document.addEventListener('scroll', stickWatcher, { passive: true });\n    window.addEventListener('resize', () => {\n      measureShell();\n      stickWatcher();\n    });\n    stickWatcher();\n  }\n\n  async function hydrateShopDemandImages() {\n    const slots = Array.from(\n      document.querySelectorAll(\n        '[data-ryze-product-handle], .ryze-shop-demand__product-media, .ryze-shop-demand__bundle-image-link, .ryze-shop-demand__compact-media'\n      )\n    ).filter((slot) => !slot.querySelector('img'));\n\n    if (!slots.length) return;\n\n    const uniqueHandles = [\n      ...new Set(\n        slots\n          .map((slot) => resolveHandle(slot))\n          .filter(Boolean)\n      ),\n    ];\n    const products = new Map();\n\n    await Promise.all(\n      uniqueHandles.map(async (handle) => {\n        try {\n          const response = await fetch(`/products/${handle}.js`, { credentials: 'same-origin' });\n          if (!response.ok) return;\n          const product = await response.json();\n          products.set(handle, product);\n        } catch (error) {\n          window.console?.warn?.('RYZE shop-all image hydrate failed', handle, error);\n        }\n      })\n    );\n\n    slots.forEach((slot) => {\n      if (slot.querySelector('img')) return;\n      const handle = resolveHandle(slot);\n      const product = products.get(handle);\n      const source = product?.featured_image || product?.images?.[0];\n      if (!source) return;\n\n      const image = document.createElement('img');\n      image.src = source;\n      image.alt = slot.dataset.ryzeImageAlt || resolveAlt(slot) || product?.title || '';\n      image.loading = 'lazy';\n\n      const kind = resolveKind(slot);\n\n      if (kind === 'bundle') {\n        image.className = 'ryze-shop-demand__bundle-image';\n      } else if (kind === 'compact') {\n        image.className = 'ryze-shop-demand__compact-image';\n      } else {\n        image.className = 'ryze-shop-demand__product-image';\n      }\n\n      slot.appendChild(image);\n    });\n  }\n\n  function resolveHandle(slot) {\n    if (slot.dataset.ryzeProductHandle) return slot.dataset.ryzeProductHandle;\n    const href = slot.getAttribute('href') || '';\n    const match = href.match(/\\/products\\/([^/?#]+)/);\n    return match ? match[1] : '';\n  }\n\n  function resolveKind(slot) {\n    if (slot.dataset.ryzeImageKind) return slot.dataset.ryzeImageKind;\n    if (slot.classList.contains('ryze-shop-demand__bundle-image-link')) return 'bundle';\n    if (slot.classList.contains('ryze-shop-demand__compact-media')) return 'compact';\n    return 'product';\n  }\n\n  function resolveAlt(slot) {\n    const card = slot.closest('.ryze-shop-demand__product-card, .ryze-shop-demand__bundle-card, .ryze-shop-demand__compact-card');\n    return (\n      card?.querySelector('.ryze-shop-demand__product-title, .ryze-shop-demand__bundle-title, .ryze-shop-demand__compact-title')\n        ?.textContent?.trim() || ''\n    );\n  }\n})();\n\r\n\r\n"],
  "mappings": "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",
  "names": []
}
