1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[35185],{5185(t,i,e){e.r(i),e.d(i,{default:()=>a});var s=e(4335);class a extends s.A{static #t=this.options={ariaLiveUpdates:!0,ariaLiveUpdateMode:"live",ariaLiveTextValueToken:"%quantity%",ariaLiveTextProductToken:"%product%",purchaseLimitUrl:null};init(){this._input=this.el.querySelector("input.js-quantity-selector"),this._btnPlus=this.el.querySelector(".js-btn-plus"),this._btnMinus=this.el.querySelector(".js-btn-minus"),this._unitLabel=this.el.querySelector(".js-quantity-selector-unit"),this._purchaseLimitFetched=!1,this.options.ariaLiveUpdates&&this._initAriaLiveUpdates(),this._registerEvents(),this._registerLivePurchaseLimitEvents()}_initAriaLiveUpdates(){if(this.ariaLiveContainer=this.el.nextElementSibling,this.ariaLiveContainer&&this.ariaLiveContainer.hasAttribute("aria-live")&&(this.ariaLiveText=this.ariaLiveContainer.dataset.ariaLiveText,this.ariaLiveProductName=this.ariaLiveContainer.dataset.ariaLiveProductName,"onload"===this.options.ariaLiveUpdateMode)){let t=window.localStorage.getItem("lastQuantityChange");t&&t===this.ariaLiveProductName&&(window.localStorage.removeItem("lastQuantityChange"),window.setTimeout(this._updateAriaLive.bind(this),1e3))}}_registerEvents(){this._btnPlus.addEventListener("click",this._stepUp.bind(this)),this._btnMinus.addEventListener("click",this._stepDown.bind(this)),this._input.addEventListener("keydown",t=>{if(13===t.keyCode)return t.preventDefault(),this._triggerChange(),!1}),this._input.addEventListener("change",this._updateUnitLabel.bind(this))}_triggerChange(t){let i=new Event("change",{bubbles:!0,cancelable:!1});this._input.dispatchEvent(i),"live"===this.options.ariaLiveUpdateMode?this._updateAriaLive():"onload"===this.options.ariaLiveUpdateMode&&window.localStorage.setItem("lastQuantityChange",this.ariaLiveProductName),"up"===t?this._btnPlus.dispatchEvent(i):"down"===t&&this._btnMinus.dispatchEvent(i)}_stepUp(){let t=this._input.value;this._input.stepUp(),this._input.value!==t&&this._triggerChange("up")}_stepDown(){let t=this._input.value;this._input.stepDown(),this._input.value!==t&&this._triggerChange("down")}_updateAriaLive(){if(!this.options.ariaLiveUpdates||!this.ariaLiveText||!this.ariaLiveContainer)return;let t=this._input.value,i=this.ariaLiveText.replace(this.options.ariaLiveTextValueToken,t);this.options.ariaLiveTextProductToken&&this.ariaLiveProductName&&(i=i.replace(this.options.ariaLiveTextProductToken,this.ariaLiveProductName)),this.ariaLiveContainer.innerHTML=i}_updateUnitLabel(){if(!this._unitLabel)return;let{unitSingular:t,unitPlural:i}=this._unitLabel.dataset;if(!t)return;let e=parseFloat(this._input.value);Number.isNaN(e)||(this._unitLabel.textContent=e>1&&i?i:t)}_registerLivePurchaseLimitEvents(){let t=this.options.purchaseLimitUrl;t&&(this._onFirstInteraction=this._fetchLivePurchaseLimit.bind(this,t),this._input.addEventListener("focus",this._onFirstInteraction),this._btnPlus.addEventListener("click",this._onFirstInteraction,!0),this._btnMinus.addEventListener("click",this._onFirstInteraction,!0))}_removeLivePurchaseLimitEvents(){this._input.removeEventListener("focus",this._onFirstInteraction),this._btnPlus.removeEventListener("click",this._onFirstInteraction,!0),this._btnMinus.removeEventListener("click",this._onFirstInteraction,!0)}_fetchLivePurchaseLimit(t){this._purchaseLimitFetched||(this._purchaseLimitFetched=!0,this._removeLivePurchaseLimitEvents(),fetch(t,{headers:{"X-Requested-With":"XMLHttpRequest"}}).then(t=>t.ok?t.json():null).then(t=>{t&&this._applyPurchaseLimit(t)}).catch(t=>{console.warn("Unable to fetch live quantity limits, keeping rendered values.",t)}))}_applyPurchaseLimit(t){if(!this._input)return;let i=t.maxPurchase;if(i<=0){this._disableControls(),this._dispatchFormEvent("QuantitySelector/OutOfStock");return}let e=t.minPurchase,s=t.purchaseSteps;this._input.setAttribute("min",e),this._input.setAttribute("max",i),this._input.setAttribute("step",s);let a=parseInt(this._input.value,10)||e,n=Math.floor((Math.min(Math.max(a,e),i)-e)/s)*s+e;n!==a&&(this._input.value=n,this._triggerChange(),this._dispatchFormEvent("QuantitySelector/StockAdjusted",{quantity:n}))}_disableControls(){this._input.disabled=!0,this._btnPlus.disabled=!0,this._btnMinus.disabled=!0}
1_dispatchFormEvent(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.el.closest("form")?.dispatchEvent(new CustomEvent(t,{detail:i}))}}}}]);
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.