{
  "version": 3,
  "sources": ["/cdn/shop/t/1044/assets/price-calc-v2.js?auto=format%2Ccompress"],
  "sourcesContent": ["/* ------------------------------------------------------------------\n   price-calc-v2.js\n   Wires up the new Price Calculator UI. Mirrors data between the new\n   UI (.pcv2) and the legacy popup markup (.customTabelPopup__sizes,\n   .customTabelPopup__item) so existing logic keeps running:\n     - Width/Height from .pcv2 are synced to the legacy .widthHeight__value__\n       inputs and trigger keyup \u2014 this leverages the existing price update\n       flow that sets variant + updates .customTabelPopup__item <discount>.\n     - Tier cards are built from the legacy .customTabelPopup__item rows\n       (min/max/off data + per-unit price computed by existing JS).\n     - Quantity input highlights the matching tier and the per-piece\n       price is read from the active tier's <discount> text.\n   ------------------------------------------------------------------ */\n(function () {\n  'use strict';\n\n  function $(sel, root) { return (root || document).querySelector(sel); }\n  function $$(sel, root) { return Array.prototype.slice.call((root || document).querySelectorAll(sel)); }\n\n  function formatCurrency(num) {\n    if (isNaN(num)) return '$0.00';\n    return '$' + Number(num).toFixed(2);\n  }\n\n  function getLegacyItems(popup) {\n    return $$('.customTabelPopup__item', popup);\n  }\n\n  function parsePrice(row) {\n    // The existing JS sets <discount>X.XX</discount> inside each row's <discount> tag\n    var d = row.querySelector('discount');\n    if (d && d.textContent) {\n      var n = parseFloat(d.textContent.replace(/[^0-9.]/g, ''));\n      if (!isNaN(n)) return n;\n    }\n    // Fallback: look for a price in the third column text\n    var col3 = row.querySelector('.customTabelPopup__item_3');\n    if (col3) {\n      var m = col3.textContent.match(/[\\d.]+/);\n      if (m) return parseFloat(m[0]);\n    }\n    return NaN;\n  }\n\n  function labelFromItem(row) {\n    var col1 = row.querySelector('.customTabelPopup__item_1');\n    if (!col1) return '';\n    var txt = (col1.textContent || '').trim();\n    /* Strip trailing \"pcs\" or \"pieces\" */\n    txt = txt.replace(/\\s+pcs?$/i, '').replace(/\\s+pieces?$/i, '');\n    /* Normalize: keep \"X-Y\" as \"X\u2013Y\" (en-dash), or \"X+\" */\n    if (/\\d+\\s*-\\s*\\d+/.test(txt)) {\n      var p = txt.split(/\\s*-\\s*/);\n      return p[0].trim() + '\u2013' + p[1].trim();\n    }\n    if (/\\+$/.test(txt)) return txt;\n    return txt + '+';\n  }\n\n  function offFromItem(row) {\n    var offAttr = parseFloat(row.getAttribute('off'));\n    if (!isNaN(offAttr)) {\n      // off attr is a percentage (e.g., 20 for 20% off)\n      return offAttr / 100;\n    }\n    var col2 = row.querySelector('.customTabelPopup__item_2');\n    if (col2) {\n      var m = col2.textContent.match(/(\\d+)\\s*%/);\n      if (m) return parseFloat(m[1]) / 100;\n    }\n    return 0;\n  }\n\n  function tierRangeFromItem(row) {\n    return {\n      min: parseInt(row.getAttribute('min'), 10) || 1,\n      max: parseInt(row.getAttribute('max'), 10) || 999999\n    };\n  }\n\n  function findActiveTier(rows, qty) {\n    for (var i = 0; i < rows.length; i++) {\n      var r = tierRangeFromItem(rows[i]);\n      if (qty >= r.min && qty <= r.max) return rows[i];\n    }\n    return rows[0] || null;\n  }\n\n  function renderTierCards(host) {\n    var popup = host.closest ? host.closest('.customTabelPopup') : host.parentElement;\n    if (!popup) return;\n    var rows = getLegacyItems(popup);\n    var tiersEl = $('[data-pcv2-tiers]', host);\n    if (!tiersEl) return;\n\n    // Build one row per legacy tier\n    var cards = rows.map(function (row, i) {\n      var label = labelFromItem(row) || (i + 1) + '+';\n      var off = offFromItem(row);\n      var price = parsePrice(row);\n      var offTxt = off > 0 ? Math.round(off * 100) + '% off' : '\u2014';\n      var discClass = off > 0 ? ' has-discount' : '';\n      return (\n        '<button type=\"button\" class=\"pcv2__tier' + discClass + '\" data-pcv2-tier data-off=\"' + off +\n        '\" data-min=\"' + tierRangeFromItem(row).min + '\" data-max=\"' + tierRangeFromItem(row).max + '\">' +\n        '<span class=\"pcv2__tierLabel\">' + label + '</span>' +\n        '<span class=\"pcv2__tierOff\">' + offTxt + '</span>' +\n        '<span class=\"pcv2__tierPrice\">' + formatCurrency(price) + '</span>' +\n        '</button>'\n      );\n    });\n\n    tiersEl.innerHTML = cards.join('');\n\n    // Wire up clicks \u2014 jump qty to tier min\n    $$('[data-pcv2-tier]', tiersEl).forEach(function (btn) {\n      btn.addEventListener('click', function () {\n        var min = parseInt(btn.getAttribute('data-min'), 10) || 1;\n        var qtyInput = $('[data-pcv2-qty]', host);\n        if (qtyInput) {\n          qtyInput.value = min;\n          updateActiveTier(host);\n        }\n      });\n    });\n\n    /* Apply MOQ (from first tier min) to the quantity input */\n    applyMoqToQty(host, rows);\n    updateActiveTier(host);\n  }\n\n  function applyMoqToQty(host, rows) {\n    if (!rows) rows = getLegacyItems(host.closest('.customTabelPopup'));\n    if (!rows.length) return;\n    var firstMin = tierRangeFromItem(rows[0]).min;\n    if (isNaN(firstMin) || firstMin < 1) return;\n    var qtyInput = $('[data-pcv2-qty]', host);\n    if (!qtyInput) return;\n    /* Update min attribute to the MOQ */\n    qtyInput.setAttribute('min', String(firstMin));\n    /* If current value is below MOQ (or was the old default 1), bump to MOQ */\n    var curVal = parseInt(qtyInput.value, 10);\n    if (isNaN(curVal) || curVal < firstMin) {\n      qtyInput.value = String(firstMin);\n    }\n  }\n\n  function updateActiveTier(host) {\n    var qtyInput = $('[data-pcv2-qty]', host);\n    var qty = Math.max(1, parseInt(qtyInput && qtyInput.value, 10) || 1);\n    var cards = $$('[data-pcv2-tier]', host);\n    var activeCard = null;\n    cards.forEach(function (c) {\n      var min = parseInt(c.getAttribute('data-min'), 10);\n      var max = parseInt(c.getAttribute('data-max'), 10);\n      var active = qty >= min && qty <= max;\n      c.classList.toggle('is-active', active);\n      if (active) activeCard = c;\n    });\n    if (!activeCard && cards.length) activeCard = cards[0];\n\n    // Update price display + badge\n    var badge = $('[data-pcv2-badge]', host);\n    var priceAfter = $('[data-pcv2-price-after]', host);\n    var priceBefore = $('[data-pcv2-price-before]', host);\n    if (!priceAfter || !priceBefore) return;\n\n    var activeOff = activeCard ? parseFloat(activeCard.getAttribute('data-off')) || 0 : 0;\n    var firstCard = cards[0];\n    var basePrice = firstCard ? parseFloat((firstCard.querySelector('.pcv2__tierPrice') || {}).textContent.replace(/[^0-9.]/g, '') || '0') : 0;\n    var unitPrice = activeCard ? parseFloat((activeCard.querySelector('.pcv2__tierPrice') || {}).textContent.replace(/[^0-9.]/g, '') || '0') : 0;\n\n    priceAfter.textContent = formatCurrency(unitPrice);\n    if (activeOff > 0) {\n      priceAfter.classList.add('is-discount');\n      priceBefore.textContent = formatCurrency(basePrice);\n      priceBefore.classList.add('is-visible');\n    } else {\n      priceAfter.classList.remove('is-discount');\n      priceBefore.textContent = '';\n      priceBefore.classList.remove('is-visible');\n    }\n\n    /* Badge removed from markup; leave no-op if not present */\n    if (badge) {\n      if (activeOff > 0) {\n        badge.textContent = Math.round(activeOff * 100) + '% off';\n        badge.className = 'pcv2__badge pcv2__badge--discount';\n      } else {\n        badge.textContent = 'Add more to save';\n        badge.className = 'pcv2__badge pcv2__badge--neutral';\n      }\n    }\n  }\n\n  function syncWidthHeightToLegacy(host) {\n    var w = $('[data-pcv2-width]', host);\n    var h = $('[data-pcv2-height]', host);\n    var popup = host.closest ? host.closest('.customTabelPopup') : null;\n    if (!popup) return;\n    var legacyW = popup.querySelector('input[name=\"width__value\"]');\n    var legacyH = popup.querySelector('input[name=\"height__value\"]');\n    if (w && legacyW && legacyW.value !== w.value) {\n      legacyW.value = w.value;\n      var evW = new Event('keyup', { bubbles: true });\n      legacyW.dispatchEvent(evW);\n    }\n    if (h && legacyH && legacyH.value !== h.value) {\n      legacyH.value = h.value;\n      var evH = new Event('keyup', { bubbles: true });\n      legacyH.dispatchEvent(evH);\n    }\n  }\n\n  function pullLimitsFromLegacy(host) {\n    /* Copy min/max/step from legacy inputs onto the new UI inputs so the source of truth\n       (widthHeight block in the schema) is respected. The legacy inputs get their min/max\n       set both server-side in Liquid AND client-side by bySize JS (userDefinedMaxLength\n       / userDefinedMaxHeight), so this runs after init + on mutations. */\n    var popup = host.closest ? host.closest('.customTabelPopup') : null;\n    if (!popup) return;\n    var legacyW = popup.querySelector('input[name=\"width__value\"]');\n    var legacyH = popup.querySelector('input[name=\"height__value\"]');\n    var w = $('[data-pcv2-width]', host);\n    var h = $('[data-pcv2-height]', host);\n    ['min', 'max', 'step'].forEach(function (attr) {\n      if (legacyW && w) {\n        var v = legacyW.getAttribute(attr);\n        if (v != null && w.getAttribute(attr) !== v) w.setAttribute(attr, v);\n      }\n      if (legacyH && h) {\n        var v = legacyH.getAttribute(attr);\n        if (v != null && h.getAttribute(attr) !== v) h.setAttribute(attr, v);\n      }\n    });\n  }\n\n  function mirrorLegacyBack(host) {\n    /* After legacy keyup handler runs (it clamps values to min/max), mirror the\n       clamped value back to the new UI so the user sees the enforced limit. */\n    var popup = host.closest ? host.closest('.customTabelPopup') : null;\n    if (!popup) return;\n    var legacyW = popup.querySelector('input[name=\"width__value\"]');\n    var legacyH = popup.querySelector('input[name=\"height__value\"]');\n    var w = $('[data-pcv2-width]', host);\n    var h = $('[data-pcv2-height]', host);\n    if (legacyW && w && legacyW.value !== w.value) w.value = legacyW.value;\n    if (legacyH && h && legacyH.value !== h.value) h.value = legacyH.value;\n    /* Re-validate after mirror-back to clear any error state now that value is clamped */\n    validateInput(host, 'width');\n    validateInput(host, 'height');\n  }\n\n  function formatLimit(n) {\n    /* Drop trailing .0 on whole numbers */\n    var num = parseFloat(n);\n    if (isNaN(num)) return n;\n    if (num === Math.floor(num)) return String(Math.floor(num));\n    return String(num);\n  }\n\n  var errorHoldTimers = {};\n  var errorShownAt = {};\n  var errorShowTimers = {};\n  var MIN_ERROR_DISPLAY_MS = 1000;\n  /* Keep this shorter than legacy clamp time (~500ms = 250 v2 sync + 250 legacy debounce)\n     so the error shows before the value gets auto-clamped back to valid. */\n  var SHOW_ERROR_DELAY_MS = 180;\n\n  function validateInput(host, which, opts) {\n    var map = {\n      width:  { input: '[data-pcv2-width]',  errEl: '[data-pcv2-error-width]',  dim: 'Width' },\n      height: { input: '[data-pcv2-height]', errEl: '[data-pcv2-error-height]', dim: 'Height' },\n      qty:    { input: '[data-pcv2-qty]',    errEl: '[data-pcv2-error-qty]',    dim: 'Quantity' }\n    };\n    var cfg = map[which];\n    if (!cfg) return;\n    var input = $(cfg.input, host);\n    var errEl = $(cfg.errEl, host);\n    if (!input || !errEl) return;\n\n    var raw = input.value;\n    var valNum = parseFloat(raw);\n    var min = parseFloat(input.getAttribute('min'));\n    var max = parseFloat(input.getAttribute('max'));\n    var msg = '';\n\n    if (raw === '' || isNaN(valNum)) {\n      /* leave empty state silent \u2014 user is still typing */\n      msg = '';\n    } else if (!isNaN(min) && valNum < min) {\n      if (which === 'qty') {\n        msg = 'Min quantity of ' + formatLimit(min);\n      } else {\n        msg = cfg.dim + ' must be at least ' + formatLimit(min) + ' inches';\n      }\n    } else if (!isNaN(max) && valNum > max) {\n      msg = cfg.dim + ' cannot exceed ' + formatLimit(max) + (which === 'qty' ? '' : ' inches');\n    }\n\n    if (!host.__pcv2Id) host.__pcv2Id = 'pcv2-' + Math.random().toString(36).slice(2, 9);\n    var key = host.__pcv2Id + ':' + which;\n    var immediate = opts && opts.immediate;\n\n    var stepper = input.closest('.pcv2__stepper');\n\n    function showError() {\n      errEl.textContent = msg;\n      errEl.hidden = false;\n      input.classList.add('is-error');\n      if (stepper) stepper.classList.add('is-error');\n      if (!errorShownAt[key]) errorShownAt[key] = Date.now();\n      if (errorHoldTimers[key]) { clearTimeout(errorHoldTimers[key]); errorHoldTimers[key] = null; }\n    }\n\n    function hideError() {\n      errEl.textContent = '';\n      errEl.hidden = true;\n      input.classList.remove('is-error');\n      if (stepper) stepper.classList.remove('is-error');\n      errorShownAt[key] = 0;\n      if (errorHoldTimers[key]) { clearTimeout(errorHoldTimers[key]); errorHoldTimers[key] = null; }\n    }\n\n    function cancelPendingShow() {\n      if (errorShowTimers[key]) { clearTimeout(errorShowTimers[key]); errorShowTimers[key] = null; }\n    }\n\n    if (msg) {\n      /* Invalid \u2014 but wait until user stops typing before showing (unless already shown or immediate) */\n      var alreadyShown = !errEl.hidden;\n      if (immediate || alreadyShown) {\n        showError();\n      } else {\n        cancelPendingShow();\n        errorShowTimers[key] = setTimeout(function () {\n          /* Re-check current value before showing \u2014 user might have corrected it */\n          var v = parseFloat(input.value);\n          var mn = parseFloat(input.getAttribute('min'));\n          var mx = parseFloat(input.getAttribute('max'));\n          var raw = input.value;\n          var stillInvalid = raw !== '' && !isNaN(v) && ((!isNaN(mn) && v < mn) || (!isNaN(mx) && v > mx));\n          if (stillInvalid) {\n            /* Rebuild the message for the current value */\n            var cfgDim = cfg.dim;\n            var newMsg;\n            if (!isNaN(mn) && v < mn) {\n              if (which === 'qty') {\n                newMsg = 'Min quantity of ' + formatLimit(mn);\n              } else {\n                newMsg = cfgDim + ' must be at least ' + formatLimit(mn) + ' inches';\n              }\n            } else {\n              newMsg = cfgDim + ' cannot exceed ' + formatLimit(mx) + (which === 'qty' ? '' : ' inches');\n            }\n            errEl.textContent = newMsg;\n            errEl.hidden = false;\n            input.classList.add('is-error');\n            if (!errorShownAt[key]) errorShownAt[key] = Date.now();\n          }\n          errorShowTimers[key] = null;\n        }, SHOW_ERROR_DELAY_MS);\n      }\n    } else {\n      cancelPendingShow();\n      /* Valid \u2014 enforce minimum 1s display time if we previously showed an error */\n      var shownAt = errorShownAt[key] || 0;\n      var elapsed = shownAt ? Date.now() - shownAt : Infinity;\n      if (elapsed >= MIN_ERROR_DISPLAY_MS) {\n        hideError();\n      } else {\n        /* Schedule hide for the remainder of the hold time, re-check validity at that point */\n        if (errorHoldTimers[key]) clearTimeout(errorHoldTimers[key]);\n        errorHoldTimers[key] = setTimeout(function () {\n          var v = parseFloat(input.value);\n          var mn = parseFloat(input.getAttribute('min'));\n          var mx = parseFloat(input.getAttribute('max'));\n          var stillInvalid = !isNaN(v) && ((!isNaN(mn) && v < mn) || (!isNaN(mx) && v > mx));\n          if (!stillInvalid) hideError();\n          errorHoldTimers[key] = null;\n        }, MIN_ERROR_DISPLAY_MS - elapsed);\n      }\n    }\n  }\n\n  function forceShowLimitError(host, which, kind) {\n    /* kind: 'min' or 'max'. Renders the appropriate error and enforces 1s min display. */\n    var map = {\n      width:  { input: '[data-pcv2-width]',  errEl: '[data-pcv2-error-width]',  dim: 'Width' },\n      height: { input: '[data-pcv2-height]', errEl: '[data-pcv2-error-height]', dim: 'Height' },\n      qty:    { input: '[data-pcv2-qty]',    errEl: '[data-pcv2-error-qty]',    dim: 'Quantity' }\n    };\n    var cfg = map[which];\n    if (!cfg) return;\n    var input = $(cfg.input, host);\n    var errEl = $(cfg.errEl, host);\n    if (!input || !errEl) return;\n    var limit = parseFloat(input.getAttribute(kind));\n    if (isNaN(limit)) return;\n\n    var msg;\n    if (kind === 'min') {\n      msg = which === 'qty'\n        ? 'Min quantity of ' + formatLimit(limit)\n        : cfg.dim + ' must be at least ' + formatLimit(limit) + ' inches';\n    } else {\n      msg = cfg.dim + ' cannot exceed ' + formatLimit(limit) + (which === 'qty' ? '' : ' inches');\n    }\n\n    var stepper = input.closest('.pcv2__stepper');\n    errEl.textContent = msg;\n    errEl.hidden = false;\n    input.classList.add('is-error');\n    if (stepper) stepper.classList.add('is-error');\n\n    if (!host.__pcv2Id) host.__pcv2Id = 'pcv2-' + Math.random().toString(36).slice(2, 9);\n    var key = host.__pcv2Id + ':' + which;\n    errorShownAt[key] = Date.now();\n\n    if (errorHoldTimers[key]) clearTimeout(errorHoldTimers[key]);\n    errorHoldTimers[key] = setTimeout(function () {\n      var curVal = parseFloat(input.value);\n      var mn = parseFloat(input.getAttribute('min'));\n      var mx = parseFloat(input.getAttribute('max'));\n      var stillInvalid = !isNaN(curVal) && ((!isNaN(mn) && curVal < mn) || (!isNaN(mx) && curVal > mx));\n      if (!stillInvalid) {\n        errEl.hidden = true;\n        errEl.textContent = '';\n        input.classList.remove('is-error');\n        if (stepper) stepper.classList.remove('is-error');\n        errorShownAt[key] = 0;\n      }\n      errorHoldTimers[key] = null;\n    }, MIN_ERROR_DISPLAY_MS);\n  }\n\n  function observeLegacyPrices(host, popup) {\n    // When existing JS updates the legacy item prices, re-render the cards\n    var target = popup.querySelector('.customTabelPopup__table');\n    if (!target || !window.MutationObserver) return;\n    var debounceId = null;\n    var obs = new MutationObserver(function () {\n      if (debounceId) clearTimeout(debounceId);\n      debounceId = setTimeout(function () {\n        renderTierCards(host);\n        /* Prices just updated \u2014 exit loading state */\n        host.classList.remove('is-loading');\n      }, 100);\n    });\n    obs.observe(target, { childList: true, subtree: true, characterData: true });\n  }\n\n  function attach(host) {\n    if (!host || host.__pcv2Init) return;\n    host.__pcv2Init = true;\n    var popup = host.closest('.customTabelPopup');\n    if (!popup) return;\n    popup.classList.add('pcv2-host');\n\n    // Qty input\n    var qty = $('[data-pcv2-qty]', host);\n    if (qty) {\n      var qtyClampTimer = null;\n      function clampQtyToMin() {\n        var min = parseInt(qty.getAttribute('min'), 10);\n        var cur = parseInt(qty.value, 10);\n        if (!isNaN(min) && !isNaN(cur) && cur < min) {\n          qty.value = String(min);\n          updateActiveTier(host);\n        }\n      }\n      qty.addEventListener('input', function () {\n        validateInput(host, 'qty');\n        updateActiveTier(host);\n        if (qtyClampTimer) clearTimeout(qtyClampTimer);\n        qtyClampTimer = setTimeout(clampQtyToMin, 500);\n      });\n      qty.addEventListener('change', function () {\n        validateInput(host, 'qty');\n        updateActiveTier(host);\n      });\n      qty.addEventListener('blur', function () {\n        validateInput(host, 'qty', { immediate: true });\n        clampQtyToMin();\n      });\n    }\n\n    // CTA \u2014 open file picker AND close popup (mirrors legacy .customTabelPopup__uploadArt handler)\n    var cta = $('[data-pcv2-cta]', host);\n    if (cta) {\n      cta.addEventListener('click', function () {\n        try {\n          /* Trigger legacy upload flow (filepond) if present, then close the popup. */\n          var filepondLabel = document.querySelector('.filepond--drop-label label');\n          if (filepondLabel) filepondLabel.click();\n          var closeBtn = popup.querySelector('.customTabelPopup__close');\n          if (closeBtn) closeBtn.click();\n        } catch (err) { /* no-op */ }\n      });\n    }\n\n    // \"Choose a previously uploaded design\" \u2014 let the legacy .purchase_from_previous handler run,\n    // but close the calculator popup first so the overlay isn't hidden behind it.\n    var prevLink = $('[data-pcv2-prev-link]', host);\n    if (prevLink) {\n      prevLink.addEventListener('click', function () {\n        try {\n          var closeBtn = popup.querySelector('.customTabelPopup__close');\n          if (closeBtn) closeBtn.click();\n        } catch (err) { /* no-op */ }\n        /* Do NOT stopPropagation \u2014 the legacy $(document).on('click', '.purchase_from_previous')\n           handler needs to fire to open the previous-designs overlay. */\n      });\n    }\n\n    // Dropzone drag-and-drop \u2014 forward dropped files to main file input\n    var dropzone = $('[data-pcv2-dropzone]', host);\n    if (dropzone) {\n      var preventDefaults = function (e) { e.preventDefault(); e.stopPropagation(); };\n      ['dragenter', 'dragover'].forEach(function (ev) {\n        dropzone.addEventListener(ev, function (e) {\n          preventDefaults(e);\n          dropzone.classList.add('is-dragover');\n        });\n      });\n      ['dragleave', 'drop'].forEach(function (ev) {\n        dropzone.addEventListener(ev, function (e) {\n          preventDefaults(e);\n          dropzone.classList.remove('is-dragover');\n        });\n      });\n      dropzone.addEventListener('drop', function (e) {\n        try {\n          var files = e.dataTransfer && e.dataTransfer.files;\n          if (!files || !files.length) return;\n          var fileInput = document.querySelector('#fileInput') || document.querySelector('input[type=\"file\"]#fileInput') || document.querySelector('.filepond--browser');\n          if (fileInput) {\n            var dt = new DataTransfer();\n            for (var i = 0; i < files.length; i++) dt.items.add(files[i]);\n            fileInput.files = dt.files;\n            fileInput.dispatchEvent(new Event('change', { bubbles: true }));\n          } else {\n            var fpLabel = document.querySelector('.filepond--drop-label label');\n            if (fpLabel) fpLabel.click();\n          }\n          var closeBtn = popup.querySelector('.customTabelPopup__close');\n          if (closeBtn) closeBtn.click();\n        } catch (err) { /* no-op */ }\n      });\n    }\n\n    // Stepper +/- buttons\n    $$('[data-pcv2-step]', host).forEach(function (btn) {\n      btn.addEventListener('click', function () {\n        var which = btn.getAttribute('data-pcv2-step');\n        var dir = parseInt(btn.getAttribute('data-pcv2-dir'), 10) || 1;\n        var targetInput = which === 'qty'\n          ? $('[data-pcv2-qty]', host)\n          : (which === 'width' ? $('[data-pcv2-width]', host) : $('[data-pcv2-height]', host));\n        if (!targetInput) return;\n        var step = parseFloat(targetInput.getAttribute('step')) || 1;\n        var min = parseFloat(targetInput.getAttribute('min'));\n        var max = parseFloat(targetInput.getAttribute('max'));\n        var cur = parseFloat(targetInput.value) || 0;\n        var requested = cur + dir * step;\n        var next = requested;\n        var hitMin = false;\n        var hitMax = false;\n        if (!isNaN(min) && requested < min) { next = min; hitMin = true; }\n        if (!isNaN(max) && requested > max) { next = max; hitMax = true; }\n        /* Also trigger when user clicks \u2212 while already at min, or + while already at max */\n        if (!hitMin && dir < 0 && !isNaN(min) && cur <= min) { next = min; hitMin = true; }\n        if (!hitMax && dir > 0 && !isNaN(max) && cur >= max) { next = max; hitMax = true; }\n        /* For width/height step (0.5), keep one decimal; for qty, integer */\n        targetInput.value = (which === 'qty') ? String(Math.round(next)) : String(Number(next.toFixed(2)).toString());\n        /* Trigger input event so existing handlers run */\n        targetInput.dispatchEvent(new Event('input', { bubbles: true }));\n        /* Show error + flash red if the user hit a limit */\n        if (hitMin) forceShowLimitError(host, which, 'min');\n        else if (hitMax) forceShowLimitError(host, which, 'max');\n      });\n    });\n\n    // Copy min/max/step from legacy to new inputs so source of truth is respected\n    pullLimitsFromLegacy(host);\n\n    // Width / Height\n    var w = $('[data-pcv2-width]', host);\n    var h = $('[data-pcv2-height]', host);\n    var syncTimer = null;\n    var loadingTimer = null;\n    function setLoading(on) {\n      host.classList.toggle('is-loading', !!on);\n    }\n    function fireSync() {\n      if (syncTimer) { clearTimeout(syncTimer); syncTimer = null; }\n      syncWidthHeightToLegacy(host);\n      /* Loading ends after legacy price settles (mirror-backs + mutations) */\n      if (loadingTimer) clearTimeout(loadingTimer);\n      setLoading(true);\n      setTimeout(function () { mirrorLegacyBack(host); }, 300);\n      setTimeout(function () { mirrorLegacyBack(host); }, 900);\n      loadingTimer = setTimeout(function () { setLoading(false); }, 1200);\n    }\n    function scheduleSync() {\n      if (syncTimer) clearTimeout(syncTimer);\n      setLoading(true);\n      syncTimer = setTimeout(fireSync, 250);\n    }\n    if (w) w.addEventListener('input', function () {\n      validateInput(host, 'width');\n      scheduleSync();\n    });\n    if (h) h.addEventListener('input', function () {\n      validateInput(host, 'height');\n      scheduleSync();\n    });\n    /* On blur, fire sync immediately (whichever is fastest: 250ms debounce OR blur) */\n    if (w) w.addEventListener('blur', function () {\n      validateInput(host, 'width', { immediate: true });\n      fireSync();\n      mirrorLegacyBack(host);\n    });\n    if (h) h.addEventListener('blur', function () {\n      validateInput(host, 'height', { immediate: true });\n      fireSync();\n      mirrorLegacyBack(host);\n    });\n\n    // Initial render + validate\n    renderTierCards(host);\n    updateActiveTier(host);\n    validateInput(host, 'width');\n    validateInput(host, 'height');\n    validateInput(host, 'qty');\n\n    // Watch for legacy price updates + watch legacy input values for clamping\n    observeLegacyPrices(host, popup);\n    observeLegacyInputs(host, popup);\n  }\n\n  function observeLegacyInputs(host, popup) {\n    /* Watch legacy width/height inputs for attribute/value changes so we can\n       mirror back (when legacy clamps the value) and keep min/max in sync. */\n    if (!window.MutationObserver) return;\n    var legacyW = popup.querySelector('input[name=\"width__value\"]');\n    var legacyH = popup.querySelector('input[name=\"height__value\"]');\n    [legacyW, legacyH].forEach(function (el) {\n      if (!el) return;\n      var obs = new MutationObserver(function () {\n        pullLimitsFromLegacy(host);\n        mirrorLegacyBack(host);\n      });\n      obs.observe(el, { attributes: true, attributeFilter: ['min', 'max', 'step', 'value'] });\n      /* Also listen to change events in case JS sets value without mutation */\n      el.addEventListener('change', function () { mirrorLegacyBack(host); });\n    });\n  }\n\n  function init() {\n    $$('.pcv2').forEach(attach);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n  // Catch late-rendered popups\n  setTimeout(init, 500);\n  setTimeout(init, 1500);\n})();\n"],
  "mappings": "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",
  "names": ["raw"]
}
