1(function(){if(window.PreorderCartGuard)return;var snapshot=window.WAK_CART_PREORDER||{},taggedVariantIds={};function rememberTagged(ids){(ids||[]).forEach(function(id){id&&(taggedVariantIds[String(id)]=!0)})}function isTaggedVariant(id){return id!=null&&taggedVariantIds[String(id)]===!0}rememberTagged(snapshot.taggedVariantIds);var state={hasPreorder:!!snapshot.hasPreorder,hasNormal:!!snapshot.hasNormal,hasTagged:!!(snapshot.taggedVariantIds&&snapshot.taggedVariantIds.length)},pendingAdds=[],PENDING_TTL_MS=15e3;function prunePending(){var now=Date.now();pendingAdds=pendingAdds.filter(function(p){return now-p.at<PENDING_TTL_MS})}function isSystemLine(line){return Number(line.price)===0}function isTaggedLine(line){return isTaggedVariant(line.variant_id||line.id)}function isPreorderLine(line){return line.properties&&line.properties._preorder==="true"||isTaggedLine(line)}function classify(lines){var relevant=lines.filter(function(l){return!isSystemLine(l)}),hasPreorder=relevant.some(isPreorderLine),hasNormal=relevant.some(function(l){return!isPreorderLine(l)}),hasTagged=relevant.some(isTaggedLine);return{hasPreorder:hasPreorder,hasNormal:hasNormal,hasTagged:hasTagged}}function refreshFromCart(cart){var lines=cart&&cart.items||[],next=classify(lines);state.hasPreorder=next.hasPreorder,state.hasNormal=next.hasNormal,state.hasTagged=next.hasTagged,pendingAdds=[],next.hasPreorder&&ensurePolling(),next.hasTagged&&installAppAddGuard()}function fetchCartOnce(){return fetch("/cart.js",{credentials:"include",cache:"no-store"}).then(function(r){if(!r.ok)throw new Error("cart fetch failed: "+r.status);return r.json()})}function delay(ms){return new Promise(function(resolve){setTimeout(resolve,ms)})}function fetchCart(){return fetchCartOnce().catch(function(){return delay(400).then(fetchCartOnce)}).catch(function(){return delay(900).then(fetchCartOnce)})}var chain=Promise.resolve();function evaluateAdd(req){return chain=chain.catch(function(){}).then(function(){prunePending();var pendingHasPreorder=pendingAdds.some(function(p){return p.isPreorder}),pendingHasNormal=pendingAdds.some(function(p){return!p.isPreorder}),effectiveHasPreorder=state.hasPreorder||pendingHasPreorder,effectiveHasNormal=state.hasNormal||pendingHasNormal,suspect=req.isPreorder?effectiveHasNormal:effectiveHasPreorder;return suspect?fetchCart().then(function(cart){prunePending();var lines=cart.items.concat(pendingAdds.map(function(p){return{id:p.variantId,price:1,properties:p.isPreorder?{_preorder:"true"}:{}}})),real=classify(lines);state.hasPreorder=real.hasPreorder,state.hasNormal=real.hasNormal,state.hasTagged=real.hasTagged;var conflict=req.isPreorder?real.hasNormal:real.hasPreorder;return conflict?{allowed:!1,reasonKey:req.isPreorder?"addingPreorder":"addingRegular"}:(pendingAdds.push({variantId:req.variantId,isPreorder:req.isPreorder,at:Date.now()}),isTaggedVariant(req.variantId)&&installAppAddGuard(),req.isPreorder&&ensurePolling(),{allowed:!0})}).catch(function(){return{allowed:!1,reasonKey:req.isPreorder?"addingPreorder":"addingRegular"}}):(pendingAdds.push({variantId:req.variantId,isPreorder:req.isPreorder,at:Date.now()}),isTaggedVariant(req.variantId)&&installAppAddGuard(),req.isPreorder&&ensurePolling(),{allowed:!0})}),chain}function isMixed(items){var result=classify(items||[]);return result.hasPreorder&&result.hasNormal}function conflictingLines(items,wantPreorder){return(items||[]).filter(function(l){return!isSystemLine(l)&&isPreorderLine(l)===wantPreorder})}function resolveMessage(reasonKey){var strings=window.preorderStrings||{};return strings[reasonKey]||""}function isPreorderForm(productFormEl){var flag=productFormEl?productFormEl.querySelector("[data-preorder-flag]"):null;return!!(flag&&!flag.disabled)}function setPending(productFormEl,pending){var button=productFormEl.querySelector('[type="submit"]');if(button){button.classList.toggle("loading",pending);var spinner=button.querySelector(".loading__spinner");spinner&&spinner.classList.toggle("hidden",!pending)}}function showBlocked(productFormEl,message){if(message&&(showToast(message),typeof productFormEl.handleErrorMessage=="function")){productFormEl.handleErrorMessage(message);var wrapper=productFormEl.querySelector(".product-form__error-message-wrapper");if(wrapper){var rect=wrapper.getBoundingClientRect(),offscreen=rect.top<0||rect.bottom>window.innerHeight;offscreen&&(wrapper.setAttribute("tabindex","-1"),wrapper.scrollIntoView({block:"center"}
1),wrapper.focus())}}}var toastMessageEl=null;function buildToast(){var toast=document.createElement("div");toast.id="preorder-guard-toast",toast.setAttribute("role","alert"),toast.style.cssText="position:fixed;left:16px;right:16px;bottom:24px;margin:0 auto;display:flex;align-items:flex-start;gap:10px;background:#1f2937;color:#f9fafb;padding:14px 14px 14px 16px;border-radius:14px;font-size:14px;line-height:1.45;max-width:420px;box-shadow:0 12px 32px rgba(0,0,0,.28);z-index:2147483647;";var icon=document.createElement("span");icon.textContent="\u26A0",icon.setAttribute("aria-hidden","true"),icon.style.cssText="flex:none;font-size:16px;line-height:1.4;";var text=document.createElement("span");text.id="preorder-guard-toast-message",text.style.cssText="flex:1;";var closeBtn=document.createElement("button");return closeBtn.type="button",closeBtn.setAttribute("aria-label","Close"),closeBtn.textContent="\xD7",closeBtn.style.cssText="flex:none;background:none;border:0;color:#f9fafb;opacity:.6;font-size:20px;line-height:1;cursor:pointer;padding:2px;margin:-2px -2px 0 0;",closeBtn.addEventListener("mouseenter",function(){closeBtn.style.opacity="1"}),closeBtn.addEventListener("mouseleave",function(){closeBtn.style.opacity=".6"}),closeBtn.addEventListener("click",function(){toast.style.display="none"}),toast.appendChild(icon),toast.appendChild(text),toast.appendChild(closeBtn),toastMessageEl=text,toast}function showToast(message){var toast=document.getElementById("preorder-guard-toast")||buildToast();document.documentElement.appendChild(toast),toastMessageEl.textContent=message,toast.style.display="flex"}function onAddToCartSubmit(evt){var form=evt.target;if(form instanceof HTMLFormElement&&form.dataset.type==="add-to-cart-form"){if(form.__preorderGuardCleared){form.__preorderGuardCleared=!1;return}var productFormEl=form.closest("product-form"),idInput=form.querySelector('[name="id"]');if(!(!productFormEl||!idInput)){evt.preventDefault(),evt.stopImmediatePropagation();var taggedFlag=productFormEl.querySelector("[data-preorder-tagged]");taggedFlag&&rememberTagged(taggedFlag.dataset.preorderTagged.split(","));var req={variantId:idInput.value,isPreorder:isPreorderForm(productFormEl)};setPending(productFormEl,!0),evaluateAdd(req).then(function(result){if(setPending(productFormEl,!1),!result.allowed){showBlocked(productFormEl,resolveMessage(result.reasonKey));return}form.__preorderGuardCleared=!0,form.dispatchEvent(new Event("submit",{bubbles:!0,cancelable:!0}))})}}}document.addEventListener("submit",onAddToCartSubmit,!0),typeof subscribe=="function"&&typeof PUB_SUB_EVENTS!="undefined"&&(subscribe(PUB_SUB_EVENTS.cartUpdate,function(){fetchCart().then(refreshFromCart).catch(function(){})}),PUB_SUB_EVENTS.cartError&&subscribe(PUB_SUB_EVENTS.cartError,function(){pendingAdds=[]}));function guardRecoAdd(button){return button.dataset.preorderTagged&&rememberTagged(button.dataset.preorderTagged.split(",")),evaluateAdd({variantId:button.dataset.variantId,isPreorder:button.dataset.preorder==="true"})}var appAddGuardInstalled=!1;function isTaggedActive(){return prunePending(),state.hasTagged||pendingAdds.some(function(p){return isTaggedVariant(p.variantId)})}function isCartAddRequest(method,url){if(String(method||"GET").toUpperCase()!=="POST")return!1;try{return/\/cart\/add(\.js|\.json)?$/.test(new URL(String(url),window.location.origin).pathname)}catch(e){return!1}}function itemsFromBody(body){if(body==null)return null;if(typeof body=="string")try{return itemsFromJson(JSON.parse(body))}catch(e){return itemsFromEntries(new URLSearchParams(body))}return typeof FormData!="undefined"&&body instanceof FormData||typeof URLSearchParams!="undefined"&&body instanceof URLSearchParams?itemsFromEntries(body):null}function itemsFromJson(data){if(!data||typeof data!="object")return null;var list=Array.isArray(data.items)?data.items:data.id!=null?[data]:null;if(!list||!list.length)return null;var items=list.map(function(i){return{id:i&&i.id!=null?String(i.id):null,quantity:Number(i&&i.quantity||1),properties:i&&i.properties||{}}});return items.every(function(i){return i.id})?items:null}function itemsFromEntries(entries){var byIndex={};
1entries.forEach(function(value,key){var m=/^items\[(\d+)\]\[(\w+)\](?:\[(.+)\])?$/.exec(key),index=m?m[1]:"single",field=m?m[2]:key,prop=m?m[3]:null;if(!m){var pm=/^properties\[(.+)\]$/.exec(key);pm&&(field="properties",prop=pm[1])}var item=byIndex[index]||(byIndex[index]={id:null,quantity:1,properties:{}});field==="id"?item.id=String(value):field==="quantity"?item.quantity=Number(value)||1:field==="properties"&&prop&&(item.properties[prop]=String(value))});var items=Object.keys(byIndex).map(function(k){return byIndex[k]});return!items.length||!items.every(function(i){return i.id})?null:items}function isRewardItem(item){return Object.keys(item.properties).some(function(k){return k==="__upcartRewardProduct"||k==="__upcartTriggeredReward"})}function isPreorderItem(item){return item.properties._preorder==="true"||isTaggedVariant(item.id)}function appAddConflicts(items){return!items||!isTaggedActive()?!1:items.some(function(i){return!isRewardItem(i)&&!isPreorderItem(i)})}function blockedAddResponse(message){return new Response(JSON.stringify({status:422,message:message,description:message}),{status:422,headers:{"Content-Type":"application/json"}})}function refreshUpcartDrawer(){if(typeof window.upcartRefreshCart=="function")try{window.upcartRefreshCart()}catch(e){}}function confirmFromCart(){return fetchCart().then(refreshFromCart,function(){})}function readXhrJson(xhr){try{if(xhr.responseType==="json")return xhr.response;if(xhr.responseType===""||xhr.responseType==="text")return JSON.parse(xhr.responseText)}catch(e){}return null}function undoXhrAdd(xhr,items){var added=readXhrJson(xhr);if(added){var lines=added&&Array.isArray(added.items)?added.items:added&&added.key?[added]:[],requestedById={};items.forEach(function(i){!isRewardItem(i)&&!isPreorderItem(i)&&(requestedById[i.id]=(requestedById[i.id]||0)+i.quantity)});var updates={};lines.forEach(function(l){var requested=requestedById[String(l.variant_id||l.id)];requested&&l.key&&(updates[l.key]=Math.max(0,Number(l.quantity)-requested))}),Object.keys(updates).length&&(fetch("/cart/update.js",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({updates:updates})}).then(function(r){return r.json()}).then(function(cart){refreshFromCart(cart),refreshUpcartDrawer()}).catch(function(){}),showToast(resolveMessage("addingRegular")))}}function installAppAddGuard(){if(!appAddGuardInstalled){appAddGuardInstalled=!0;var previousFetch=window.fetch;if(typeof previousFetch=="function"&&(window.fetch=function(input,init){var args=arguments,passThrough=function(){return previousFetch.apply(window,args)};if(!isTaggedActive())return passThrough();var isRequest=typeof Request!="undefined"&&input instanceof Request,url=isRequest?input.url:input,method=init&&init.method||(isRequest?input.method:"GET");if(!isCartAddRequest(method,url))return passThrough();var bodyRead=init&&init.body!=null?Promise.resolve(init.body):isRequest?input.clone().text():Promise.resolve(null);return bodyRead.then(function(body){var items=null;try{items=itemsFromBody(body)}catch(e){}return appAddConflicts(items)?confirmFromCart().then(function(){if(!appAddConflicts(items))return passThrough();var message=resolveMessage("addingRegular");return showToast(message),blockedAddResponse(message)}):passThrough()},passThrough)}),typeof XMLHttpRequest!="undefined"){var originalOpen=XMLHttpRequest.prototype.open,originalSend=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(method,url){try{this.__preorderGuardIsAdd=isCartAddRequest(method,url)}catch(e){}return originalOpen.apply(this,arguments)},XMLHttpRequest.prototype.send=function(body){try{if(this.__preorderGuardIsAdd&&isTaggedActive()){var items=itemsFromBody(body);appAddConflicts(items)&&this.addEventListener("load",function(){if(!(this.status<200||this.status>=300)){var xhr=this;confirmFromCart().then(function(){appAddConflicts(items)&&undoXhrAdd(xhr,items)})}})}}catch(e){}return originalSend.apply(this,arguments)}}var previousModifyUpsells=window.upcartModifyListOfUpsells;window.upcartModifyListOfUpsells=function(){var result=typeof previousModifyUpsells=="function"?previousModifyUpsells.apply(this,arguments):void 0;return isTaggedActive()?[]:result},refreshUpcartDrawer()}}function pollForUpcart(attemptsLeft){typeof window.upcartSubscribeCartLoaded=="function"&&window.upcartSubscribeCartLoaded(function(){fetchCart().then(refreshFromCart).catch(function(){})}),typeof window.upcartSubscribeItemRemoved=="function"&&window.upcartSubscribeItemRemoved(function(){fetchCart().then(refreshFromCart).catch(function(){})}),typeof window.upcartSubscribeUpsellsAddedToCart=="function"&&window.upcartSubscribeUpsellsAddedToCart(function(payload){fetchCart().then(function(cart){var wasMixed=isMixed(cart.items);if(refreshFromCart(cart),!!wasMixed){var addedId=payload&&(payload.variantId||payload.id),offending=cart.items.filter(function(l){return!isSystemLine(l)&&String(l.variant_id||l.id)===String(addedId)})[0];offending&&fetch("/cart/change.js",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:offending.key,quantity:0})}).then(function(r){return r.json()}).then(function(updated){refreshFromCart(updated),showToast(window.preorderStrings&&window.preorderStrings.mixedCartNotice)})}})});var found=typeof window.upcartSubscribeCartLoaded=="function"||typeof window.upcartSubscribeItemRemoved=="function"||typeof window.upcartSubscribeUpsellsAddedToCart=="function";!found&&attemptsLeft>0&&setTimeout(function(){pollForUpcart(attemptsLeft-1)},250)}var recheckTimer=null,mixedNoticeShown=!1,lastRecheckAt=0,RECHECK_MIN_INTERVAL_MS=25e3;function checkForMix(){lastRecheckAt=Date.now(),fetchCart().then(function(cart){var mixed=isMixed(cart.items);refreshFromCart(cart),mixed&&!mixedNoticeShown?(mixedNoticeShown=!0,showToast(window.preorderStrings&&window.preorderStrings.mixedCartNotice)):mixed||(mixedNoticeShown=!1)}).catch(function(){})}function scheduleClickTriggeredCheck(evt){if(!(Date.now()-lastRecheckAt<RECHECK_MIN_INTERVAL_MS)){var target=evt.target;!(target instanceof Element)||!target.closest('[class*="upcart"]')||(clearTimeout(recheckTimer),recheckTimer=setTimeout(checkForMix,800))}}
1document.addEventListener("click",scheduleClickTriggeredCheck,!0),document.addEventListener("visibilitychange",function(){document.visibilityState==="visible"&&(Date.now()-lastRecheckAt<RECHECK_MIN_INTERVAL_MS||checkForMix())}),window.addEventListener("pageshow",function(evt){evt.persisted&&checkForMix()});var pollingStarted=!1;function ensurePolling(){pollingStarted||(pollingStarted=!0,pollForUpcart(40))}window.WAK_CART_PREORDER&&window.WAK_CART_PREORDER.hasPreorder&&ensurePolling(),document.querySelectorAll("[data-preorder-tagged]").forEach(function(el){rememberTagged(el.dataset.preorderTagged.split(","))}),state.hasTagged&&installAppAddGuard(),window.PreorderCartGuard={evaluateAdd:evaluateAdd,isMixed:isMixed,conflictingLines:conflictingLines,resolveMessage:resolveMessage,showToast:showToast,guardRecoAdd:guardRecoAdd,refreshFromCart:refreshFromCart}})(); 2//# sourceMappingURL=/cdn/shop/t/59/assets/preorder-cart-guard.js.map?v=51647114772111772741790883259
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.