{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/ipax-price-buckets.js?ipax=2"],
  "sourcesContent": ["/**\r\n * Filtro de pre\u00E7o por faixas \u2014 contagem e sele\u00E7\u00E3o.\r\n */\r\n(function () {\r\n  const FILTER_EVENT = 'filter:update';\r\n  const INIT_ATTR = 'data-ipax-buckets-init';\r\n\r\n  /**\r\n   * @param {string} value\r\n   * @returns {number}\r\n   */\r\n  function parseMoneyToCents(value) {\r\n    if (!value) return 0;\r\n    const str = String(value).trim();\r\n    const normalized = str.includes(',')\r\n      ? str.replace(/\\./g, '').replace(',', '.')\r\n      : str;\r\n    const amount = Number.parseFloat(normalized);\r\n    return Number.isFinite(amount) ? Math.round(amount * 100) : 0;\r\n  }\r\n\r\n  /**\r\n   * @param {number} cents\r\n   * @returns {boolean}\r\n   */\r\n  function priceInBucket(cents, minCents, maxCents) {\r\n    return cents >= minCents && cents <= maxCents;\r\n  }\r\n\r\n  /**\r\n   * @param {string} handle\r\n   * @returns {Promise<Array<{ price: number }>>}\r\n   */\r\n  async function fetchCollectionPrices(handle) {\r\n    const prices = [];\r\n    let page = 1;\r\n\r\n    while (page <= 40) {\r\n      const response = await fetch(`/collections/${handle}/products.json?limit=250&page=${page}`, {\r\n        credentials: 'same-origin',\r\n      });\r\n      if (!response.ok) break;\r\n\r\n      const data = await response.json();\r\n      if (!data.products?.length) break;\r\n\r\n      for (const product of data.products) {\r\n        const variant = product.variants?.[0];\r\n        if (!variant?.price) continue;\r\n        prices.push({ price: parseMoneyToCents(variant.price) });\r\n      }\r\n\r\n      if (data.products.length < 250) break;\r\n      page += 1;\r\n    }\r\n\r\n    return prices;\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLElement} facet\r\n   */\r\n  async function updateBucketCounts(facet) {\r\n    const handle = facet.dataset.collectionHandle;\r\n    if (!handle) return;\r\n\r\n    const buckets = facet.querySelectorAll('[data-ipax-price-bucket]');\r\n    if (!buckets.length) return;\r\n\r\n    try {\r\n      const prices = await fetchCollectionPrices(handle);\r\n\r\n      buckets.forEach((bucket) => {\r\n        if (!(bucket instanceof HTMLInputElement)) return;\r\n\r\n        const minCents = Number(bucket.dataset.minCents || 0);\r\n        const maxCents = Number(bucket.dataset.maxCents || 0);\r\n        const count = prices.filter((item) => priceInBucket(item.price, minCents, maxCents)).length;\r\n        const countNode = bucket.closest('.checkbox')?.querySelector('[data-ipax-bucket-count]');\r\n\r\n        if (countNode) {\r\n          countNode.textContent = String(count);\r\n        }\r\n      });\r\n    } catch (error) {\r\n      console.error('[ipax-price-buckets]', error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLInputElement} minInput\r\n   * @param {HTMLInputElement} maxInput\r\n   * @param {HTMLInputElement} bucket\r\n   * @returns {boolean}\r\n   */\r\n  function isBucketActive(minInput, maxInput, bucket) {\r\n    const minDisplay = bucket.dataset.minDisplay || '';\r\n    const maxDisplay = bucket.dataset.maxDisplay || '';\r\n    const currentMin = minInput.value.trim();\r\n    const currentMax = maxInput.value.trim();\r\n\r\n    if (!currentMin && !currentMax) return false;\r\n\r\n    const minMatches = minDisplay ? currentMin === minDisplay : currentMin === '' || currentMin === '0' || currentMin === '0,00';\r\n    const maxMatches = maxDisplay ? currentMax === maxDisplay : !currentMax;\r\n\r\n    return minMatches && maxMatches;\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLElement} facet\r\n   */\r\n  function syncActiveBucket(facet) {\r\n    const minInput = facet.querySelector('[ref=\"minInput\"]');\r\n    const maxInput = facet.querySelector('[ref=\"maxInput\"]');\r\n\r\n    if (!(minInput instanceof HTMLInputElement) || !(maxInput instanceof HTMLInputElement)) return;\r\n\r\n    facet.querySelectorAll('[data-ipax-price-bucket]').forEach((bucket) => {\r\n      if (!(bucket instanceof HTMLInputElement)) return;\r\n      bucket.checked = isBucketActive(minInput, maxInput, bucket);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLElement} facet\r\n   * @param {HTMLInputElement} bucket\r\n   */\r\n  function applyBucket(facet, bucket) {\r\n    const minInput = facet.querySelector('[ref=\"minInput\"]');\r\n    const maxInput = facet.querySelector('[ref=\"maxInput\"]');\r\n\r\n    if (!(minInput instanceof HTMLInputElement) || !(maxInput instanceof HTMLInputElement)) return;\r\n\r\n    if (bucket.checked) {\r\n      facet.querySelectorAll('[data-ipax-price-bucket]').forEach((other) => {\r\n        if (other instanceof HTMLInputElement && other !== bucket) {\r\n          other.checked = false;\r\n        }\r\n      });\r\n      minInput.value = bucket.dataset.minDisplay || '';\r\n      maxInput.value = bucket.dataset.maxDisplay || '';\r\n    } else {\r\n      minInput.value = '';\r\n      maxInput.value = '';\r\n    }\r\n\r\n    if (typeof facet.updatePriceFilterAndResults === 'function') {\r\n      facet.updatePriceFilterAndResults();\r\n    }\r\n\r\n    syncActiveBucket(facet);\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLElement} facet\r\n   */\r\n  function bindFacet(facet) {\r\n    if (facet.hasAttribute(INIT_ATTR)) return;\r\n    facet.setAttribute(INIT_ATTR, 'true');\r\n\r\n    facet.querySelectorAll('[data-ipax-price-bucket]').forEach((bucket) => {\r\n      if (!(bucket instanceof HTMLInputElement)) return;\r\n\r\n      bucket.addEventListener('change', () => {\r\n        applyBucket(facet, bucket);\r\n      });\r\n    });\r\n\r\n    syncActiveBucket(facet);\r\n    updateBucketCounts(facet);\r\n  }\r\n\r\n  function initAll() {\r\n    document.querySelectorAll('price-facet-component.ipax-price-buckets').forEach((facet) => {\r\n      if (facet instanceof HTMLElement) {\r\n        bindFacet(facet);\r\n      }\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', initAll);\r\n  } else {\r\n    initAll();\r\n  }\r\n\r\n  document.addEventListener(FILTER_EVENT, () => {\r\n    window.setTimeout(() => {\r\n      document.querySelectorAll('price-facet-component.ipax-price-buckets').forEach((facet) => {\r\n        if (!(facet instanceof HTMLElement)) return;\r\n        facet.removeAttribute(INIT_ATTR);\r\n        bindFacet(facet);\r\n      });\r\n    }, 350);\r\n  });\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
