https://hudabeauty.com/cdn/shop/t/339/assets/pdp-inline-quantity.js?v=126461490443972552641790669443
1customElements.get("pdp-inline-quantity")||customElements.define("pdp-inline-quantity",class extends HTMLElement{constructor(){super(),this.line=Number(this.dataset.line)||0,this.itemKey=this.dataset.key||"",this.quantity=Number(this.dataset.quantity)||0,this._trackedLineQty=Number(this.dataset.lineQuantity)||this.quantity,this._isBusy=!1,this._isLocked=!1,this._cartQtyByVariant=new Map,this.onActionClick=this.onActionClick.bind(this),this.onSyncEvent=this.onSyncEvent.bind(this),this.onSwatchClickCapture=this.onSwatchClickCapture.bind(this),this.onGlobalAtcLockChange=this.onGlobalAtcLockChange.bind(this),this.onPageShow=this.onPageShow.bind(this)}connectedCallback(){this.productForm=this.closest("product-form"),this.form=this.productForm?.querySelector("form")||document.getElementById(this.dataset.formId),this.variantInput=this.form?.querySelector('input[name="id"]'),this.atcButton=this.productForm?.querySelector('button.product-form__submit[type="submit"]'),this.productPage=this.closest(".product-page"),this.minusIcon=this.querySelector(".pdp-inline-quantity__icon--minus"),this.removeIcon=this.querySelector(".pdp-inline-quantity__icon--remove"),this.valueEl=this.querySelector('[data-role="value"]'),this.leftBtn=this.querySelector(".pdp-inline-quantity__btn--left"),this.plusBtn=this.querySelector(".pdp-inline-quantity__btn--plus"),this.querySelectorAll("[data-action]").forEach(btn=>btn.addEventListener("click",this.onActionClick)),document.addEventListener("pdp-inline-quantity:sync",this.onSyncEvent),document.addEventListener("click",this.onSwatchClickCapture,!0),document.addEventListener("hb:atc-lock-change",this.onGlobalAtcLockChange),this.onGlobalAtcLockChange(),window.addEventListener("pageshow",this.onPageShow),typeof subscribe=="function"&&PUB_SUB_EVENTS?.cartUpdate&&(this._unsubscribe=subscribe(PUB_SUB_EVENTS.cartUpdate,event=>{event?.source!=="pdp-inline-quantity"&&event?.cartData&&this.syncFromCart(event.cartData)})),this.populateCartQtyFromSwatches(),this.applyState(),this.isBackForwardNavigation()&&this.refreshFromCart()}isBackForwardNavigation(){try{return performance.getEntriesByType("navigation")[0]?.type==="back_forward"}catch{return!1}}disconnectedCallback(){document.removeEventListener("pdp-inline-quantity:sync",this.onSyncEvent),document.removeEventListener("click",this.onSwatchClickCapture,!0),document.removeEventListener("hb:atc-lock-change",this.onGlobalAtcLockChange),window.removeEventListener("pageshow",this.onPageShow),this._unsubscribe?.()}get currentVariantId(){return String(this.variantInput?.value||this.dataset.variantId||"")}setLocalState({quantity,line,key,lineQuantity}){this.quantity=Math.max(0,Number(quantity)||0),this.line=Number(line)||0,this.itemKey=key||"",typeof lineQuantity=="number"?this._trackedLineQty=Math.max(0,lineQuantity):this.itemKey===""&&(this._trackedLineQty=this.quantity),this.dataset.quantity=String(this.quantity),this.dataset.line=String(this.line),this.dataset.key=this.itemKey,this.applyState(),this.syncPdpQuantityInput(this.quantity)}applyState(){const showSelector=this.quantity>0;this.toggleAttribute("hidden",!showSelector),this.atcButton?.toggleAttribute("hidden",showSelector),this.valueEl&&(this.valueEl.textContent=String(this.quantity||1));const showRemove=this.quantity<=1;this.removeIcon?.toggleAttribute("hidden",!showRemove),this.minusIcon?.toggleAttribute("hidden",showRemove),this.leftBtn&&(this.leftBtn.dataset.action=showRemove?"remove":"minus");const max=this.getMaxQuantity();this.plusBtn?.toggleAttribute("disabled",max!=null&&this.quantity>=max)}getMaxQuantity(){const val=Number(this.form?.querySelector('input[name="max-quantity"]')?.value);return Number.isFinite(val)?val:null}syncFromCart(cart){if(!cart?.items)return;const isFullCart=typeof cart.item_count=="number"||typeof cart.total_price=="number";isFullCart&&(this._cartQtyByVariant.clear(),cart.items.forEach(item=>{const vid=String(item.variant_id),prev=this._cartQtyByVariant.get(vid)||0;this._cartQtyByVariant.set(vid,prev+(Number(item.quantity)||0))}),this.syncAllSwatchAttrsFromCache());const variantId=this.currentVariantId;if(!variantId)return;let totalQty=0,line=0,key="",trackedLineQty=0,foundUndiscounted=!1;
1cart.items.forEach((item,i)=>{if(String(item.variant_id)!==variantId)return;const itemQty=Number(item.quantity)||0;totalQty+=itemQty;const isDiscounted=(item.line_level_total_discount||0)>0||Array.isArray(item.discounts)&&item.discounts.length>0;!foundUndiscounted&&!isDiscounted?(foundUndiscounted=!0,line=i+1,key=item.key||"",trackedLineQty=itemQty):key||(line=i+1,key=item.key||"",trackedLineQty=itemQty)}),!(totalQty===0&&!isFullCart)&&this.setLocalState({quantity:totalQty,line,key,lineQuantity:trackedLineQty})}async refreshFromCart(){try{const res=await fetch(`${window.routes?.cart_url||"/cart"}.js`,{headers:{Accept:"application/json"}});this.syncFromCart(await res.json())}catch(err){console.warn("pdp-inline-quantity: cart refresh failed",err)}}async onPageShow(event){event?.persisted&&this.refreshFromCart()}onSyncEvent(event){const{variantId,quantity,key,line}=event?.detail||{};if(variantId&&String(variantId)!==this.currentVariantId)return;if(typeof quantity=="number"){this.setLocalState({quantity,line:line??this.line,key:key??this.itemKey});return}const vid=String(variantId||this.currentVariantId),cachedQty=this._cartQtyByVariant.get(vid);this.setLocalState({quantity:typeof cachedQty=="number"?cachedQty:0,line:0,key:""}),this._isBusy||setTimeout(()=>!this._isBusy&&this.refreshFromCart(),0)}onGlobalAtcLockChange(event){const locked=typeof event?.detail?.locked=="boolean"?event.detail.locked:!!window.__hbAtcLock?.count;this._isLocked=locked,this.toggleAttribute("data-locked",locked)}onSwatchClickCapture(event){if(this._isBusy||!this.productPage?.contains(event.target))return;const square=event.target.closest(".product-square-swatch"),dropdown=event.target.closest(".product-dropdown-swatch");if(!square&&!dropdown)return;let variantId="",qtyAttr="";if(square){const input=square.closest(".swatch-input__label__wrapper")?.querySelector(".swatch-input__input");variantId=input?.dataset.variantId||"",qtyAttr=input?.dataset.quantityInCart||""}else variantId=dropdown.dataset.id||"",qtyAttr=dropdown.dataset.quantityInCart||"";if(!variantId)return;const cachedQty=this._cartQtyByVariant.get(variantId),attrQty=parseInt(qtyAttr,10),qty=typeof cachedQty=="number"?cachedQty:Number.isFinite(attrQty)?attrQty:0;this.setLocalState({quantity:qty,line:0,key:""}),this.dataset.variantId=variantId,setTimeout(()=>!this._isBusy&&this.refreshFromCart(),0)}onActionClick(event){if(this._isBusy||this._isLocked)return;const action=event.currentTarget?.dataset?.action;if(action)if(event.preventDefault(),action==="plus"){const max=this.getMaxQuantity();if(max!=null&&this.quantity>=max){const msg=window.cartStrings?.maxInCartError||"Maximum quantity reached";this.handleErrorMessage(msg);return}this.changeQuantity(this.quantity+1,"added")}else action==="minus"&&this.quantity>1?this.changeQuantity(this.quantity-1,"updated"):action==="remove"&&this.changeQuantity(0,"removed")}async changeQuantity(targetQuantity,kind){if(this._isBusy)return;this._isBusy=!0,this.setAttribute("aria-busy","true"),this.handleErrorMessage(!1);const cartEl=document.querySelector("cart-notification");cartEl?.tagName==="CART-NOTIFICATION"&&typeof cartEl.close=="function"&&cartEl.close();const heading=window.variantStrings?.quantityUpdated||"Quantity updated";if(kind==="removed"&&typeof window.DLRemoveFromCart=="function"&&this.line>0)try{window.DLRemoveFromCart(this.line)}catch{}window.__hbAtcLock?.increment?.();try{await window.__cartQueue.enqueue(async()=>{const sections=(cartEl?.getSectionsToRender?.()||[]).map(s=>s.section||s.id).filter(Boolean);let workingState,renderKey=this.itemKey;if(kind==="added"){const variantId=this.currentVariantId;if(!variantId)throw new Error("pdp-inline-quantity: missing variant id");const addBy=Math.max(1,targetQuantity-this.quantity),addRes=await fetch(window.routes?.cart_add_url||"/cart/add",{...fetchConfig("javascript"),headers:{"Content-Type":"application/json",Accept:"application/javascript","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({id:variantId,quantity:addBy,sections,sections_url:window.location.pathname})}),addState=JSON.parse(await addRes.text());if(addState?.errors||addState?.status>=400){const errorMsg=addState?.description||addState?.message||(typeof addState?.errors=="string"?addState.errors:"")||window.cartStrings?.cartError||"Cart change failed";throw new Error(errorMsg)}workingState=await(await fetch(`${window.routes?.cart_url||"/cart"}.js`,{headers:{Accept:"application/json"}})).json(),addState?.sections&&(workingState.sections=addState.sections),renderKey=addState?.key||renderKey}else{const id=this.itemKey||this.currentVariantId;if(!id)throw new Error("pdp-inline-quantity: missing item id");const lineCurrentQty=this._trackedLineQty||this.quantity,delta=this.quantity-targetQuantity,newLineQty=kind==="removed"?0:Math.max(0,lineCurrentQty-delta),res=await fetch(window.routes?.cart_change_url||"/cart/change",{...fetchConfig("javascript"),headers:{"Content-Type":"application/json",Accept:"application/javascript","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({id,quantity:newLineQty,sections,sections_url:window.location.pathname})}),parsedState=JSON.parse(await res.text());if(parsedState?.errors||parsedState?.status>=400){const errorMsg=parsedState?.description||parsedState?.message||(typeof parsedState?.errors=="string"?parsedState.errors:"")||window.cartStrings?.cartError||"Cart change failed";throw new Error(errorMsg)}workingState=parsedState}if(Number(workingState?.item_count)===0)try{sessionStorage.removeItem("dk_auto_added_gifts")}catch{}if(kind==="removed")this.applyCartIconBubble(workingState);else if(cartEl?.renderContents){const variantIdStr=this.currentVariantId;if(workingState?.items?.length&&variantIdStr&&!workingState.items.some(it=>
1it.key===renderKey)){const fallback=workingState.items.find(it=>String(it.variant_id)===variantIdStr);fallback?.key&&(renderKey=fallback.key)}window.__pdpInlineHeadingOverride=heading,workingState.key=renderKey,cartEl.renderContents(workingState)}this.syncFromCart(workingState),this.syncSwatchQuantityAttr(this.currentVariantId,this.quantity),this.syncPdpQuantityInput(this.quantity),typeof publish=="function"&&PUB_SUB_EVENTS?.cartUpdate&&publish(PUB_SUB_EVENTS.cartUpdate,{source:"pdp-inline-quantity",cartData:workingState,productVariantId:this.currentVariantId})})}catch(err){console.error("pdp-inline-quantity: change failed",err),this.handleErrorMessage(err?.message||"Cart change failed")}finally{window.__hbAtcLock?.decrement?.(),this._isBusy=!1,this.removeAttribute("aria-busy")}}applyCartIconBubble(parsedState){const iconBubble=document.getElementById("cart-icon-bubble"),html=parsedState?.sections?.["cart-icon-bubble"];if(!iconBubble||!html)return;const node=new DOMParser().parseFromString(html,"text/html").querySelector(".shopify-section");node&&(iconBubble.innerHTML=node.innerHTML)}syncSwatchQuantityAttr(variantId,quantity){if(!this.productPage||!variantId)return;const qty=Math.max(0,Number(quantity)||0);this._cartQtyByVariant.set(String(variantId),qty),this.productPage.querySelectorAll(`.swatch-input__input[data-variant-id="${variantId}"], .product-dropdown-swatch[data-id="${variantId}"]`).forEach(el=>el.setAttribute("data-quantity-in-cart",String(qty)))}populateCartQtyFromSwatches(){if(!this.productPage)return;const seed=(el,vid)=>{if(!vid||this._cartQtyByVariant.has(vid))return;const q=parseInt(el.dataset.quantityInCart,10);Number.isFinite(q)&&this._cartQtyByVariant.set(vid,q)};this.productPage.querySelectorAll(".swatch-input__input[data-variant-id]").forEach(el=>seed(el,el.dataset.variantId)),this.productPage.querySelectorAll(".product-dropdown-swatch[data-id]").forEach(el=>seed(el,el.dataset.id));const ownVid=String(this.dataset.variantId||"");ownVid&&!this._cartQtyByVariant.has(ownVid)&&this._cartQtyByVariant.set(ownVid,this.quantity)}syncAllSwatchAttrsFromCache(){if(!this.productPage)return;const apply=(el,vid)=>{if(!vid)return;const q=this._cartQtyByVariant.get(vid)??0;el.setAttribute("data-quantity-in-cart",String(q))};this.productPage.querySelectorAll(".swatch-input__input[data-variant-id]").forEach(el=>apply(el,el.dataset.variantId)),this.productPage.querySelectorAll(".product-dropdown-swatch[data-id]").forEach(el=>apply(el,el.dataset.id))}syncPdpQuantityInput(quantity){const input=this.productPage?.querySelector('input[name="quantity"]');input&&input.setAttribute("data-cart-quantity",String(Math.max(0,Number(quantity)||0)))}handleErrorMessage(errorMessage=!1){const mainProduct=this.closest(".main-product"),stickyPanel=this.closest(".add-to-cart-panel");let wrapper;if(mainProduct&&(wrapper=mainProduct.querySelector(".product-form__error-message-wrapper.pdp")),stickyPanel&&(wrapper=wrapper||document.querySelector('.product-form__error-message-wrapper[data-form-id="sticky-add-to-cart-form"]')),!wrapper){const formId=this.dataset.formId;wrapper=document.querySelector(`.product-form__error-message-wrapper[data-form-id="${formId}"]`)}if(!wrapper)return;const messageEl=wrapper.querySelector(".product-form__error-message");wrapper.toggleAttribute("hidden",!errorMessage),wrapper.classList.remove("fade-out"),errorMessage&&messageEl&&(messageEl.textContent=errorMessage,wrapper.classList.contains("pdp")&&wrapper.scrollIntoView({behavior:"smooth",block:"center"}))}}); 2//# sourceMappingURL=/cdn/shop/t/339/assets/pdp-inline-quantity.js.map?v=126461490443972552641790669443
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.