{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/search.js?dimtk=msgud"],
  "sourcesContent": ["class PredictiveSearch extends HTMLFormElement {\n  constructor() {\n    super();\n    this.cachedMap = new Map();\n    this.focusElement = this.input;\n    this.resetButton.addEventListener('click', this.clear.bind(this));\n    this.input.addEventListener('input', FoxTheme.utils.debounce(this.onChange.bind(this), 300));\n    this.input.addEventListener('focus', this.onFocus.bind(this));\n    this.searchContent = this.querySelector('.search__content');\n    this.searchRecommendationEmpty = this.dataset.searchRecommendationEmpty === 'true';\n\n    const isTemplateSearch = this.closest('.template-search');\n    if (isTemplateSearch) {\n      document.addEventListener('click', this.handleClickOutside.bind(this));\n    }\n  }\n\n  get input() {\n    return this.querySelector('input[type=\"search\"]');\n  }\n  get resetButton() {\n    return this.querySelector('button[type=\"reset\"]');\n  }\n\n  onFocus(event) {\n    if (this.closest('.template-search')) {\n      document.body.classList.add('predictive-search-open');\n      if (this.getQuery().length === 0) {\n        return;\n      }\n      const url = this.setupURL().toString();\n      this.renderSection(url, event);\n    }\n  }\n  getQuery() {\n    return this.input.value.trim();\n  }\n  clear(event = null) {\n    event && event.preventDefault();\n    if (this.searchRecommendationEmpty && this.searchContent) {\n      this.searchContent.classList.add('hidden');\n    }\n    this.input.value = '';\n    this.input.focus();\n    this.removeAttribute('results');\n  }\n\n  setupURL() {\n    const url = new URL(`${window.shopUrl}${FoxTheme.routes.predictive_search_url}`);\n    return (\n      url.searchParams.set('q', this.getQuery()),\n      url.searchParams.set('resources[limit]', this.dataset.resultsLimit || 3),\n      url.searchParams.set('resources[limit_scope]', 'each'),\n      url.searchParams.set('section_id', FoxTheme.utils.getSectionId(this)),\n      url\n    );\n  }\n\n  onChange() {\n    if (this.getQuery().length === 0) {\n      this.clear();\n      return;\n    }\n    const url = this.setupURL().toString();\n    this.renderSection(url);\n  }\n\n  renderSection(url) {\n    this.cachedMap.has(url) ? this.renderSectionFromCache(url) : this.renderSectionFromFetch(url);\n  }\n\n  renderSectionFromCache(url) {\n    const responseText = this.cachedMap.get(url);\n    this.renderSearchResults(responseText), this.setAttribute('results', '');\n  }\n\n  renderSectionFromFetch(url) {\n    // Indicate that loading has started\n    this.setAttribute('loading', 'true');\n    this.resetButton.classList.add('btn--loading');\n\n    fetch(url)\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error('Network response was not ok');\n        }\n        return response.text();\n      })\n      .then((responseText) => {\n        // Process and cache the fetched data\n        this.renderSearchResults(responseText);\n        this.cachedMap.set(url, responseText);\n      })\n      .catch((error) => {\n        console.error('Error fetching data: ', error);\n        this.setAttribute('error', 'Failed to load data');\n      })\n      .finally(() => {\n        // Remove the loading attribute in both success and error cases\n        this.removeAttribute('loading');\n        this.resetButton.classList.remove('btn--loading');\n        this.setAttribute('results', 'true');\n      });\n  }\n  renderSearchResults(responseText) {\n    const id = 'PredictiveSearchResults-' + FoxTheme.utils.getSectionId(this);\n    const targetElement = document.getElementById(id);\n\n    if (targetElement) {\n      const parser = new DOMParser();\n      const parsedDoc = parser.parseFromString(responseText, 'text/html');\n      const contentElement = parsedDoc.getElementById(id);\n\n      if (contentElement) {\n        this.searchContent?.classList.remove('hidden');\n        targetElement.innerHTML = contentElement.innerHTML;\n      } else {\n        console.error(`Element with id '${id}' not found in the parsed response.`);\n      }\n    } else {\n      console.error(`Element with id '${id}' not found in the document.`);\n    }\n  }\n\n  handleClickOutside(event) {\n    if (!this.contains(event.target)) {\n      setTimeout(() => {\n        document.body.classList.remove('predictive-search-open');\n      });\n    }\n  }\n}\ncustomElements.define('predictive-search', PredictiveSearch, { extends: 'form' });\n\nclass SearchDrawer extends DrawerComponent {\n  constructor() {\n    super();\n  }\n  get requiresBodyAppended() {\n    return false;\n  }\n  get input() {\n    return this.querySelector('input[type=\"search\"]');\n  }\n  get focusElement() {\n    return this.querySelector('input[type=\"search\"]');\n  }\n}\ncustomElements.define('search-drawer', SearchDrawer);\n"],
  "mappings": "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",
  "names": []
}
