{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/giovento-cart-page.js?local_rev=20260816_1103"],
  "sourcesContent": ["(() => {\n  const pendingChanges = new Map();\n  let pendingRemoval = null;\n  let previouslyFocusedElement = null;\n\n  const formatMoney = (cents) =>\n    `\u20AC${(cents / 100).toLocaleString('de-DE', {\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2,\n    })} EUR`;\n\n  const syncQuantityControl = (card, quantity) => {\n    const input = card.querySelector('.gio-cart-review__quantity input');\n    const buttons = card.querySelectorAll('[data-gio-cart-change]');\n    const minusButton = buttons[0];\n    const plusButton = buttons[1];\n\n    if (input) input.value = quantity;\n    if (minusButton) {\n      minusButton.dataset.quantity = String(Math.max(1, quantity - 1));\n      minusButton.disabled = quantity <= 1;\n      minusButton.setAttribute('aria-disabled', String(quantity <= 1));\n    }\n    if (plusButton) {\n      plusButton.dataset.quantity = String(quantity + 1);\n      plusButton.disabled = false;\n      plusButton.setAttribute('aria-disabled', 'false');\n    }\n  };\n\n  const syncSummary = (cart) => {\n    const total = formatMoney(cart.total_price);\n    const subtotalAmount = cart.original_total_price ?? cart.total_price;\n    const subtotalAmountFormatted = formatMoney(subtotalAmount);\n    const summary = document.querySelector('.gio-cart-review__summary');\n    const subtotal = document.querySelector('.gio-cart-review__summary-row--subtotal > span:last-child');\n    const totalValue = document.querySelector('.gio-cart-review__summary-total > strong:last-child');\n    if (summary) summary.dataset.cartTotal = String(cart.total_price);\n    if (summary) summary.dataset.cartSubtotal = String(subtotalAmount);\n    if (subtotal) subtotal.textContent = subtotalAmountFormatted;\n    if (totalValue) totalValue.textContent = total;\n  };\n\n  const syncCart = (cart, key, card) => {\n    const item = cart.items.find((cartItem) => cartItem.key === key);\n    if (!item) {\n      card.closest('.gio-cart-review__item')?.remove();\n      if (!cart.items.length) window.location.reload();\n      else syncSummary(cart);\n      return;\n    }\n\n    syncQuantityControl(card, item.quantity);\n    const lineTotal = card.querySelector('.gio-cart-review__line-total strong');\n    if (lineTotal) lineTotal.textContent = formatMoney(item.final_line_price);\n    syncSummary(cart);\n  };\n\n  const previewQuantityChange = (card, quantity) => {\n    const input = card.querySelector('.gio-cart-review__quantity input');\n    const lineTotal = card.querySelector('.gio-cart-review__line-total strong');\n    const summary = document.querySelector('.gio-cart-review__summary');\n    const previousQuantity = Number(input?.value || 1);\n    const unitPrice = Number(lineTotal?.dataset.unitPrice || 0);\n    const currentTotal = Number(summary?.dataset.cartTotal || 0);\n\n    syncQuantityControl(card, quantity);\n    if (lineTotal && unitPrice) lineTotal.textContent = formatMoney(unitPrice * quantity);\n    if (summary && unitPrice) syncSummary({ total_price: currentTotal + unitPrice * (quantity - previousQuantity) });\n  };\n\n  const sendCartChange = async (key, quantity) => {\n    const response = await 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({ id: key, quantity }),\n    });\n    if (!response.ok) throw new Error('Cart update failed');\n    return response.json();\n  };\n\n  const queueCartChange = (key, quantity, card) => {\n    const current = pendingChanges.get(key);\n    if (current?.timer) window.clearTimeout(current.timer);\n    const version = (current?.version || 0) + 1;\n\n    previewQuantityChange(card, quantity);\n    const timer = window.setTimeout(async () => {\n      try {\n        const cart = await sendCartChange(key, quantity);\n        if (pendingChanges.get(key)?.version === version) {\n          pendingChanges.delete(key);\n          syncCart(cart, key, card);\n        }\n      } catch (error) {\n        console.error(error);\n        // Keep the cart page stable if a request is interrupted. Reconcile the\n        // affected line in place instead of forcing a full-page reload.\n        if (pendingChanges.get(key)?.version === version) {\n          try {\n            const currentCart = await fetch('/cart.js', { headers: { Accept: 'application/json' } }).then((response) => response.json());\n            pendingChanges.delete(key);\n            syncCart(currentCart, key, card);\n          } catch (syncError) {\n            console.error(syncError);\n          }\n        }\n      }\n    }, 250);\n\n    pendingChanges.set(key, { timer, version });\n  };\n\n  const initialiseQuantityControls = () => {\n    document.querySelectorAll('.gio-cart-review__item').forEach((card) => {\n      const input = card.querySelector('.gio-cart-review__quantity input');\n      if (input) syncQuantityControl(card, Number(input.value));\n      const removeButton = card.querySelector('[data-gio-cart-remove]');\n      if (removeButton) removeButton.disabled = false;\n    });\n  };\n\n  const getRemoveConfirm = () => document.querySelector('#GioventoCartRemoveConfirm');\n\n  const closeRemoveConfirm = () => {\n    const confirm = getRemoveConfirm();\n    if (!confirm) return;\n    confirm.hidden = true;\n    pendingRemoval = null;\n    previouslyFocusedElement?.focus?.();\n    previouslyFocusedElement = null;\n  };\n\n  const openRemoveConfirm = (removal) => {\n    const confirm = getRemoveConfirm();\n    if (!confirm) return;\n    pendingRemoval = removal;\n    previouslyFocusedElement = document.activeElement;\n    confirm.hidden = false;\n    confirm.querySelector('[data-gio-cart-confirm-cancel]')?.focus();\n  };\n\n  const confirmRemoval = async () => {\n    if (!pendingRemoval) return;\n    const { key, card, button } = pendingRemoval;\n    const confirm = getRemoveConfirm();\n    const approveButton = confirm?.querySelector('[data-gio-cart-confirm-approve]');\n    if (approveButton?.disabled) return;\n\n    if (approveButton) approveButton.disabled = true;\n    if (button) button.disabled = true;\n    try {\n      const cart = await sendCartChange(key, 0);\n      if (pendingRemoval?.key === key) {\n        closeRemoveConfirm();\n        syncCart(cart, key, card);\n      }\n    } catch (error) {\n      console.error(error);\n      if (button) button.disabled = false;\n    } finally {\n      if (approveButton) approveButton.disabled = false;\n    }\n  };\n\n  document.addEventListener('click', (event) => {\n    const cancelButton = event.target.closest('[data-gio-cart-confirm-cancel]');\n    const approveButton = event.target.closest('[data-gio-cart-confirm-approve]');\n    if (!cancelButton && !approveButton) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    if (approveButton) confirmRemoval();\n    else closeRemoveConfirm();\n  }, true);\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape' && !getRemoveConfirm()?.hidden) closeRemoveConfirm();\n  });\n\n  // Capture the click before Dawn's generic cart handlers can submit or\n  // re-render the page-level form.\n  document.addEventListener('click', async (event) => {\n    const changeButton = event.target.closest('[data-gio-cart-change]');\n    const removeButton = event.target.closest('[data-gio-cart-remove]');\n    const target = changeButton || removeButton;\n    if (!target) return;\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    const card = target.closest('.gio-cart-review__details');\n    const key = target.dataset.key;\n    const quantity = Number(target.dataset.quantity);\n    if (!card || !key || (!removeButton && quantity < 1) || target.disabled) return;\n\n    if (removeButton) {\n      openRemoveConfirm({ key, card, button: target });\n      return;\n    }\n\n    queueCartChange(key, quantity, card);\n  }, true);\n\n  initialiseQuantityControls();\n})();\n"],
  "mappings": "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",
  "names": []
}
