{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/bundle-tier-table.js?cb=1792335233443"],
  "sourcesContent": ["/*\n  Bundle Tier Table \u2014 behaviour\n  Drives the theme's own variant picker (so price, Add to Cart variant, URL,\n  pickup availability etc. all update through Sense/Dawn's normal code path).\n  Survives the theme re-rendering the product info on every variant change.\n\n  Oct 2026 changes:\n  - Pages now open on the FIRST pack so the price shown matches the Google Shopping ad/feed.\n    The MOST POPULAR badge stays on its tier; set AUTO_SELECT_POPULAR = true to restore the old behaviour.\n  - Mobile sticky Add to cart bar (shown while the main button is off screen).\n*/\n(function () {\n  'use strict';\n\n  var AUTO_SELECT_POPULAR = false;\n\n  function init(container) {\n    if (!container || container.dataset.bttInit === '1') return;\n    container.dataset.bttInit = '1';\n\n    var optionName = container.getAttribute('data-option-name') || 'Bundle';\n    var section = container.closest('.shopify-section') || container;\n    var autoSelectDone = false;\n\n    function getPicker() {\n      return document.querySelector('product-info variant-selects') || document.querySelector('variant-selects');\n    }\n\n    // Native inputs that belong to the bundle option (radio pills or a dropdown).\n    function nativeInputs() {\n      var picker = getPicker();\n      if (!picker) return [];\n      var out = [];\n      picker.querySelectorAll('input[type=\"radio\"]').forEach(function (el) {\n        var n = (el.getAttribute('data-option-name') || '').trim();\n        var nm = (el.name || '').trim();\n        if (n === optionName || nm.indexOf(optionName + '-') === 0) out.push(el);\n      });\n      picker.querySelectorAll('select').forEach(function (el) {\n        if ((el.name || '') === 'options[' + optionName + ']') out.push(el);\n      });\n      return out;\n    }\n\n    function currentValue() {\n      var els = nativeInputs();\n      for (var i = 0; i < els.length; i++) {\n        var el = els[i];\n        if (el.tagName === 'SELECT') return el.value;\n        if (el.checked) return el.value;\n      }\n      return null;\n    }\n\n    function hideNative() {\n      nativeInputs().forEach(function (el) {\n        var wrap = el.closest('fieldset, .product-form__input');\n        if (wrap && !wrap.classList.contains('btt-native-hidden')) wrap.classList.add('btt-native-hidden');\n      });\n    }\n\n    // Keep the table directly after the variant picker (outside it, so the\n    // theme's innerHTML swap on variant change never wipes it). If something\n    // does detach it, we still hold the node and put it back.\n    // Rendered as a block inside the product section: the theme places it, never move it.\n    var isBlock = !!container.closest('product-info, .product__info-container');\n\n    function place() {\n      if (isBlock) return;\n      var picker = getPicker();\n      if (!picker || !picker.parentNode) return;\n      if (picker.nextElementSibling === section) return;\n      picker.parentNode.insertBefore(section, picker.nextSibling);\n      section.classList.add('btt-placed');\n    }\n\n    function sync() {\n      var val = currentValue();\n      if (!val) return;\n      container.querySelectorAll('[data-bundle-tier]').forEach(function (b) {\n        var on = b.getAttribute('data-option-value') === val;\n        b.classList.toggle('is-selected', on);\n        b.setAttribute('aria-checked', on ? 'true' : 'false');\n      });\n    }\n\n    function selectValue(val) {\n      var els = nativeInputs();\n      for (var i = 0; i < els.length; i++) {\n        var el = els[i];\n        if (el.tagName === 'SELECT') {\n          if (el.value !== val) {\n            el.value = val;\n            el.dispatchEvent(new Event('change', { bubbles: true }));\n          }\n          return true;\n        }\n        if (el.value === val) {\n          if (!el.checked) el.click(); // real click = theme's normal variant flow\n          return true;\n        }\n      }\n      return false;\n    }\n\n    function autoSelectPopular() {\n      if (autoSelectDone) return;\n      if (!getPicker()) return;\n      autoSelectDone = true;\n      // Pages open on the first pack so the price matches the ad/feed (see header note).\n      if (!AUTO_SELECT_POPULAR) return;\n      // Respect deep links (Google Shopping / ads use ?variant=...)\n      if (/[?&]variant=/.test(window.location.search)) return;\n      var popular = container.querySelector('[data-bundle-tier].is-popular:not([disabled])');\n      if (!popular) return;\n      var val = popular.getAttribute('data-option-value');\n      if (currentValue() !== val) selectValue(val);\n    }\n\n    // ---- Mobile sticky Add to cart bar ----\n    var sticky = null;\n\n    function atcButton() {\n      return document.querySelector('product-info product-form button[name=\"add\"]') || document.querySelector('product-info button[name=\"add\"]');\n    }\n\n    function ensureSticky() {\n      if (sticky) return sticky;\n      sticky = document.createElement('div');\n      sticky.className = 'btt-sticky';\n      sticky.setAttribute('role', 'region');\n      sticky.setAttribute('aria-label', 'Quick add to cart');\n      sticky.innerHTML = '<div class=\"btt-sticky__info\"><span class=\"btt-sticky__name\"></span><span class=\"btt-sticky__price\"></span></div><button type=\"button\" class=\"btt-sticky__btn\">Add to cart</button>';\n      document.body.appendChild(sticky);\n      sticky.querySelector('.btt-sticky__btn').addEventListener('click', function () {\n        var b = atcButton();\n        if (b && !b.disabled) b.click();\n      });\n      return sticky;\n    }\n\n    function updateSticky() {\n      try {\n        if (window.innerWidth > 749) {\n          if (sticky) sticky.classList.remove('is-visible');\n          return;\n        }\n        var bar = ensureSticky();\n        var b = atcButton();\n        var info = document.querySelector('product-info');\n        if (!b || !info) { bar.classList.remove('is-visible'); return; }\n        var sel = container.querySelector('[data-bundle-tier].is-selected');\n        if (sel) {\n          var n = sel.querySelector('.btt__tier-name');\n          var p = sel.querySelector('.btt__price');\n          bar.querySelector('.btt-sticky__name').textContent = n ? n.textContent : '';\n          bar.querySelector('.btt-sticky__price').textContent = p ? p.textContent : '';\n        }\n        var btn = bar.querySelector('.btt-sticky__btn');\n        var soldOut = /sold/i.test(b.textContent || '');\n        btn.textContent = soldOut ? 'Sold out' : 'Add to cart';\n        btn.disabled = soldOut;\n        var r = b.getBoundingClientRect();\n        var ir = info.getBoundingClientRect();\n        var atcOffscreen = r.top > window.innerHeight - 8 || r.bottom < 0;\n        var inProduct = ir.top < window.innerHeight && ir.bottom > 120;\n        bar.classList.toggle('is-visible', atcOffscreen && inProduct);\n      } catch (err) { /* never break the page */ }\n    }\n\n    container.addEventListener('click', function (e) {\n      var btn = e.target.closest('[data-bundle-tier]');\n      if (!btn || btn.disabled) return;\n      var val = btn.getAttribute('data-option-value');\n      // Optimistic UI; sync() corrects it once the theme re-renders.\n      container.querySelectorAll('[data-bundle-tier]').forEach(function (b) {\n        var on = b === btn;\n        b.classList.toggle('is-selected', on);\n        b.setAttribute('aria-checked', on ? 'true' : 'false');\n      });\n      selectValue(val);\n      setTimeout(updateSticky, 50);\n    });\n\n    // Arrow-key navigation for the radiogroup\n    container.addEventListener('keydown', function (e) {\n      if (['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].indexOf(e.key) === -1) return;\n      var tiers = Array.prototype.slice.call(container.querySelectorAll('[data-bundle-tier]:not([disabled])'));\n      var idx = tiers.indexOf(document.activeElement);\n      if (idx === -1) return;\n      e.preventDefault();\n      var step = (e.key === 'ArrowDown' || e.key === 'ArrowRight') ? 1 : -1;\n      var next = tiers[(idx + step + tiers.length) % tiers.length];\n      next.focus();\n      next.click();\n    });\n\n    function refresh() {\n      place();\n      hideNative();\n      sync();\n      autoSelectPopular();\n      updateSticky();\n    }\n\n    var scheduled = false;\n    function scheduleRefresh() {\n      if (scheduled) return;\n      scheduled = true;\n      requestAnimationFrame(function () { scheduled = false; refresh(); });\n    }\n\n    var stickyScheduled = false;\n    function scheduleSticky() {\n      if (stickyScheduled) return;\n      stickyScheduled = true;\n      requestAnimationFrame(function () { stickyScheduled = false; updateSticky(); });\n    }\n\n    var root = document.querySelector('product-info') || document.body;\n    new MutationObserver(scheduleRefresh).observe(root, { childList: true, subtree: true });\n    document.addEventListener('change', function (e) {\n      if (e.target && e.target.closest && e.target.closest('variant-selects')) setTimeout(sync, 0);\n    });\n    window.addEventListener('scroll', scheduleSticky, { passive: true });\n    window.addEventListener('resize', scheduleSticky);\n\n    refresh();\n  }\n\n  function boot() {\n    document.querySelectorAll('[data-bundle-tier-table]').forEach(init);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n  document.addEventListener('shopify:section:load', boot);\n})();\n"],
  "mappings": "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",
  "names": []
}
