1(function(){let currentDialog=null;function openDialog(html,cssClass){if(currentDialog){try{currentDialog.close()}catch{}currentDialog.remove(),currentDialog=null}const dialog=document.createElement("dialog");dialog.className="gldn-wishlist-dialog "+(cssClass||"");const box=document.createElement("div");box.className="gldn-wishlist-dialog__box";const closeBtn=document.createElement("button");closeBtn.type="button",closeBtn.className="gldn-wishlist-dialog__close",closeBtn.setAttribute("aria-label","Close"),closeBtn.innerHTML="×",closeBtn.addEventListener("click",()=>dialog.close());const content=document.createElement("div");return content.className="gldn-wishlist-dialog__content",content.innerHTML=html,box.appendChild(closeBtn),box.appendChild(content),dialog.appendChild(box),dialog.addEventListener("click",e=>{e.target===dialog&&dialog.close()}),dialog.addEventListener("close",()=>{dialog.remove(),currentDialog===dialog&&(currentDialog=null),window.gldnWishlistModal===dialog&&(window.gldnWishlistModal=null)}),document.body.appendChild(dialog),dialog.showModal(),currentDialog=dialog,window.gldnWishlistModal=dialog,dialog}function closeDialog(){currentDialog&¤tDialog.close()}const WishlistFlow={current:null,openForProduct(product){this.current=product;const swat=window._swat;!swat||!swat.fetchLists||swat.fetchLists({callbackFn:(lists=[])=>{lists&&lists.length>0?this.showListSelection(lists):this.showFirstScreen(product)},errorFn:err=>{console.error("Error fetching lists:",err),closeDialog(),alert("Error adding product to list. Please try again. If the problem persists, contact us.")}})},showFirstScreen(product){openDialog(` 2 <div class="modal-header">Your wishlist</div> 3 <div class="modal-container"> 4 <h2>Save this item to your<br> first wishlist</h2> 5 <button id="create-new" class="btn v1">Create New List</button> 6 </div> 7 `,"wish-modal-content");const btn=document.querySelector("#create-new");btn&&(btn.onclick=()=>this.showCreateList(product))},showListSelection(lists){let html='<div class="modal-header">Your wishlist</div>';html+='<div class="modal-container">',html+='<button id="create-new" class="btn v1">Create New List</button>',html+='<div class="lists-wrapper">',lists.forEach(listItem=>{const count=(listItem.listcontents||[]).length||0,img=listItem.lprops?.image?`<div class="img-wrapper"><img src="${listItem.lprops.image}" alt="${listItem.lname||""}"></div>`:"";html+=` 8 <div tabindex="0" class="list-item" data-id="${listItem.lid}"> 9 ${img} 10 <div class="text-wrapper"> 11 <h3>${listItem.lname||""}</h3> 12 <span class="list-qty">${count} items</span> 13 </div> 14 </div> 15 `}),html+="</div></div>",openDialog(html,"wish-modal-content");const createBtn=document.querySelector("#create-new");createBtn&&(createBtn.onclick=()=>this.showCreateList(this.current)),document.querySelectorAll(".list-item").forEach(item=>{const name=item.querySelector("h3")?.textContent||"";item.onclick=()=>this.showAddNote(this.current,item.dataset.id,name)})},showCreateList(product){openDialog(` 16 <div class="modal-header">Your wishlist</div> 17 <div class="modal-container"> 18 <div class="create-list-wrapper"> 19 <div class="img-wrapper"> 20 <img src="${product?.cprops?.image||""}" alt="Product"> 21 </div> 22 <label for="new-list-name">New Wishlist</label> 23 <input type="text" id="new-list-name" /> 24 <button id="save-new-list" class="btn v1" disabled>Save</button> 25 </div> 26 </div> 27 `,"wish-modal-content");const input=document.querySelector("#new-list-name"),saveBtn=document.querySelector("#save-new-list");!input||!saveBtn||(saveBtn.onclick=()=>{const name=(input.value||"").trim();name&&window._swat.createList({lname:name,lprops:{image:product?.cprops?.image||""}},newList=>this.showAddNote(product,newList.lid,newList.lname),err=>{console.error("Error creating list:",err),closeDialog(),alert("Error creating your list. Please try again. If the problem persists, contact us.")})},input.onkeyup=()=>{(input.value||"").trim().length>3?saveBtn.removeAttribute("disabled"):saveBtn.setAttribute("disabled","true")})},showAddNote(product,lid,listName){const optionsList=(product?.cprops?.options||[]).map(opt=>opt?.value?`<li>${opt.name}: ${opt.value}</li>`:"").join("");openDialog(` 28 <div class="modal-header">${listName||"Your wishlist"}</div> 29 <div class="modal-container"> 30 <div class="product-wrapper"> 31 <div class="img-wrapper"> 32 <img src="${product?.cprops?.image||""}" alt="${product?.dt||""}"> 33 </div> 34 <h3>${product?.dt||""}</h3> 35 <ul>${optionsList}</ul> 36 <label for="note">Add a note to this item:</label> 37 <textarea id="note"></textarea> 38 <button id="final-save" class="btn v1">Save</button> 39 </div> 40 </div> 41 `,"wish-modal-content");const saveBtn=document.querySelector("#final-save");saveBtn&&(saveBtn.onclick=()=>{const noteEl=document.querySelector("#note");product.note=noteEl?noteEl.value:"",setTimeout(()=>{window._swat.addToList(lid,product,()=>{window._swat.fetchLists({callbackFn:()=>{},errorFn:console.error}),closeDialog(),setTimeout(()=>window.updateAllWishlistProducts?.(),300)},error=>{console.error("Error adding product to list:",error),closeDialog(),alert("Error adding product to list. Please try again. If the problem persists, contact us.")})},50)})}};class WishlistProduct extends HTMLElement{#wired=!1;constructor(){super(),this.initialize()}connectedCallback(){this.initialize()}initialize(){if(!this.#wired){this.wishBtn=this.querySelector(".wish-trigger"),this.deleteListsBtn=this.querySelector(".delete-lists"),this.productId=Number(this.dataset.productId)||null,this.variantId=Number(this.dataset.variantId)||null,this.productUrl=this.dataset.productUrl||"",this.productTitle=this.dataset.productTitle||"",this.productImage=this.dataset.productImage||"";try{this.optionNames=JSON.parse(this.dataset.productOptions||"[]")}catch{this.optionNames=[]}this.wishBtn&&(this.#wired=!0,this.wishBtn.style.display="block",this.wishBtn.addEventListener("click",this.launchWishApp.bind(this)),this.deleteListsBtn&&this.deleteListsBtn.addEventListener("click",this.deleteLists.bind(this)),window.updateAllWishlistProducts?.())}}launchWishApp(event){event?.preventDefault(),event?.stopPropagation();try{if(this.wishBtn&&this.wishBtn.classList.contains("active")){this.removeProductFromAllLists();return}this.buildAndOpen()}catch(err){console.error("[wishlist] launchWishApp error",err)}}removeProductFromAllLists(){const swat=window._swat;!swat?.fetchLists||!swat?.deleteFromList||!this.productId||swat.fetchLists({callbackFn:(lists=[])=>{let listsToUpdate=0,completedDeletions=0;
41lists.forEach(list=>{const itemInList=(list.listcontents||[]).find(item=>Number(item.empi)===Number(this.productId));if(!itemInList)return;listsToUpdate++;const productToDelete={epi:itemInList.epi,empi:itemInList.empi,du:itemInList.du};swat.deleteFromList(list.lid,productToDelete,()=>{completedDeletions++,completedDeletions===listsToUpdate&&setTimeout(()=>window.updateAllWishlistProducts?.(),500)},err=>{console.error(`Failed to delete product from list ${list.lid}:`,err),completedDeletions++,completedDeletions===listsToUpdate&&setTimeout(()=>window.updateAllWishlistProducts?.(),500)})}),listsToUpdate===0&&setTimeout(()=>window.updateAllWishlistProducts?.(),500)},errorFn:err=>console.error("Error fetching lists for deletion:",err)})}deleteLists(){window._swat?.fetchLists&&window._swat.fetchLists({callbackFn:(lists=[])=>{lists.forEach(list=>{window._swat.deleteList(list.lid,()=>console.log(`Deleted list ${list.lid}`),err=>console.error(`Failed to delete list ${list.lid}:`,err))})},errorFn:console.error})}buildAndOpen(){const target=this,isPLP=target.dataset.plp!==void 0;let closestForm,currentVariantId,currentVariantTitle,variantOptions,variantImage;if(isPLP){closestForm=target.closest(".product-item")||document;const wishDataInput=closestForm?.querySelector?.('[name="wishdata"]');currentVariantId=wishDataInput?.value?Number(wishDataInput.value):Number(target.dataset.variantId)||null,currentVariantTitle=(wishDataInput?.dataset?.variantTitle||target.dataset.variantTitle||"").split(" / ")[0]||"",variantOptions=[{name:"Material",value:currentVariantTitle||""}],variantImage=closestForm?.querySelector?.(".img.main")?.dataset?.bgset||target.productImage||""}else if(target.closest("product-form-component, .product-information")){closestForm=target.closest("product-form-component, .product-information");const currentVariantInput=closestForm?.querySelector?.('input[name="id"]');currentVariantId=currentVariantInput?.value?Number(currentVariantInput.value):Number(target.dataset.variantId)||null;const pickerOptionNodes=closestForm?.querySelectorAll?.('[data-selected-value], .variant-picker__option [aria-pressed="true"], .variant-picker__option input:checked'),selectedValues=[];pickerOptionNodes?.forEach(node=>{const v=node.dataset?.selectedValue||node.getAttribute?.("aria-label")||node.value;v&&selectedValues.push(v)}),variantOptions=(target.optionNames||[]).map((optName,i)=>({name:typeof optName=="object"?optName.name:optName,value:selectedValues[i]||""}));const mainImg=closestForm?.querySelector?.(".product-media-container img, product-media-gallery img");variantImage=mainImg?.currentSrc||mainImg?.src||target.productImage||""}else{variantImage=target.productImage||"";try{variantOptions=JSON.parse(target.dataset.productOptions||"[]").map(o=>typeof o=="object"?{name:o.name,value:""}:{name:o,value:""})}catch{variantOptions=[]}}const effectiveVariantId=currentVariantId||Number(target.variantId)||null,productUrl=(window.location.origin||"")+(target.productUrl||""),product={empi:Number(target.productId)||null,epi:Number(effectiveVariantId)||null,du:productUrl,dt:target.productTitle||"",cprops:{options:variantOptions||[],image:variantImage||""}};WishlistFlow.openForProduct(product)}}customElements.define("wishlist-product",WishlistProduct),window.gldnWishlist={openForProductUrl(productUrl,onActiveCb){const swat=window._swat;swat?.collectionsApi?.swymFetchProductDetails&&swat.collectionsApi.swymFetchProductDetails(productUrl,data=>{const p=data?.product||data||{},firstVariant=p.variants?.[0]||{},imageSrc=data?.cprops?.image||p.image?.src||p.images?.[0]?.src||data?.featured_image||data?.image||"",optionNames=Array.isArray(p.options)?p.options.map(o=>({name:o.name,value:""})):[],product={empi:Number(data?.empi||p.id)||null,epi:Number(data?.epi||firstVariant.id)||null,du:productUrl,dt:data?.dt||p.title||data?.title||"",cprops:{options:data?.cprops?.options||optionNames,image:imageSrc}};WishlistFlow.openForProduct(product)},err=>console.error("Failed to fetch product details:",err))},flow:WishlistFlow,openDialog,closeDialog};class WishlistPage extends HTMLElement{constructor(){super(),this.title=this.dataset.title||"Your Wishlists",this.text=this.dataset.text||"Keep your favorite pieces close. Find them all right here.",this.lists=[],this.selectedList=null,window.addEventListener("swym:loaded",()=>this.init())}
41async init(){await this.fetchLists(),this.render()}async fetchLists(){if(window._swat?.fetchLists)try{const lists=await new Promise((resolve,reject)=>{window._swat.fetchLists({callbackFn:ls=>resolve(ls||[]),errorFn:reject})});this.lists=lists||[]}catch(err){console.error("Failed to fetch wishlists",err)}}buildProductUrl(item){let url=item.du||"";if(item.epi){const sep=url.includes("?")?"&":"?";url+=sep+"variant="+item.epi}if(Array.isArray(item.cprops?.options)){const sizeOption=item.cprops.options.find(opt=>opt.name&&(opt.name.toLowerCase()==="size"||opt.name.toLowerCase().includes("size")));if(sizeOption?.value&&sizeOption.value.toLowerCase()!=="custom"&&sizeOption.value.toLowerCase()!=="other"&&sizeOption.value.trim()!==""){const sep=url.includes("?")?"&":"?";url+=sep+"size="+encodeURIComponent(sizeOption.value)}}return url}render(){const breadcrumb=`<div class="wishlist-breadcrumb one-whole"> 42 <a href="/pages/wishlist">Home / Wishlists</a> 43 ${this.selectedList?` / ${this.selectedList.lname}`:""} 44 </div>`;let header="",content="";if(this.selectedList){const count=(this.selectedList.listcontents||[]).length||0;header=` 45 <div class="header-wrapper one-whole flex justify-content-between"> 46 <div class="wishlist-header"> 47 <h3>${this.selectedList.lname}</h3> 48 <span>${count} item${count===1?"":"s"} added</span> 49 </div> 50 <div class="wishlist-actions"> 51 <button class="btn v4" id="share-wishlist">Share Wishlist</button> 52 <button class="btn v4" id="edit-items">Edit Items</button> 53 </div> 54 </div> 55 `,content=` 56 <div class="wishlist-items"> 57 ${(this.selectedList.listcontents||[]).map(item=>` 58 <div class="wishlist-item-card one-quarter small--one-half" data-epi="${item.epi}"> 59 <a href="${this.buildProductUrl(item)}" class="wishlist-item-link"> 60 <div class="img-wrapper"> 61 <img src="${item.cprops?.image||""}" alt="${item.dt||""}"> 62 </div> 63 <div class="price-wrapper flex justify-content-between"> 64 <h3>${item.dt||""}</h3><span class="item-price">${window.Shopify?.formatMoney?window.Shopify.formatMoney((item.pr||0)*100).replace(".00",""):""}</span> 65 </div> 66 <ul>${(item.cprops?.options||[]).map(opt=>`<li>${opt.name}: ${opt.value}</li>`).join("")}</ul> 67 ${item.note?"<p>Note:"+item.note+"</p>":""} 68 </a> 69 <div class="wishlist-view-product"> 70 <a href="${this.buildProductUrl(item)}" class="btn v4">View Product</a> 71 </div> 72 <button class="delete-item" style="display:none" type="button" aria-label="Remove item">✕</button> 73 </div> 74 `).join("")} 75 </div> 76 `}else(this.lists||[]).length>0?(header=` 77 <div class="header-wrapper one-whole flex justify-content-between"> 78 <div class="wishlist-header"> 79 <h2>${this.title}</h2> 80 <span>${this.text}</span> 81 </div> 82 <div class="wishlist-actions"> 83 <button class="btn v4" id="edit-lists">Edit Lists</button> 84 </div> 85 </div> 86 `,content=` 87 <div class="lists-wrapper flex flex-wrap"> 88 ${this.lists.map(list=>` 89 <div tabindex="0" class="list-item one-third medium--one-half small--one-whole" data-list-id="${list.lid}"> 90 ${list.lprops?.image?`<div class="img-wrapper"><img src="${list.lprops.image}" alt="${list.lname||""}"></div>`:""} 91 <div class="text-wrapper"> 92 <h3>${list.lname||""}</h3> 93 <span class="list-qty">${(list.listcontents||[]).length||0} items</span> 94 </div> 95 <button class="delete-list" style="display:none" type="button" aria-label="Delete list">✕</button> 96 </div> 97 `).join("")} 98 </div> 99 `):(header=` 100 <div class="header-wrapper one-whole flex justify-content-between"> 101 <div class="wishlist-header"> 102 <h2>${this.title}</h2>
103 <span>${this.text}</span> 104 </div> 105 </div> 106 `,content="<p>You don't have any lists yet.</p>");this.innerHTML=`<div class="container">${breadcrumb}${header}${content}</div>`,this.bindEvents()}bindEvents(){this.selectedList?(this.querySelector("#edit-items")?.addEventListener("click",()=>this.toggleDeleteButtons()),this.querySelector("#share-wishlist")?.addEventListener("click",()=>this.openShareModal()),this.querySelectorAll(".delete-item").forEach(btn=>{btn.addEventListener("click",e=>this.deleteItem(e))}),window.wishlistAddToCartAjax?.()):(this.querySelector("#edit-lists")?.addEventListener("click",()=>this.toggleDeleteLists()),this.querySelectorAll(".list-item").forEach(card=>{card.addEventListener("click",e=>{if(e.target.classList?.contains("delete-list"))return;const listId=card.dataset.listId;this.selectedList=(this.lists||[]).find(l=>String(l.lid)===String(listId))||null,this.render()})}),this.querySelectorAll(".delete-list").forEach(btn=>{btn.addEventListener("click",e=>this.deleteList(e))}))}toggleDeleteButtons(){this.querySelectorAll(".delete-item").forEach(btn=>{btn.style.display=btn.style.display==="none"?"inline-block":"none"})}toggleDeleteLists(){this.querySelectorAll(".delete-list").forEach(btn=>{btn.style.display=btn.style.display==="none"?"inline-block":"none"})}deleteItem(e){const card=e.target.closest(".wishlist-item-card");if(!card)return;const epi=Number(card.dataset.epi),item=(this.selectedList?.listcontents||[]).find(i=>Number(i.epi)===epi);if(!item)return;const product={epi:item.epi,empi:item.empi,du:item.du};window._swat?.deleteFromList&&window._swat.deleteFromList(this.selectedList.lid,product,()=>{this.fetchLists().then(()=>{this.selectedList=(this.lists||[]).find(l=>String(l.lid)===String(this.selectedList.lid))||null,this.render(),window.updateAllWishlistProducts?.()})},err=>console.error("Failed to delete item:",err))}deleteList(e){const card=e.target.closest(".list-item");if(!card)return;const listId=card.dataset.listId;window._swat?.deleteList&&window._swat.deleteList(listId,()=>this.fetchLists().then(()=>{this.render(),window.updateAllWishlistProducts?.()}),err=>console.error("Failed to delete list:",err))}openShareModal(){if(!this.selectedList)return;const lid=this.selectedList.lid,fromName=window.shopCustomer?.email||"",html=` 107 <div class="modal-header">Share your list <strong>${this.selectedList.lname||""}</strong></div> 108 <div class="modal-container"> 109 <div class="form-wrapper"> 110 <label for="sender-email">From:</label> 111 <input type="email" id="sender-email" placeholder="Enter your email" ${fromName?'value="'+fromName+'"':""} /> 112 <div id="sender-error" class="error-msg"></div> 113 <label for="share-email">To:</label> 114 <input type="email" id="share-email" placeholder="Enter a friend's email" required /> 115 <div id="recipient-error" class="error-msg"></div> 116 <button class="btn v1" id="send-share" disabled>Send</button> 117 </div> 118 </div> 119 `;openDialog(html,"share-wishlist-modal"),setTimeout(()=>{const senderInput=document.querySelector("#sender-email"),recipientInput=document.querySelector("#share-email"),sendBtn=document.querySelector("#send-share"),senderError=document.querySelector("#sender-error"),recipientError=document.querySelector("#recipient-error");if(!recipientInput||!sendBtn)return;const validateEmails=()=>{let senderValid=!0;!fromName&&senderInput&&(senderValid=!!senderInput.value&&senderInput.validity.valid,senderError&&(senderError.textContent=senderValid||!senderInput.value?"":"Please enter a valid sender email"));const recipientValid=!!recipientInput.value&&recipientInput.validity.valid;recipientError&&(recipientError.textContent=recipientValid||!recipientInput.value?"":"Please enter a valid recipient email"),sendBtn.disabled=!(senderValid&&recipientValid)};senderInput?.addEventListener("input",validateEmails),recipientInput.addEventListener("input",validateEmails),sendBtn.addEventListener("click",()=>{const email_sender=senderInput?.value||fromName||"",email=recipientInput.value||"";email&&(!window._swat?.markListPublic||!window._swat?.sendListViaEmail||window._swat.markListPublic(lid,(
119)=>{window._swat.sendListViaEmail({toEmailId:email,fromName:email_sender,note:`Hey, check out my wishlist: ${this.selectedList.lname}!`,lid,cprops:{}},()=>openDialog(`<div class="modal-header">SUCCESS</div> 120 <div class="modal-container"> 121 <em>Your list has been shared successfully!</em> 122 </div>`,"share-wishlist-modal"),err=>console.error("Failed to share wishlist via email:",err))},()=>alert("Could not mark the wishlist as public. Try again later.")))}),validateEmails()},0)}}customElements.define("wishlist-page",WishlistPage);class WishlistSharedList extends HTMLElement{constructor(){super(),window.addEventListener("swym:loaded",()=>this.loadSharedList())}getUrlParams(){const params=new URLSearchParams(window.location.search);return{hkey:params.get("hkey"),lid:params.get("lid")}}buildProductUrl(item){let url=item.du||"";if(item.epi){const sep=url.includes("?")?"&":"?";url+=sep+"variant="+item.epi}if(Array.isArray(item.cprops?.options)){const sizeOption=item.cprops.options.find(opt=>opt.name&&(opt.name.toLowerCase()==="size"||opt.name.toLowerCase().includes("size")));if(sizeOption?.value&&sizeOption.value.toLowerCase()!=="custom"&&sizeOption.value.toLowerCase()!=="other"&&sizeOption.value.trim()!==""){const sep=url.includes("?")?"&":"?";url+=sep+"size="+encodeURIComponent(sizeOption.value)}}return url}async loadSharedList(){const{lid}=this.getUrlParams();if(!lid){this.innerHTML="<p>Invalid shared wishlist link.</p>";return}if(!window._swat?.fetchListCtx){this.innerHTML="<p>Failed to load shared wishlist.</p>";return}try{await window._swat.fetchListCtx({lid},listContents=>{!listContents||listContents.length===0?this.innerHTML="<p>No items in this wishlist.</p>":this.render(listContents)},()=>{this.innerHTML="<p>Failed to load shared wishlist.</p>"})}catch{this.innerHTML="<p>Failed to load shared wishlist.</p>"}}render(listContents){if(!listContents||listContents.length===0){this.innerHTML="<p>No items in this wishlist.</p>";return}const title="Hey there! Check out My Shared Wishlist",items=listContents.map(item=>` 123 <div class="wishlist-item-card" data-epi="${item.epi}"> 124 <wishlist-product 125 data-product-id="${item.empi}" 126 data-variant-id="${item.epi}" 127 data-variant-title="${item.dt}" 128 data-product-url="${item.du}" 129 data-product-title="${item.dt}" 130 data-product-price="${item.pr}" 131 data-product-image="${item.cprops?.image||""}" 132 data-product-options='${JSON.stringify(item.cprops?.options||[])}'> 133 <div tabindex="0" class="wish-trigger"> 134 <span class="sr-only">Add to Wishlist</span> 135 </div> 136 </wishlist-product> 137 <a href="${this.buildProductUrl(item)}" class="wishlist-item-link"> 138 <div class="img-wrapper"> 139 <img src="${item.cprops?.image||""}" alt="${item.dt||""}"> 140 </div> 141 <div class="price-wrapper flex justify-content-between"> 142 <h3>${item.dt||""}</h3><span class="item-price">${window.Shopify?.formatMoney?window.Shopify.formatMoney((item.pr||0)*100).replace(".00",""):""}</span> 143 </div> 144 <ul>${(item.cprops?.options||[]).map(opt=>`<li>${opt.name}: ${opt.value}</li>`).join("")}</ul> 145 ${item.note?"<p>Note:"+item.note+"</p>":""} 146 </a> 147 <div class="wishlist-view-product"> 148 <a href="${this.buildProductUrl(item)}" class="btn v4">View Product</a> 149 </div> 150 </div> 151 `).join("");this.innerHTML=` 152 <div class="container"> 153 <div class="header-wrapper one-whole flex justify-content-center"> 154 <div class="wishlist-header"><h2 class="text-center">${title}</h2></div> 155 </div> 156 <div class="wishlist-items">${items}</div> 157 </div> 158 `,window.wishlistAddToCartAjax?.()}}customElements.define("wishlist-shared-list",WishlistSharedList),(function(){const isSwymReady=()=>!!window._swat,trigger=()=>window.dispatchEvent(new Event("swym:loaded"));if(isSwymReady()){trigger();return}const observer=new MutationObserver(()=>{isSwymReady()&&(observer.disconnect(),clearInterval(interval),trigger())});observer.observe(document.documentElement,{childList:!0,subtree:!0});const interval=setInterval(()=>{isSwymReady()&&(clearInterval(interval),observer.disconnect(),trigger())},300);setTimeout(()=>{observer.disconnect(),clearInterval(interval)},3e4)})(),(function(){const debounce=(fn,wait)=>{let t;return function(...args){clearTimeout(t),t=setTimeout(()=>fn.apply(this,args),wait)}},handleFromUrl=url=>{const m=String(url||"").match(/\/products\/([^/?#]+)/);return m?m[1].toLowerCase():null},_update=()=>{if(!window._swat)return;const hasWishlistProducts=!!document.querySelector("wishlist-product"),hasSearchspringHearts=!!document.querySelector(".swym-wishlist-collections-v2"),hasNavHeart=!!document.querySelector(".gldn-wishlist-link");!hasWishlistProducts&&!hasSearchspringHearts&&!hasNavHeart||window._swat.fetchLists({callbackFn:(lists=[])=>{const productIdsInLists=new Set,productHandlesInLists=new Set;let totalItemCount=0;
158lists.forEach(list=>{const contents=list.listcontents||[];totalItemCount+=contents.length,contents.forEach(item=>{productIdsInLists.add(Number(item.empi));const handle=handleFromUrl(item.du);handle&&productHandlesInLists.add(handle)})}),document.querySelectorAll("wishlist-product").forEach(el=>{const pid=Number(el.dataset.productId),wishBtn=el.querySelector(".wish-trigger");!wishBtn||Number.isNaN(pid)||(productIdsInLists.has(pid)?wishBtn.classList.add("active"):wishBtn.classList.remove("active"))}),document.querySelectorAll(".swym-wishlist-collections-v2").forEach(btn=>{const handle=handleFromUrl(btn.getAttribute("data-product-id"));if(!handle)return;const active=productHandlesInLists.has(handle);btn.classList.toggle("active",active),btn.setAttribute("aria-pressed",active?"true":"false")});const badgeText=totalItemCount>99?"99+":String(totalItemCount);document.querySelectorAll(".gldn-wishlist-link").forEach(link=>{link.classList.toggle("has-items",totalItemCount>0);const badge=link.querySelector(".gldn-wishlist-badge");badge&&(badge.textContent=totalItemCount>0?badgeText:"")})},errorFn:console.error})};window.updateAllWishlistProducts=debounce(_update,200)})(),window.addEventListener("swym:loaded",()=>window.updateAllWishlistProducts?.()),document.addEventListener("gridUpdate",()=>window.updateAllWishlistProducts?.()),window._swat&&window.updateAllWishlistProducts()})(); 159//# sourceMappingURL=/cdn/shop/t/895/assets/gldn-wishlist.js.map?v=89136924694302204651790746417
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.