{
  "version": 3,
  "sources": ["/cdn/shop/t/49/assets/earthbreath-discount-popup-trigger.js?version=1.0.147"],
  "sourcesContent": ["/**\n * Earthbreath Omnisend popup coordinator v1.1.0\n * 1. Opens the Custom Trigger copy of the Omnisend 5% welcome-discount form\n *    from #discount-popup, #popup or [data-eb-discount-popup-trigger].\n * 2. Opens the Omnisend \"Spend over \u00A340, choose 2 free gifts\" form\n *    (Custom Trigger) after the visitor has viewed several product pages,\n *    never while another Omnisend popup is open or was just closed.\n */\n(() => {\n  const discountFormId = '6a78718bf89ed4370e7b1068';\n  const giftFormId = '6aad4c441cbb4abf38054afc';\n  const giftConfig = {\n    minProductViews: 2,        // distinct product pages per session\n    delayMs: 5000,             // dwell before opening when a popup was already seen this session\n    firstDelayMs: 20000,       // dwell before opening when no Omnisend popup was seen yet (5% form fires at 15 s)\n    thresholdPence: 4000,      // skip when the cart already unlocks the gifts\n    repeatDays: 7,             // one gift popup per visitor per week\n    skipPaths: ['/cart', '/checkouts', '/checkout', '/account', '/policies'],\n  };\n  const hashTargets = new Set(['#discount-popup', '#popup']);\n  const triggerSelector = '[data-eb-discount-popup-trigger], a[href$=\"#discount-popup\"], a[href$=\"#popup\"]';\n  const keys = {\n    views: 'eb_omni_product_views',\n    seen: 'eb_omni_popup_seen',\n    giftShown: 'eb_gift_popup_shown_at',\n  };\n  let lastOpenRequest = 0;\n  let popupShownOnThisPage = false;\n  let giftTimer = null;\n\n  function read(storage, key) {\n    try { return storage.getItem(key); } catch (e) { return null; }\n  }\n\n  function write(storage, key, value) {\n    try { storage.setItem(key, value); } catch (e) { /* storage blocked */ }\n  }\n\n  function openForm(formId) {\n    const now = Date.now();\n    if (now - lastOpenRequest < 800) return;\n    lastOpenRequest = now;\n    window.omnisend = window.omnisend || [];\n    window.omnisend.push(['openForm', formId]);\n  }\n\n  function openDiscountPopup() {\n    openForm(discountFormId);\n  }\n\n  function openPopupFromHash() {\n    if (hashTargets.has(window.location.hash)) openDiscountPopup();\n  }\n\n  function omnisendPopupVisible() {\n    const container = document.getElementById('omnisend-forms-container');\n    if (!container) return false;\n    return Array.from(container.querySelectorAll('[class*=\"omnisend-form-\"]')).some((el) => {\n      return el.offsetHeight > 0 && getComputedStyle(el).position === 'fixed';\n    });\n  }\n\n  function watchOmnisendPopups() {\n    const check = () => {\n      if (!omnisendPopupVisible()) return;\n      popupShownOnThisPage = true;\n      write(sessionStorage, keys.seen, '1');\n      if (giftTimer) {\n        clearTimeout(giftTimer);\n        giftTimer = null;\n      }\n    };\n    const start = () => {\n      const container = document.getElementById('omnisend-forms-container');\n      if (!container) return false;\n      new MutationObserver(check).observe(container, { childList: true, subtree: true });\n      check();\n      return true;\n    };\n    if (start()) return;\n    const bodyObserver = new MutationObserver(() => {\n      if (start()) bodyObserver.disconnect();\n    });\n    bodyObserver.observe(document.body, { childList: true });\n  }\n\n  function recordProductView() {\n    const match = window.location.pathname.match(/\\/products\\/([^/?#]+)/);\n    if (!match) return;\n    let views = [];\n    try { views = JSON.parse(read(sessionStorage, keys.views) || '[]'); } catch (e) { views = []; }\n    if (!views.includes(match[1])) views.push(match[1]);\n    write(sessionStorage, keys.views, JSON.stringify(views));\n  }\n\n  function productViewCount() {\n    try { return JSON.parse(read(sessionStorage, keys.views) || '[]').length; } catch (e) { return 0; }\n  }\n\n  function giftPopupRecentlyShown() {\n    const shownAt = Number(read(localStorage, keys.giftShown) || 0);\n    return shownAt && Date.now() - shownAt < giftConfig.repeatDays * 86400000;\n  }\n\n  function onSkippedPath() {\n    const path = window.location.pathname;\n    return giftConfig.skipPaths.some((prefix) => path === prefix || path.startsWith(prefix + '/'));\n  }\n\n  function scheduleGiftPopup() {\n    if (onSkippedPath() || giftPopupRecentlyShown()) return;\n    if (productViewCount() < giftConfig.minProductViews) return;\n    const delay = read(sessionStorage, keys.seen) ? giftConfig.delayMs : giftConfig.firstDelayMs;\n    giftTimer = setTimeout(() => {\n      giftTimer = null;\n      if (popupShownOnThisPage || omnisendPopupVisible() || giftPopupRecentlyShown()) return;\n      fetch('/cart.js', { headers: { Accept: 'application/json' } })\n        .then((response) => (response.ok ? response.json() : null))\n        .then((cart) => {\n          if (cart && Number(cart.total_price) >= giftConfig.thresholdPence) return;\n          if (popupShownOnThisPage || omnisendPopupVisible()) return;\n          write(localStorage, keys.giftShown, String(Date.now()));\n          write(sessionStorage, keys.seen, '1');\n          popupShownOnThisPage = true;\n          openForm(giftFormId);\n        })\n        .catch(() => {});\n    }, delay);\n  }\n\n  document.addEventListener('click', (event) => {\n    const trigger = event.target.closest(triggerSelector);\n    if (!trigger) return;\n    event.preventDefault();\n    openDiscountPopup();\n  });\n\n  window.addEventListener('hashchange', openPopupFromHash);\n  openPopupFromHash();\n  watchOmnisendPopups();\n  recordProductView();\n  scheduleGiftPopup();\n})();\n"],
  "mappings": "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",
  "names": []
}
