{
  "version": 3,
  "sources": ["/cdn/shop/t/261/assets/sivana-cart-drawer.js?x=1792438750804"],
  "sourcesContent": ["import { sectionRenderer } from '@theme/section-renderer';\n\n// Cart drawer \"Show details\" link (snippets/sivana-cart-promo-totals.liquid): slides the subtotal, Redo\n// coverage and shipping & tax lines open above \"Estimated total\", and closed again. The drawer is redrawn\n// on every cart change, so the lines start folded each time.\ndocument.addEventListener('click', (event) => {\n  const toggle = event.target instanceof Element && event.target.closest('[data-sivana-cart-details-toggle]');\n  if (!toggle) return;\n  const details = document.getElementById(toggle.getAttribute('aria-controls'));\n  if (!details) return;\n  const open = toggle.getAttribute('aria-expanded') !== 'true';\n  details.classList.toggle('is-open', open);\n  toggle.setAttribute('aria-expanded', String(open));\n  toggle.textContent = open ? 'Hide details' : 'Show details';\n});\n\n// Redo has two looks. In \"checkout buttons\" mode it hides our Checkout and draws its own two buttons,\n// so its block belongs where Checkout sits, under the total. In toggle mode our Checkout stays and the\n// toggle sits above the total like the mockup. We can't see inside Redo's block, so we check whether it\n// hid our Checkout (after every redraw of the drawer) and flag the drawer for assets/sivana-cart.css.\nconst drawer = document.getElementById('cart-drawer');\nif (drawer) {\n  let queued = false;\n  const check = () => {\n    queued = false;\n    const checkout = drawer.querySelector('#checkout');\n    const hidden = Boolean(checkout && drawer.querySelector('redo-shopify-toggle') && getComputedStyle(checkout).visibility === 'hidden');\n    drawer.toggleAttribute('data-redo-buttons', hidden);\n  };\n  const queue = () => {\n    if (queued) return;\n    queued = true;\n    setTimeout(check, 60);\n  };\n  new MutationObserver(queue).observe(drawer, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n  queue();\n}\n\n// The first Checkout, while Redo shows its own Checkout buttons: do what Redo's main \"checkout\" does\n// (add its returns coverage item to the bag, then go to checkout), so both Checkout buttons match.\n// Skipped when the coverage is already in the bag, or Redo says this bag can't have it (final sale items).\ndocument.addEventListener('click', async (event) => {\n  const button = event.target instanceof Element && event.target.closest('.sivana-cart-checkout[data-sivana-redo-variant]');\n  if (!button || !button.closest('#cart-drawer[data-redo-buttons]')) return;\n  if (window.redoStorefront?.coverageInfo?.returns?.cartEligible === false) return;\n  event.preventDefault();\n  button.setAttribute('aria-busy', 'true');\n  try {\n    const response = await fetch(`${window.Shopify?.routes?.root || '/'}cart/add.js`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ items: [{ id: Number(button.dataset.sivanaRedoVariant), quantity: 1 }] }),\n    });\n    if (!response.ok) throw new Error(String(response.status));\n    window.location.assign(`${window.Shopify?.routes?.root || '/'}checkout`);\n  } catch {\n    // Coverage couldn't be added: go to checkout without it rather than leave the shopper stuck.\n    button.removeAttribute('aria-busy');\n    button.removeAttribute('data-sivana-redo-variant');\n    button.click();\n  }\n});\n\n// \"Pairs well with\" arrows (snippets/sivana-cart-pairs.liquid): each click slides the row by the 3 cards\n// in view; an arrow fades out at its end of the row. The arrows update as soon as they're clicked (where\n// the row is heading) and again whenever the row moves, so swiping keeps them in step too.\nconst updatePairArrows = (row, left = row.scrollLeft) => {\n  const arrows = row.parentElement?.querySelectorAll('[data-sivana-pairs-step]');\n  if (!arrows?.length) return;\n  const max = row.scrollWidth - row.clientWidth - 2;\n  arrows.forEach((arrow) => {\n    arrow.disabled = arrow.dataset.sivanaPairsStep === '-1' ? left <= 2 : left >= max;\n  });\n};\ndocument.addEventListener('click', (event) => {\n  const arrow = event.target instanceof Element && event.target.closest('[data-sivana-pairs-step]');\n  if (!arrow) return;\n  const row = arrow.closest('.sivana-cart-pairs')?.querySelector('[data-sivana-pairs]');\n  if (!row) return;\n  const max = row.scrollWidth - row.clientWidth;\n  const target = Math.min(max, Math.max(0, row.scrollLeft + Number(arrow.dataset.sivanaPairsStep) * (row.clientWidth + 14)));\n  row.scrollTo({ left: target });\n  updatePairArrows(row, target);\n});\nfor (const type of ['scroll', 'scrollend']) {\n  document.addEventListener(\n    type,\n    (event) => {\n      if (event.target instanceof Element && event.target.matches('[data-sivana-pairs]')) updatePairArrows(event.target);\n    },\n    { capture: true, passive: true }\n  );\n}\n\n// Apps change the bag behind the theme's back. Redo takes its returns coverage back out when a shopper\n// leaves checkout, after the page (and the drawer Horizon redraws on Back) has already loaded, so the\n// drawer kept a coverage row the bag no longer had and the bag count stayed one too high. After any\n// add/change/update/clear request on the page, compare the bag with the drawer's rows and redraw the\n// drawer and the count when they differ. The theme's own changes already match, so they cost one\n// /cart.js read and no redraw.\nconst cartItems = document.querySelector('#cart-drawer cart-items-component');\nif (cartItems && 'PerformanceObserver' in window) {\n  const root = window.Shopify?.routes?.root || '/';\n  const mutation = /\\/cart\\/(add|change|update|clear)(\\.js)?(\\?|$)/;\n  let timer;\n  const sync = async () => {\n    try {\n      await Promise.allSettled(cartItems.constructor.pendingQuantityUpdates ?? []);\n      const cart = await fetch(`${root}cart.js`, { headers: { Accept: 'application/json' }, cache: 'no-store' }).then((r) => r.json());\n      const rows = [...cartItems.querySelectorAll('tr.cart-items__table-row[data-key]')].map(\n        (row) => `${row.dataset.key}x${row.querySelector('input[name=\"updates[]\"]')?.value}`\n      );\n      const lines = cart.items.map((item) => `${item.key}x${item.quantity}`);\n      if (rows.join() === lines.join()) return;\n      document.querySelector('cart-icon')?.renderCartBubble?.(cart.item_count, false);\n      if (!cartItems.dataset.sectionId) return;\n      await sectionRenderer.renderSection(cartItems.dataset.sectionId, {\n        cache: false,\n        mode: 'hydration',\n        injectStylesheet: cartItems.querySelector('[data-cart-drawer-empty]') !== null,\n      });\n    } catch (error) {\n      if (error?.name !== 'AbortError') console.warn('[sivana-cart] bag check failed:', error);\n    }\n  };\n  new PerformanceObserver((list) => {\n    if (!list.getEntries().some((entry) => mutation.test(new URL(entry.name, location.href).pathname))) return;\n    clearTimeout(timer);\n    timer = setTimeout(sync, 500);\n  }).observe({ type: 'resource' });\n}\n"],
  "mappings": "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",
  "names": []
}
