{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/cart-related.js?x=0.18729877306388665"],
  "sourcesContent": ["import { CartLinesUpdateEvent } from '@shopify/events';\n\nconst SECTION_ID = 'cart-drawer-section';\n\nfunction money(cents) {\n  return '$ ' + (cents / 100).toLocaleString('es-MX', { maximumFractionDigits: 2 });\n}\n\nfunction esc(str) {\n  return String(str).replace(/[&<>\"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]));\n}\n\nlet sheet = null;\n\nfunction closeSheet() {\n  if (sheet) {\n    sheet.remove();\n    sheet = null;\n  }\n}\n\nasync function openSheet(handle, host) {\n  closeSheet();\n  sheet = document.createElement('div');\n  sheet.className = 'cart-related-sheet';\n  sheet.innerHTML = '<div class=\"cart-related-sheet__panel\"><p class=\"cart-related-sheet__loading\">Cargando\u2026</p></div>';\n  // Evita que el carrito se cierre al tocar dentro del panel (el contenido se vuelve a pintar al elegir opciones).\n  sheet.addEventListener('click', (e) => e.stopPropagation());\n  host.appendChild(sheet);\n  sheet.addEventListener('click', (e) => {\n    if (e.target === sheet || e.target.closest('[data-sheet-close]')) closeSheet();\n  });\n\n  let product;\n  try {\n    product = await fetch(`/products/${encodeURIComponent(handle)}.js`, { headers: { Accept: 'application/json' } }).then((r) => r.json());\n  } catch (err) {\n    closeSheet();\n    window.location.href = `/products/${handle}`;\n    return;\n  }\n\n  const variants = product.variants || [];\n  const options = (product.options || []).map((o) => (typeof o === 'string' ? { name: o, values: [] } : o));\n  const hasRealOptions = !(variants.length === 1 && variants[0].title === 'Default Title');\n  const firstAvailable = variants.find((v) => v.available) || variants[0];\n  const selected = [firstAvailable.option1, firstAvailable.option2, firstAvailable.option3];\n\n  const valuesFor = (idx) => {\n    const seen = [];\n    variants.forEach((v) => {\n      const val = v['option' + (idx + 1)];\n      if (val != null && !seen.includes(val)) seen.push(val);\n    });\n    return seen;\n  };\n\n  const findVariant = () =>\n    variants.find((v) => options.every((_, i) => v['option' + (i + 1)] === selected[i])) || null;\n\n  const render = () => {\n    const variant = findVariant();\n    const imgSrc = (variant && variant.featured_image && variant.featured_image.src) || product.featured_image;\n    const price = variant ? variant.price : product.price;\n    const compare = variant ? variant.compare_at_price : product.compare_at_price;\n    let optsHtml = '';\n    if (hasRealOptions) {\n      options.forEach((opt, i) => {\n        const vals = valuesFor(i);\n        optsHtml += `<div class=\"cart-related-sheet__opt\"><p class=\"cart-related-sheet__opt-name\">${esc(opt.name)}: <b>${esc(selected[i] || '')}</b></p><div class=\"cart-related-sheet__chips\">`;\n        vals.forEach((val) => {\n          const availableCombo = variants.some((v) => v['option' + (i + 1)] === val && v.available);\n          optsHtml += `<button type=\"button\" class=\"cart-related-sheet__chip${selected[i] === val ? ' is-active' : ''}${availableCombo ? '' : ' is-off'}\" data-opt=\"${i}\" data-val=\"${esc(val)}\">${esc(val)}</button>`;\n        });\n        optsHtml += '</div></div>';\n      });\n    }\n    const canBuy = variant && variant.available;\n    sheet.innerHTML = `\n      <div class=\"cart-related-sheet__panel\" role=\"dialog\" aria-label=\"${esc(product.title)}\">\n        <button type=\"button\" class=\"cart-related-sheet__close\" data-sheet-close aria-label=\"Cerrar\">&times;</button>\n        <div class=\"cart-related-sheet__top\">\n          ${imgSrc ? `<img class=\"cart-related-sheet__img\" src=\"${esc(imgSrc)}\" alt=\"${esc(product.title)}\">` : ''}\n          <div class=\"cart-related-sheet__info\">\n            <p class=\"cart-related-sheet__title\">${esc(product.title)}</p>\n            <p class=\"cart-related-sheet__price\">${compare && compare > price ? `<s>${money(compare)}</s> ` : ''}<span>${money(price)}</span></p>\n          </div>\n        </div>\n        ${optsHtml}\n        <p class=\"cart-related-sheet__error\" data-sheet-error hidden></p>\n        <button type=\"button\" class=\"cart-related-sheet__add\" data-sheet-add ${canBuy ? '' : 'disabled'}>${canBuy ? 'A\u00D1ADIR AL CARRITO' : 'NO DISPONIBLE'}</button>\n      </div>`;\n  };\n\n  render();\n\n  sheet.addEventListener('click', async (e) => {\n    const chip = e.target.closest('[data-opt]');\n    if (chip) {\n      selected[Number(chip.dataset.opt)] = chip.dataset.val;\n      // si la combinaci\u00F3n no existe, busca la primera variante disponible con el valor elegido\n      if (!findVariant()) {\n        const idx = Number(chip.dataset.opt);\n        const match = variants.find((v) => v['option' + (idx + 1)] === chip.dataset.val && v.available) ||\n          variants.find((v) => v['option' + (idx + 1)] === chip.dataset.val);\n        if (match) options.forEach((_, i) => (selected[i] = match['option' + (i + 1)]));\n      }\n      render();\n      return;\n    }\n    const addBtn = e.target.closest('[data-sheet-add]');\n    if (!addBtn) return;\n    const variant = findVariant();\n    if (!variant || !variant.available) return;\n    addBtn.disabled = true;\n    addBtn.textContent = 'A\u00D1ADIENDO\u2026';\n    const errorEl = sheet.querySelector('[data-sheet-error]');\n    const deferred = CartLinesUpdateEvent.createPromise();\n    document.dispatchEvent(\n      new CartLinesUpdateEvent({\n        action: 'add',\n        context: 'product',\n        lines: [{ merchandiseId: String(variant.id), quantity: 1 }],\n        promise: deferred.promise,\n      })\n    );\n    try {\n      const res = await fetch('/cart/add.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({\n          items: [{ id: variant.id, quantity: 1 }],\n          sections: SECTION_ID,\n          sections_url: window.location.pathname,\n        }),\n      });\n      const data = await res.json();\n      if (data.status || data.errors) throw new Error(data.description || data.message || 'No se pudo a\u00F1adir');\n      const ajaxCart = await fetch('/cart.js', { headers: { Accept: 'application/json' } }).then((r) => r.json());\n      deferred.resolve({\n        cart: CartLinesUpdateEvent.createCartFromAjaxResponse(ajaxCart),\n        detail: {\n          items: ajaxCart.items,\n          source: 'cart-related',\n          sourceId: 'cart-related',\n          itemCount: 1,\n          productId: String(product.id),\n          sections: data.sections,\n          didError: false,\n        },\n      });\n      closeSheet();\n    } catch (err) {\n      deferred.reject(err);\n      if (errorEl) {\n        errorEl.hidden = false;\n        errorEl.textContent = err && err.message ? err.message : 'No se pudo a\u00F1adir el producto.';\n      }\n      addBtn.disabled = false;\n      addBtn.textContent = 'A\u00D1ADIR AL CARRITO';\n    }\n  });\n}\n\ndocument.addEventListener('click', (e) => {\n  const add = e.target.closest && e.target.closest('[data-cart-related-add]');\n  if (add) {\n    e.preventDefault();\n    e.stopPropagation();\n    const host = add.closest('dialog') || document.body;\n    openSheet(add.dataset.handle, host);\n    return;\n  }\n  const nav = e.target.closest && e.target.closest('[data-cart-related-prev],[data-cart-related-next]');\n  if (nav) {\n    const root = nav.closest('.cart-related');\n    const track = root && root.querySelector('[data-cart-related-track]');\n    if (!track) return;\n    const card = track.querySelector('.cart-related__card');\n    const step = card ? card.getBoundingClientRect().width + 10 : track.clientWidth * 0.8;\n    track.scrollBy({ left: nav.hasAttribute('data-cart-related-prev') ? -step : step, behavior: 'smooth' });\n  }\n});\n"],
  "mappings": "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",
  "names": []
}
