{
  "version": 3,
  "sources": ["/cdn/shop/t/58/assets/pp-badges.js?r=20261024f"],
  "sourcesContent": ["/*\n  IMAGE BADGES - report pop-up for product cards (\"short term fixes VG\", Nikit 24 Oct 2026).\n  Tapping a card's green \"Lab tested\" bar ([data-pp-ib-report]) opens the lab report in a\n  pop-up on the same page - the shopper does not leave the collection. The PDF renders with\n  PDF.js, loaded only on the first tap. If PDF.js cannot load, the pop-up offers the PDF link.\n  The product page's lab chip uses this same pop-up (the gallery's zoom would otherwise take\n  the tap), so it listens in the capture phase.\n*/\n(function () {\n  'use strict';\n  if (window.__ppImageBadges) return;\n  window.__ppImageBadges = true;\n\n  var PDFJS = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js';\n  var PDFJS_WORKER = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js';\n  var dlg = null, lastFocus = null, current = '', pdfjsPromise = null;\n\n  function el(tag, cls, text) {\n    var n = document.createElement(tag);\n    if (cls) n.className = cls;\n    if (text) n.textContent = text;\n    return n;\n  }\n\n  function build() {\n    dlg = el('div', 'pp-ib-dialog');\n    dlg.hidden = true;\n    var panel = el('div', 'pp-ib-dialog__panel');\n    panel.setAttribute('role', 'dialog');\n    panel.setAttribute('aria-modal', 'true');\n    panel.setAttribute('aria-labelledby', 'PPIBTitle');\n    var head = el('div', 'pp-ib-dialog__head');\n    var titles = el('div');\n    var h = el('h2', 'pp-ib-dialog__title', 'Lab report');\n    h.id = 'PPIBTitle';\n    titles.appendChild(h);\n    titles.appendChild(el('p', 'pp-ib-dialog__sub'));\n    var x = el('button', 'pp-ib-dialog__close', '\u00D7');\n    x.type = 'button';\n    x.setAttribute('aria-label', 'Close report');\n    x.setAttribute('data-pp-ib-close', '');\n    head.appendChild(titles);\n    head.appendChild(x);\n    var body = el('div', 'pp-ib-dialog__body');\n    body.appendChild(el('div', 'pp-ib-dialog__pages'));\n    var foot = el('div', 'pp-ib-dialog__foot');\n    var dl = el('a', null, 'Download PDF');\n    dl.target = '_blank';\n    dl.rel = 'noopener';\n    dl.setAttribute('download', '');\n    var back = el('button', null, 'Close');\n    back.type = 'button';\n    back.setAttribute('data-pp-ib-close', '');\n    foot.appendChild(dl);\n    foot.appendChild(back);\n    panel.appendChild(head);\n    panel.appendChild(body);\n    panel.appendChild(foot);\n    dlg.appendChild(panel);\n    document.body.appendChild(dlg);\n  }\n\n  function loadPdfJs() {\n    if (window.pdfjsLib) return Promise.resolve(window.pdfjsLib);\n    if (pdfjsPromise) return pdfjsPromise;\n    pdfjsPromise = new Promise(function (resolve, reject) {\n      var s = document.createElement('script');\n      s.src = PDFJS;\n      s.async = true;\n      s.onload = function () {\n        if (!window.pdfjsLib) { reject(new Error('pdfjs missing')); return; }\n        window.pdfjsLib.GlobalWorkerOptions.workerSrc = PDFJS_WORKER;\n        resolve(window.pdfjsLib);\n      };\n      s.onerror = function (e) { pdfjsPromise = null; reject(e); };\n      document.head.appendChild(s);\n    });\n    return pdfjsPromise;\n  }\n\n  function status(pages, text, url) {\n    pages.innerHTML = '';\n    var p = el('p', 'pp-ib-dialog__status', text);\n    if (url) {\n      p.appendChild(document.createTextNode(' '));\n      var a = el('a', null, 'Open the PDF');\n      a.href = url;\n      a.target = '_blank';\n      a.rel = 'noopener';\n      p.appendChild(a);\n    }\n    pages.appendChild(p);\n  }\n\n  function render(url) {\n    var pages = dlg.querySelector('.pp-ib-dialog__pages');\n    status(pages, 'Loading the report\u2026');\n    var token = url;\n    loadPdfJs()\n      .then(function (lib) { return lib.getDocument(url).promise; })\n      .then(function (pdf) {\n        if (current !== token) return;\n        pages.innerHTML = '';\n        var width = Math.max(pages.clientWidth - 24, 280);\n        var ratio = Math.min(window.devicePixelRatio || 1, 2);\n        var chain = Promise.resolve();\n        for (var n = 1; n <= pdf.numPages; n++) {\n          (function (n) {\n            chain = chain.then(function () {\n              if (current !== token) return;\n              return pdf.getPage(n).then(function (page) {\n                if (current !== token) return; /* review 24 Oct: a page from an old report */\n                var base = page.getViewport({ scale: 1 });\n                var vp = page.getViewport({ scale: (width / base.width) * ratio });\n                var c = document.createElement('canvas');\n                c.width = vp.width;\n                c.height = vp.height;\n                c.setAttribute('role', 'img');\n                c.setAttribute('aria-label', 'Lab report, page ' + n + ' of ' + pdf.numPages);\n                pages.appendChild(c);\n                return page.render({ canvasContext: c.getContext('2d'), viewport: vp }).promise;\n              });\n            });\n          })(n);\n        }\n        return chain;\n      })\n      .catch(function () {\n        if (current !== token) return;\n        current = ''; /* review 24 Oct: let the next open retry */\n        status(pages, 'We could not show the report here.', url);\n      });\n  }\n\n  function open(btn) {\n    var url = btn.getAttribute('data-pdf');\n    if (!url) return;\n    if (!dlg) build();\n    lastFocus = btn;\n    dlg.querySelector('.pp-ib-dialog__sub').textContent = btn.getAttribute('data-title') || '';\n    dlg.querySelector('.pp-ib-dialog__foot a').href = url;\n    dlg.hidden = false;\n    document.documentElement.classList.add('pp-ib-lock');\n    dlg.querySelector('.pp-ib-dialog__close').focus();\n    if (current !== url) {\n      current = url;\n      dlg.querySelector('.pp-ib-dialog__body').scrollTop = 0;\n      render(url);\n    }\n  }\n\n  function close() {\n    if (!dlg || dlg.hidden) return;\n    dlg.hidden = true;\n    document.documentElement.classList.remove('pp-ib-lock');\n    if (lastFocus && lastFocus.focus) lastFocus.focus();\n  }\n\n  /* Capture phase: the bar sits inside a card whose own scripts (hover image, add to cart)\n     listen on the document too. The bar is a <button>, so stopping here keeps the tap\n     from ever reaching the card's link. */\n  document.addEventListener('click', function (e) {\n    var t = e.target;\n    var btn = t.closest && t.closest('[data-pp-ib-report]');\n    if (btn) {\n      e.preventDefault();\n      e.stopPropagation();\n      open(btn);\n      return;\n    }\n    if (!dlg || dlg.hidden) return;\n    if ((t.closest && t.closest('[data-pp-ib-close]')) || t === dlg) {\n      e.preventDefault();\n      close();\n    }\n  }, true);\n  document.addEventListener('keydown', function (e) {\n    if (!dlg || dlg.hidden) return;\n    if (e.key === 'Escape') { close(); return; }\n    /* Review 24 Oct: keep Tab inside the pop-up while it is open (aria-modal). */\n    if (e.key === 'Tab') {\n      var f = dlg.querySelectorAll('button, a[href]');\n      if (!f.length) return;\n      var first = f[0], last = f[f.length - 1];\n      if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n      else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n    }\n  });\n  /* Review 24 Oct: Safari does not focus a tapped button, so the search dropdown closed on\n     mousedown before the lab logo's click landed. Keep focus where it is on that press. */\n  document.addEventListener('mousedown', function (e) {\n    var b = e.target.closest && e.target.closest('.pp-ib-lab');\n    if (b && b.closest('predictive-search, .predictive-search, .pp-search-empty__card')) e.preventDefault();\n  }, true);\n})();\n"],
  "mappings": "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",
  "names": ["n"]
}
