PageSourceSearch

https://www.wildoakboutique.com/cdn/shop/t/649/assets/wishlist.js?v=150261672709555874241786993707

js wildoakboutique.com collected 2026-10-01 12:13:54 UTC 38,761 bytes, 2 lines download raw bytes

1(()=>{const config=window.WobWishlistConfig||{},headerCountStorageKey="wob:wishlist-count:v1",activeListStorageKey="wob:wishlist-active-list:v1",productCache=new Map,productSocialCountCache=new Map;let wishlistListsCache=null,wishlistListFetchPromise=null,swymReady=!1,activeSwat=null,swymEventsBound=!1,refreshTimer=null,productSocialCountTimer=null,wishlistListModalState=null;const getStringId=value=>String(value||"").replace("gid://shopify/Product/","").replace("gid://shopify/ProductVariant/",""),getNumericOrStringId=value=>{const stringValue=getStringId(value),numericValue=Number.parseInt(stringValue,10);return Number.isFinite(numericValue)?numericValue:stringValue},getCustomerKey=()=>String(config.customerKey||window.swymCustomerId||"guest"),readStoredHeaderCount=()=>{try{const stored=JSON.parse(window.localStorage.getItem(headerCountStorageKey)||"null"),count=Number(stored&&stored.customerKey===getCustomerKey()?stored.count:NaN);return Number.isFinite(count)&&count>=0?count:null}catch{return null}},writeStoredHeaderCount=count=>{try{window.localStorage.setItem(headerCountStorageKey,JSON.stringify({count,customerKey:getCustomerKey(),updatedAt:Date.now()}))}catch{}},getCurrency=()=>config.currency||window.Shopify?.currency?.active||"USD",formatMoney=cents=>{const numericCents=Number(cents);if(!Number.isFinite(numericCents))return"";try{return new Intl.NumberFormat(config.locale||document.documentElement.lang||"en-US",{style:"currency",currency:getCurrency()}).format(numericCents/100)}catch{return`$${(numericCents/100).toFixed(2)}`}},getFallbackCents=value=>{const price=Number(value);return Number.isFinite(price)?Math.round(price<1e3?price*100:price):null},getImageSrc=image=>image?typeof image=="string"?image:image.src||image.preview_image?.src||"":"",getWishlistItemKey=item=>`${getStringId(item?.empi)}:${getStringId(item?.epi)}`,normalizeWishlistItems=(items,list={})=>{const normalized=[],seen=new Set;return(Array.isArray(items)?items:[]).forEach(item=>{if(!item)return;const product=item.product||item,epi=product.epi||item.epi,empi=product.empi||item.empi,du=product.du||product.uri||item.du||item.uri,key=getWishlistItemKey({empi,epi});!epi||!empi||!du||seen.has(key)||(seen.add(key),normalized.push({...item,...product,epi,empi,du,lid:item.lid||product.lid||list.lid||"",lname:item.lname||product.lname||list.lname||""}))}),normalized},normalizeWishlistLists=lists=>(Array.isArray(lists)?lists:[]).filter(list=>list&&list.st!==0).map((list,index)=>{const lid=list.lid||list.listid||"",lname=String(list.lname||list.name||(index===0?"My Wishlist":"Wishlist")).trim()||"Wishlist";return{...list,lid,lname,listcontents:normalizeWishlistItems(list.listcontents||list.contents||[],{lid,lname})}}).filter(list=>list.lid||list.listcontents.length),invalidateWishlistLists=()=>{wishlistListsCache=null,wishlistListFetchPromise=null},fetchLists=swat=>typeof swat.fetchLists!="function"?Promise.resolve([]):new Promise((resolve,reject)=>{swat.fetchLists({callbackFn:lists=>resolve(Array.isArray(lists)?lists:[]),errorFn:reject})}),fetchWishlistItemsFallback=swat=>typeof swat.fetch=="function"?new Promise(resolve=>{let settled=!1;const timeout=window.setTimeout(()=>{settled||(settled=!0,resolve([]))},1e4),finish=items=>{settled||(settled=!0,window.clearTimeout(timeout),resolve(normalizeWishlistItems(items)))};try{swat.fetch(finish)}catch{finish([])}}):Promise.resolve([]),fetchWishlistLists=async(swat,{force=!1}={})=>{if(!force&&wishlistListsCache)return wishlistListsCache;if(!force&&wishlistListFetchPromise)return wishlistListFetchPromise;wishlistListFetchPromise=(async()=>{let lists=[];try{lists=normalizeWishlistLists(await fetchLists(swat))}catch{lists=[]}if(!lists.length){const fallbackItems=await fetchWishlistItemsFallback(swat);fallbackItems.length&&(lists=[{lid:"",lname:"My Wishlist",listcontents:fallbackItems}])}return wishlistListsCache=lists,lists})();try{return await wishlistListFetchPromise}finally{wishlistListFetchPromise=null}},getWishlistItemsFromLists=(lists,listId="all")=>{const normalizedListId=String(listId||"all"),normalizedLists=normalizeWishlistLists(lists);if(normalizedListId!=="all"){const list=normalizedLists.find(candidate=>String(candidate.lid)===normalizedListId);return(list?.listcontents||[]).map(item=>({...item,lid:item.lid||list.lid,lname:item.lname||list.lname,listMemberships:[{lid:list.lid,lname:list.lname}]}))}const groupedItems=new Map;
1return normalizedLists.forEach(list=>{list.listcontents.forEach(item=>{const key=getWishlistItemKey(item),current=groupedItems.get(key)||{...item,lid:item.lid||list.lid,lname:item.lname||list.lname,listMemberships:[]};list.lid&&!current.listMemberships.some(membership=>membership.lid===list.lid)&&current.listMemberships.push({lid:list.lid,lname:list.lname}),groupedItems.set(key,current)})}),Array.from(groupedItems.values())},fetchWishlistItems=async(swat,{force=!1,lists=null,listId="all"}={})=>{const nextLists=lists||await fetchWishlistLists(swat,{force});return getWishlistItemsFromLists(nextLists,listId)},readStoredActiveListId=()=>{try{const stored=JSON.parse(window.localStorage.getItem(activeListStorageKey)||"null");return stored&&stored.customerKey===getCustomerKey()?String(stored.listId||"all"):"all"}catch{return"all"}},writeStoredActiveListId=listId=>{try{window.localStorage.setItem(activeListStorageKey,JSON.stringify({customerKey:getCustomerKey(),listId:listId||"all",updatedAt:Date.now()}))}catch{}},getActiveWishlistListId=(lists,root=null)=>{const listIds=new Set(normalizeWishlistLists(lists).map(list=>String(list.lid)).filter(Boolean)),preferredListId=root?.dataset.activeWishlistList||readStoredActiveListId();return preferredListId==="all"||listIds.has(preferredListId)?preferredListId:"all"},setActiveWishlistListId=(listId,root=null)=>{const nextListId=String(listId||"all");root&&(root.dataset.activeWishlistList=nextListId),writeStoredActiveListId(nextListId)},updateHeaderCount=(count,{persist=!0}={})=>{persist&&writeStoredHeaderCount(count),document.querySelectorAll("[data-wishlist-count]").forEach(element=>{element.textContent=String(count),element.hidden=count===0})},findWishlistedItem=(items,product)=>{const productId=getStringId(product.empi),variantId=getStringId(product.epi);return items.find(item=>getStringId(item.empi)===productId&&getStringId(item.epi)===variantId)},getButtonProduct=button=>{const priceCents=Number(button.dataset.wishlistPrice||0);return{epi:getNumericOrStringId(button.dataset.wishlistVariantId),empi:getNumericOrStringId(button.dataset.wishlistProductId),du:button.dataset.wishlistProductUrl||window.location.href.split("?")[0],dt:button.dataset.wishlistTitle||document.querySelector("h1")?.textContent?.trim()||"",iu:button.dataset.wishlistImage||"",pr:Number.isFinite(priceCents)?priceCents/100:void 0,stk:button.dataset.wishlistAvailable==="false"?0:1,source:"pdp"}},isWishlistVariantReady=button=>!!button&&button.dataset.wishlistVariantSelected!=="false",setWishlistVariantPendingState=(button,isPending)=>{if(button){if(button.dataset.wishlistVariantSelected=isPending?"false":"true",isPending){button.disabled=!0,button.classList.remove("product-wishlist-button--active","swym-added"),button.setAttribute("aria-pressed","false"),button.setAttribute("aria-label","Select size to save to wishlist"),button.dataset.wishlistListId="",button.dataset.wishlistListIds="";return}button.classList.contains("is-loading")||(button.disabled=!1),button.setAttribute("aria-label",button.getAttribute("aria-pressed")==="true"?"Manage wishlist lists":"Add to wishlist")}},setProductButtonState=(button,wishlistedItem)=>{if(!isWishlistVariantReady(button)){setWishlistVariantPendingState(button,!0);return}const isWishlisted=!!wishlistedItem,listMemberships=wishlistedItem?.listMemberships||(wishlistedItem?.lid?[{lid:wishlistedItem.lid,lname:wishlistedItem.lname||""}]:[]);button.classList.toggle("product-wishlist-button--active",isWishlisted),button.classList.toggle("swym-added",isWishlisted),button.setAttribute("aria-pressed",isWishlisted?"true":"false"),button.setAttribute("aria-label",isWishlisted?"Manage wishlist lists":"Add to wishlist"),button.dataset.wishlistListId=listMemberships[0]?.lid||wishlistedItem?.lid||"",button.dataset.wishlistListIds=listMemberships.map(membership=>membership.lid).filter(Boolean).join(","),button.classList.contains("is-loading")||(button.disabled=!1)},updateProductButtons=items=>{document.querySelectorAll("[data-wishlist-button]").forEach(button=>{setProductButtonState(button,findWishlistedItem(items,getButtonProduct(button)))})},formatProductSocialCount=count=>{const numericCount=Number(count);if(!Number.isFinite(numericCount))return"0";if(numericCount<1e3)return String(numericCount);try{return new Intl.NumberFormat(config.locale||document.documentElement.lang||"en-US",{maximumFractionDigits:1,notation:"compact"}).format(numericCount)}catch{return String(numericCount)}},normalizeProductSocialCount=(response,productId)=>{const requestedProductId=getStringId(productId),data=response?.data??response,entries=Array.isArray(data)?data:[data],match=entries.find(entry=>{const entryProductId=getStringId(entry?.empi||entry?.productId||entry?.id);return requestedProductId?entryProductId===requestedProductId:!0})||entries[0]||null,count=Number(match?.count??match?.data?.count??response?.count??0);return Number.isFinite(count)&&count>=0?count:0},fetchProductSocialCount=(swat,productId)=>{const empi=getNumericOrStringId(productId);return!empi||typeof swat?.wishlist?.getSocialCount!="function"?Promise.resolve(null):new Promise(resolve=>{let settled=!1;const timeout=window.setTimeout(()=>{settled||(settled=!0,resolve(null))},8e3),finish=response=>{settled||(settled=!0,window.clearTimeout(timeout),resolve(normalizeProductSocialCount(response,productId)))},fail=()=>{settled||(settled=!0,window.clearTimeout(timeout),resolve(null))};try{swat.wishlist.getSocialCount({empi},finish,fail)}catch{fail()}})},updateProductSocialCount=(productId,count)=>{const requestedProductId=getStringId(productId),numericCount=Number(count),hasCount=Number.isFinite(numericCount)&&numericCount>=0,label=`${numericCount} ${numericCount===1?"wishlist save":"wishlist saves"}`;document.querySelectorAll("[data-product-wishlist-social-count][data-product-id]").forEach(element=>{if(getStringId(element.dataset.productId)!==requestedProductId)return;const value=element.querySelector("[data-product-wishlist-social-count-value]");value&&(value.textContent=formatProductSocialCount(numericCount)),element.hidden=!hasCount,element.title=hasCount?label:""})},refreshProductSocialCounts=async({force=!1}={})=>
1{if(!activeSwat)return;const productIds=Array.from(new Set(Array.from(document.querySelectorAll("[data-product-wishlist-social-count][data-product-id]")).map(element=>getStringId(element.dataset.productId)).filter(Boolean)));productIds.length&&await Promise.all(productIds.map(async productId=>{if(!force&&productSocialCountCache.has(productId)){updateProductSocialCount(productId,productSocialCountCache.get(productId));return}const count=await fetchProductSocialCount(activeSwat,productId);count!==null&&(productSocialCountCache.set(productId,count),updateProductSocialCount(productId,count))}))},scheduleProductSocialCountRefresh=({force=!1}={})=>{window.clearTimeout(productSocialCountTimer),productSocialCountTimer=window.setTimeout(()=>{refreshProductSocialCounts({force})},120)},setButtonBusy=(button,isBusy)=>{button.classList.toggle("is-loading",isBusy),button.setAttribute("aria-busy",isBusy?"true":"false"),button.disabled=isBusy||!isWishlistVariantReady(button),!isBusy&&!isWishlistVariantReady(button)&&setWishlistVariantPendingState(button,!0)},getListApiProduct=product=>{const listProduct={epi:getNumericOrStringId(product?.epi),empi:getNumericOrStringId(product?.empi),du:product?.du||""};return product?.dt&&(listProduct.dt=product.dt),product?.iu&&(listProduct.iu=product.iu),product?.pr!==void 0&&(listProduct.pr=product.pr),product?.source&&(listProduct.source=product.source),product?.qty!==void 0&&(listProduct.qty=product.qty),product?.note&&(listProduct.note=product.note),product?.cprops&&(listProduct.cprops=product.cprops),listProduct},createWishlistList=(swat,listName)=>new Promise((resolve,reject)=>{const name=String(listName||"").trim();if(!name){reject(new Error("Enter a list name."));return}if(typeof swat.createList!="function"){reject(new Error("Wishlist list creation is unavailable."));return}swat.createList({lname:name},list=>{invalidateWishlistLists(),resolve(list)},reject)}),getDefaultWishlistList=async swat=>{const lists=await fetchWishlistLists(swat);return lists[0]?.lid?lists[0]:{...await createWishlistList(swat,"My Wishlist"),listcontents:[]}},addWishlistItem=(swat,product,listId="")=>new Promise((resolve,reject)=>{const listProduct=getListApiProduct(product);if(listId&&typeof swat.addToList=="function"){swat.addToList(listId,listProduct,item=>{invalidateWishlistLists(),resolve(item)},reject);return}if(!listId&&typeof swat.addToList=="function"){getDefaultWishlistList(swat).then(list=>{if(!list?.lid)throw new Error("Wishlist list API is unavailable.");swat.addToList(list.lid,listProduct,item=>{invalidateWishlistLists(),resolve(item)},reject)}).catch(reject);return}if(typeof swat.addToWishList=="function"){swat.addToWishList(product,item=>{invalidateWishlistLists(),resolve(item)},reject);return}reject(new Error("Wishlist add API is unavailable."))}),removeWishlistItem=(swat,product,listId="")=>new Promise((resolve,reject)=>{const listProduct=getListApiProduct(product);if(listId&&typeof swat.deleteFromList=="function"){swat.deleteFromList(listId,listProduct,item=>{invalidateWishlistLists(),resolve(item)},reject);return}if(!listId&&typeof swat.deleteFromList=="function"){fetchWishlistLists(swat,{force:!0}).then(lists=>{const matches=normalizeWishlistLists(lists).flatMap(list=>list.listcontents.map(item=>({...item,lid:list.lid}))).filter(item=>findWishlistedItem([item],product));if(!matches.length)throw new Error("Wishlist item could not be found.");return Promise.all(matches.map(match=>new Promise((deleteResolve,deleteReject)=>{swat.deleteFromList(match.lid,listProduct,deleteResolve,deleteReject)})))}).then(items=>{invalidateWishlistLists(),resolve(items)}).catch(reject);return}if(typeof swat.removeFromWishList=="function"){swat.removeFromWishList(product,item=>{invalidateWishlistLists(),resolve(item)},reject);return}reject(new Error("Wishlist remove API is unavailable."))}),hasProductButtons=()=>!!document.querySelector("[data-wishlist-button]"),supportsWishlistLists=swat=>!!(swat&&typeof swat.fetchLists=="function"&&typeof swat.addToList=="function"&&typeof swat.deleteFromList=="function"),shouldFetchWishlistItems=({renderPage=!1,force=!1}={})=>force||renderPage||hasProductButtons()?!0:readStoredHeaderCount()===null,refreshSurfaces=async({renderPage=!1,force=!1}={})=>
1{if(!activeSwat||!shouldFetchWishlistItems({renderPage,force}))return;const lists=await fetchWishlistLists(activeSwat,{force}),items=getWishlistItemsFromLists(lists,"all");updateHeaderCount(items.length),updateProductButtons(items),renderPage&&await renderWishlistPage(activeSwat,{lists})},scheduleRefresh=({renderPage=!1,force=!1}={})=>{window.clearTimeout(refreshTimer),refreshTimer=window.setTimeout(()=>{refreshSurfaces({renderPage,force})},120)},updateProductFromVariant=(button,variant,product)=>{if(!button||!variant)return;button.dataset.wishlistVariantId=String(variant.id||button.dataset.wishlistVariantId||""),button.dataset.wishlistPrice=String(variant.price||button.dataset.wishlistPrice||""),button.dataset.wishlistAvailable=variant.available?"true":"false";const variantImage=getImageSrc(variant.featured_image),productImage=getImageSrc(product?.featured_image),nextImage=variantImage||productImage;nextImage&&(button.dataset.wishlistImage=nextImage),product?.title&&(button.dataset.wishlistTitle=product.title),product?.url&&(button.dataset.wishlistProductUrl=`${window.location.origin}${product.url}`),setWishlistVariantPendingState(button,!1)},initProductButtons=swat=>{document.querySelectorAll("[data-wishlist-button]").forEach(button=>{button.dataset.wishlistInitialized!=="true"&&(button.dataset.wishlistInitialized="true",isWishlistVariantReady(button)?button.disabled=!1:setWishlistVariantPendingState(button,!0),button.addEventListener("click",async()=>{if(!isWishlistVariantReady(button)){setWishlistVariantPendingState(button,!0);return}const product=getButtonProduct(button),isActive=button.getAttribute("aria-pressed")==="true";setButtonBusy(button,!0);try{if(supportsWishlistLists(swat)){await openWishlistListModal({mode:"product",product,button});return}isActive?await removeWishlistItem(swat,product,button.dataset.wishlistListId):await addWishlistItem(swat,product),await refreshSurfaces({renderPage:!!document.querySelector("[data-wishlist-page]")}),scheduleProductSocialCountRefresh({force:!0})}catch{button.setAttribute("aria-label","Wishlist is unavailable")}finally{setButtonBusy(button,!1)}}))})},initVariantListener=()=>{document.documentElement.dataset.wishlistVariantListener!=="true"&&(document.documentElement.dataset.wishlistVariantListener="true",document.addEventListener("variant:change",event=>{const variant=event.detail?.variant,product=event.detail?.product,button=document.querySelector("[data-wishlist-button]");updateProductFromVariant(button,variant,product),scheduleRefresh()}),document.addEventListener("variant:pending",()=>{const button=document.querySelector("[data-wishlist-button]");setWishlistVariantPendingState(button,!0)}))},getProductJsonPath=url=>{if(!url)return"";try{return`${new URL(url,window.location.origin).pathname.replace(/\/$/,"")}.js`}catch{return""}},fetchProductJson=async item=>{const path=getProductJsonPath(item.du);if(!path)return null;if(productCache.has(path))return productCache.get(path);const request=fetch(path).then(response=>response.ok?response.json():null).catch(()=>null);return productCache.set(path,request),request},hydrateWishlistItem=async item=>{const product=await fetchProductJson(item),activeVariant=product?.variants?.find(variantItem=>getStringId(variantItem.id)===getStringId(item.epi))||product?.variants?.find(variantItem=>variantItem.available)||product?.variants?.[0],productPath=product?.url||getProductJsonPath(item.du).replace(/\.js$/,"")||item.du||"#",productUrl=activeVariant?.id?`${productPath}?variant=${activeVariant.id}`:productPath,image=getImageSrc(activeVariant?.featured_image)||getImageSrc(product?.featured_image)||item.iu||"",priceCents=Number.isFinite(Number(activeVariant?.price))?Number(activeVariant.price):getFallbackCents(item.pr),compareAtCents=Number.isFinite(Number(activeVariant?.compare_at_price))?Number(activeVariant.compare_at_price):null;return{item,productId:getStringId(item.empi),variantId:getStringId(activeVariant?.id||item.epi),title:product?.title||item.dt||"Product",variantTitle:activeVariant?.title&&activeVariant.title!=="Default Title"?activeVariant.title:"",url:productUrl,image,priceCents,compareAtCents,listMemberships:item.listMemberships||(item.lid?[{lid:item.lid,lname:item.lname||""}]:[]),available:activeVariant?.available??item.stk!==0,productAvailable:!!product,removeProduct:{epi:getNumericOrStringId(item.epi),empi:getNumericOrStringId(item.empi),du:item.du}}},createElement=(tagName,className="",text="")=>{const element=document.createElement(tagName);return className&&(element.className=className),text&&(element.textContent=text),element},getProductMembershipIds=(lists,product)=>{const membershipIds=new Set;
1return normalizeWishlistLists(lists).forEach(list=>{list.lid&&list.listcontents.some(item=>findWishlistedItem([item],product))&&membershipIds.add(list.lid)}),membershipIds},getWishlistListModalElements=()=>{const modal=document.querySelector("[data-wishlist-list-modal]");return modal?{modal,panel:modal.querySelector(".wishlist-list-modal__panel"),title:modal.querySelector("[data-wishlist-list-modal-title]"),product:modal.querySelector("[data-wishlist-list-modal-product]"),options:modal.querySelector("[data-wishlist-list-options]"),feedback:modal.querySelector("[data-wishlist-list-feedback]"),footer:modal.querySelector("[data-wishlist-list-modal-footer]"),saveButton:modal.querySelector("[data-wishlist-list-save]"),createForm:modal.querySelector("[data-wishlist-create-list-form]"),createInput:modal.querySelector("[data-wishlist-list-name]"),createSubmit:modal.querySelector("[data-wishlist-list-create-submit]")}:null},setWishlistListModalFeedback=(message="",isError=!1)=>{const elements=getWishlistListModalElements();elements?.feedback&&(elements.feedback.hidden=!message,elements.feedback.textContent=message,elements.feedback.classList.toggle("wishlist-list-modal__feedback--error",isError))},setWishlistListModalBusy=isBusy=>{const elements=getWishlistListModalElements();[elements?.saveButton,elements?.createSubmit,...Array.from(elements?.modal?.querySelectorAll("[data-wishlist-list-modal-close]")||[])].filter(Boolean).forEach(button=>{button.disabled=isBusy,button.classList.toggle("is-loading",isBusy),button.setAttribute("aria-busy",isBusy?"true":"false")})},renderWishlistListModalOptions=lists=>{const elements=getWishlistListModalElements(),state=wishlistListModalState;if(!elements||!state)return;const normalizedLists=normalizeWishlistLists(lists),isProductMode=state.mode==="product";if(elements.title.textContent=isProductMode?"Save to wishlist":"Create wishlist",elements.footer.hidden=!isProductMode,elements.options.hidden=!isProductMode,elements.product.hidden=!isProductMode||!state.product?.dt,elements.product.textContent=state.product?.dt||"",elements.createSubmit.textContent=isProductMode?"Create and save":"Create list",elements.options.replaceChildren(),setWishlistListModalFeedback(),!!isProductMode){if(!normalizedLists.length){const empty=createElement("p","wishlist-list-modal__empty","Create a list to save this item.");elements.options.append(empty);return}normalizedLists.forEach((list,index)=>{const option=createElement("label","wishlist-list-modal__option"),checkbox=document.createElement("input"),shouldAutoCheck=state.initialListIds.size===0&&normalizedLists.length===1&&index===0,name=createElement("span","wishlist-list-modal__option-name",list.lname),count=createElement("span","wishlist-list-modal__option-count",`${list.listcontents.length} ${list.listcontents.length===1?"item":"items"}`);checkbox.type="checkbox",checkbox.value=list.lid,checkbox.checked=state.initialListIds.has(list.lid)||shouldAutoCheck,checkbox.dataset.wishlistListChoice="",option.append(checkbox,name,count),elements.options.append(option)})}},closeWishlistListModal=()=>{const elements=getWishlistListModalElements(),previousFocus=wishlistListModalState?.previousFocus;elements?.modal&&(elements.modal.classList.remove("wishlist-list-modal--open"),elements.modal.hidden=!0,document.documentElement.classList.remove("wishlist-list-modal-is-open"),document.body.classList.remove("wishlist-list-modal-is-open"),wishlistListModalState=null,previousFocus instanceof HTMLElement&&previousFocus.focus({preventScroll:!0}))},openWishlistListModal=async({mode="create",product=null,button=null}={})=>{const elements=getWishlistListModalElements();if(!elements?.modal||!activeSwat)return;const lists=await fetchWishlistLists(activeSwat),initialListIds=product?getProductMembershipIds(lists,product):new Set;wishlistListModalState={mode,product,button,initialListIds,previousFocus:document.activeElement instanceof HTMLElement?document.activeElement:null},elements.createInput&&(elements.createInput.value=""),renderWishlistListModalOptions(lists),elements.modal.hidden=!1,document.documentElement.classList.add("wishlist-list-modal-is-open"),document.body.classList.add("wishlist-list-modal-is-open"),window.requestAnimationFrame(()=>{elements.modal.classList.add("wishlist-list-modal--open"),mode==="create"?elements.createInput?.focus({preventScroll:!0}):elements.panel?.focus({preventScroll:!0})})},saveWishlistListModalProduct=async()=>{const elements=getWishlistListModalElements(),state=wishlistListModalState;if(!elements||!state?.product||!activeSwat)return;const selectedListIds=new Set(Array.from(elements.options.querySelectorAll("[data-wishlist-list-choice]:checked")).map(input=>
1input.value).filter(Boolean));if(!selectedListIds.size&&!state.initialListIds.size){setWishlistListModalFeedback("Choose a list or create a new one.",!0);return}const listIdsToAdd=Array.from(selectedListIds).filter(listId=>!state.initialListIds.has(listId)),listIdsToRemove=Array.from(state.initialListIds).filter(listId=>!selectedListIds.has(listId));if(!listIdsToAdd.length&&!listIdsToRemove.length){closeWishlistListModal();return}setWishlistListModalBusy(!0),setWishlistListModalFeedback("Saving...");try{await Promise.all([...listIdsToAdd.map(listId=>addWishlistItem(activeSwat,state.product,listId)),...listIdsToRemove.map(listId=>removeWishlistItem(activeSwat,state.product,listId))]),await refreshSurfaces({renderPage:!!document.querySelector("[data-wishlist-page]"),force:!0}),scheduleProductSocialCountRefresh({force:!0}),closeWishlistListModal()}catch(error){setWishlistListModalFeedback(error.message||"Wishlist lists are unavailable right now.",!0)}finally{setWishlistListModalBusy(!1)}},createWishlistListFromModal=async event=>{event.preventDefault();const elements=getWishlistListModalElements(),state=wishlistListModalState,name=elements?.createInput?.value?.trim()||"";if(!(!elements||!state||!activeSwat)){if(name.length<2){setWishlistListModalFeedback("Enter a list name.",!0);return}setWishlistListModalBusy(!0),setWishlistListModalFeedback("Creating list...");try{const listId=(await createWishlistList(activeSwat,name))?.lid||"";state.mode==="product"&&state.product&&listId&&await addWishlistItem(activeSwat,state.product,listId);const elementsOnPage=getWishlistPageElements();state.mode==="create"&&listId&&setActiveWishlistListId(listId,elementsOnPage?.root),await refreshSurfaces({renderPage:!!elementsOnPage,force:!0}),closeWishlistListModal()}catch(error){setWishlistListModalFeedback(error.message||"Wishlist list could not be created.",!0)}finally{setWishlistListModalBusy(!1)}}},initWishlistListModalEvents=()=>{const elements=getWishlistListModalElements();!elements?.modal||elements.modal.dataset.wishlistListModalEvents==="true"||(elements.modal.dataset.wishlistListModalEvents="true",elements.modal.addEventListener("click",event=>{const closeButton=event.target instanceof Element?event.target.closest("[data-wishlist-list-modal-close]"):null,saveButton=event.target instanceof Element?event.target.closest("[data-wishlist-list-save]"):null;if(closeButton){event.preventDefault(),closeWishlistListModal();return}saveButton&&(event.preventDefault(),saveWishlistListModalProduct())}),elements.createForm?.addEventListener("submit",createWishlistListFromModal),document.addEventListener("keydown",event=>{event.key!=="Escape"||elements.modal.hidden||(event.preventDefault(),closeWishlistListModal())}))},renderWishlistCard=product=>{const card=createElement("article","custom-wishlist-card");card.dataset.wishlistCard="",card.dataset.wishlistProductId=product.productId,card.dataset.wishlistVariantId=product.variantId,card.dataset.wishlistListId=product.item.lid||"",card.dataset.wishlistListIds=product.listMemberships.map(membership=>membership.lid).filter(Boolean).join(","),card.dataset.wishlistProductUrl=product.removeProduct.du||product.url,card.dataset.wishlistTitle=product.title;const imageLink=createElement("a","custom-wishlist-card__image-link");if(imageLink.href=product.url,product.image){const image=createElement("img","custom-wishlist-card__image");image.src=product.image,image.alt=product.title,image.loading="lazy",imageLink.append(image)}else{const placeholder=createElement("span","custom-wishlist-card__image-placeholder",product.title.slice(0,2));imageLink.append(placeholder)}const body=createElement("div","custom-wishlist-card__body"),title=createElement("h2","custom-wishlist-card__title"),titleLink=createElement("a","",product.title);if(titleLink.href=product.url,title.append(titleLink),body.append(title),product.variantTitle&&body.append(createElement("p","custom-wishlist-card__variant",product.variantTitle)),product.listMemberships.length>1){const listNames=product.listMemberships.map(membership=>membership.lname).filter(Boolean);listNames.length&&body.append(createElement("p","custom-wishlist-card__lists",`Saved in ${listNames.join(", ")}`))}if(product.priceCents!==null&&product.priceCents!==void 0){const onSale=product.compareAtCents&&product.compareAtCents>product.priceCents,price=createElement("div",`custom-wishlist-card__price price${onSale?" price--on-sale":""}`);
1if(price.dataset.productPrice="",price.dataset.productId=product.productId,price.dataset.variantId=product.variantId,price.dataset.basePriceCents=product.priceCents,price.dataset.baseCompareAtCents=onSale?product.compareAtCents:0,onSale){const compareLabel=createElement("span","visually-hidden","Regular price");compareLabel.dataset.priceCompareLabel="";const comparePrice=createElement("s","price__compare",formatMoney(product.compareAtCents));comparePrice.dataset.priceCompare="",price.append(compareLabel,comparePrice)}const currentLabel=createElement("span","visually-hidden",onSale?"Sale price":"Regular price");currentLabel.dataset.priceCurrentLabel="";const currentPrice=createElement("span","price__current",formatMoney(product.priceCents));currentPrice.dataset.priceCurrent="",price.append(currentLabel,currentPrice),body.append(price)}const actions=createElement("div","custom-wishlist-card__actions"),addButton=createElement(product.available?"button":"a",product.available?"button button--full custom-wishlist-card__add":"button button--secondary button--full custom-wishlist-card__view",product.available?"Add to bag":"View product");product.available?(addButton.type="button",addButton.dataset.wishlistAdd=product.variantId,addButton.setAttribute("aria-label",`Add ${product.title} to bag`)):addButton.href=product.url;const removeButton=createElement("button","text-button custom-wishlist-card__remove","Remove");return removeButton.type="button",removeButton.dataset.wishlistRemove="",removeButton.setAttribute("aria-label",`Remove ${product.title} from wishlist`),actions.append(addButton,removeButton),body.append(actions),card.append(imageLink,body),card},getWishlistPageElements=()=>{const root=document.querySelector("[data-wishlist-page]");return root?{root,status:root.querySelector("[data-wishlist-status]"),toolbar:root.querySelector("[data-wishlist-toolbar]"),listControls:root.querySelector("[data-wishlist-list-controls]"),listDropdown:root.querySelector("[data-wishlist-list-dropdown]"),listValue:root.querySelector("[data-wishlist-list-value]"),listOptions:root.querySelector("[data-wishlist-list-options]"),createListButton:root.querySelector("[data-wishlist-create-list-open]"),countLabel:root.querySelector("[data-wishlist-count-label]"),grid:root.querySelector("[data-wishlist-grid]"),empty:root.querySelector("[data-wishlist-empty]")}:null},setWishlistPageStatus=(elements,message="",isError=!1)=>{elements?.status&&(elements.status.hidden=!message,elements.status.textContent=message,elements.status.classList.toggle("custom-wishlist__status--error",isError))},createWishlistListOption=({id,name,count,selected})=>{const option=createElement("button","custom-wishlist__list-option"),label=createElement("span","custom-wishlist__list-option-label",name),meta=createElement("span","custom-wishlist__list-option-count",`${count} ${count===1?"item":"items"}`);return option.type="button",option.dataset.wishlistListOption="",option.dataset.wishlistListId=id,option.setAttribute("role","option"),option.setAttribute("aria-selected",selected?"true":"false"),option.append(label,meta),option},renderWishlistListControls=(elements,lists,activeListId)=>{if(!elements?.listControls||!elements.listOptions||!elements.listValue)return;const normalizedLists=normalizeWishlistLists(lists),options=[{id:"all",name:"All wishlists",count:getWishlistItemsFromLists(normalizedLists,"all").length},...normalizedLists.map(list=>({id:list.lid,name:list.lname,count:list.listcontents.length}))],currentListId=activeListId||"all",currentOption=options.find(option=>option.id===currentListId)||options[0];elements.listControls.hidden=!1,elements.createListButton&&(elements.createListButton.hidden=!1),elements.listValue.textContent=currentOption?.name||"All wishlists",elements.listOptions.replaceChildren(...options.map(option=>createWishlistListOption({...option,selected:option.id===currentListId})))},getWishlistCountLabel=(count,lists,activeListId)=>{const normalizedLists=normalizeWishlistLists(lists),itemText=`${count} saved ${count===1?"item":"items"}`;if(activeListId&&activeListId!=="all"){const list=normalizedLists.find(candidate=>candidate.lid===activeListId);return list?`${itemText} in ${list.lname}`:itemText}return normalizedLists.length?`${itemText} across ${normalizedLists.length} ${normalizedLists.length===1?"list":"lists"}`:itemText},renderWishlistPage=async(swat,prefetched=null)=>{const elements=getWishlistPageElements();if(elements){elements.root.setAttribute("aria-busy","true"),elements.grid.replaceChildren(),elements.empty.hidden=!0,setWishlistPageStatus(elements,"Loading your wishlist...");try{const lists=prefetched?.lists||await fetchWishlistLists(swat),totalItems=getWishlistItemsFromLists(lists,"all"),activeListId=getActiveWishlistListId(lists,elements.root),items=getWishlistItemsFromLists(lists,activeListId);setActiveWishlistListId(activeListId,elements.root),updateHeaderCount(totalItems.length),updateProductButtons(totalItems),renderWishlistListControls(elements,lists,activeListId);const products=await Promise.all(items.map(hydrateWishlistItem));elements.grid.replaceChildren(...products.map(renderWishlistCard)),elements.toolbar.hidden=!1,elements.empty.hidden=products.length>0,elements.countLabel.textContent=getWishlistCountLabel(products.length,lists,activeListId),setWishlistPageStatus(elements)}catch{setWishlistPageStatus(elements,"Wishlist is not available right now. Please refresh and try again.",!0)}finally{elements.root.setAttribute("aria-busy","false")}}},setCardButtonBusy=(button,label)=>{button.disabled=!0,button.classList.add("is-loading"),button.dataset.originalText=button.textContent,button.textContent=label},resetCardButton=(button,label="")=>{button.disabled=!1,button.classList.remove("is-loading"),button.textContent=label||button.dataset.originalText||"Add to bag"},addCartItemWithToast=({id,quantity=1,message=""}={})=>new Promise((resolve,reject)=>{const detail={id,quantity,message,handled:!1,onSuccess:resolve,onError:reject};document.dispatchEvent(new CustomEvent("cart:add-item",{detail})),detail.handled||reject(new Error("Bag is not available right now."))}),addWishlistCardToCart=async button=>{const card=button.closest("[data-wishlist-card]"),variantId=getNumericOrStringId(card?.dataset.wishlistVariantId);if(variantId){setCardButtonBusy(button,"Adding...");try{await addCartItemWithToast({id:variantId,quantity:1,message:card.dataset.wishlistTitle||""}),resetCardButton(button,"Added"),window.setTimeout(()=>resetCardButton(button),1600)}catch(error){resetCardButton(button,"Try again"),button.setAttribute("aria-label",error.message)}}},removeWishlistCard=async button=>{if(!activeSwat)return;const card=button.closest("[data-wishlist-card]");if(!card)return;const product={epi:getNumericOrStringId(card.dataset.wishlistVariantId),empi:getNumericOrStringId(card.dataset.wishlistProductId),du:card.dataset.wishlistProductUrl},listIds=(card.dataset.wishlistListIds||card.dataset.wishlistListId||"").split(",").map(listId=>
1listId.trim()).filter(Boolean);button.disabled=!0;try{listIds.length?await Promise.all(listIds.map(listId=>removeWishlistItem(activeSwat,product,listId))):await removeWishlistItem(activeSwat,product,card.dataset.wishlistListId),await refreshSurfaces({renderPage:!0,force:!0})}catch{button.disabled=!1,button.textContent="Try again"}},initWishlistPageEvents=()=>{const elements=getWishlistPageElements();!elements||elements.root.dataset.wishlistEvents==="true"||(elements.root.dataset.wishlistEvents="true",elements.root.addEventListener("click",event=>{if(event.target.closest("[data-wishlist-create-list-open]")){event.preventDefault(),openWishlistListModal({mode:"create"});return}const listOption=event.target.closest("[data-wishlist-list-option]");if(listOption){event.preventDefault(),setActiveWishlistListId(listOption.dataset.wishlistListId||"all",elements.root),elements.listDropdown instanceof HTMLDetailsElement&&(elements.listDropdown.open=!1),renderWishlistPage(activeSwat);return}const addButton=event.target.closest("[data-wishlist-add]");if(addButton){event.preventDefault(),addWishlistCardToCart(addButton);return}const removeButton=event.target.closest("[data-wishlist-remove]");removeButton&&(event.preventDefault(),removeWishlistCard(removeButton))}))},bindSwymEvents=swat=>{swymEventsBound||!swat?.evtLayer?.addEventListener||(swymEventsBound=!0,["sw:addedtowishlist","sw:removedfromwishlist","sw:customerInfoRefreshed"].forEach(eventName=>{swat.evtLayer.addEventListener(eventName,()=>{scheduleRefresh({renderPage:!!document.querySelector("[data-wishlist-page]"),force:!0}),scheduleProductSocialCountRefresh({force:!0})})}))},markWishlistUnavailable=()=>{if(swymReady)return;document.querySelectorAll("[data-wishlist-button]").forEach(button=>{button.disabled=!0,button.setAttribute("aria-label","Wishlist is unavailable")});const elements=getWishlistPageElements();elements&&setWishlistPageStatus(elements,"Wishlist is not available right now. Please refresh and try again.",!0)},initWithSwym=swat=>{swat&&(swymReady=!0,activeSwat=swat,bindSwymEvents(swat),initVariantListener(),initProductButtons(swat),initWishlistPageEvents(),initWishlistListModalEvents(),refreshSurfaces({renderPage:!!document.querySelector("[data-wishlist-page]")}),scheduleProductSocialCountRefresh())};window.SwymCallbacks=window.SwymCallbacks||[];const storedHeaderCount=readStoredHeaderCount();storedHeaderCount!==null&&updateHeaderCount(storedHeaderCount,{persist:!1}),window._swat&&typeof window._swat.fetch=="function"?initWithSwym(window._swat):window.SwymCallbacks.push(initWithSwym),document.addEventListener("shopify:section:load",()=>{activeSwat&&(initProductButtons(activeSwat),initWishlistPageEvents(),initWishlistListModalEvents(),refreshSurfaces({renderPage:!!document.querySelector("[data-wishlist-page]")}),scheduleProductSocialCountRefresh())}),window.setTimeout(markWishlistUnavailable,8e3)})();
2//# sourceMappingURL=/cdn/shop/t/649/assets/wishlist.js.map?v=150261672709555874241786993707

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.