{
  "version": 3,
  "sources": ["/cdn/shop/t/226/assets/gift-cart-guard.js?cb=1790621058715"],
  "sourcesContent": ["/* One owner for gift writes; checkout waits for verified eligibility and cart state. */\n(function (root) {\n  'use strict';\n\n  // A gift is its whole product (every variant) when the product id is known,\n  // matching the checkout rule; otherwise its configured variant.\n  function isGiftLine(item, gift) {\n    return gift.productId != null\n      ? String(item.product_id) === String(gift.productId)\n      : String(item.variant_id) === String(gift.variantId);\n  }\n\n  // Old dedicated promotional SKUs can outlive their offer. A marker alone\n  // does not make ordinary merchandise a gift (including a BOGO frame).\n  function isLegacyGiftLine(item) {\n    const marker = item.properties?._auto_added;\n    const automatic = marker === true || marker === 'true' || marker === 1 || marker === '1';\n    return /-gift$/i.test(item.handle || '') &&\n      (Number(item.original_price ?? item.price) === 0 || automatic);\n  }\n\n  // Order protection (assets/order-protection.js) is never qualifying spend or a\n  // qualifying item. Falls back to the same vendor/SKU rule before that loads.\n  function isProtectionLine(item) {\n    const shared = root.JamesOroProtection?.isProtectionLine;\n    if (shared) return shared(item);\n    return item.vendor === 'Order Protection' || String(item.sku || '').startsWith('JO-PROTECT-');\n  }\n\n  // Qualifying spend, in cents \u2014 the same rule checkout enforces\n  // (apps/jamesoro/extensions/gift-validation in the James Oro app), minus\n  // order protection lines:\n  // non-gift lines only (gifts never qualify themselves or each other, and a\n  // line-item marker such as _auto_added neither makes nor unmakes a gift),\n  // after line and cart-level discounts unless the published policy says\n  // before_discounts, and gift-card products excluded only when the published\n  // policy says so. With no published policy this is the existing theme basis.\n  function qualifyingSpend(cart, gifts, policy) {\n    const before = policy?.spendBasis === 'before_discounts';\n    let spend = 0;\n    for (const item of cart.items || []) {\n      if (isProtectionLine(item) || isLegacyGiftLine(item) || gifts.some((gift) => isGiftLine(item, gift))) continue;\n      if (item.gift_card && policy?.countGiftCardProducts === false) continue;\n      spend += before ? item.original_line_price : item.final_line_price;\n    }\n    if (!before) {\n      spend -= (cart.cart_level_discount_applications || []).reduce(\n        (sum, discount) => sum + discount.total_allocated_amount, 0\n      );\n    }\n    return Math.max(0, spend);\n  }\n\n  function isCountGiftLine(item, reward) {\n    return isGiftLine(item, reward) && (Number(item.original_price ?? item.price) === 0 ||\n      [true, 'true', 1, '1'].includes(item.properties?._auto_added));\n  }\n\n  // The collection lookup is ~1.4 MB of JSON; reuse it across page views for a\n  // few minutes so it doesn't sit in front of the first gift add on each page.\n  const COLLECTION_IDS_TTL = 10 * 60 * 1000;\n  // Gift availability in the current market; short enough to notice a sell-out.\n  const GIFT_VARIANT_TTL = 60 * 1000;\n\n  function createCollectionResolver({ config, fetch, cartRoot = '/', windowApi, now = () => Date.now(), storage = null }) {\n    const storageKey = `jo-gift-collection:${cartRoot}${config.collectionHandle}`;\n    let cachedIds;\n    let giftLookup = null;\n    function storedIds() {\n      try {\n        const saved = JSON.parse(storage?.getItem(storageKey) || 'null');\n        if (saved && Array.isArray(saved.ids) && now() - saved.at < COLLECTION_IDS_TTL) return new Set(saved.ids);\n      } catch (e) {}\n      return null;\n    }\n    async function collectionIds() {\n      if (cachedIds) return cachedIds;\n      if (!config.collectionHandle) throw new Error('Unable to verify gift eligibility. Please try again.');\n      const saved = storedIds();\n      if (saved) return (cachedIds = saved);\n      const ids = new Set();\n      for (let page = 1; page <= 40; page++) {\n        const response = await fetch(`${cartRoot}collections/${encodeURIComponent(config.collectionHandle)}/products.json?limit=250&page=${page}`, { cache: 'no-store' });\n        if (!response.ok) throw new Error('Unable to verify gift eligibility. Please try again.');\n        const data = await response.json();\n        if (!Array.isArray(data.products)) throw new Error('Unable to verify gift eligibility. Please try again.');\n        data.products.forEach(product => ids.add(String(product.id)));\n        if (data.products.length < 250) {\n          cachedIds = ids;\n          try { storage?.setItem(storageKey, JSON.stringify({ at: now(), ids: [...ids] })); } catch (e) {}\n          return ids;\n        }\n      }\n      throw new Error('Unable to verify gift eligibility. Please try again.');\n    }\n    // Resolves to the configured variant in the current market, or null when the\n    // gift product is not sold here (404) or the variant is missing.\n    function giftVariant() {\n      if (giftLookup && now() - giftLookup.at < GIFT_VARIANT_TTL) return giftLookup.promise;\n      const promise = (async () => {\n        const response = await fetch(`${cartRoot}products/${encodeURIComponent(config.handle)}.js`, { cache: 'no-store' });\n        if (response.status === 404) return null;\n        if (!response.ok) throw new Error('Unable to verify gift availability. Please try again.');\n        const product = await response.json();\n        return product.variants?.find(v => String(v.id) === String(config.variantId)) || null;\n      })();\n      giftLookup = { at: now(), promise };\n      promise.catch(() => { if (giftLookup?.promise === promise) giftLookup = null; });\n      return promise;\n    }\n    return async cart => {\n      const minimum = Math.max(1, Number(config.minimum) || 1);\n      const window = windowApi.windowState(config.window, now());\n      const state = { ...config, minimum, count: 0, available: false, active: window.active, status: 'unavailable', cartKey: JSON.stringify(cart.items.map(item => [item.key, item.quantity, item.final_line_price])) };\n      if (!window.valid) return { ...state, status: 'invalid' };\n      if (!window.active) return { ...state, status: now() < window.start ? 'upcoming' : 'ended' };\n      // Both lookups are independent; run them together.\n      const [ids, variant] = await Promise.all([collectionIds(), config.handle ? giftVariant() : null]);\n      state.count = (cart.items || []).reduce((count, item) => count + (\n        ids.has(String(item.product_id)) && !isGiftLine(item, config) && !isLegacyGiftLine(item) && !item.gift_card && !isProtectionLine(item)\n          ? item.quantity : 0), 0);\n      if (!config.handle || !variant) return state;\n      state.available = Boolean(variant.available && Number(variant.price) === 0);\n      const currentWindow = windowApi.windowState(config.window, now());\n      state.active = currentWindow.active;\n      state.status = !currentWindow.valid ? 'invalid' : !state.active ? 'ended' : !state.available ? 'unavailable' : state.count >= minimum ? 'eligible' : 'progress';\n      return state;\n    };\n  }\n\n  function plan(cart, gifts, policy, { collectionGift = null } = {}) {\n    const spend = qualifyingSpend(cart, gifts, policy);\n    const updates = {};\n    const additions = [];\n    // Both gift modes use this planner; obsolete promotional SKUs are removed.\n    for (const line of cart.items) {\n      if (isLegacyGiftLine(line) && !gifts.some((gift) => isGiftLine(line, gift)) &&\n          !(collectionGift && isCountGiftLine(line, collectionGift))) {\n        updates[line.key] = 0;\n      }\n    }\n    const uniqueGifts = new Map();\n    for (const gift of gifts) {\n      const id = String(gift.variantId);\n      const previous = uniqueGifts.get(id);\n      if (!previous || (gift.available && (!previous.available || gift.threshold < previous.threshold))) uniqueGifts.set(id, gift);\n    }\n    for (const gift of uniqueGifts.values()) {\n      const lines = cart.items.filter((item) => isGiftLine(item, gift));\n      let remaining = gift.available && spend >= gift.threshold ? 1 : 0;\n      for (const line of lines) {\n        const quantity = Math.min(line.quantity, remaining);\n        remaining -= quantity;\n        if (quantity !== line.quantity) updates[line.key] = quantity;\n      }\n      if (remaining) additions.push({ id: gift.variantId, quantity: 1, properties: { _auto_added: true } });\n    }\n    if (collectionGift) {\n      let remaining = collectionGift.active && collectionGift.available && collectionGift.count >= collectionGift.minimum ? 1 : 0;\n      for (const line of cart.items.filter(item => isCountGiftLine(item, collectionGift))) {\n        const quantity = Math.min(line.quantity, remaining);\n        remaining -= quantity;\n        if (quantity !== line.quantity) updates[line.key] = quantity;\n      }\n      if (remaining) additions.push({ id: collectionGift.variantId, quantity: 1, properties: { _auto_added: true } });\n    }\n    return { updates, additions };\n  }\n\n  function createController({ readCart, updateCart, addItems, gifts, policy = null, resolveCollectionGift = null, onChange = () => {}, onSettled = () => {} }) {\n    const pending = new Set();\n    let revision = 0;\n    let running = null;\n    function track(promise) {\n      revision++;\n      const settled = Promise.resolve(promise).then(() => {}, () => {});\n      pending.add(settled);\n      settled.then(() => { pending.delete(settled); revision++; });\n      return promise;\n    }\n    async function settle() {\n      while (pending.size) await Promise.all([...pending]);\n    }\n    async function reconcile() {\n      let changed = false;\n      for (let attempt = 0; attempt < 12; attempt++) {\n        await settle();\n        const started = revision;\n        const cart = await readCart();\n        if (pending.size || started !== revision) continue;\n        const collectionGift = resolveCollectionGift ? await resolveCollectionGift(cart) : null;\n        if (pending.size || started !== revision) continue;\n        const next = plan(cart, gifts, policy, { collectionGift });\n        if (Object.keys(next.updates).length) {\n          await updateCart(next.updates);\n          changed = true;\n        } else if (next.additions.length) {\n          await addItems(next.additions);\n          changed = true;\n        } else {\n          if (changed) await onChange(cart, collectionGift);\n          else await onSettled(cart, collectionGift);\n          return cart;\n        }\n        // Re-read after every write: never trust a stale line index or a local\n        // prediction of totals, quantities, or concurrently changed merchandise.\n      }\n      throw new Error('Cart is still changing. Please try checkout again.');\n    }\n    function sync() {\n      if (!running) running = reconcile().finally(() => { running = null; });\n      return running;\n    }\n    async function checkout() {\n      // A background pass may have started before this click. Finish it, then\n      // always run a fresh pass for this checkout intent.\n      // A failed background pass must not fail this click; the fresh pass decides.\n      if (running) await running.catch(() => {});\n      return sync();\n    }\n    return { track, sync, checkout };\n  }\n\n  if (typeof module !== 'undefined' && module.exports) module.exports = { plan, qualifyingSpend, createController, createCollectionResolver };\n  const config = root.JamesOroGiftConfig;\n  if (!config?.enabled || root.JamesOroGiftGuard) return;\n  // The progress bar renders with the same spend rule.\n  root.JamesOroGiftSpend = qualifyingSpend;\n  const nativeFetch = root.fetch.bind(root);\n  const cartRoot = root.Shopify?.routes?.root || '/';\n  // Private windows and blocked site data can make sessionStorage throw.\n  function sessionStore() {\n    try { return root.sessionStorage || null; } catch (e) { return null; }\n  }\n  async function request(path, body) {\n    const response = await nativeFetch(cartRoot + path, body ? {\n      method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body)\n    } : { cache: 'no-store' });\n    if (!response.ok) throw new Error('Unable to update your cart. Please try again.');\n    return response.json();\n  }\n  function giftSectionTargets() {\n    const cartItems = document.querySelector('cart-items');\n    const targets = [\n      { id: 'CartDrawer', section: 'cart-drawer', selector: '.drawer__inner' },\n      { id: 'cart-icon-bubble', section: 'cart-icon-bubble', selector: '.shopify-section' }\n    ];\n    if (cartItems && document.getElementById('main-cart-items')) targets.push(...cartItems.getSectionsToRender());\n    return targets;\n  }\n  function sectionIds(targets) {\n    return [...new Set(targets.map((target) => target.section))];\n  }\n  // Sections rendered by the gift add itself. Valid only while that add is the\n  // last cart write; any later write (ours or the theme's) discards them.\n  let addedSections = null;\n  async function addGiftItems(items) {\n    addedSections = null;\n    const sections = config.cleanupOnly ? sectionIds(giftSectionTargets()) : [];\n    const result = await request('cart/add.js', sections.length\n      ? { items, sections: sections.join(','), sections_url: root.location.pathname }\n      : { items });\n    if (result?.sections && sections.every((id) => result.sections[id])) addedSections = result.sections;\n    return result;\n  }\n  async function refreshGiftCartSections(cart) {\n    if (!config.cleanupOnly && typeof root.refreshCartSections === 'function') {\n      return root.refreshCartSections();\n    }\n    const cartItems = document.querySelector('cart-items');\n    const drawer = document.querySelector('cart-drawer');\n    const targets = giftSectionTargets();\n    if (!drawer && !cartItems && !document.getElementById('cart-icon-bubble')) return;\n    const sections = sectionIds(targets);\n    let html = addedSections && sections.every((id) => addedSections[id]) ? addedSections : null;\n    addedSections = null;\n    if (!html) {\n      const response = await nativeFetch(`${cartRoot}?sections=${sections.join(',')}`, { cache: 'no-store' });\n      if (!response.ok) throw new Error('Unable to refresh your cart. Please try again.');\n      html = await response.json();\n    }\n    for (const target of targets) {\n      const destination = document.getElementById(target.id);\n      if (!destination || !html[target.section]) continue;\n      const source = new DOMParser().parseFromString(html[target.section], 'text/html').querySelector(target.selector);\n      if (source) (destination.querySelector(target.selector) || destination).innerHTML = source.innerHTML;\n    }\n    for (const element of [cartItems, drawer, document.getElementById('main-cart-footer')]) {\n      element?.classList.toggle('is-empty', cart.item_count === 0);\n    }\n    drawer?.querySelector('#CartDrawer-Overlay')?.addEventListener('click', () => drawer.close());\n    if (typeof root.initCartDrawerCountdown === 'function') root.initCartDrawerCountdown();\n    if (drawer && typeof root.initCartDrawerUpsellNav === 'function') root.initCartDrawerUpsellNav(drawer);\n    if (typeof root.updateBogoCartPrompt === 'function') root.updateBogoCartPrompt(false);\n  }\n  const controller = createController({\n    gifts: config.gifts,\n    policy: config.policy || null,\n    resolveCollectionGift: config.collectionGift ? createCollectionResolver({ config: config.collectionGift, fetch: nativeFetch, cartRoot, windowApi: root.JamesOroPromotionWindow, storage: sessionStore() }) : null,\n    readCart: () => request('cart.js'),\n    updateCart: (updates) => { addedSections = null; return request('cart/update.js', { updates }); },\n    addItems: addGiftItems,\n    // No gift change was needed, but the cart did change (e.g. a quantity\n    // edit): keep the progress bar on the verified cart, not one step behind.\n    onSettled: (cart, collectionGift) => {\n      root.JamesOroCollectionGiftState = collectionGift;\n      document.dispatchEvent(new CustomEvent('gift-cart:state', { detail: { cart, collectionGift } }));\n      document.dispatchEvent(new CustomEvent('gift-cart:updated', { detail: cart }));\n    },\n    onChange: async (cart, collectionGift) => {\n      root.JamesOroCollectionGiftState = collectionGift;\n      document.dispatchEvent(new CustomEvent('gift-cart:updated', { detail: cart }));\n      await refreshGiftCartSections(cart);\n      document.dispatchEvent(new CustomEvent('gift-cart:state', { detail: { cart, collectionGift } }));\n      if (typeof publish === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n        publish(PUB_SUB_EVENTS.cartUpdate, { source: 'gift-cart-guard' });\n      }\n    }\n  });\n  root.JamesOroGiftGuard = controller;\n  let scheduled;\n  function schedule() {\n    clearTimeout(scheduled);\n    scheduled = setTimeout(() => controller.sync().catch(error => {\n      root.JamesOroCollectionGiftState = null;\n      document.dispatchEvent(new CustomEvent('gift-cart:error', { detail: error.message }));\n    }), 0);\n  }\n  // Observe theme/app Ajax mutations, including adds and linked-item cleanup.\n  // Return the original response/promise unchanged to existing consumers.\n  root.fetch = function (input, options) {\n    const result = nativeFetch(input, options);\n    const url = new URL(input?.url || String(input), root.location.href);\n    if (url.origin === root.location.origin && /\\/cart\\/(add|change|update|clear)(\\.js)?$/.test(url.pathname)) {\n      addedSections = null;\n      controller.track(result);\n      Promise.resolve(result).then(schedule, schedule);\n    }\n    return result;\n  };\n\n  const checkoutSelector = '#CartDrawer-Checkout, #checkout, [name=\"checkout\"], a[href=\"/checkout\"], a[href^=\"/checkout?\"]';\n  let continuing = false;\n  let intent = false;\n  // Progress is announced to screen readers only; sighted shoppers see the\n  // checkout button's busy state. A visible message appears only on failure.\n  function statusRegion() {\n    let status = document.getElementById('gift-cart-guard-status');\n    if (!status) {\n      status = document.createElement('p');\n      status.id = 'gift-cart-guard-status';\n      status.setAttribute('role', 'status');\n      document.body.appendChild(status);\n    }\n    return status;\n  }\n  function announce(message, { visible = false } = {}) {\n    const status = statusRegion();\n    status.style.cssText = visible\n      ? 'position:fixed;bottom:16px;left:16px;right:16px;z-index:10000;padding:16px;background:#fff;color:#111;border:1px solid #111'\n      : 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap';\n    status.setAttribute('role', visible ? 'alert' : 'status');\n    status.textContent = message;\n    status.hidden = !message;\n  }\n  function setBusy(control, busy) {\n    if (!control) return;\n    if (busy) {\n      control.setAttribute('aria-busy', 'true');\n      control.style.opacity = '0.6';\n      control.style.cursor = 'progress';\n    } else {\n      control.removeAttribute('aria-busy');\n      control.style.opacity = '';\n      control.style.cursor = '';\n    }\n  }\n  async function guard(event) {\n    if (continuing) return;\n    const trigger = event.type === 'submit'\n      ? event.submitter || event.target.querySelector(checkoutSelector)\n      : event.target.closest?.(checkoutSelector);\n    if (!trigger?.matches(checkoutSelector)) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    if (intent) return;\n    intent = true;\n    setBusy(trigger, true);\n    announce('Updating your cart\u2026');\n    try {\n      await controller.checkout();\n      announce('');\n      // A gift update may replace the drawer and its original checkout control.\n      // Find the same control again by id, so \"Checkout without protection\" never\n      // resumes as the button that adds it.\n      const current = trigger.isConnected ? trigger\n        : trigger.id ? document.getElementById(trigger.id) : document.querySelector(checkoutSelector);\n      if (!current) throw new Error('Please reopen your cart and try checkout again.');\n      continuing = true;\n      try {\n        if (event.type === 'submit' && current.form) current.form.requestSubmit(current);\n        else current.click(); // Preserve the existing BOGO confirmation flow.\n      } finally { continuing = false; }\n    } catch (error) {\n      announce(error.message || 'Unable to verify your gifts. Please try checkout again.', { visible: true });\n    } finally {\n      intent = false;\n      setBusy(trigger, false);\n    }\n  }\n  // Back/forward cache: the browser restores the page exactly as it was left\n  // \u2014 often mid-redraw, because checkout navigated away while the drawer was\n  // still re-rendering. Always redraw from the server on a restore.\n  async function redrawAfterRestore() {\n    if (/\\/cart\\/?$/.test(root.location.pathname)) {\n      root.location.reload();\n      return;\n    }\n    const cart = await controller.sync();\n    document.dispatchEvent(new CustomEvent('gift-cart:updated', { detail: cart }));\n    await refreshGiftCartSections(cart);\n  }\n  if (config.collectionGift?.window?.enabled) {\n    const window = root.JamesOroPromotionWindow.windowState(config.collectionGift.window);\n    for (const boundary of [window.start, window.end]) {\n      const delay = boundary - Date.now();\n      if (window.valid && delay > 0 && delay < 2147483647) setTimeout(schedule, delay + 10);\n    }\n  }\n  root.addEventListener('focus', schedule);\n  document.addEventListener('visibilitychange', () => { if (!document.hidden) schedule(); });\n  document.addEventListener('click', guard, true);\n  document.addEventListener('submit', guard, true);\n  document.addEventListener('cart:updated', schedule);\n  document.addEventListener('cart:refresh', schedule);\n  document.addEventListener('click', (event) => {\n    if (event.target.closest?.('#cart-icon-bubble')) schedule();\n  });\n  root.addEventListener('ig:CartUpdated', schedule);\n  document.addEventListener('DOMContentLoaded', schedule);\n  root.addEventListener('pageshow', (event) => {\n    if (event.persisted) redrawAfterRestore().catch(() => {});\n    else schedule();\n  });\n})(typeof window !== 'undefined' ? window : globalThis);\n"],
  "mappings": "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",
  "names": ["config", "cartRoot", "window"]
}
