{
  "version": 3,
  "sources": ["/cdn/shop/t/1/assets/ipax-customer-reviews.js?ipax=4"],
  "sourcesContent": ["(() => {\r\r\n  const VERIFIED_SVG =\r\r\n    '<svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\" focusable=\"false\">' +\r\r\n    '<circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#65c200\"/>' +\r\r\n    '<path d=\"M4.6 8.2 7 10.5l4.4-5\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\r\r\n    '</svg>';\r\r\n\r\r\n  function escapeHtml(s) {\r\r\n    return String(s || '')\r\r\n      .replace(/&/g, '&amp;')\r\r\n      .replace(/</g, '&lt;')\r\r\n      .replace(/>/g, '&gt;')\r\r\n      .replace(/\"/g, '&quot;');\r\r\n  }\r\r\n\r\r\n  function starsHtml(n) {\r\r\n    const r = Math.min(5, Math.max(1, Number(n) || 5));\r\r\n    let html = '';\r\r\n    for (let i = 1; i <= 5; i += 1) {\r\r\n      html += '<span class=\"' + (i <= r ? 'is-on' : '') + '\">\u2605</span>';\r\r\n    }\r\r\n    return html;\r\r\n  }\r\r\n\r\r\n  function cardHtml(item) {\r\r\n    const author = item.name || item.author || 'Cliente';\r\r\n    const when = item.when || '';\r\r\n    const rating = item.rating != null ? item.rating : item.stars;\r\r\n    const text = item.text || '';\r\r\n    const initial = author.trim().charAt(0).toUpperCase() || 'C';\r\r\n\r\r\n    return (\r\r\n      '<article class=\"ipax-customer-reviews__card\" data-ipax-review-card>' +\r\r\n      '<div class=\"ipax-customer-reviews__card-top\">' +\r\r\n      '<div class=\"ipax-customer-reviews__identity\">' +\r\r\n      '<span class=\"ipax-customer-reviews__avatar\" aria-hidden=\"true\">' +\r\r\n      escapeHtml(initial) +\r\r\n      '</span>' +\r\r\n      '<div class=\"ipax-customer-reviews__meta\">' +\r\r\n      '<p class=\"ipax-customer-reviews__author\">' +\r\r\n      escapeHtml(author) +\r\r\n      '</p>' +\r\r\n      (when\r\r\n        ? '<p class=\"ipax-customer-reviews__when\">' + escapeHtml(when) + '</p>'\r\r\n        : '') +\r\r\n      '</div></div></div>' +\r\r\n      '<div class=\"ipax-customer-reviews__card-stars-row\">' +\r\r\n      '<p class=\"ipax-customer-reviews__card-stars\" aria-label=\"' +\r\r\n      escapeHtml(String(rating)) +\r\r\n      ' de 5 estrelas\">' +\r\r\n      starsHtml(rating) +\r\r\n      '</p>' +\r\r\n      '<span class=\"ipax-customer-reviews__verified\" title=\"Avalia\u00E7\u00E3o verificada\" aria-label=\"Verificado\">' +\r\r\n      VERIFIED_SVG +\r\r\n      '</span></div>' +\r\r\n      '<p class=\"ipax-customer-reviews__text\">' +\r\r\n      escapeHtml(text) +\r\r\n      '</p></article>'\r\r\n    );\r\r\n  }\r\r\n\r\r\n  function hashSeed(seed) {\r\r\n    const str = String(seed || '');\r\r\n    let h = 2166136261;\r\r\n    for (let i = 0; i < str.length; i += 1) {\r\r\n      h ^= str.charCodeAt(i);\r\r\n      h = Math.imul(h, 16777619);\r\r\n    }\r\r\n    return h >>> 0;\r\r\n  }\r\r\n\r\r\n  function rotateReviews(list, seed) {\r\r\n    if (!Array.isArray(list) || list.length <= 1) return list || [];\r\r\n    const offset = hashSeed(seed) % list.length;\r\r\n    if (!offset) return list.slice();\r\r\n    return list.slice(offset).concat(list.slice(0, offset));\r\r\n  }\r\r\n\r\r\n  function getRotateSeed(root) {\r\r\n    if (root.dataset.rotateSeed) return root.dataset.rotateSeed;\r\r\n    if (root.dataset.productId) return root.dataset.productId;\r\r\n    return window.location.pathname || 'ipax-reviews';\r\r\n  }\r\r\n\r\r\n  function defer(fn) {\r\r\n    if ('requestIdleCallback' in window) {\r\r\n      requestIdleCallback(fn, { timeout: 3000 });\r\r\n    } else {\r\r\n      window.setTimeout(fn, 150);\r\r\n    }\r\r\n  }\r\r\n\r\r\n  async function loadFromJson(root) {\r\r\n    const src = root.dataset.src;\r\r\n    if (!src) return null;\r\r\n\r\r\n    const controller = new AbortController();\r\r\n    const timer = window.setTimeout(() => controller.abort(), 8000);\r\r\n\r\r\n    try {\r\r\n      const res = await fetch(src, {\r\r\n        credentials: 'same-origin',\r\r\n        signal: controller.signal,\r\r\n      });\r\r\n      if (!res.ok) return null;\r\r\n      const data = await res.json();\r\r\n      const list = Array.isArray(data) ? data : data.feedbacks;\r\r\n      if (!Array.isArray(list)) return null;\r\r\n      return list.filter((f) => f && f.active !== false && (f.name || f.author) && f.text);\r\r\n    } catch (e) {\r\r\n      if (e.name !== 'AbortError') {\r\r\n        console.warn('[ipax-customer-reviews] falha ao carregar JSON', e);\r\r\n      }\r\r\n      return null;\r\r\n    } finally {\r\r\n      window.clearTimeout(timer);\r\r\n    }\r\r\n  }\r\r\n\r\r\n  function rotateTrackCards(track, seed) {\r\r\n    if (!track || track.children.length <= 1 || !seed) return;\r\r\n    const cards = Array.from(track.children);\r\r\n    const offset = hashSeed(seed) % cards.length;\r\r\n    if (!offset) return;\r\r\n    cards.slice(offset).concat(cards.slice(0, offset)).forEach((card) => track.appendChild(card));\r\r\n  }\r\r\n\r\r\n  function initCarousel(root) {\r\r\n    const viewport = root.querySelector('[data-ipax-reviews-viewport]');\r\r\n    const track = root.querySelector('[data-ipax-reviews-track]');\r\r\n    const prevBtn = root.querySelector('[data-ipax-reviews-prev]');\r\r\n    const nextBtn = root.querySelector('[data-ipax-reviews-next]');\r\r\n    if (!viewport || !track || !prevBtn || !nextBtn) return;\r\r\n\r\r\n    const getSlides = () => Array.from(track.children);\r\r\n\r\r\n    const getStep = () => {\r\r\n      const first = getSlides()[0];\r\r\n      if (!first) return viewport.clientWidth;\r\r\n      const style = window.getComputedStyle(track);\r\r\n      const gap = parseFloat(style.columnGap || style.gap || '0') || 0;\r\r\n      return first.getBoundingClientRect().width + gap;\r\r\n    };\r\r\n\r\r\n    const updateButtons = () => {\r\r\n      const slides = getSlides();\r\r\n      if (slides.length <= 1) {\r\r\n        prevBtn.hidden = true;\r\r\n        nextBtn.hidden = true;\r\r\n        return;\r\r\n      }\r\r\n\r\r\n      const maxScroll = Math.max(0, viewport.scrollWidth - viewport.clientWidth - 2);\r\r\n      const atStart = viewport.scrollLeft <= 2;\r\r\n      const atEnd = viewport.scrollLeft >= maxScroll;\r\r\n      prevBtn.disabled = atStart;\r\r\n      nextBtn.disabled = atEnd;\r\r\n      prevBtn.setAttribute('aria-disabled', atStart ? 'true' : 'false');\r\r\n      nextBtn.setAttribute('aria-disabled', atEnd ? 'true' : 'false');\r\r\n\r\r\n      const needsNav = viewport.scrollWidth > viewport.clientWidth + 4;\r\r\n      prevBtn.hidden = !needsNav;\r\r\n      nextBtn.hidden = !needsNav;\r\r\n    };\r\r\n\r\r\n    const scrollByDir = (dir) => {\r\r\n      viewport.scrollBy({ left: dir * getStep(), behavior: 'smooth' });\r\r\n    };\r\r\n\r\r\n    if (root.dataset.reviewsBound !== '1') {\r\r\n      root.dataset.reviewsBound = '1';\r\r\n      prevBtn.addEventListener('click', () => scrollByDir(-1));\r\r\n      nextBtn.addEventListener('click', () => scrollByDir(1));\r\r\n      viewport.addEventListener('scroll', updateButtons, { passive: true });\r\r\n      window.addEventListener('resize', updateButtons, { passive: true });\r\r\n    }\r\r\n\r\r\n    updateButtons();\r\r\n  }\r\r\n\r\r\n  async function hydrateFromJson(root) {\r\r\n    const track = root.querySelector('[data-ipax-reviews-track]');\r\r\n    const countEl = root.querySelector('[data-ipax-reviews-count]');\r\r\n    const rotateSeed = getRotateSeed(root);\r\r\n    const fromJson = await loadFromJson(root);\r\r\n\r\r\n    if (fromJson && fromJson.length && track) {\r\r\n      const reviews = rotateReviews(fromJson, rotateSeed);\r\r\n      track.innerHTML = reviews.map((item) => cardHtml(item)).join('');\r\r\n      if (countEl && root.dataset.autoCount === 'true') {\r\r\n        countEl.textContent = String(fromJson.length);\r\r\n      }\r\r\n      initCarousel(root);\r\r\n    }\r\r\n  }\r\r\n\r\r\n  function init(root) {\r\r\n    if (!root || root.dataset.ipaxReviewsReady === '1') return;\r\r\n    root.dataset.ipaxReviewsReady = '1';\r\r\n\r\r\n    const track = root.querySelector('[data-ipax-reviews-track]');\r\r\n    const rotateSeed = getRotateSeed(root);\r\r\n\r\r\n    rotateTrackCards(track, rotateSeed);\r\r\n    initCarousel(root);\r\r\n\r\r\n    defer(() => hydrateFromJson(root));\r\r\n  }\r\r\n\r\r\n  function boot() {\r\r\n    document.querySelectorAll('[data-ipax-customer-reviews]').forEach((root) => {\r\r\n      init(root);\r\r\n    });\r\r\n  }\r\r\n\r\r\n  if (document.readyState === 'loading') {\r\r\n    document.addEventListener('DOMContentLoaded', boot);\r\r\n  } else {\r\r\n    boot();\r\r\n  }\r\r\n\r\r\n  document.addEventListener('shopify:section:load', (e) => {\r\r\n    const root =\r\r\n      e.target.querySelector?.('[data-ipax-customer-reviews]') ||\r\r\n      e.target.closest?.('[data-ipax-customer-reviews]');\r\r\n    if (root) {\r\r\n      delete root.dataset.ipaxReviewsReady;\r\r\n      delete root.dataset.reviewsBound;\r\r\n      init(root);\r\r\n    }\r\r\n  });\r\r\n})();\r\r\n"],
  "mappings": "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",
  "names": []
}
