{
  "version": 3,
  "sources": ["/cdn/shop/t/4/assets/search.js?mvary=mobile"],
  "sourcesContent": ["class PredictiveSearch extends HTMLElement {\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    this.header = document.querySelector('header');\n    this.toggleNavigationButton = document.querySelector('.toggle-navigation-button');\n\n    this.boundHandleClickOutside = this.handleClickOutside.bind(this);\n    document.addEventListener('click', this.boundHandleClickOutside);\n    this.searchProductTypes?.addEventListener('change', this.handleProductTypeChange.bind(this));\n\n    this.isHeaderSearch = this.closest('header') !== null;\n\n    document.addEventListener('menu-drawer:open', () => {\n      this.classList.remove('predictive-search-open');\n      document.body.classList.remove('search-open');\n    });\n\n    this.states = {\n      OPEN: 'predictive-search-open',\n      LOADING: 'btn--loading',\n      SEARCH_OPEN: 'search-open',\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  get searchProductTypes() {\n    return this.querySelector('#SearchProductTypes');\n  }\n\n  onFocus(event) {\n    document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n    document.documentElement.style.setProperty(\n      '--header-bottom-position',\n      `${parseInt(this.header.getBoundingClientRect().bottom)}px`\n    );\n    if (this.isHeaderSearch && !this.searchRecommendationEmpty) {\n      document.body.classList.add('search-open');\n      this.toggleNavButtonVisibility(false);\n    }\n\n    if (!this.searchRecommendationEmpty) {\n      this.searchContent.classList.remove('hidden');\n    }\n    this.classList.add('predictive-search-open');\n    if (this.getQuery().length === 0) {\n      if (this.searchRecommendationEmpty) {\n        this.searchContent.classList.add('hidden');\n      }\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\n  clear(event = null) {\n    event?.preventDefault();\n    this.input.value = '';\n    this.input.focus();\n    this.removeAttribute('results');\n    this.toggleSearchState(false);\n  }\n\n  handleProductTypeChange(evt) {\n    const query = this.getQuery();\n    if (query.length > 0) {\n      const url = this.setupURL().toString();\n      this.renderSection(url);\n    }\n  }\n\n  setupURL() {\n    const url = new URL(`${window.shopUrl}${FoxTheme.routes.predictive_search_url}`);\n    let search_term = this.getQuery();\n    if (this.searchProductTypes && this.searchProductTypes.value != '') {\n      search_term = `product_type:${this.searchProductTypes.value} AND ${encodeURIComponent(search_term)}`;\n    }\n    return (\n      url.searchParams.set('q', search_term),\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    this.setLoadingState(true);\n\n    fetch(url)\n      .then((response) => {\n        if (!response.ok) throw new Error('Network response was not ok');\n        return response.text();\n      })\n      .then((responseText) => {\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(() => this.setLoadingState(false));\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\n        if (this.isHeaderSearch && !document.body.classList.contains('search-open')) {\n          document.body.classList.add('search-open');\n          this.toggleNavButtonVisibility(true);\n          this.classList.add('predictive-search-open');\n        } else {\n          this.classList.add('predictive-search-open');\n        }\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    const target = event.target;\n    const shouldClose = this.isHeaderSearch\n      ? !this.contains(target) &&\n        ((target.classList.contains('fixed-overlay') && target.closest('.header-section')) ||\n          target.classList.contains('header__search-close'))\n      : !this.contains(target);\n\n    if (shouldClose) {\n      setTimeout(() => this.toggleSearchState(false));\n    }\n  }\n\n  toggleSearchState(isOpen) {\n    this.classList.toggle(this.states.OPEN, isOpen);\n    if (this.isHeaderSearch) {\n      document.body.classList.toggle(this.states.SEARCH_OPEN, isOpen);\n      this.toggleNavButtonVisibility(!isOpen);\n    }\n    if (!isOpen && this.searchRecommendationEmpty) {\n      this.searchContent?.classList.add('hidden');\n    }\n  }\n\n  toggleNavButtonVisibility(isOpen) {\n    this.toggleNavigationButton && this.toggleNavigationButton.classList.toggle('is-show', isOpen);\n  }\n\n  setLoadingState(isLoading) {\n    if (isLoading) {\n      this.setAttribute('loading', 'true');\n      this.resetButton.classList.add(this.states.LOADING);\n    } else {\n      this.removeAttribute('loading');\n      this.resetButton.classList.remove(this.states.LOADING);\n      this.setAttribute('results', 'true');\n    }\n  }\n}\ncustomElements.define('predictive-search', PredictiveSearch);\n"],
  "mappings": "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",
  "names": []
}
