{
  "version": 3,
  "sources": ["/cdn/shop/t/69/assets/tnf-soldout-push.js?cb=20260529b"],
  "sourcesContent": ["/*!\n * tnf-soldout-push.js \u2014 Sold-out cards never appear in product widgets.\n *\n * Diana 2026-05-29 HARD RULE: \"of course sold out always at bottom\"\n *   - All non-collection pages: HIDE sold-out cards entirely. Limited-slot widgets\n *     (homepage carousels, PDP Pairs Well With, cart drawer recs) shouldn't waste\n *     a slot on something nobody can buy.\n *   - Collection + search pages: owned by `tnf-personalize.js` (move-to-bottom,\n *     not hide \u2014 long scrollable list, user eventually expects to see everything).\n *\n * Universal detection: finds ANY container with 2+ `.product-item` children\n * (not hard-coded to specific container class names \u2014 catches Pairs Well With's\n * `.complementary-product-list`, future Shopify app widgets, etc).\n *\n * RV + Discover Something New filter sold-out at source \u2014 this is a belt-and-\n * suspenders safety net that catches whatever sneaks through.\n */\n(function () {\n  'use strict';\n  if (window.__tnfSoldoutPushLoaded) return;\n  window.__tnfSoldoutPushLoaded = true;\n\n  var p = location.pathname;\n  if (/^\\/collections\\//.test(p)) return;\n  if (/^\\/search(\\/|$|\\?)/.test(p)) return;\n  if (/^\\/pages\\/anniversary/.test(p)) return; // 2026-06-18 anniversary launch shows sold-out cans\n\n  function isSoldOut(card) {\n    var inv = card.querySelector('.product-item__inventory');\n    if (inv) {\n      var txt = (inv.textContent || '').trim().toLowerCase();\n      if (txt.indexOf('sold out') === 0 || txt === 'sold out') return true;\n    }\n    var btn = card.querySelector('.product-item__action-button');\n    if (btn && (btn.textContent || '').trim().toLowerCase() === 'sold out') return true;\n    return false;\n  }\n\n  function isLocked(card) {\n    return card.getAttribute('data-locked') === '1';\n  }\n\n  function processContainer(parent, cards) {\n    try {\n      if (!parent || cards.length < 2) return;\n      var soldOut = [];\n      var inStockCount = 0;\n      cards.forEach(function (c) {\n        if (isLocked(c) || c.getAttribute('data-tnf-soldout-hidden') === '1') { inStockCount++; return; }\n        if (isSoldOut(c)) soldOut.push(c);\n        else inStockCount++;\n      });\n      if (!soldOut.length) return;\n      // Safety: don't hide if widget would be empty / near-empty.\n      if (inStockCount < 2) return;\n      soldOut.forEach(function (c) {\n        c.style.display = 'none';\n        c.setAttribute('data-tnf-soldout-hidden', '1');\n      });\n    } catch (e) {}\n  }\n\n  function runAll() {\n    try {\n      // Find ALL .product-item parents dynamically \u2014 catches PWW, RV, app widgets, etc.\n      var allCards = document.querySelectorAll('.product-item:not([data-tnf-soldout-hidden])');\n      if (!allCards.length) return;\n      var groups = new Map();\n      for (var i = 0; i < allCards.length; i++) {\n        var card = allCards[i];\n        var parent = card.parentNode;\n        if (!parent) continue;\n        if (!groups.has(parent)) groups.set(parent, []);\n        groups.get(parent).push(card);\n      }\n      groups.forEach(function (cards, parent) { processContainer(parent, cards); });\n    } catch (e) {}\n  }\n\n  function watchLateInsertions() {\n    try {\n      if (!('MutationObserver' in window)) return;\n      var debounce;\n      var mo = new MutationObserver(function (mutations) {\n        var has = false;\n        for (var mi = 0; mi < mutations.length; mi++) {\n          var m = mutations[mi];\n          if (!m.addedNodes.length) continue;\n          for (var i = 0; i < m.addedNodes.length; i++) {\n            var n = m.addedNodes[i];\n            if (n.nodeType !== 1) continue;\n            if (n.classList && n.classList.contains('product-item') && !n.hasAttribute('data-tnf-soldout-hidden')) { has = true; break; }\n            if (n.querySelector && n.querySelector('.product-item:not([data-tnf-soldout-hidden])')) { has = true; break; }\n          }\n          if (has) break;\n        }\n        if (!has) return;\n        clearTimeout(debounce);\n        debounce = setTimeout(runAll, 150);\n      });\n      mo.observe(document.body, { childList: true, subtree: true });\n    } catch (e) {}\n  }\n\n  function boot() {\n    runAll();\n    watchLateInsertions();\n    // Catch late-loading widgets (PWW AJAX, Gigit, app embeds, recommendations).\n    setTimeout(runAll, 1500);\n    setTimeout(runAll, 3500);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["parent"]
}
