{
  "version": 3,
  "sources": ["/cdn/shop/t/1064/assets/new-gang-sheet-cta.js?auto=format%2Ccompress"],
  "sourcesContent": ["(function () {\n  'use strict';\n\n  function init() {\n    var wrapper = document.querySelector('.new-gang-sheet-cta-wrapper');\n    if (!wrapper) return;\n    var button = wrapper.querySelector('[data-gsb-new-cta]');\n    var dataScript = wrapper.querySelector('.new-gang-sheet-cta-variants');\n    var proxyPath = wrapper.getAttribute('data-gsb-proxy-path') || '/apps/ninja-gang-sheet';\n    if (!button || !dataScript) return;\n\n    var variants = [];\n    try { variants = JSON.parse(dataScript.textContent) || []; } catch (e) { variants = []; }\n    var variantsById = {};\n    variants.forEach(function (v) { variantsById[String(v.id)] = v; });\n\n    // REQUIRE-A-SIZE GATE \u2014 DTF gang sheet page only (Owen 2026-08-18). The\n    // wrapper's data-gsb-require-size flag is set by the Liquid (handle\n    // scoped): gated page = no variants[0] fallback + click blocked until a\n    // size radio is literally checked. Ungated family pages (UV builder,\n    // sticker packs\u2026) keep the ORIGINAL behavior end to end.\n    var requireSize = wrapper.getAttribute('data-gsb-require-size') === 'true';\n    var selectedVariant = null;\n    var nudge = wrapper.querySelector('[data-gsb-nudge]');\n\n    function updateHref(variant) {\n      selectedVariant = variant && variant.id ? variant : null;\n      button.href = proxyPath + (selectedVariant ? '?variant=' + encodeURIComponent(selectedVariant.id) : '');\n      if (selectedVariant && nudge) nudge.hidden = true;\n    }\n\n    // Initial variant: a ?variant= deep link always wins (the page's picker\n    // preselects from the same param, so UI and href agree). Only ungated\n    // pages fall back to the first variant.\n    var initial = null;\n    try {\n      var urlVariant = new URLSearchParams(window.location.search).get('variant');\n      if (urlVariant && variantsById[urlVariant]) initial = variantsById[urlVariant];\n    } catch (e) { /* noop */ }\n    if (!initial && !requireSize && variants.length) initial = variants[0];\n    if (initial) updateHref(initial);\n\n    // VARIANT_CHANGE is dispatched non-bubbling on <product-variants>; use capture phase.\n    document.addEventListener('VARIANT_CHANGE', function (e) {\n      var el = e.target;\n      if (el && el.currentVariant) updateHref(el.currentVariant);\n    }, true);\n\n    function trackCtaClick() {\n      try {\n        window.optimizely = window.optimizely || [];\n        window.optimizely.push({ type: 'event', eventName: 'gsb_cta_click' });\n      } catch (err) { /* noop */ }\n    }\n\n    // The ground truth for \"a size is picked\" is a CHECKED size radio in the\n    // DOM \u2014 not just a resolved variant. VARIANT_CHANGE can resolve from\n    // partial selections, and bfcache/back-nav can restore closure state; the\n    // DOM check closes every such path.\n    function sizeIsChecked() {\n      return [].some.call(\n        document.querySelectorAll('.product-variant__item--radio input'),\n        function (input) { return input.checked && /^product-size/i.test(input.name || ''); }\n      );\n    }\n\n    button.addEventListener('click', function (e) {\n      if (requireSize && (!selectedVariant || !sizeIsChecked())) {\n        // Block the navigation and point the customer at the size picker.\n        e.preventDefault();\n        if (nudge) nudge.hidden = false;\n        // Pulse ONLY the size tiles (Owen 2026-08-18) \u2014 their radios are named\n        // \"product-size (\u2026)\"; the foil/type tiles have a different input name.\n        var sizeTiles = [].filter.call(\n          document.querySelectorAll('.product-variant__item--radio'),\n          function (el) {\n            var input = el.querySelector('input');\n            return input && /^product-size/i.test(input.name || '');\n          }\n        );\n        if (sizeTiles.length) {\n          sizeTiles[0].scrollIntoView({ behavior: 'smooth', block: 'center' });\n          sizeTiles.forEach(function (el) {\n            el.classList.remove('gs-size-pulse');\n            void el.offsetWidth; // restart the animation on repeat clicks\n            el.classList.add('gs-size-pulse');\n          });\n        }\n        return; // no tracking on blocked clicks \u2014 keeps gsb_cta_click honest\n      }\n      trackCtaClick();\n    });\n\n      // Mirror tracking on the old (control) CTA so the same Optimizely event\n      // captures click-throughs for both variations. Bind directly to the\n      // builder button (not the wrapper) \u2014 the wrapper carries role=\"button\"\n      // at runtime, which made closest() match incidental clicks anywhere\n      // inside the block and inflated control CTR.\n      var oldButton = document.querySelector('[data-gsb-variant=\"old\"] #gs-builder-btn');\n      if (oldButton) {\n        oldButton.addEventListener('click', trackCtaClick);\n      }\n    }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "CAAC,UAAY,CACX,aAEA,SAAS,MAAO,CACd,IAAI,QAAU,SAAS,cAAc,6BAA6B,EAClE,GAAI,CAAC,QAAS,OACd,IAAI,OAAS,QAAQ,cAAc,oBAAoB,EACnD,WAAa,QAAQ,cAAc,8BAA8B,EACjE,UAAY,QAAQ,aAAa,qBAAqB,GAAK,yBAC/D,GAAI,CAAC,QAAU,CAAC,WAAY,OAE5B,IAAI,SAAW,CAAC,EAChB,GAAI,CAAE,SAAW,KAAK,MAAM,WAAW,WAAW,GAAK,CAAC,CAAG,OAAS,EAAG,CAAE,SAAW,CAAC,CAAG,CACxF,IAAI,aAAe,CAAC,EACpB,SAAS,QAAQ,SAAU,EAAG,CAAE,aAAa,OAAO,EAAE,EAAE,CAAC,EAAI,CAAG,CAAC,EAOjE,IAAI,YAAc,QAAQ,aAAa,uBAAuB,IAAM,OAChE,gBAAkB,KAClB,MAAQ,QAAQ,cAAc,kBAAkB,EAEpD,SAAS,WAAW,QAAS,CAC3B,gBAAkB,SAAW,QAAQ,GAAK,QAAU,KACpD,OAAO,KAAO,WAAa,gBAAkB,YAAc,mBAAmB,gBAAgB,EAAE,EAAI,IAChG,iBAAmB,QAAO,MAAM,OAAS,GAC/C,CAKA,IAAI,QAAU,KACd,GAAI,CACF,IAAI,WAAa,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,SAAS,EACtE,YAAc,aAAa,UAAU,IAAG,QAAU,aAAa,UAAU,EAC/E,OAAS,EAAG,CAAa,CACrB,CAAC,SAAW,CAAC,aAAe,SAAS,SAAQ,QAAU,SAAS,CAAC,GACjE,SAAS,WAAW,OAAO,EAG/B,SAAS,iBAAiB,iBAAkB,SAAU,EAAG,CACvD,IAAI,GAAK,EAAE,OACP,IAAM,GAAG,gBAAgB,WAAW,GAAG,cAAc,CAC3D,EAAG,EAAI,EAEP,SAAS,eAAgB,CACvB,GAAI,CACF,OAAO,WAAa,OAAO,YAAc,CAAC,EAC1C,OAAO,WAAW,KAAK,CAAE,KAAM,QAAS,UAAW,eAAgB,CAAC,CACtE,OAAS,IAAK,CAAa,CAC7B,CAMA,SAAS,eAAgB,CACvB,MAAO,CAAC,EAAE,KAAK,KACb,SAAS,iBAAiB,qCAAqC,EAC/D,SAAU,MAAO,CAAE,OAAO,MAAM,SAAW,iBAAiB,KAAK,MAAM,MAAQ,EAAE,CAAG,CACtF,CACF,CAEA,OAAO,iBAAiB,QAAS,SAAU,EAAG,CAC5C,GAAI,cAAgB,CAAC,iBAAmB,CAAC,cAAc,GAAI,CAEzD,EAAE,eAAe,EACb,QAAO,MAAM,OAAS,IAG1B,IAAI,UAAY,CAAC,EAAE,OAAO,KACxB,SAAS,iBAAiB,+BAA+B,EACzD,SAAU,GAAI,CACZ,IAAI,MAAQ,GAAG,cAAc,OAAO,EACpC,OAAO,OAAS,iBAAiB,KAAK,MAAM,MAAQ,EAAE,CACxD,CACF,EACI,UAAU,SACZ,UAAU,CAAC,EAAE,eAAe,CAAE,SAAU,SAAU,MAAO,QAAS,CAAC,EACnE,UAAU,QAAQ,SAAU,GAAI,CAC9B,GAAG,UAAU,OAAO,eAAe,EAC9B,GAAG,YACR,GAAG,UAAU,IAAI,eAAe,CAClC,CAAC,GAEH,MACF,CACA,cAAc,CAChB,CAAC,EAOC,IAAI,UAAY,SAAS,cAAc,0CAA0C,EAC7E,WACF,UAAU,iBAAiB,QAAS,aAAa,CAErD,CAEE,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,IAAI,EAElD,KAAK,CAET,GAAG",
  "names": []
}
