{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/milaura-cart-rewards-auto.js?verify=20260804T1820"],
  "sourcesContent": ["/* MilAura automatic cart rewards, 2026-08-09, revised 2026-10-02.\n   The monthly gift is added from 50 EUR of paid merchandise.\n   Free pickup-point shipping from 30 EUR is a native Shopify rate: no code.\n   The 80 EUR / 15% tier is retired. Retired and legacy reward codes are\n   removed from the cart; any other code entered by the customer is kept. */\n\n(() => {\n  if (window.MilauraCartRewardsAuto) return;\n\n  const state = {\n    timer: null,\n    syncing: false,\n    rerun: false,\n  };\n\n  const route = (path) => {\n    const root = window.Shopify?.routes?.root || '/';\n    return `${root}${path}`.replace(/\\/+/g, '/');\n  };\n\n  const readConfig = () => {\n    const element = document.getElementById('MilauraCartRewardsConfig');\n    if (!element) return null;\n\n    return {\n      element,\n      giftThreshold: Number.parseInt(element.dataset.thresholdGift, 10) || 5000,\n      giftVariantId: Number.parseInt(element.dataset.giftVariantId, 10) || 0,\n    };\n  };\n\n  const request = async (path, body) => {\n    const response = await fetch(route(path), {\n      method: body ? 'POST' : 'GET',\n      credentials: 'same-origin',\n      headers: body ? { 'Content-Type': 'application/json' } : undefined,\n      body: body ? JSON.stringify(body) : undefined,\n    });\n    const data = await response.json().catch(() => ({}));\n    if (!response.ok) {\n      throw new Error(data.description || data.message || `cart_request_${response.status}`);\n    }\n    return data;\n  };\n\n  const cartSections = () => {\n    const drawer = document.querySelector('cart-drawer');\n    if (!drawer || typeof drawer.getSectionsToRender !== 'function') return {};\n    return {\n      sections: drawer.getSectionsToRender().map((section) => section.id),\n      sections_url: window.location.pathname,\n    };\n  };\n\n  const renderCart = (response) => {\n    const drawer = document.querySelector('cart-drawer');\n    if (!response?.sections || !drawer || typeof drawer.renderContents !== 'function') return;\n    if (typeof drawer.setEmptyState === 'function') drawer.setEmptyState(response.item_count === 0);\n    const wasOpen = drawer.classList.contains('active');\n    if (wasOpen) {\n      drawer.renderContents(response);\n      return;\n    }\n\n    drawer.getSectionsToRender().forEach((section) => {\n      const html = response.sections[section.id];\n      if (!html) return;\n      const target = section.selector\n        ? document.querySelector(section.selector)\n        : document.getElementById(section.id);\n      if (!target) return;\n      const nextContent = drawer.getSectionInnerHTML(html, section.selector);\n      if (nextContent === null) return;\n      target.innerHTML = nextContent;\n    });\n    drawer.querySelector('#CartDrawer-Overlay')?.addEventListener('click', drawer.close.bind(drawer));\n  };\n\n  const isGift = (item) => {\n    if (!item) return false;\n    const properties = item.properties || {};\n    return properties._milaura_gift === 'true'\n      || String(item.handle || '').startsWith('cadeau-')\n      || String(item.product_title || '').startsWith('Cadeau -');\n  };\n\n  const merchandiseSubtotal = (cart) => (cart?.items || []).reduce((total, item) => {\n    if (isGift(item)) return total;\n    const original = Number(item.original_line_price);\n    if (Number.isFinite(original)) return total + original;\n    return total + Number(item.line_price || item.final_line_price || 0);\n  }, 0);\n\n  const cartCodes = (cart) => (cart?.discount_codes || [])\n    .map((entry) => String(entry.code || '').trim())\n    .filter(Boolean);\n\n  const sameCodes = (left, right) => {\n    const normalize = (codes) => [...new Set(codes.map((code) => code.toUpperCase()))].sort();\n    return JSON.stringify(normalize(left)) === JSON.stringify(normalize(right));\n  };\n\n  const addGift = (config) => request('cart/add.js', {\n    items: [{\n      id: config.giftVariantId,\n      quantity: 1,\n      properties: {\n        'Cadeau MilAura': 'Cadeau du mois offert',\n        Statut: 'Offert',\n        _milaura_gift: 'true',\n        _milaura_gift_min_paid_cents: String(config.giftThreshold),\n      },\n    }],\n    ...cartSections(),\n  });\n\n  const normalizeGift = async (cart, config, eligible) => {\n    const gifts = (cart.items || []).filter(isGift);\n\n    if (!eligible && gifts.length) {\n      const updates = {};\n      gifts.forEach((item) => { updates[item.key] = 0; });\n      return request('cart/update.js', { updates, ...cartSections() });\n    }\n\n    if (!eligible || !config.giftVariantId) return null;\n\n    const target = gifts.find((item) => Number(item.variant_id) === config.giftVariantId);\n    const stale = gifts.filter((item) => Number(item.variant_id) !== config.giftVariantId);\n    if (stale.length || (target && Number(target.quantity) !== 1)) {\n      const updates = {};\n      stale.forEach((item) => { updates[item.key] = 0; });\n      if (target && Number(target.quantity) !== 1) updates[target.key] = 1;\n      const response = await request('cart/update.js', { updates, ...cartSections() });\n      if (!target) return addGift(config);\n      return response;\n    }\n\n    if (!target) return addGift(config);\n    return null;\n  };\n\n  const syncDiscountCodes = async (cart) => {\n    const managed = [\n      'MILAURA-RELAIS30',\n      'MILAURA15-80',\n      'MILAURA15',\n      'MILAURA-LIV50',\n      'MILAURA-LIV19',\n      'MILAURA30',\n      'MILAURA-CARTE10',\n      'ANNIV20',\n      'PORTOFFERT',\n      'COEURDELORRAINE2026',\n    ]\n      .map((code) => code.toUpperCase());\n    const desired = cartCodes(cart).filter((code) => !managed.includes(code.toUpperCase()));\n    if (sameCodes(cartCodes(cart), desired)) return null;\n\n    return request('cart/update.js', {\n      discount: desired.join(','),\n      attributes: {\n        'Avantages MilAura': '',\n      },\n      ...cartSections(),\n    });\n  };\n\n  const sync = async () => {\n    const config = readConfig();\n    if (!config) return;\n    if (state.syncing) {\n      state.rerun = true;\n      return;\n    }\n\n    state.syncing = true;\n    state.rerun = false;\n    config.element.dataset.rewardSync = 'loading';\n\n    try {\n      let cart = await request('cart.js');\n      if (!cart.items?.length) {\n        config.element.dataset.rewardSync = 'ready';\n        return;\n      }\n\n      const subtotal = merchandiseSubtotal(cart);\n      const giftResponse = await normalizeGift(cart, config, subtotal >= config.giftThreshold);\n      if (giftResponse) {\n        renderCart(giftResponse);\n        cart = await request('cart.js');\n      }\n\n      const discountResponse = await syncDiscountCodes(cart);\n      if (discountResponse) renderCart(discountResponse);\n\n      config.element.dataset.rewardSync = 'ready';\n    } catch (error) {\n      config.element.dataset.rewardSync = 'error';\n      console.warn('MilAura rewards sync failed:', error);\n    } finally {\n      state.syncing = false;\n      if (state.rerun) schedule();\n    }\n  };\n\n  const schedule = () => {\n    window.clearTimeout(state.timer);\n    state.timer = window.setTimeout(sync, 180);\n  };\n\n  const init = () => {\n    if (typeof window.subscribe === 'function' && window.PUB_SUB_EVENTS?.cartUpdate) {\n      window.subscribe(window.PUB_SUB_EVENTS.cartUpdate, (event) => {\n        if (event?.source !== 'milaura-rewards') schedule();\n      });\n    } else if (typeof subscribe === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n      subscribe(PUB_SUB_EVENTS.cartUpdate, (event) => {\n        if (event?.source !== 'milaura-rewards') schedule();\n      });\n    }\n    document.addEventListener('cart:updated', schedule);\n    window.addEventListener('cart:updated', schedule);\n    schedule();\n  };\n\n  window.MilauraCartRewardsAuto = { sync: schedule };\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init, { once: true });\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
