{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/custom.js?cb=9242"],
  "sourcesContent": ["/*\n * COUNTERPOINT theme overrides for GH Produce (Broadcast 8.1.1).\n * theme.js is never edited; overrides live here so a theme update keeps them.\n *\n * 1. Product gallery swipe past a video slide. The theme's touchend handler\n *    only moves when the active slide is an image, so a swipe on a video\n *    slide is dropped. This adds the missing move for video slides only.\n * 2. A gallery video pauses whenever its slide stops being active, however\n *    that happens: swipe, arrow, thumbnail or variant change.\n *\n * Touch only. Desktop keeps the theme arrows. Exits quietly on any page\n * without a product gallery.\n */\n(function () {\n  'use strict';\n\n  var GALLERY = 'product-images';\n  var LIST = '[data-product-media-list]';\n  var ACTIVE = 'media--active';\n  var CONTROL_BAR = 60;\n  var MIN_MOVE = 10;\n\n  var gesture = null;\n\n  function galleryOf(target) {\n    if (!target || typeof target.closest !== 'function') return null;\n    var list = target.closest(LIST);\n    if (!list) return null;\n    var gallery = list.closest(GALLERY);\n    if (!gallery) return null;\n    if (typeof gallery.getCurrentMedia !== 'function') return null;\n    if (typeof gallery.showNextImage !== 'function') return null;\n    if (typeof gallery.showPreviousImage !== 'function') return null;\n    return gallery;\n  }\n\n  function startedOnControlBar(slide, x, y) {\n    var videos = slide.querySelectorAll('deferred-media[loaded] video');\n    for (var i = 0; i < videos.length; i++) {\n      var r = videos[i].getBoundingClientRect();\n      if (x >= r.left && x <= r.right && y <= r.bottom && y >= r.bottom - CONTROL_BAR) return true;\n    }\n    return false;\n  }\n\n  function onTouchStart(e) {\n    gesture = null;\n    if (!e.touches || e.touches.length !== 1) return;\n    var gallery = galleryOf(e.target);\n    if (!gallery) return;\n    var slide = gallery.getCurrentMedia();\n    if (!slide) return;\n    var t = e.touches[0];\n    gesture = {\n      gallery: gallery,\n      slide: slide,\n      x: t.clientX,\n      y: t.clientY,\n      onControls: startedOnControlBar(slide, t.clientX, t.clientY)\n    };\n  }\n\n  function onTouchEnd(e) {\n    var g = gesture;\n    gesture = null;\n    if (!g || !e.changedTouches || !e.changedTouches.length) return;\n    var t = e.changedTouches[0];\n    var dx = t.clientX - g.x;\n    var dy = t.clientY - g.y;\n    // Wait one frame so the theme's own touchend handler has already run.\n    requestAnimationFrame(function () {\n      var gallery = g.gallery;\n      if (gallery.initialized !== true) return;\n      if (g.slide.getAttribute('data-type') !== 'video') return;\n      if (gallery.getCurrentMedia() !== g.slide) return;\n      if (Math.abs(dx) <= MIN_MOVE || Math.abs(dx) <= Math.abs(dy)) return;\n      if (g.onControls) return;\n      if (dx < 0) {\n        gallery.showNextImage();\n      } else {\n        gallery.showPreviousImage();\n      }\n    });\n  }\n\n  // A slide that loses media--active has been left: pause the playing videos\n  // inside it and mark them. Only gallery slides are watched, so the background\n  // video section and any other video on the page are never touched.\n  // A slide that gains media--active is never paused. The theme loads and\n  // autoplays a video the first time its slide opens; when a slide we paused\n  // becomes active again, its video resumes. A video the shopper paused stays paused.\n  var PAUSED_BY_US = 'data-counterpoint-paused';\n\n  function onClassChange(mutations) {\n    try {\n      handleSlideChanges(mutations);\n    } catch (err) {\n      // Stay silent: this file loads on every page.\n    }\n  }\n\n  function isGallerySlide(el) {\n    return !!(el && el.classList && el.hasAttribute('data-image-id') && el.closest(GALLERY));\n  }\n\n  function handleSlideChanges(mutations) {\n    for (var i = 0; i < mutations.length; i++) {\n      var m = mutations[i];\n      var slide = m.target;\n      if (!isGallerySlide(slide)) continue;\n      var wasActive = !!m.oldValue && m.oldValue.indexOf(ACTIVE) !== -1;\n      var isActive = slide.classList.contains(ACTIVE);\n      if (wasActive === isActive) continue;\n      var videos = slide.querySelectorAll('video');\n      for (var j = 0; j < videos.length; j++) {\n        var v = videos[j];\n        if (wasActive && !isActive && !v.paused) {\n          v.setAttribute(PAUSED_BY_US, '');\n          v.pause();\n        } else if (isActive && v.hasAttribute(PAUSED_BY_US)) {\n          v.removeAttribute(PAUSED_BY_US);\n          var p = v.play();\n          if (p && typeof p.catch === 'function') p.catch(function () {});\n        }\n      }\n    }\n  }\n\n  try {\n    document.addEventListener('touchstart', onTouchStart, { passive: true, capture: true });\n    document.addEventListener('touchend', onTouchEnd, { passive: true, capture: true });\n    document.addEventListener('touchcancel', function () { gesture = null; }, { passive: true, capture: true });\n    // One observer for every gallery on the page, including galleries added\n    // later (quick add popup, section reloads in the theme editor).\n    if (typeof MutationObserver === 'function' && document.body) {\n      new MutationObserver(onClassChange).observe(document.body, {\n        subtree: true,\n        attributes: true,\n        attributeFilter: ['class'],\n        attributeOldValue: true\n      });\n    }\n  } catch (err) {\n    // Stay silent: this file loads on every page.\n  }\n})();\n"],
  "mappings": "CAaC,UAAY,CACX,aAEA,IAAI,QAAU,iBACV,KAAO,4BACP,OAAS,gBACT,YAAc,GACd,SAAW,GAEX,QAAU,KAEd,SAAS,UAAU,OAAQ,CACzB,GAAI,CAAC,QAAU,OAAO,OAAO,SAAY,WAAY,OAAO,KAC5D,IAAI,KAAO,OAAO,QAAQ,IAAI,EAC9B,GAAI,CAAC,KAAM,OAAO,KAClB,IAAI,QAAU,KAAK,QAAQ,OAAO,EAIlC,MAHI,CAAC,SACD,OAAO,QAAQ,iBAAoB,YACnC,OAAO,QAAQ,eAAkB,YACjC,OAAO,QAAQ,mBAAsB,WAAmB,KACrD,OACT,CAEA,SAAS,oBAAoB,MAAO,EAAG,EAAG,CAExC,QADI,OAAS,MAAM,iBAAiB,8BAA8B,EACzD,EAAI,EAAG,EAAI,OAAO,OAAQ,IAAK,CACtC,IAAI,EAAI,OAAO,CAAC,EAAE,sBAAsB,EACxC,GAAI,GAAK,EAAE,MAAQ,GAAK,EAAE,OAAS,GAAK,EAAE,QAAU,GAAK,EAAE,OAAS,YAAa,MAAO,EAC1F,CACA,MAAO,EACT,CAEA,SAAS,aAAa,EAAG,CAEvB,GADA,QAAU,KACN,GAAC,EAAE,SAAW,EAAE,QAAQ,SAAW,GACvC,KAAI,QAAU,UAAU,EAAE,MAAM,EAChC,GAAK,QACL,KAAI,MAAQ,QAAQ,gBAAgB,EACpC,GAAK,MACL,KAAI,EAAI,EAAE,QAAQ,CAAC,EACnB,QAAU,CACR,QAAS,QACT,MAAO,MACP,EAAG,EAAE,QACL,EAAG,EAAE,QACL,WAAY,oBAAoB,MAAO,EAAE,QAAS,EAAE,OAAO,CAC7D,IACF,CAEA,SAAS,WAAW,EAAG,CACrB,IAAI,EAAI,QAER,GADA,QAAU,KACN,GAAC,GAAK,CAAC,EAAE,gBAAkB,CAAC,EAAE,eAAe,QACjD,KAAI,EAAI,EAAE,eAAe,CAAC,EACtB,GAAK,EAAE,QAAU,EAAE,EACnB,GAAK,EAAE,QAAU,EAAE,EAEvB,sBAAsB,UAAY,CAChC,IAAI,QAAU,EAAE,QACZ,QAAQ,cAAgB,IACxB,EAAE,MAAM,aAAa,WAAW,IAAM,SACtC,QAAQ,gBAAgB,IAAM,EAAE,QAChC,KAAK,IAAI,EAAE,GAAK,UAAY,KAAK,IAAI,EAAE,GAAK,KAAK,IAAI,EAAE,GACvD,EAAE,aACF,GAAK,EACP,QAAQ,cAAc,EAEtB,QAAQ,kBAAkB,GAE9B,CAAC,EACH,CAQA,IAAI,aAAe,2BAEnB,SAAS,cAAc,UAAW,CAChC,GAAI,CACF,mBAAmB,SAAS,CAC9B,OAAS,IAAK,CAEd,CACF,CAEA,SAAS,eAAe,GAAI,CAC1B,MAAO,CAAC,EAAE,IAAM,GAAG,WAAa,GAAG,aAAa,eAAe,GAAK,GAAG,QAAQ,OAAO,EACxF,CAEA,SAAS,mBAAmB,UAAW,CACrC,QAAS,EAAI,EAAG,EAAI,UAAU,OAAQ,IAAK,CACzC,IAAI,EAAI,UAAU,CAAC,EACf,MAAQ,EAAE,OACd,GAAK,eAAe,KAAK,EACzB,KAAI,UAAY,CAAC,CAAC,EAAE,UAAY,EAAE,SAAS,QAAQ,MAAM,IAAM,GAC3D,SAAW,MAAM,UAAU,SAAS,MAAM,EAC9C,GAAI,YAAc,SAElB,QADI,OAAS,MAAM,iBAAiB,OAAO,EAClC,EAAI,EAAG,EAAI,OAAO,OAAQ,IAAK,CACtC,IAAI,EAAI,OAAO,CAAC,EAChB,GAAI,WAAa,CAAC,UAAY,CAAC,EAAE,OAC/B,EAAE,aAAa,aAAc,EAAE,EAC/B,EAAE,MAAM,UACC,UAAY,EAAE,aAAa,YAAY,EAAG,CACnD,EAAE,gBAAgB,YAAY,EAC9B,IAAI,EAAI,EAAE,KAAK,EACX,GAAK,OAAO,EAAE,OAAU,YAAY,EAAE,MAAM,UAAY,CAAC,CAAC,CAChE,CACF,EACF,CACF,CAEA,GAAI,CACF,SAAS,iBAAiB,aAAc,aAAc,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EACtF,SAAS,iBAAiB,WAAY,WAAY,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EAClF,SAAS,iBAAiB,cAAe,UAAY,CAAE,QAAU,IAAM,EAAG,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EAGtG,OAAO,kBAAqB,YAAc,SAAS,MACrD,IAAI,iBAAiB,aAAa,EAAE,QAAQ,SAAS,KAAM,CACzD,QAAS,GACT,WAAY,GACZ,gBAAiB,CAAC,OAAO,EACzB,kBAAmB,EACrB,CAAC,CAEL,OAAS,IAAK,CAEd,CACF,GAAG",
  "names": []
}
