{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/blk-sticky-atc.js?blk-sticky-atc=20260723b"],
  "sourcesContent": ["(() => {\n  const productButtonSelector = [\n    'button.product-form__submit[name=\"add\"]',\n    'button[name=\"add\"].product-form__submit',\n    'form[data-type=\"add-to-cart-form\"] button[type=\"submit\"]',\n    'product-form button[type=\"submit\"][name=\"add\"]',\n  ].join(', ');\n\n  const getRootUrl = () => window.Shopify?.routes?.root || '/';\n\n  function findProductButton() {\n    return document.querySelector(productButtonSelector);\n  }\n\n  function findProductForm() {\n    return findProductButton()?.closest('form') || document.querySelector('product-form form');\n  }\n\n  function formatMoney(cents) {\n    if (window.Shopify?.formatMoney && window.Shopify.money_format) {\n      return window.Shopify.formatMoney(cents, window.Shopify.money_format);\n    }\n\n    return new Intl.NumberFormat(document.documentElement.lang || 'nl-BE', {\n      style: 'currency',\n      currency: window.Shopify?.currency?.active || 'EUR',\n    }).format(cents / 100);\n  }\n\n  function updateCartCount(cart) {\n    document.querySelectorAll('[data-cart-count], .cart-count-bubble span').forEach((element) => {\n      element.textContent = cart.item_count;\n    });\n  }\n\n  function readCartCountFromPage() {\n    const countElement = document.querySelector('[data-cart-count], .cart-count-bubble span');\n    const count = Number.parseInt(countElement?.textContent || '', 10);\n    return Number.isFinite(count) ? count : null;\n  }\n\n  async function getCartItemCount() {\n    const response = await fetch(`${getRootUrl()}cart.js`, {\n      headers: { Accept: 'application/json' },\n    });\n\n    if (!response.ok) throw new Error('Could not read cart state');\n\n    const cart = await response.json();\n    return Number.isFinite(cart?.item_count) ? cart.item_count : null;\n  }\n\n  function initialiseStickyAtc(bar) {\n    if (bar.dataset.blkStickyAtcInitialised === 'true') return;\n\n    const form = findProductForm();\n    const variantSelect = bar.querySelector('.sticky-atc__variant-select');\n    const quantityInput = bar.querySelector('.qty-input');\n    const priceTargets = bar.querySelectorAll('.sticky-atc__buy-price');\n    const buyButtons = bar.querySelectorAll('.sticky-atc__buy, .sticky-atc__buy--desktop');\n\n    if (!form || !variantSelect || !quantityInput || !buyButtons.length) return;\n\n    bar.dataset.blkStickyAtcInitialised = 'true';\n\n    const sourceVariantInput = form.querySelector('[name=\"id\"]');\n    const sourceQuantityInput = form.querySelector('[name=\"quantity\"]');\n    const normaliseQuantity = () => Math.max(1, Number.parseInt(quantityInput.value, 10) || 1);\n\n    const stopLoading = (button) => {\n      window.clearTimeout(Number(button.dataset.blkStickyAtcFallbackTimer));\n      button.dataset.blkStickyAtcSubmitting = 'false';\n      delete button.dataset.blkStickyAtcFallbackTimer;\n      button.classList.remove('is-loading');\n      button.disabled = false;\n      button.removeAttribute('aria-label');\n    };\n\n    const stopLoadingWhenCartUpdates = (button, initialCount, quantity) => {\n      if (!Number.isFinite(initialCount)) return;\n\n      const expectedCount = initialCount + quantity;\n      const deadline = Date.now() + 4500;\n\n      const check = async () => {\n        if (button.dataset.blkStickyAtcSubmitting !== 'true') return;\n\n        try {\n          const currentCount = await getCartItemCount();\n          if (Number.isFinite(currentCount) && currentCount >= expectedCount) {\n            stopLoading(button);\n            return;\n          }\n        } catch (error) {\n          // The fallback timer restores the button if cart state cannot be read.\n        }\n\n        if (Date.now() < deadline) window.setTimeout(check, 180);\n      };\n\n      window.setTimeout(check, 180);\n    };\n\n    const updatePrice = () => {\n      const option = variantSelect.selectedOptions[0];\n      const total = Number.parseInt(option?.dataset.price || '0', 10) * normaliseQuantity();\n      priceTargets.forEach((target) => { target.textContent = formatMoney(total); });\n    };\n\n    const syncSourceForm = ({ dispatchEvents = true } = {}) => {\n      if (sourceVariantInput) {\n        sourceVariantInput.value = variantSelect.value;\n        if (dispatchEvents) {\n          sourceVariantInput.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n      }\n      if (sourceQuantityInput) {\n        sourceQuantityInput.value = String(normaliseQuantity());\n        if (dispatchEvents) {\n          sourceQuantityInput.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n      }\n    };\n\n    const syncFromSourceForm = () => {\n      if (sourceVariantInput?.value && variantSelect.querySelector(`option[value=\"${sourceVariantInput.value}\"]`)) {\n        variantSelect.value = sourceVariantInput.value;\n      }\n      if (sourceQuantityInput?.value) {\n        quantityInput.value = String(Math.max(1, Number.parseInt(sourceQuantityInput.value, 10) || 1));\n      }\n      updatePrice();\n    };\n\n    bar.querySelector('[id^=\"StickyMinus-\"]')?.addEventListener('click', () => {\n      quantityInput.value = String(Math.max(1, normaliseQuantity() - 1));\n      syncSourceForm();\n      updatePrice();\n    });\n\n    bar.querySelector('[id^=\"StickyPlus-\"]')?.addEventListener('click', () => {\n      quantityInput.value = String(normaliseQuantity() + 1);\n      syncSourceForm();\n      updatePrice();\n    });\n\n    quantityInput.addEventListener('change', () => {\n      quantityInput.value = String(normaliseQuantity());\n      syncSourceForm();\n      updatePrice();\n    });\n\n    variantSelect.addEventListener('change', () => {\n      syncSourceForm();\n      updatePrice();\n    });\n\n    sourceVariantInput?.addEventListener('change', syncFromSourceForm);\n    sourceQuantityInput?.addEventListener('change', syncFromSourceForm);\n\n    buyButtons.forEach((button) => {\n      button.addEventListener('click', (event) => {\n        event.preventDefault();\n        if (button.dataset.blkStickyAtcSubmitting === 'true') return;\n\n        button.dataset.blkStickyAtcSubmitting = 'true';\n        button.classList.add('is-loading');\n        button.disabled = true;\n        button.setAttribute('aria-label', 'Bezig met toevoegen');\n\n        // Prefer the rendered count so the baseline is captured before the\n        // native form begins its request. Empty carts may not render a bubble,\n        // so fall back to the cart API in that case.\n        const renderedCartCount = readCartCountFromPage();\n        const cartCountPromise = Number.isFinite(renderedCartCount)\n          ? Promise.resolve(renderedCartCount)\n          : getCartItemCount().catch(() => null);\n        const quantity = normaliseQuantity();\n\n        // Let the native theme product form submit so every app/customisation field\n        // follows the exact same path as the main add-to-cart button.\n        syncSourceForm({ dispatchEvents: false });\n\n        window.setTimeout(async () => {\n          findProductButton()?.click();\n          stopLoadingWhenCartUpdates(button, await cartCountPromise, quantity);\n        }, 260);\n\n        // Restore the action if an app blocks the native form submission in place.\n        button.dataset.blkStickyAtcFallbackTimer = String(window.setTimeout(() => {\n          stopLoading(button);\n        }, 5000));\n      });\n    });\n\n    const observer = new IntersectionObserver(([entry]) => {\n      const shouldShow = !entry.isIntersecting;\n      bar.classList.toggle('is-visible', shouldShow);\n      bar.setAttribute('aria-hidden', shouldShow ? 'false' : 'true');\n    }, { threshold: 0 });\n\n    observer.observe(form);\n    syncFromSourceForm();\n  }\n\n  function boot() {\n    document.querySelectorAll('[data-blk-sticky-atc]').forEach(initialiseStickyAtc);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot, { once: true });\n  } else {\n    boot();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
