{
  "version": 3,
  "sources": ["/cdn/shop/t/33/assets/pp-purchase-guard-v1.js?cartfix=20260824-1"],
  "sourcesContent": ["(function () {\n  var guard;\n  var guardButton;\n  var guardPrice;\n  var scheduled = false;\n\n  function productForm() {\n    return document.querySelector('.product-block-list__item--info .product-form');\n  }\n\n  function visible(element) {\n    if (!element || !element.isConnected || element.hidden) return false;\n    var rect = element.getBoundingClientRect();\n    if (rect.width <= 0 || rect.height <= 0) return false;\n    var node = element;\n    while (node && node.nodeType === 1) {\n      var style = window.getComputedStyle(node);\n      if (style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity) === 0) return false;\n      node = node.parentElement;\n    }\n    return true;\n  }\n\n  function sourceButton(form) {\n    if (!form) return null;\n    var buttons = Array.prototype.slice.call(form.querySelectorAll(\n      '.mw-apo-add-to-cart-custom, .mw-apo-add-to-cart-cloned, .mw-apo-add-to-cart-hide, .product-form__add-button'\n    )).filter(function (button) {\n      return !button.classList.contains('pp-permanent-add-to-cart') &&\n        !button.classList.contains('pp-purchase-guard__button') &&\n        !button.classList.contains('pp-apo-add-to-cart-proxy');\n    });\n    if (form.querySelector('#calculator')) {\n      var calculatorButton = buttons.find(function (button) {\n        return button.classList.contains('product-form__add-button') &&\n          !button.classList.contains('mw-apo-add-to-cart-custom') &&\n          !button.classList.contains('mw-apo-add-to-cart-cloned');\n      });\n      if (calculatorButton) return calculatorButton;\n    }\n    return buttons.find(visible) || buttons.find(function (button) {\n      return !button.disabled && button.getAttribute('aria-disabled') !== 'true';\n    }) || buttons[0] || null;\n  }\n\n  function triggerPurchase(form) {\n    if (!form) return;\n\n    // CPC must receive a click on its own button to create the priced variant.\n    if (form.querySelector('#calculator')) {\n      var calculatorButton = sourceButton(form);\n      if (calculatorButton && !calculatorButton.disabled && calculatorButton.getAttribute('aria-disabled') !== 'true') {\n        // APO can replace the button after CPC binds it. Use CPC's exported\n        // handler so its current configuration validates and prices the item.\n        if (window.cpc && typeof window.cpc.addToCartHandler === 'function') {\n          window.cpc.addToCartHandler(new MouseEvent('click', { bubbles: true, cancelable: true }));\n        } else {\n          calculatorButton.click();\n        }\n      }\n      return;\n    }\n\n    // Route APO products through the live visible proxy so the theme can\n    // prepare conditional option state before invoking the app's current clone.\n    var proxy = form.querySelector('.pp-apo-add-to-cart-proxy');\n    if (proxy && !proxy.disabled && proxy.getAttribute('aria-disabled') !== 'true') {\n      proxy.click();\n      return;\n    }\n\n    var source = sourceButton(form);\n    if (source && !source.disabled && source.getAttribute('aria-disabled') !== 'true') {\n      if (source.type === 'submit' && typeof form.requestSubmit === 'function') {\n        form.requestSubmit(source);\n      } else {\n        source.click();\n      }\n      return;\n    }\n\n    if (typeof form.requestSubmit === 'function') form.requestSubmit();\n  }\n\n  function ensurePermanentButton(form, source) {\n    if (!form || !form.querySelector('.mw-apo-container')) return source;\n\n    var permanent = form.querySelector(':scope > .pp-permanent-add-to-cart');\n    if (source && visible(source)) {\n      if (permanent) permanent.remove();\n      return source;\n    }\n\n    if (!permanent) {\n      permanent = document.createElement('button');\n      permanent.type = 'button';\n      permanent.className = 'product-form__add-button button button--primary pp-permanent-add-to-cart';\n      permanent.textContent = 'Add to cart';\n    }\n\n    var optionsHost = form.querySelector(':scope > .pp-apo-options-host');\n    var appBlock = form.querySelector(':scope > [data-block-type=\"@app\"]');\n    var calculatorPage = /^\\/products\\/(bespoke-acrylic-display-case|bespoke-acrylic-plinth|bespoke-lego-display-case)\\/?$/.test(window.location.pathname);\n    if (calculatorPage && appBlock) {\n      if (permanent.previousElementSibling !== appBlock) {\n        appBlock.insertAdjacentElement('afterend', permanent);\n      }\n    } else if (permanent.parentElement !== form) {\n      form.insertBefore(permanent, optionsHost || appBlock || null);\n    }\n\n    var unavailable = !source || source.disabled || source.getAttribute('aria-disabled') === 'true';\n    var sourceText = source ? (source.textContent || '').trim() : '';\n    var permanentText = sourceText || 'Add to cart';\n    if (permanent.textContent !== permanentText) permanent.textContent = permanentText;\n    if (permanent.disabled !== unavailable) permanent.disabled = unavailable;\n    if (permanent.getAttribute('aria-disabled') !== String(unavailable)) {\n      permanent.setAttribute('aria-disabled', String(unavailable));\n    }\n    return permanent;\n  }\n\n  function livePrice(form) {\n    var node = document.querySelector('#calculator .price-marker') ||\n      (form && form.querySelector('.product-form__info-content .price-list .price:not(.price--compare)')) ||\n      (form && form.querySelector('.product-form__info-content .price-list .price'));\n    if (!node) return '';\n    var match = (node.textContent || '').replace(/\\s+/g, ' ').match(/\u00A3\\s*[\\d,.]+(?:\\s*GBP)?/i);\n    return match ? match[0].replace(/\u00A3\\s+/, '\u00A3') : '';\n  }\n\n  function placeBottomPurchase(form) {\n    if (!form || !guard) return false;\n\n    var optionsHost = form.querySelector(':scope > .pp-apo-options-host');\n    var optionsContainer = optionsHost && optionsHost.querySelector(':scope > .mw-apo-container');\n    if (!optionsHost || !optionsContainer) return false;\n\n    if (guard.parentElement !== optionsHost || guard.previousElementSibling !== optionsContainer) {\n      optionsContainer.insertAdjacentElement('afterend', guard);\n    }\n\n    return true;\n  }\n\n  function update() {\n    scheduled = false;\n    var form = productForm();\n    if (!form || !guard) {\n      if (guard) guard.hidden = true;\n      return;\n    }\n\n    var source = sourceButton(form);\n    ensurePermanentButton(form, form.querySelector('#calculator') ? source : (form.querySelector('.pp-apo-add-to-cart-proxy') || source));\n    var price = livePrice(form);\n    var isPlaced = placeBottomPurchase(form);\n\n    var displayedPrice = price || '\u2014';\n    var guardDisabled = !!(source && (source.disabled || source.getAttribute('aria-disabled') === 'true'));\n    var shouldHide = !price || !isPlaced;\n\n    if (guardPrice.textContent !== displayedPrice) guardPrice.textContent = displayedPrice;\n    if (guardButton.disabled !== guardDisabled) guardButton.disabled = guardDisabled;\n    if (guard.hidden !== shouldHide) guard.hidden = shouldHide;\n  }\n\n  function schedule() {\n    if (scheduled) return;\n    scheduled = true;\n    window.requestAnimationFrame(update);\n  }\n\n  function init() {\n    if (!document.body.classList.contains('template-product') || guard) return;\n    guard = document.createElement('div');\n    guard.id = 'pp-purchase-guard';\n    guard.hidden = true;\n    guard.setAttribute('aria-label', 'Purchase controls');\n    guard.innerHTML = '<div class=\"pp-purchase-guard__total\" aria-live=\"polite\"><span>Total:</span><strong class=\"pp-purchase-guard__price\">\u2014</strong></div>' +\n      '<button class=\"product-form__add-button button button--primary pp-purchase-guard__button\" type=\"button\">Add to cart</button>';\n    document.body.appendChild(guard);\n    guardButton = guard.querySelector('.pp-purchase-guard__button');\n    guardPrice = guard.querySelector('.pp-purchase-guard__price');\n\n    // APO may replace permanent buttons too; delegate to the current form.\n    document.addEventListener('click', function (event) {\n      var permanent = event.target.closest && event.target.closest('.pp-permanent-add-to-cart');\n      if (!permanent || permanent.disabled) return;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      triggerPurchase(permanent.closest('form'));\n    }, true);\n\n    guardButton.addEventListener('click', function () {\n      var form = productForm();\n      triggerPurchase(form);\n    });\n\n    document.addEventListener('input', schedule);\n    document.addEventListener('change', schedule);\n    window.addEventListener('resize', schedule);\n    new MutationObserver(schedule).observe(document.documentElement, {\n      attributes: true,\n      attributeFilter: ['class', 'style', 'hidden', 'disabled', 'aria-disabled'],\n      childList: true,\n      subtree: true\n    });\n    window.setInterval(schedule, 1000);\n    schedule();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n\n"],
  "mappings": "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",
  "names": []
}
