{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/toa-free-shipping-progress-v5.js?toa=1783197973139"],
  "sourcesContent": ["(function () {\n  if (window.__toaFreeShippingProgressInstalled) return;\n  window.__toaFreeShippingProgressInstalled = true;\n\n  var DEFAULT_THRESHOLD_CENTS = 4900;\n  var refreshTimer = 0;\n  var lastCartToken = \"\";\n  var previousReached = new WeakMap();\n\n  function money(cents) {\n    var amount = Math.max(0, Number(cents || 0)) / 100;\n    try {\n      return new Intl.NumberFormat(\"de-DE\", { style: \"currency\", currency: \"EUR\" }).format(amount);\n    } catch (error) {\n      return amount.toFixed(2).replace(\".\", \",\") + \" \" + String.fromCharCode(8364);\n    }\n  }\n\n  function panels() {\n    return Array.prototype.slice.call(document.querySelectorAll(\n      \"[data-toa-free-shipping-panel], [data-toa-cart-panel]\"\n    ));\n  }\n\n  function thresholdFor(panel) {\n    var raw = Number(panel && (\n      panel.getAttribute(\"data-toa-free-shipping-threshold\") ||\n      panel.getAttribute(\"data-threshold\")\n    ));\n    return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_THRESHOLD_CENTS;\n  }\n\n  function packageLeft(progress, mobile) {\n    var base = mobile ? 4.0 : 4.5;\n    var travel = mobile ? 62.0 : 61.5;\n    return (base + (Math.min(100, Math.max(0, progress)) * travel / 100)).toFixed(2) + \"%\";\n  }\n\n  function setMessage(panel, remaining) {\n    var reached = remaining <= 0;\n    var title = panel.querySelector(\"[data-toa-free-shipping-title]\");\n    var text = panel.querySelector(\"[data-toa-free-shipping-text]\");\n    var richMessage = panel.querySelector(\"[data-toa-free-shipping-message]\");\n    var richSubmessage = panel.querySelector(\"[data-toa-free-shipping-submessage]\");\n    var goalBadge = panel.querySelector(\"[data-toa-free-shipping-goal-badge]\");\n\n    if (title) {\n      title.textContent = reached\n        ? \"Kostenloser Versand erreicht\"\n        : \"Noch \" + money(remaining) + \" bis kostenloser Versand\";\n    }\n    if (text) {\n      text.textContent = reached\n        ? \"Deine Bestellung erreicht den DHL Gratisversand innerhalb Deutschlands.\"\n        : \"Lege noch etwas dazu und spare dir die DHL Versandkosten.\";\n    }\n\n    if (richMessage) {\n      if (reached) {\n        richMessage.textContent = \"Kostenloser Versand erreicht\";\n      } else {\n        var remainingNode = richMessage.querySelector(\"[data-toa-free-shipping-remaining]\");\n        if (!remainingNode) {\n          richMessage.innerHTML = 'Noch <span data-toa-free-shipping-remaining></span> bis kostenloser Versand';\n          remainingNode = richMessage.querySelector(\"[data-toa-free-shipping-remaining]\");\n        }\n        if (remainingNode) remainingNode.textContent = money(remaining);\n      }\n    }\n    if (richSubmessage) {\n      richSubmessage.textContent = reached\n        ? \"Deine Bestellung erreicht den DHL Gratisversand innerhalb Deutschlands.\"\n        : \"Lege noch etwas dazu und spare dir die DHL Versandkosten.\";\n    }\n    if (goalBadge) {\n      goalBadge.textContent = reached ? \"Gratis erreicht\" : \"Gratis Versand\";\n    }\n  }\n\n  function updateCountdown() {\n    var nodes = document.querySelectorAll(\"[data-toa-cart-countdown]\");\n    if (!nodes.length) return;\n    var key = \"toaCartCountdownUntil\";\n    var duration = 30 * 60 * 1000;\n    var end = Number(window.localStorage && window.localStorage.getItem(key));\n    if (!end || end < Date.now()) {\n      end = Date.now() + duration;\n      try { window.localStorage.setItem(key, String(end)); } catch (error) {}\n    }\n    var left = Math.max(0, end - Date.now());\n    var minutes = Math.floor(left / 60000);\n    var seconds = Math.floor((left % 60000) / 1000);\n    var text = String(minutes).padStart(2, \"0\") + \":\" + String(seconds).padStart(2, \"0\") + \" Minuten\";\n    nodes.forEach(function (node) { node.textContent = text; });\n  }\n\n  function updateFromCart(cart) {\n    if (!cart || typeof cart !== \"object\") return;\n    var nodes = panels();\n    if (!nodes.length) return;\n    var total = Math.max(0, Number(cart.total_price || 0));\n    var count = Math.max(0, Number(cart.item_count || 0));\n\n    nodes.forEach(function (panel) {\n      var threshold = thresholdFor(panel);\n      var progress = threshold > 0 ? Math.min(100, Math.max(0, total * 100 / threshold)) : 100;\n      var ratio = progress / 100;\n      var remaining = Math.max(0, threshold - total);\n      var reached = remaining <= 0;\n      var wasReached = previousReached.get(panel);\n\n      panel.hidden = count <= 0;\n      panel.style.setProperty(\"--toa-free-shipping-progress\", progress.toFixed(2) + \"%\");\n      panel.style.setProperty(\"--toa-free-shipping-ratio\", ratio.toFixed(4));\n      panel.style.setProperty(\"--toa-free-shipping-package-left-desktop\", packageLeft(progress, false));\n      panel.style.setProperty(\"--toa-free-shipping-package-left-mobile\", packageLeft(progress, true));\n\n      panel.classList.toggle(\"is-complete\", reached);\n      panel.classList.toggle(\"toa-cart-conversion-panel--reached\", reached);\n      panel.classList.toggle(\"is-package-seeding\", false);\n      if (progress > 0 && progress < 100) panel.classList.add(\"is-progressing\");\n      window.clearTimeout(panel.__toaFreeShippingProgressingTimer);\n      panel.__toaFreeShippingProgressingTimer = window.setTimeout(function () {\n        panel.classList.remove(\"is-progressing\");\n      }, 720);\n      if (reached && wasReached === false) {\n        panel.classList.add(\"is-unlocked\");\n        window.setTimeout(function () { panel.classList.remove(\"is-unlocked\"); }, 1200);\n      }\n      previousReached.set(panel, reached);\n\n      var bar = panel.querySelector(\"[data-toa-free-shipping-bar]\");\n      if (bar) {\n        if (bar.classList && bar.classList.contains(\"toa-cart-route__road-progress-layer\")) {\n          bar.style.removeProperty(\"width\");\n        } else {\n          bar.style.width = progress.toFixed(2) + \"%\";\n        }\n      }\n      setMessage(panel, remaining);\n    });\n  }\n\n  function fetchCart() {\n    return window.fetch(\"/cart.js\", {\n      headers: { \"Accept\": \"application/json\" },\n      cache: \"no-store\"\n    }).then(function (response) {\n      if (!response.ok) throw new Error(\"cart.js \" + response.status);\n      return response.json();\n    }).then(function (cart) {\n      var token = JSON.stringify([cart.item_count, cart.total_price, cart.items_subtotal_price]);\n      lastCartToken = token;\n      updateFromCart(cart);\n    }).catch(function () {});\n  }\n\n  function scheduleRefresh(delay) {\n    window.clearTimeout(refreshTimer);\n    refreshTimer = window.setTimeout(fetchCart, typeof delay === \"number\" ? delay : 80);\n  }\n\n  function urlLooksLikeCartMutation(url) {\n    var text = String(url || \"\");\n    return /\\/cart\\/(add|change|update|clear)\\.js(?:\\?|$)/.test(text)\n      || /\\/cart\\/(add|change|update|clear)(?:\\?|$)/.test(text);\n  }\n\n  if (window.fetch && !window.__toaFreeShippingFetchWrapped) {\n    window.__toaFreeShippingFetchWrapped = true;\n    var originalFetch = window.fetch;\n    window.fetch = function () {\n      var request = arguments[0];\n      var url = typeof request === \"string\" ? request : (request && request.url);\n      return originalFetch.apply(this, arguments).then(function (response) {\n        if (urlLooksLikeCartMutation(url)) {\n          window.setTimeout(function () { scheduleRefresh(0); }, 60);\n          window.setTimeout(function () { scheduleRefresh(0); }, 420);\n          window.setTimeout(function () { scheduleRefresh(0); }, 900);\n        }\n        return response;\n      });\n    };\n  }\n\n  if (window.XMLHttpRequest && !window.__toaFreeShippingXhrWrapped) {\n    window.__toaFreeShippingXhrWrapped = true;\n    var originalOpen = window.XMLHttpRequest.prototype.open;\n    var originalSend = window.XMLHttpRequest.prototype.send;\n    window.XMLHttpRequest.prototype.open = function (method, url) {\n      this.__toaFreeShippingUrl = url;\n      return originalOpen.apply(this, arguments);\n    };\n    window.XMLHttpRequest.prototype.send = function () {\n      if (urlLooksLikeCartMutation(this.__toaFreeShippingUrl)) {\n        this.addEventListener(\"loadend\", function () {\n          window.setTimeout(function () { scheduleRefresh(0); }, 60);\n          window.setTimeout(function () { scheduleRefresh(0); }, 420);\n          window.setTimeout(function () { scheduleRefresh(0); }, 900);\n        });\n      }\n      return originalSend.apply(this, arguments);\n    };\n  }\n\n  [\n    \"cart:updated\",\n    \"cart:refresh\",\n    \"cart.requestComplete\",\n    \"ajaxCart.afterCartLoad\",\n    \"theme:cart:updated\",\n    \"product:added\",\n    \"line-item:change:end\",\n    \"toa:cart:updated\",\n    \"toa:cart:changed\"\n  ].forEach(function (eventName) {\n    document.addEventListener(eventName, function () { scheduleRefresh(60); }, true);\n    window.addEventListener(eventName, function () { scheduleRefresh(60); }, true);\n  });\n\n  if (window.MutationObserver) {\n    var observer = new MutationObserver(function (mutations) {\n      var shouldRefresh = mutations.some(function (mutation) {\n        return Array.prototype.slice.call(mutation.addedNodes || []).some(function (node) {\n          return node && node.nodeType === 1 && (\n            node.matches && (\n              node.matches(\"[data-toa-free-shipping-panel], [data-toa-cart-panel], .cart-summary, .cart-summary-item, [data-cart-item], .cart-item\")\n            ) || node.querySelector && node.querySelector(\"[data-toa-free-shipping-panel], [data-toa-cart-panel]\")\n          );\n        });\n      });\n      if (shouldRefresh) scheduleRefresh(80);\n    });\n    observer.observe(document.documentElement, { childList: true, subtree: true });\n  }\n\n  updateCountdown();\n  window.setInterval(updateCountdown, 1000);\n  scheduleRefresh(100);\n  window.setTimeout(function () { scheduleRefresh(0); }, 900);\n})();\n"],
  "mappings": "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",
  "names": []
}
