{
  "version": 3,
  "sources": ["/cdn/shop/t/69/assets/tnf-qbm-shipping.js"],
  "sourcesContent": ["/* TNF Quick Buy Modal additions (live + draft).\n   Injects same-day shipping countdown (sticky below ATC) + product stars\n   from the clicked card into the Quick Buy modal when it opens.\n*/\n(function () {\n  if (window._tnfQbmShippingInited) return;\n  window._tnfQbmShippingInited = true;\n\n  // 2026-05-19 v2 \u2014 Diana: \"i dont want this view cart button in qb modal\n  // theres an issue where when i open the cart on wishlist page then none of\n  // the move to cart buttons work after that.\" \u2192 REMOVE the View-cart\n  // cart-status injection AND the force-stay-open submit-intercept globally\n  // (was previously only skipped on /pages/buy-again). QB modal now behaves\n  // like Shopify's default: variant-bundle-common.js handles add-to-cart,\n  // tnf-cart-no-auto-open.js handles the cart drawer.\n\n  var CSS = ''\n    + '.tnf-qbm-countdown { position: sticky; bottom: 0; z-index: 10; padding: 12px 14px; margin: 12px 0 0; font-family: Barlow, system-ui, sans-serif; font-size: 13px; font-weight: 700; text-align: center; line-height: 1.2; background: #e6f7ee; color: #0a6e2c; border-radius: 8px; box-shadow: 0 -4px 12px rgba(0,0,0,0.08); letter-spacing: 0.2px; }'\n    + '.tnf-qbm-countdown.is-after-cutoff { background: #ffefef; color: #b81c20; box-shadow: 0 -4px 12px rgba(184,28,32,0.12); }'\n    + '#variant-quick-buy-modal-body { overflow-y: auto !important; }'\n    + '.tnf-qbm-stars { display: inline-flex; align-items: center; gap: 6px; font-family: Barlow, system-ui, sans-serif; font-size: 12.5px; line-height: 1; color: #677279; margin: 6px 0 0; }'\n    + '.tnf-qbm-stars-row { position: relative; display: inline-block; font-size: 14px; line-height: 1; letter-spacing: 0.5px; color: #ffc107; }'\n    + '.tnf-qbm-stars-bg { color: #e0e6ec; }'\n    + '.tnf-qbm-stars-fg { position: absolute; left: 0; top: 0; overflow: hidden; white-space: nowrap; color: #ffc107; }'\n    + '.tnf-qbm-stars-num { font-weight: 700; color: #1e2d7d; }'\n    + '.tnf-qbm-stars-count { color: #95a0aa; font-size: 11.5px; }'\n    // 2026-05-19 \u2014 cart-status block + View-cart link CSS removed (was breaking\n    // subsequent Move-to-cart taps on the wishlist page when the View-cart link\n    // was clicked from inside the QB modal).\n    // 2026-05-12 \u2014 On mobile the QB modal used to cover the header. Push the modal\n    // down so the header (and the flashing cart icon) stays visible while the modal\n    // is open. Estimated header height ~58px Warehouse default, +30px for the Onward\n    // strip when present \u2014 give it 90px breathing room. Body scrolls inside the modal.\n    + '@media (max-width: 767px) {'\n    + '  #variant-quick-buy-modal-overlay { top: 90px !important; height: calc(100% - 90px) !important; }'\n    + '  #variant-quick-buy-modal { max-height: calc(100vh - 90px) !important; }'\n    + '  #variant-quick-buy-modal-overlay .modal-overlay__inner { padding-top: 0 !important; }'\n    + '}';\n  var style = document.createElement('style');\n  style.id = 'tnf-qbm-shipping-style';\n  style.textContent = CSS;\n  document.head.appendChild(style);\n\n  function tickQbm() {\n    try {\n      var fmt = new Intl.DateTimeFormat('en-CA', { timeZone: 'America/Toronto', hour: '2-digit', minute: '2-digit', hour12: false, weekday: 'short' });\n      var parts = fmt.formatToParts(new Date());\n      var hour = parseInt(parts.find(function (p) { return p.type === 'hour'; }).value, 10);\n      var min = parseInt(parts.find(function (p) { return p.type === 'minute'; }).value, 10);\n      var weekday = parts.find(function (p) { return p.type === 'weekday'; }).value;\n      var isWeekend = (weekday === 'Sat' || weekday === 'Sun');\n      var msg, after = false;\n      if (isWeekend || hour >= 16) {\n        msg = '\uD83D\uDD25 Popular \u2014 order now, ships next business day';\n        after = true;\n      } else {\n        var minsLeft = (16 - hour) * 60 - min;\n        var hLeft = Math.floor(minsLeft / 60);\n        var mLeft = minsLeft % 60;\n        var stamp = hLeft > 0 ? (hLeft + 'h ' + mLeft + 'm') : (mLeft + 'm');\n        msg = '\u26A1 Order in ' + stamp + ' for same-day shipping';\n      }\n      document.querySelectorAll('.tnf-qbm-countdown').forEach(function (el) {\n        el.textContent = msg;\n        el.classList.toggle('is-after-cutoff', after);\n      });\n    } catch (e) {}\n  }\n\n  // Track which product card was clicked so we can copy its rating into the modal\n  var _lastClickedCard = null;\n  document.addEventListener('click', function (e) {\n    var card = e.target.closest('.product-item[data-tnf-rating]');\n    if (card) _lastClickedCard = card;\n  }, true);\n\n  function ensureQbmStars() {\n    var modalBody = document.getElementById('variant-quick-buy-modal-body');\n    if (!modalBody) return;\n    if (modalBody.querySelector('.tnf-qbm-stars')) return;\n    var rating = _lastClickedCard && _lastClickedCard.getAttribute('data-tnf-rating');\n    var count = _lastClickedCard && _lastClickedCard.getAttribute('data-tnf-rating-count');\n    if (!rating || !count) return;\n    var avg = parseFloat(rating);\n    if (isNaN(avg) || avg <= 0) return;\n    var pct = avg * 20;\n    var titleEl = modalBody.querySelector('.vqb-product-title') || document.getElementById('variant-quick-buy-modal-title');\n    var stars = document.createElement('div');\n    stars.className = 'tnf-qbm-stars';\n    stars.innerHTML =\n      '<span class=\"tnf-qbm-stars-row\" aria-hidden=\"true\">' +\n        '<span class=\"tnf-qbm-stars-bg\">\u2605\u2605\u2605\u2605\u2605</span>' +\n        '<span class=\"tnf-qbm-stars-fg\" style=\"width:' + pct + '%\">\u2605\u2605\u2605\u2605\u2605</span>' +\n      '</span>' +\n      '<span class=\"tnf-qbm-stars-num\">' + avg.toFixed(1) + '</span>' +\n      '<span class=\"tnf-qbm-stars-count\">(' + count + ' review' + (count == 1 ? '' : 's') + ')</span>';\n    if (titleEl && titleEl.parentNode) {\n      // Insert right after the title\n      titleEl.parentNode.insertBefore(stars, titleEl.nextSibling);\n    } else {\n      modalBody.insertBefore(stars, modalBody.firstChild);\n    }\n  }\n\n  function ensureQbmShipping() {\n    var modalBody = document.getElementById('variant-quick-buy-modal-body');\n    if (!modalBody) return;\n    // Inject stars right after the product title (idempotent)\n    ensureQbmStars();\n    if (modalBody.querySelector('.tnf-qbm-countdown')) return;\n    var line = document.createElement('div');\n    line.className = 'tnf-qbm-countdown';\n    line.textContent = '\u26A1 Same-day shipping by 4 PM EST';\n\n    // Append as the LAST DIRECT CHILD of modal-body so position: sticky pins it\n    // to the bottom of the modal-body's scroll container (not just inside the\n    // form-buttons row). Inserting deeper would constrain sticky to that\n    // ancestor's bounding box and the countdown would scroll off with the form.\n    modalBody.appendChild(line);\n    tickQbm();\n  }\n\n  // 2026-05-19 v2 \u2014 Cart-status injection (View cart link + per-product cart\n  // breakdown) REMOVED. Was breaking subsequent Move-to-cart taps on the\n  // wishlist page after the View-cart link was clicked, because the synthetic\n  // header-cart click + the force-stay-open MutationObserver lock left the QB\n  // modal in a stale state. QB modal now passes the form through to the\n  // theme's native handler \u2014 cart drawer opens via tnf-cart-no-auto-open.js's\n  // whitelisted /cart/add event.\n\n  function watchQbmOpen() {\n    var overlay = document.getElementById('variant-quick-buy-modal-overlay');\n    if (!overlay) return false;\n    function check() {\n      if (overlay.classList.contains('is-open')) {\n        setTimeout(function () { ensureQbmShipping(); }, 30);\n      }\n    }\n    check();\n    new MutationObserver(check).observe(overlay, { attributes: true, attributeFilter: ['class'] });\n    var body = document.getElementById('variant-quick-buy-modal-body');\n    if (body) {\n      new MutationObserver(function () {\n        if (overlay.classList.contains('is-open')) { ensureQbmShipping(); }\n      }).observe(body, { childList: true });\n    }\n    return true;\n  }\n\n  var attempts = 0;\n  var iv = setInterval(function () {\n    if (watchQbmOpen()) clearInterval(iv);\n    if (++attempts > 60) clearInterval(iv);\n  }, 500);\n\n  setInterval(tickQbm, 30000);\n})();\n"],
  "mappings": "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",
  "names": []
}
