{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/search-recommendations.js?cb=20260509a"],
  "sourcesContent": ["/**\r\n * Search Recommendations \u2014 Initial state when search modal opens\r\n * Data sources:\r\n * - Recently viewed: localStorage (trdst_search_recent_products)\r\n * - Popular search terms: Shopify metafields (server-rendered) or localStorage fallback\r\n * - Popular products: Shopify metafields (server-rendered) or Shopify best-selling API fallback\r\n */\r\n(function () {\r\n  'use strict';\r\n\r\n  var RECENT_KEY = 'trdst_search_recent_products';\r\n  var SEARCH_TERMS_KEY = 'trdst_search_terms';\r\n  var POPULAR_CACHE_KEY = 'trdst_popular_products_v1';\r\n  var POPULAR_CACHE_TTL = 30 * 60 * 1000;\r\n\r\n  var DEFAULT_KEYWORDS = ['sofa', 'dining table', 'chair', 'lighting', 'mirror', 'sideboard', 'shelf', 'armchair'];\r\n\r\n  function formatPrice(cents) {\r\n    var num = typeof cents === 'string' ? parseFloat(cents) : cents;\r\n    if (isNaN(num) || num === 0) return '';\r\n    var usd = num / 100;\r\n    return '$' + new Intl.NumberFormat('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(Math.round(usd));\r\n  }\r\n\r\n  function formatPriceFromAPI(priceStr) {\r\n    var num = typeof priceStr === 'string' ? parseFloat(priceStr) : priceStr;\r\n    if (isNaN(num) || num === 0) return '';\r\n    return '$' + new Intl.NumberFormat('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(Math.round(num));\r\n  }\r\n\r\n  function escapeHTML(str) {\r\n    var div = document.createElement('div');\r\n    div.textContent = str || '';\r\n    return div.innerHTML;\r\n  }\r\n\r\n  function productCardHTML(p, priceFormatter) {\r\n    var url = p.url || '/products/' + p.handle;\r\n    var imgSrc = p.image || '';\r\n    var vendor = escapeHTML(p.vendor);\r\n    var title = escapeHTML(p.title);\r\n    var price = p.price ? priceFormatter(p.price) : '';\r\n\r\n    return '<a href=\"' + url + '\" class=\"search-reco__product link link--text\">' +\r\n      '<div class=\"search-reco__product-image-wrap\">' +\r\n        (imgSrc ? '<img class=\"search-reco__product-image\" src=\"' + imgSrc + '\" alt=\"' + title + '\" loading=\"lazy\">' : '') +\r\n      '</div>' +\r\n      (vendor ? '<span class=\"search-reco__product-vendor\">' + vendor + '</span>' : '') +\r\n      '<p class=\"search-reco__product-title\">' + title + '</p>' +\r\n      (price ? '<span class=\"search-reco__product-price\">' + price + '</span>' : '') +\r\n    '</a>';\r\n  }\r\n\r\n  // ====== Recently Viewed ======\r\n  function renderRecentlyViewed() {\r\n    var section = document.getElementById('search-reco-recent');\r\n    var list = document.getElementById('search-reco-recent-list');\r\n    if (!section || !list) return;\r\n\r\n    try {\r\n      var data = localStorage.getItem(RECENT_KEY);\r\n      var products = data ? JSON.parse(data) : [];\r\n\r\n      if (!products.length) {\r\n        section.style.display = 'none';\r\n        return;\r\n      }\r\n\r\n      list.innerHTML = products.slice(0, 4).map(function(p) {\r\n        return productCardHTML(p, formatPrice);\r\n      }).join('');\r\n      section.style.display = 'block';\r\n    } catch (e) {\r\n      section.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // ====== Search Term Tracking ======\r\n  function trackSearchTerm(term) {\r\n    if (!term || term.length < 2) return;\r\n    try {\r\n      var data = JSON.parse(localStorage.getItem(SEARCH_TERMS_KEY) || '{}');\r\n      var key = term.toLowerCase().trim();\r\n      if (!data[key]) data[key] = { term: term, count: 0 };\r\n      data[key].count++;\r\n      data[key].lastSearched = Date.now();\r\n      localStorage.setItem(SEARCH_TERMS_KEY, JSON.stringify(data));\r\n    } catch (e) { /* ignore */ }\r\n  }\r\n\r\n  // ====== Keyword Rendering (fallback if no metafield data) ======\r\n  function renderKeywordsFallback() {\r\n    var container = document.getElementById('search-reco-keywords');\r\n    if (!container || container.children.length > 0) return; // Already rendered by Liquid\r\n\r\n    var terms = getLocalSearchTerms();\r\n\r\n    container.innerHTML = terms.map(function(term) {\r\n      return '<a href=\"/search?q=' + encodeURIComponent(term) + '\" class=\"search-reco__keyword-pill link link--text\" data-search-term=\"' + escapeHTML(term) + '\">' +\r\n        '<span class=\"search-reco__keyword-icon\">' +\r\n          '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8.5\" cy=\"8.5\" r=\"5\"/><line x1=\"12\" y1=\"12\" x2=\"17\" y2=\"17\"/></svg>' +\r\n        '</span>' +\r\n        escapeHTML(term) +\r\n      '</a>';\r\n    }).join('');\r\n  }\r\n\r\n  function getLocalSearchTerms() {\r\n    try {\r\n      var data = JSON.parse(localStorage.getItem(SEARCH_TERMS_KEY) || '{}');\r\n      var terms = Object.values(data);\r\n      terms.sort(function(a, b) { return b.count - a.count; });\r\n      var tracked = terms.filter(function(t) { return t.count >= 1; }).slice(0, 10);\r\n      if (tracked.length >= 3) {\r\n        return tracked.map(function(t) { return t.term; });\r\n      }\r\n    } catch (e) { /* ignore */ }\r\n    return DEFAULT_KEYWORDS;\r\n  }\r\n\r\n  // ====== Keyword Pill Click Handlers ======\r\n  function setupKeywordClicks() {\r\n    var pills = document.querySelectorAll('.search-reco__keyword-pill');\r\n    pills.forEach(function (pill) {\r\n      pill.addEventListener('click', function (e) {\r\n        e.preventDefault();\r\n        var term = pill.getAttribute('data-search-term');\r\n        if (!term) return;\r\n\r\n        trackSearchTerm(term);\r\n\r\n        var searchEl = pill.closest('predictive-search');\r\n        var input = searchEl\r\n          ? searchEl.querySelector('input[type=\"search\"]')\r\n          : document.querySelector('.search-modal input[type=\"search\"]');\r\n\r\n        if (input) {\r\n          input.value = term;\r\n          input.dispatchEvent(new Event('input', { bubbles: true }));\r\n          input.focus();\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  // ====== Popular Products Fallback ======\r\n  function fetchPopularProductsFallback() {\r\n    var list = document.getElementById('search-reco-popular-list');\r\n    if (!list || list.querySelector('.search-reco__product')) return; // Already rendered by Liquid\r\n\r\n    try {\r\n      var cached = sessionStorage.getItem(POPULAR_CACHE_KEY);\r\n      if (cached) {\r\n        var parsed = JSON.parse(cached);\r\n        if (Date.now() - parsed.ts < POPULAR_CACHE_TTL && parsed.products.length) {\r\n          list.innerHTML = parsed.products.slice(0, 8).map(function(p) {\r\n            return productCardHTML(p, formatPriceFromAPI);\r\n          }).join('');\r\n          return;\r\n        }\r\n      }\r\n    } catch (e) { /* ignore */ }\r\n\r\n    fetch('/collections/all/products.json?sort_by=best-selling&limit=8')\r\n      .then(function (resp) {\r\n        if (!resp.ok) throw new Error(resp.status);\r\n        return resp.json();\r\n      })\r\n      .then(function (data) {\r\n        var products = (data.products || []).map(function (p) {\r\n          return {\r\n            title: p.title,\r\n            handle: p.handle,\r\n            vendor: p.vendor,\r\n            url: '/products/' + p.handle,\r\n            image: p.images && p.images[0] ? p.images[0].src : '',\r\n            price: p.variants && p.variants[0] ? p.variants[0].price : ''\r\n          };\r\n        });\r\n        if (products.length) {\r\n          list.innerHTML = products.slice(0, 8).map(function(p) {\r\n            return productCardHTML(p, formatPriceFromAPI);\r\n          }).join('');\r\n          try {\r\n            sessionStorage.setItem(POPULAR_CACHE_KEY, JSON.stringify({ products: products, ts: Date.now() }));\r\n          } catch (e) { /* ignore */ }\r\n        }\r\n      })\r\n      .catch(function () {\r\n        list.innerHTML = '';\r\n      });\r\n  }\r\n\r\n  // ====== Search form submit tracking ======\r\n  function setupSearchTracking() {\r\n    document.addEventListener('submit', function(e) {\r\n      var form = e.target;\r\n      if (form.getAttribute('role') === 'search' || (form.action && form.action.indexOf('/search') !== -1)) {\r\n        var input = form.querySelector('input[name=\"q\"]');\r\n        if (input && input.value.trim()) {\r\n          trackSearchTerm(input.value.trim());\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // ====== Public API ======\r\n  var popularLoaded = false;\r\n\r\n  window.SearchRecommendations = {\r\n    show: function () {\r\n      var el = document.getElementById('search-recommendations');\r\n      if (!el) return;\r\n\r\n      el.style.display = 'block';\r\n      renderRecentlyViewed();\r\n      renderKeywordsFallback();\r\n      setupKeywordClicks();\r\n\r\n      if (!popularLoaded) {\r\n        popularLoaded = true;\r\n        fetchPopularProductsFallback();\r\n      }\r\n    },\r\n\r\n    hide: function () {\r\n      var el = document.getElementById('search-recommendations');\r\n      if (el) el.style.display = 'none';\r\n    },\r\n\r\n    isVisible: function () {\r\n      var el = document.getElementById('search-recommendations');\r\n      return el && el.style.display !== 'none';\r\n    },\r\n\r\n    trackSearch: trackSearchTerm\r\n  };\r\n\r\n  setupSearchTracking();\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
