{
  "version": 3,
  "sources": ["/cdn/shop/t/17/assets/cart-drawer.js?nocache=1793717690949"],
  "sourcesContent": ["/* wettr cart-drawer v11.3 2026-11-03 */\nclass CartDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addEventListener('keyup', (evt) => evt.code === 'Escape' && this.close());\n    this.querySelector('#CartDrawer-Overlay').addEventListener('click', this.close.bind(this));\n    this.setHeaderCartIconAccessibility();\n  }\n\n  setHeaderCartIconAccessibility() {\n    const cartLink = document.querySelector('#cart-icon-bubble');\n    if (!cartLink) return;\n\n    cartLink.setAttribute('role', 'button');\n    cartLink.setAttribute('aria-haspopup', 'dialog');\n    cartLink.addEventListener('click', (event) => {\n      event.preventDefault();\n      this.open(cartLink);\n    });\n    cartLink.addEventListener('keydown', (event) => {\n      if (event.code.toUpperCase() === 'SPACE') {\n        event.preventDefault();\n        this.open(cartLink);\n      }\n    });\n  }\n\n  open(triggeredBy) {\n    if (triggeredBy) this.setActiveElement(triggeredBy);\n    const cartDrawerNote = this.querySelector('[id^=\"Details-\"] summary');\n    if (cartDrawerNote && !cartDrawerNote.hasAttribute('role')) this.setSummaryAccessibility(cartDrawerNote);\n    // here the animation doesn't seem to always get triggered. A timeout seem to help\n    setTimeout(() => {\n      this.classList.add('animate', 'active');\n    });\n\n    this.addEventListener(\n      'transitionend',\n      () => {\n        const containerToTrapFocusOn = this.classList.contains('is-empty')\n          ? this.querySelector('.drawer__inner-empty')\n          : document.getElementById('CartDrawer');\n        const focusElement = this.querySelector('.drawer__inner') || this.querySelector('.drawer__close');\n        trapFocus(containerToTrapFocusOn, focusElement);\n      },\n      { once: true }\n    );\n\n    document.body.classList.add('overflow-hidden');\n  }\n\n  close() {\n    this.classList.remove('active');\n    removeTrapFocus(this.activeElement);\n    document.body.classList.remove('overflow-hidden');\n  }\n\n  setSummaryAccessibility(cartDrawerNote) {\n    cartDrawerNote.setAttribute('role', 'button');\n    cartDrawerNote.setAttribute('aria-expanded', 'false');\n\n    if (cartDrawerNote.nextElementSibling.getAttribute('id')) {\n      cartDrawerNote.setAttribute('aria-controls', cartDrawerNote.nextElementSibling.id);\n    }\n\n    cartDrawerNote.addEventListener('click', (event) => {\n      event.currentTarget.setAttribute('aria-expanded', !event.currentTarget.closest('details').hasAttribute('open'));\n    });\n\n    cartDrawerNote.parentElement.addEventListener('keyup', onKeyUpEscape);\n  }\n\n  renderContents(parsedState, options) {\n    // wettr fix 2026-11-03: also clear is-empty on <cart-drawer> itself, otherwise the form stays display:none after the first add\n    this.querySelector('.drawer__inner').classList.contains('is-empty') &&\n      this.querySelector('.drawer__inner').classList.remove('is-empty');\n    this.classList.remove('is-empty');\n    this.productId = parsedState.id;\n    this.getSectionsToRender().forEach((section) => {\n      const sectionElement = section.selector\n        ? document.querySelector(section.selector)\n        : document.getElementById(section.id);\n\n      if (!sectionElement) return;\n      sectionElement.innerHTML = this.getSectionInnerHTML(parsedState.sections[section.id], section.selector);\n    });\n\n    const hasItems = !!this.querySelector('.cart-item');\n    this.classList.toggle('is-empty', !hasItems);\n    const inner = this.querySelector('.drawer__inner');\n    if (inner) inner.classList.toggle('is-empty', !hasItems);\n\n    setTimeout(() => {\n      const overlay = this.querySelector('#CartDrawer-Overlay');\n      if (overlay) overlay.addEventListener('click', this.close.bind(this));\n      if (!options || options.open !== false) this.open();\n    });\n  }\n\n  getSectionInnerHTML(html, selector = '.shopify-section') {\n    return new DOMParser().parseFromString(html, 'text/html').querySelector(selector).innerHTML;\n  }\n\n  getSectionsToRender() {\n    return [\n      {\n        id: 'cart-drawer',\n        selector: '#CartDrawer',\n      },\n      {\n        id: 'cart-icon-bubble',\n      },\n    ];\n  }\n\n  getSectionDOM(html, selector = '.shopify-section') {\n    return new DOMParser().parseFromString(html, 'text/html').querySelector(selector);\n  }\n\n  setActiveElement(element) {\n    this.activeElement = element;\n  }\n}\n\ncustomElements.define('cart-drawer', CartDrawer);\n\n// wettr: single source of truth for re-rendering drawer + header bubble (uncached JSON section rendering)\nwindow.wettrRefreshCart = function (open) {\n  const drawer = document.querySelector('cart-drawer');\n  const url = (window.Shopify && Shopify.routes ? Shopify.routes.root : '/') + '?sections=cart-drawer,cart-icon-bubble&_=' + Date.now();\n  return fetch(url, { cache: 'no-store' })\n    .then((r) => r.json())\n    .then((sections) => {\n      if (drawer && typeof drawer.renderContents === 'function') {\n        drawer.renderContents({ sections: sections }, { open: !!open });\n      } else {\n        const b = document.getElementById('cart-icon-bubble');\n        if (b && sections['cart-icon-bubble']) {\n          const d = new DOMParser().parseFromString(sections['cart-icon-bubble'], 'text/html').querySelector('.shopify-section');\n          if (d) b.innerHTML = d.innerHTML;\n        }\n      }\n      document.dispatchEvent(new CustomEvent('wettr:cart-updated'));\n    });\n};\n// Back/forward cache restores stale cart state -> refresh silently\nwindow.addEventListener('pageshow', (e) => { if (e.persisted) window.wettrRefreshCart(false); });\n\nclass CartDrawerItems extends CartItems {\n  getSectionsToRender() {\n    return [\n      {\n        id: 'CartDrawer',\n        section: 'cart-drawer',\n        selector: '.drawer__inner',\n      },\n      {\n        id: 'cart-icon-bubble',\n        section: 'cart-icon-bubble',\n        selector: '.shopify-section',\n      },\n    ];\n  }\n}\n\ncustomElements.define('cart-drawer-items', CartDrawerItems);\n\n// wettr 2026-11-03: Starter Kit gift guard. The free socks (product starter-kit-gift-socks, 0 EUR) may only stay in the\n// cart together with 3 lubes of the same _bundle_group. Runs on load and after every cart change.\n(function () {\n  const GIFT = 'starter-kit-gift-socks';\n  let busy = false, timer = null;\n  const root = (window.Shopify && Shopify.routes && Shopify.routes.root) || '/';\n  async function guard(depth) {\n    depth = depth || 0; if (busy || depth > 3) return; busy = true;\n    try {\n      const cart = await (await fetch(root + 'cart.js', { cache: 'no-store' })).json();\n      const updates = {};\n      // 1) incomplete bundle groups -> ungroup remaining items (no fake bundle labels without bundle discount)\n      const groups = {};\n      cart.items.forEach((it) => { const g = it.properties && it.properties._bundle_group; if (g) (groups[g] = groups[g] || []).push(it); });\n      const ungroup = [];\n      Object.keys(groups).forEach((g) => {\n        const items = groups[g], real = items.filter((x) => x.handle !== GIFT);\n        const size = parseInt((real[0] && real[0].properties._bundle_size) || '2', 10) || 2;\n        const qty = real.reduce((a, x) => a + x.quantity, 0);\n        if (qty < size) real.forEach((x) => ungroup.push(x));\n      });\n      if (ungroup.length) {\n        for (const x of ungroup) {\n          await fetch(root + 'cart/change.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: x.key, quantity: x.quantity, properties: { _bundle_group: '' } }) });\n        }\n        busy = false; await guard(depth + 1);\n        if (/\\/cart\\/?$/.test(location.pathname)) location.reload();\n        else if (window.wettrRefreshCart) window.wettrRefreshCart(false);\n        return;\n      }\n      cart.items.forEach((it) => {\n        if (it.handle !== GIFT) return;\n        const g = it.properties && it.properties._bundle_group;\n        const lubes = g ? cart.items.filter((x) => x.handle !== GIFT && x.properties && x.properties._bundle_group === g).reduce((a, x) => a + x.quantity, 0) : 0;\n        const allowed = lubes >= 3 ? 1 : 0;\n        if (it.quantity !== allowed) updates[it.key] = allowed;\n      });\n      if (Object.keys(updates).length) {\n        await fetch(root + 'cart/update.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ updates }) });\n        if (/\\/cart\\/?$/.test(location.pathname)) location.reload();\n        else if (window.wettrRefreshCart) window.wettrRefreshCart(false);\n      }\n    } catch (e) { /* never block the cart */ }\n    busy = false;\n  }\n  const schedule = () => { clearTimeout(timer); timer = setTimeout(guard, 400); };\n  const origFetch = window.fetch;\n  window.fetch = function (input) {\n    const url = typeof input === 'string' ? input : (input && input.url) || '';\n    const p = origFetch.apply(this, arguments);\n    if (/\\/cart\\/(change|update|add|clear)/.test(url)) p.then(schedule, schedule);\n    return p;\n  };\n  // Other apps wrap window.fetch after us, so also watch the network layer directly (catches fetch + XHR from any script)\n  if ('PerformanceObserver' in window) {\n    try {\n      new PerformanceObserver((list) => {\n        if (list.getEntries().some((e) => /\\/cart\\/(change|update|add|clear)(\\.js)?/.test(e.name))) schedule();\n      }).observe({ type: 'resource', buffered: false });\n    } catch (e) { /* old browsers: fetch hook only */ }\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n})();\n"],
  "mappings": "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",
  "names": []
}
