{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/cart-drawer.js?local_rev=20260816_1103"],
  "sourcesContent": ["class 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    // The compact Design Lab-style flyout opens without a transition, so focus\n    // must be moved on the next frame instead of waiting for `transitionend`.\n    requestAnimationFrame(() => {\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  }\n\n  close() {\n    this.classList.remove('active');\n    removeTrapFocus(this.activeElement);\n  }\n\n  handleFlyoutQuantityClick(event) {\n    const button = event.target.closest('.gio-cart-flyout__quantity-button');\n    if (!button || button.disabled) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const control = button.closest('.gio-cart-flyout__quantity');\n    const input = control?.querySelector('.gio-cart-flyout__quantity-input');\n    const cartItems = this.querySelector('cart-drawer-items');\n    if (!input || !cartItems) return;\n\n    const current = Math.max(1, Number(input.value) || 1);\n    const max = input.max ? Number(input.max) : Infinity;\n    const quantity = button.name === 'plus' ? Math.min(max, current + 1) : Math.max(1, current - 1);\n    if (quantity === current) return;\n\n    // Keep the header popup on Shopify's proven drawer update path. Its\n    // behavior is intentionally separate from the full /cart page.\n    cartItems.updateQuantity(input.dataset.index, quantity, button.name, input.dataset.quantityVariantId);\n  }\n\n  queueFlyoutQuantityChange(input, quantity, confirmedQuantity) {\n    this.flyoutQuantityChanges ||= new Map();\n    const line = input.dataset.index;\n    let change = this.flyoutQuantityChanges.get(line);\n    if (!change) {\n      change = { input, desired: confirmedQuantity, confirmed: confirmedQuantity, timer: null, inFlight: false };\n      this.flyoutQuantityChanges.set(line, change);\n    }\n\n    change.input = input;\n    change.desired = quantity;\n    if (change.timer || change.inFlight) return;\n\n    change.timer = window.setTimeout(() => this.flushFlyoutQuantityChange(line), 140);\n  }\n\n  flushFlyoutQuantityChange(line) {\n    const change = this.flyoutQuantityChanges?.get(line);\n    if (!change) return;\n    change.timer = null;\n    change.inFlight = true;\n    const requestedQuantity = change.desired;\n\n    // Save only the final requested amount. This avoids racing responses when\n    // a customer taps + or - several times in quick succession.\n    fetch(window.routes?.cart_change_url || '/cart/change.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ line: Number(line), quantity: requestedQuantity }),\n    })\n      .then((response) => {\n        if (!response.ok) throw new Error('Cart quantity update failed');\n        return response.json();\n      })\n      .then((cart) => {\n        const updatedItem = cart.items[Number(line) - 1];\n        if (!updatedItem) throw new Error('Updated cart line is missing');\n        change.confirmed = updatedItem.quantity;\n        // Keep the newest local tap visible while a newer change is queued.\n        const isLatestChange = change.desired === requestedQuantity;\n        this.updateFlyoutQuantityUI(\n          change.input,\n          isLatestChange ? updatedItem.quantity : change.desired,\n          isLatestChange ? cart.total_price : undefined,\n          isLatestChange ? cart.item_count : undefined\n        );\n      })\n      .catch(() => {\n        change.desired = change.confirmed;\n        this.updateFlyoutQuantityUI(change.input, change.confirmed);\n      })\n      .finally(() => {\n        change.inFlight = false;\n        if (change.desired !== change.confirmed) {\n          change.timer = window.setTimeout(() => this.flushFlyoutQuantityChange(line), 0);\n        } else {\n          this.flyoutQuantityChanges.delete(line);\n        }\n      });\n  }\n\n  updateFlyoutQuantityUI(input, quantity, totalPrice, itemCount) {\n    input.value = quantity;\n    const row = input.closest('.cart-item');\n    const control = input.closest('.gio-cart-flyout__quantity');\n    const min = Math.max(1, Number(input.min) || 1);\n    const max = input.max ? Number(input.max) : Infinity;\n    const minus = control?.querySelector('[name=\"minus\"]');\n    const plus = control?.querySelector('[name=\"plus\"]');\n    if (minus) minus.disabled = quantity <= min;\n    if (plus) plus.disabled = quantity >= max;\n\n    const meta = row?.querySelector('.gio-cart-flyout__meta');\n    if (meta) meta.textContent = meta.textContent.replace(/\\d+\\s+St\u00FCck$/, `${quantity} St\u00FCck`);\n\n    const priceWrapper = row?.querySelector('.cart-item__price-wrapper');\n    const unitPrice = Number(priceWrapper?.dataset.unitPrice || 0);\n    const linePrice = priceWrapper?.querySelector('.price:not(s)') || priceWrapper?.querySelector('.price');\n    if (linePrice && unitPrice) linePrice.textContent = this.formatCartPrice(unitPrice * quantity);\n\n    const calculatedTotal = totalPrice ?? Array.from(this.querySelectorAll('.cart-item')).reduce((sum, item) => {\n      const itemInput = item.querySelector('.gio-cart-flyout__quantity-input');\n      const itemPrice = Number(item.querySelector('.cart-item__price-wrapper')?.dataset.unitPrice || 0);\n      return sum + itemPrice * Math.max(1, Number(itemInput?.value) || 1);\n    }, 0);\n    const total = this.querySelector('.totals__total-value');\n    if (total) total.textContent = `${this.formatCartPrice(calculatedTotal)} EUR`;\n\n    if (typeof itemCount === 'number') {\n      const heading = this.querySelector('.drawer__heading');\n      if (heading) heading.textContent = `Warenkorb (${itemCount})`;\n      const badge = document.querySelector('#cart-icon-bubble .cart-count-bubble span[aria-hidden=\"true\"]');\n      if (badge) badge.textContent = itemCount < 100 ? String(itemCount) : '';\n    }\n  }\n\n  formatCartPrice(cents) {\n    return `\u20AC${(cents / 100).toLocaleString('de-DE', {\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2,\n    })}`;\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) {\n    this.querySelector('.drawer__inner').classList.contains('is-empty') &&\n      this.querySelector('.drawer__inner').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    window.dispatchEvent(new CustomEvent('gio:cart-drawer-rendered'));\n\n    setTimeout(() => {\n      this.querySelector('#CartDrawer-Overlay').addEventListener('click', this.close.bind(this));\n      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  }\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\nclass CartDrawerItems extends CartItems {\n  getSectionsToRender() {\n    return [\n      {\n        id: 'CartDrawer',\n        section: 'cart-drawer',\n        selector: '.drawer__inner',\n      },\n    ];\n  }\n}\n\ncustomElements.define('cart-drawer-items', CartDrawerItems);\n"],
  "mappings": "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",
  "names": []
}
