1(function(){"use strict";console.log("[WEGO Search Favorites] Script loaded - Version 2024-12-05-v3");const API_BASE="/apps/wego-favorite/api/favorites",MAX_RETRIES=3,BUTTON_SELECTOR=".vfa-favorite-btn--collection",LOGIN_REQUIRED_CLASS="vfa-favorite-btn--login-required";let favoriteProductIds=new Set,favoriteVariantIds=new Set,favoritesLoaded=!1,isInitializing=!1;function getCustomerId(){let customerId=null;const button=document.querySelector(`${BUTTON_SELECTOR}[data-customer-id]`);return button&&button.dataset.customerId&&(customerId=button.dataset.customerId),!customerId&&window.ShopifyCustomer&&window.ShopifyCustomer.id&&(customerId=String(window.ShopifyCustomer.id)),!customerId&&window.__st&&window.__st.cid&&(customerId=String(window.__st.cid)),customerId&&/^\d+$/.test(customerId)?customerId:customerId&&customerId.includes("gid://")?customerId.split("/").pop():customerId}function normalizeVariantId(variantId){if(!variantId)return"";const idStr=String(variantId);return/^\d+$/.test(idStr)?idStr:idStr.includes("gid://")?idStr.replace(/^gid:\/\/shopify\/\w+\//,""):idStr}function normalizeProductId(productId){if(!productId)return"";const idStr=String(productId);return/^\d+$/.test(idStr)?idStr:idStr.includes("gid://")?idStr.replace(/^gid:\/\/shopify\/\w+\//,""):idStr}function init(){if(isInitializing)return;isInitializing=!0,console.log("[WEGO Search Favorites] \u521D\u671F\u5316\u958B\u59CB"),addFavoriteModal(),addLoginModal();const buttons=document.querySelectorAll(BUTTON_SELECTOR);if(buttons.length===0){console.log("[WEGO Search Favorites] \u30DC\u30BF\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u52D5\u7684\u8AAD\u307F\u8FBC\u307F\u3092\u5F85\u6A5F"),isInitializing=!1;return}console.log("[WEGO Search Favorites] \u521D\u671F\u5316:",buttons.length,"\u4EF6\u306E\u30DC\u30BF\u30F3"),getCustomerId()&&!favoritesLoaded&&loadFavoriteStatuses(),setupEventListeners(),isInitializing=!1}async function loadFavoriteStatuses(){const customerId=getCustomerId();if(customerId)try{const params=new URLSearchParams({customerId,limit:"500"}),url=`${API_BASE}/list?${params}`,response=await fetch(url);if(!response.ok)return;const result=await response.json();result.success&&result.items&&(favoriteProductIds.clear(),favoriteVariantIds.clear(),result.items.forEach(item=>{if(item.productId){const normalizedProductId=normalizeProductId(item.productId);normalizedProductId&&favoriteProductIds.add(normalizedProductId)}if(item.variantId){const normalizedVariantId=normalizeVariantId(item.variantId);normalizedVariantId&&favoriteVariantIds.add(normalizedVariantId)}}),favoritesLoaded=!0,updateAllButtonStates())}catch(error){console.error("[WEGO Search Favorites] \u304A\u6C17\u306B\u5165\u308A\u72B6\u614B\u53D6\u5F97\u30A8\u30E9\u30FC:",error)}}function injectVariantIdsFromCardLinks(){new URLSearchParams(window.location.search).get("color")==="all"&&document.querySelectorAll(`${BUTTON_SELECTOR}[data-product-id]`).forEach(button=>{if(button.dataset.variantId)return;const card=button.closest(".c-item");if(!card)return;const link=card.querySelector("a.c-item__thumbnail");if(link)try{const variantFromUrl=new URL(link.href,location.origin).searchParams.get("variant");variantFromUrl&&(button.dataset.variantId=variantFromUrl)}catch{}})}function updateAllButtonStates(){injectVariantIdsFromCardLinks(),document.querySelectorAll(`${BUTTON_SELECTOR}[data-product-id]`).forEach(button=>{const variantId=button.dataset.variantId,productId=button.dataset.productId;let isFavorited=!1;if(variantId){const normalizedVariantId=normalizeVariantId(variantId);isFavorited=!!(normalizedVariantId&&favoriteVariantIds.has(normalizedVariantId))}else{const normalizedProductId=normalizeProductId(productId);if(isFavorited=!!(normalizedProductId&&favoriteProductIds.has(normalizedProductId)),!isFavorited)try{const variantsJson=button.dataset.productVariants;variantsJson&&(isFavorited=JSON.parse(variantsJson).some(v=>{const nv=normalizeVariantId(String(v.id));return nv&&favoriteVariantIds.has(nv)}))}catch{}}isFavorited?(button.classList.add("vfa-is-favorited"),updateHeartIcon(button,!0)):(button.classList.remove("vfa-is-favorited"),updateHeartIcon(button,!1))}),document.querySelectorAll(".vfa-js-search-modal-fav-btn").forEach(btn=>{const variantId=btn.dataset.variantId,normalizedVariantId=normalizeVariantId(variantId);normalizedVariantId&&favoriteVariantIds.has(normalizedVariantId)?(btn.classList.add("vfa-is-favorited"),updateHeartIcon(btn,!0)):(btn.classList.remove("vfa-is-favorited"),updateHeartIcon(btn,!1))})}function updateHeartIcon(btn,isFavorited){const defaultIcon=btn.querySelector(".vfa-favorite-icon--default"),activeIcon=btn.querySelector(".vfa-favorite-icon--active");defaultIcon&&activeIcon&&(defaultIcon.style.display=isFavorited?"none":"block",activeIcon.style.display=isFavorited?"block":"none")}function setupEventListeners(){document.querySelectorAll(BUTTON_SELECTOR).forEac
1h(button=>{button.dataset.vfaSearchInitialized!=="true"&&(button.dataset.vfaSearchInitialized="true",button.addEventListener("click",handleFavoriteClick))})}function handleFavoriteClick(e){e.preventDefault(),e.stopPropagation();const button=e.currentTarget;if(button.classList.contains(LOGIN_REQUIRED_CLASS)){window.location.href="/account/login?return_url="+encodeURIComponent(window.location.pathname+window.location.search);return}button.dataset.productId?showFavoriteModal(button):showNotification("\u5546\u54C1\u60C5\u5831\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F","error")}function addFavoriteModal(){if(document.querySelector(".vfa-search-fav-modal"))return;const overlay=document.createElement("div");overlay.className="vfa-search-fav-modal-overlay",overlay.addEventListener("click",closeFavoriteModal),document.body.appendChild(overlay);const modal=document.createElement("div");modal.className="vfa-search-fav-modal",modal.innerHTML=` 2 <div class="vfa-fav-modal-header"> 3 <h3>\u304A\u6C17\u306B\u5165\u308A\u306B\u8FFD\u52A0\u3059\u308B</h3> 4 <button class="vfa-fav-modal-close" aria-label="\u9589\u3058\u308B">\u2715</button> 5 </div> 6 <div class="vfa-fav-modal-body"> 7 <div class="vfa-fav-modal-loading">\u8AAD\u307F\u8FBC\u307F\u4E2D...</div> 8 </div> 9 `,document.body.appendChild(modal),modal.querySelector(".vfa-fav-modal-close").addEventListener("click",closeFavoriteModal),addModalStyles()}function addModalStyles(){if(document.querySelector("#vfa-search-fav-modal-styles"))return;const style=document.createElement("style");style.id="vfa-search-fav-modal-styles",style.textContent=` 10 .vfa-search-fav-modal-overlay { 11 position: fixed; 12 top: 0; 13 left: 0; 14 width: 100%; 15 height: 100%; 16 background: rgba(0, 0, 0, 0.5); 17 z-index: 9998; 18 opacity: 0; 19 visibility: hidden; 20 transition: opacity 0.3s ease, visibility 0.3s ease; 21 } 22 .vfa-search-fav-modal-overlay.vfa-is-open { 23 opacity: 1; 24 visibility: visible; 25 } 26 .vfa-search-fav-modal { 27 position: fixed; 28 top: 50%; 29 left: 50%; 30 transform: translate(-50%, -50%) scale(0.9); 31 background: #fff; 32 border-radius: 8px; 33 width: 90%; 34 max-width: 400px; 35 max-height: 80vh; 36 overflow: hidden; 37 z-index: 9999; 38 opacity: 0; 39 visibility: hidden; 40 transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease; 41 } 42 .vfa-search-fav-modal.vfa-is-open { 43 opacity: 1; 44 visibility: visible; 45 transform: translate(-50%, -50%) scale(1); 46 } 47 .vfa-fav-modal-header { 48 display: flex; 49 justify-content: space-between; 50 align-items: center; 51 padding: 16px; 52 border-bottom: 1px solid #eee; 53 } 54 .vfa-fav-modal-header h3 { 55 margin: 0; 56 font-size: 16px; 57 font-weight: bold; 58 } 59 .vfa-fav-modal-close { 60 background: none; 61 border: none; 62 font-size: 20px; 63 cursor: pointer; 64 padding: 4px 8px; 65 } 66 .vfa-fav-modal-body { 67 padding: 16px; 68 max-height: 60vh; 69 overflow-y: auto; 70 } 71 .vfa-fav-modal-loading { 72 text-align: center; 73 padding: 20px; 74 color: #666; 75 } 76 .vfa-fav-color-group { 77 margin-bottom: 16px; 78 } 79 .vfa-fav-color-header { 80 display: flex; 81 align-items: center; 82 gap: 10px; 83 margin-bottom: 10px; 84 padding-bottom: 8px; 85 border-bottom: 1px solid #eee; 86 } 87 .vfa-fav-color-image { 88 width: 50px; 89 height: 60px; 90 object-fit: cover; 91 border-radius: 4px; 92 } 93 .vfa-fav-color-name { 94 font-weight: bold; 95 font-size: 14px; 96 } 97 .vfa-fav-size-list { 98 list-style: none; 99 padding: 0; 100 margin: 0; 101 } 102 .vfa-fav-size-item { 103 display: flex; 104 justify-content: space-between; 105 align-items: center; 106 padding: 10px 0;
107 border-bottom: 1px solid #f0f0f0; 108 } 109 .vfa-fav-size-item:last-child { 110 border-bottom: none; 111 } 112 .vfa-fav-size-info { 113 flex: 1; 114 } 115 .vfa-fav-size-name { 116 font-size: 14px; 117 margin-bottom: 4px; 118 } 119 .vfa-fav-size-name.vfa-is-unavailable { 120 color: #999; 121 } 122 .vfa-fav-size-note { 123 font-size: 12px; 124 color: #666; 125 } 126 .vfa-fav-size-note--ship { 127 color: #4caf50; 128 } 129 .vfa-fav-btn-modal { 130 width: 28px; 131 height: 28px; 132 border: none; 133 background: transparent; 134 cursor: pointer; 135 display: flex; 136 align-items: center; 137 justify-content: center; 138 transition: all 0.2s ease; 139 flex-shrink: 0; 140 padding: 0; 141 -webkit-tap-highlight-color: transparent; 142 } 143 .vfa-fav-btn-modal:hover { 144 opacity: 0.7; 145 } 146 .vfa-fav-btn-modal .vfa-favorite-icon--default { 147 display: block; 148 } 149 .vfa-fav-btn-modal .vfa-favorite-icon--active { 150 display: none; 151 } 152 .vfa-fav-btn-modal.vfa-is-favorited .vfa-favorite-icon--default { 153 display: none; 154 } 155 .vfa-fav-btn-modal.vfa-is-favorited .vfa-favorite-icon--active { 156 display: block; 157 } 158 .vfa-fav-btn-modal.vfa-is-loading { 159 opacity: 0.5; 160 cursor: wait; 161 } 162 `,document.head.appendChild(style)}function showFavoriteModal(button){const productId=button.dataset.productId,productName=button.dataset.productName||"",productImage=button.dataset.productImage||"",productHandle=button.dataset.productHandle||"";let variants=[];try{const variantsJson=button.dataset.productVariants;variantsJson&&(variants=JSON.parse(variantsJson),variants.length>0&&("requires_shipping"in variants[0]||"taxable"in variants[0])&&(variants=variants.map(function(v){return Object.assign({},v,{price:typeof v.price=="number"?v.price/100:v.price})})))}catch(e){console.error("[WEGO Search Favorites] \u30D0\u30EA\u30A2\u30F3\u30C8\u60C5\u5831\u306E\u30D1\u30FC\u30B9\u30A8\u30E9\u30FC:",e)}const overlay=document.querySelector(".vfa-search-fav-modal-overlay"),modal=document.querySelector(".vfa-search-fav-modal");if(!modal)return;const body=modal.querySelector(".vfa-fav-modal-body");if(variants.length===0)body.innerHTML='<div class="vfa-fav-modal-loading">\u30D0\u30EA\u30A2\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F</div>';else{const colorGroups=groupVariantsByColor(variants);body.innerHTML=generateModalContent(colorGroups,productId,productHandle,productImage,productName)}overlay.classList.add("vfa-is-open"),modal.classList.add("vfa-is-open"),updateModalButtonStates(),setupModalButtonHandlers()}function groupVariantsByColor(variants){const groups={};
162return variants.forEach(variant=>{const color=variant.option1||"\u30C7\u30D5\u30A9\u30EB\u30C8",size=variant.option2||variant.title;groups[color]||(groups[color]={color,image:variant.featured_image?variant.featured_image.src:null,variants:[]}),groups[color].variants.push({id:variant.id,title:variant.title,size,available:variant.available,price:variant.price,option1:variant.option1,option2:variant.option2,option3:variant.option3})}),Object.values(groups)}function generateModalContent(colorGroups,productId,productHandle,productImage,productName){let html="";return colorGroups.forEach(group=>{if(html+=`<div class="vfa-fav-color-group" data-color-name="${escapeHtml(group.color)}">`,html+='<div class="vfa-fav-color-header">',group.image||productImage){const imgSrc=group.image||productImage;html+=`<img src="${escapeHtml(imgSrc)}" class="vfa-fav-color-image" alt="${escapeHtml(group.color)}" loading="lazy">`}html+=`<span class="vfa-fav-color-name">${escapeHtml(group.color)}</span>`,html+="</div>",html+='<ul class="vfa-fav-size-list">
162',group.variants.forEach(variant=>{const sizeDisplay=variant.option2||variant.title,availabilityText=variant.available?"\u5728\u5EAB\u3042\u308A":"\u5728\u5EAB\u306A\u3057",unavailableClass=variant.available?"":" vfa-is-unavailable";html+='<li class="vfa-fav-size-item">',html+='<div class="vfa-fav-size-info">',html+=`<div class="vfa-fav-size-name${unavailableClass}">${escapeHtml(sizeDisplay)} / ${availabilityText}</div>`,variant.available&&(html+='<div class="vfa-fav-size-note vfa-fav-size-note--ship">1~3\u55B6\u696D\u65E5\u4EE5\u5185\u306B\u767A\u9001\u4E88\u5B9A</div>'),html+="</div>";const normalizedVariantId=normalizeVariantId(variant.id),cardButton=document.querySelector(`${BUTTON_SELECTOR}[data-product-id="${productId}"]`);let defaultIconSrc="",activeIconSrc="";if(window.VFA_ASSETS&&(defaultIconSrc=window.VFA_ASSETS.heartGy||"",activeIconSrc=window.VFA_ASSETS.heartSolid||""),cardButton){const defaultIcon=cardButton.querySelector(".vfa-favorite-icon--default"),activeIcon=cardButton.querySelector(".vfa-favorite-icon--active");defaultIcon&&defaultIcon.src&&(defaultIconSrc=defaultIcon.src),activeIcon&&activeIcon.src&&(activeIconSrc=activeIcon.src)}if(!defaultIconSrc||!activeIconSrc){const firstButton=document.querySelector(BUTTON_SELECTOR);if(firstButton){const defaultIcon=firstButton.querySelector(".vfa-favorite-icon--default"),activeIcon=firstButton.querySelector(".vfa-favorite-icon--active");defaultIcon&&defaultIcon.src&&!defaultIconSrc&&(defaultIconSrc=defaultIcon.src),activeIcon&&activeIcon.src&&!activeIconSrc&&(activeIconSrc=activeIcon.src)}}(!defaultIconSrc||!activeIconSrc)&&console.warn("[WEGO Search Favorites] \u30A2\u30A4\u30B3\u30F3URL\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002theme.liquid\u306BVFA_ASSETS\u306E\u5B9A\u7FA9\u3092\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002"),html+=` 163 <button 164 class="vfa-fav-btn-modal vfa-js-search-modal-fav-btn" 165 data-product-id="${productId}" 166 data-variant-id="${normalizedVariantId}" 167 data-handle="${escapeHtml(productHandle)}" 168 data-price="${variant.price||0}" 169 data-product-name="${escapeHtml(productName||"")}" 170 aria-label="\u304A\u6C17\u306B\u5165\u308A"> 171 <img class="vfa-favorite-icon vfa-favorite-icon--default" src="${escapeHtml(defaultIconSrc)}" alt="\u304A\u6C17\u306B\u5165\u308A" width="22" height="22"> 172 <img class="vfa-favorite-icon vfa-favorite-icon--active" src="${escapeHtml(activeIconSrc)}" alt="\u304A\u6C17\u306B\u5165\u308A\u6E08\u307F" width="22" height="22" style="display:none;"> 173 </button> 174 `,html+="</li>"}),html+="</ul>",html+="</div>"}),html}function escapeHtml(str){return str?String(str).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"):""}function updateModalButtonStates(){document.querySelectorAll(".vfa-fav-modal-body .vfa-js-search-modal-fav-btn").forEach(btn=>{const variantId=btn.dataset.variantId,normalizedVariantId=normalizeVariantId(variantId);normalizedVariantId&&favoriteVariantIds.has(normalizedVariantId)?(btn.classList.add("vfa-is-favorited"),updateHeartIcon(btn,!0)):(btn.classList.remove("vfa-is-favorited"),updateHeartIcon(btn,!1))})}function setupModalButtonHandlers(){document.querySelectorAll(".vfa-fav-modal-body .vfa-js-search-modal-fav-btn").forEach(btn=>{btn.dataset.vfaModalInitialized!=="true"&&(btn.dataset.vfaModalInitialized="true",btn.addEventListener("click",handleModalFavoriteClick))})}async function handleModalFavoriteClick(e){e.preventDefault(),e.stopPropagation();const btn=e.currentTarget;if(btn.classList.contains("vfa-is-loading")||btn.disabled)return;const productId=btn.dataset.productId,variantId=btn.dataset.variantId,normalizedVariantId=normalizeVariantId(variantId),customerId=getCustomerId();if(!customerId){closeFavoriteModal(),window.location.href="/account/login?return_url="+encodeURIComponent(window.location.pathname+window.location.search);return}const isFavorited=btn.classList.contains("vfa-is-favorited");if(isFavorited){alert("\u3059\u3067\u306B\u304A\u6C17\u306B\u5165\u308A\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059");return}btn.classList.add("vfa-is-loading"),btn.classList.toggle("vfa-is-favorited"),updateHeartIcon(btn,!isFavorited),isFavorited?favoriteVariantIds.delete(normalizedVariantId):favoriteVariantIds.add(normalizedVariantId);let success=!1,retryCount2=0;for(;retryCount2<=MAX_RETRIES&&!success;)try{let response,endpoint,body;if(isFavorited)endpoint=`${API_BASE}/remove`,body={customerId,variantId};else{const variantPrice=parseFloat(btn.dataset.price)||0,pName=btn.dataset.productName||"";endpoint=`${API_BASE}/add`,body={customerId,productId,variantId,productName:pName,price:variantPrice,imageUrl:""}}
174response=await fetch(endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const data=await response.json();if(response.ok&&data.success)success=!0,updateProductCardState(productId),showNotification(isFavorited?"\u304A\u6C17\u306B\u5165\u308A\u304B\u3089\u524A\u9664\u3057\u307E\u3057\u305F":"\u304A\u6C17\u306B\u5165\u308A\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F","success");else if(response.status>=500&&retryCount2<MAX_RETRIES){retryCount2++,await new Promise(resolve=>setTimeout(resolve,1e3*retryCount2));continue}else throw new Error(data.error||data.message||"API Error")}catch{if(retryCount2<MAX_RETRIES){retryCount2++,await new Promise(resolve=>setTimeout(resolve,1e3*retryCount2));continue}btn.classList.toggle("vfa-is-favorited"),updateHeartIcon(btn,isFavorited),isFavorited?favoriteVariantIds.add(normalizedVariantId):favoriteVariantIds.delete(normalizedVariantId),showNotification("\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F","error")}btn.classList.remove("vfa-is-loading")}function updateProductCardState(productId){const modalButtons=document.querySelectorAll(`.vfa-fav-modal-body .vfa-js-search-modal-fav-btn[data-product-id="${productId}"]`);let hasAnyFavorite=!1;modalButtons.forEach(btn=>{const normalizedVariantId=normalizeVariantId(btn.dataset.variantId);normalizedVariantId&&favoriteVariantIds.has(normalizedVariantId)&&(hasAnyFavorite=!0)});const normalizedProductId=normalizeProductId(productId);document.querySelectorAll(`${BUTTON_SELECTOR}[data-product-id="${productId}"]`).forEach(cardButton=>{const variantId=cardButton.dataset.variantId;let isFavorited;if(variantId){const normalizedVariantId=normalizeVariantId(variantId);isFavorited=!!(normalizedVariantId&&favoriteVariantIds.has(normalizedVariantId))}else isFavorited=hasAnyFavorite,normalizedProductId&&(isFavorited?favoriteProductIds.add(normalizedProductId):favoriteProductIds.delete(normalizedProductId));isFavorited?(cardButton.classList.add("vfa-is-favorited"),updateHeartIcon(cardButton,!0)):(cardButton.classList.remove("vfa-is-favorited"),updateHeartIcon(cardButton,!1))})}function closeFavoriteModal(){const overlay=document.querySelector(".vfa-search-fav-modal-overlay"),modal=document.querySelector(".vfa-search-fav-modal");overlay&&overlay.classList.remove("vfa-is-open"),modal&&modal.classList.remove("vfa-is-open")}function addLoginModal(){if(document.querySelector(".vfa-search-login-modal"))return;const modal=document.createElement("div");modal.className="vfa-search-login-modal",modal.innerHTML=` 175 <div class="vfa-login-modal-overlay"></div> 176 <div class="vfa-login-modal-wrapper"> 177 <div class="vfa-login-modal-header"> 178 <button class="vfa-login-modal-close vfa-js-search-login-close">\u2715</button> 179 </div> 180 <div class="vfa-login-modal-content"> 181 <h3>\u304A\u6C17\u306B\u5165\u308A\u767B\u9332\u3059\u308B\u306B\u306F<br>\u4F1A\u54E1\u767B\u9332\u30FB\u30ED\u30B0\u30A4\u30F3\u304C\u5FC5\u8981\u3067\u3059</h3> 182 <button class="c-btn c-btn--primary vfa-js-search-login-btn">\u65B0\u898F\u4F1A\u54E1\u767B\u9332\u30FB\u30ED\u30B0\u30A4\u30F3</button> 183 <button class="c-btn c-btn--border vfa-js-search-login-close">\u30AD\u30E3\u30F3\u30BB\u30EB</button> 184 </div> 185 </div> 186 `;const style=document.createElement("style");style.id="vfa-search-login-modal-styles",style.textContent=` 187 .vfa-search-login-modal { 188 position: fixed; 189 top: 0; 190 left: 0; 191 width: 100%; 192 height: 100%; 193 z-index: 10000; 194 opacity: 0; 195 visibility: hidden; 196 transition: opacity 0.3s ease, visibility 0.3s ease; 197 } 198 .vfa-search-login-modal.vfa-is-visible { 199 opacity: 1; 200 visibility: visible; 201 } 202 .vfa-search-login-modal .vfa-login-modal-overlay { 203 position: absolute; 204 top: 0; 205 left: 0; 206 width: 100%; 207 height: 100%; 208 background: rgba(0, 0, 0, 0.5); 209 } 210 .vfa-search-login-modal .vfa-login-modal-wrapper { 211 position: absolute; 212 top: 50%; 213 left: 50%; 214 transform: translate(-50%, -50%); 215 background: #fff; 216 border-radius: 8px; 217 width: 90%; 218 max-width: 350px; 219 padding: 20px; 220 } 221 .vfa-search-login-modal .vfa-login-modal-header { 222 text-align: right; 223 margin-bottom: 10px; 224 } 225 .vfa-search-login-modal .vfa-login-modal-close { 226 background: none; 227 border: none; 228 font-size: 20px; 229 cursor: pointer; 230 } 231 .vfa-search-login-modal .vfa-login-modal-content { 232 text-align: center; 233 } 234 .vfa-search-login-modal .vfa-login-modal-content h3 { 235 font-size: 16px; 236 margin-bottom: 20px; 237 line-height: 1.5; 238 } 239 .vfa-search-login-modal .vfa-login-modal-content .c-btn { 240 display: block; 241 width: 100%; 242 padding: 12px; 243 margin-bottom: 10px; 244 border-radius: 4px; 245 font-size: 14px; 246 cursor: pointer; 247 } 248 .vfa-search-login-modal .vfa-login-modal-content .c-btn--primary { 249 background: #000; 250 color: #fff; 251 border: none; 252 } 253 .vfa-search-login-modal .vfa-login-modal-content .c-btn--border { 254 background: #fff; 255 color: #000; 256 border: 1px solid #000; 257 } 258 `,document.head.appendChild(style),document.body.appendChild(modal),modal.querySelector(".vfa-js-search-login-btn").addEventListener("click",()=>{const returnUrl=encodeURIComponent(window.location.pathname+window.location.search);window.location.href=`/account/login?return_url=${returnUrl}`}),modal.querySelectorAll(".vfa-js-search-login-close").forEach(btn=>
258{btn.addEventListener("click",hideLoginModal)}),modal.querySelector(".vfa-login-modal-overlay").addEventListener("click",hideLoginModal)}function showLoginModal(){const modal=document.querySelector(".vfa-search-login-modal");modal&&modal.classList.add("vfa-is-visible")}function hideLoginModal(){const modal=document.querySelector(".vfa-search-login-modal");modal&&modal.classList.remove("vfa-is-visible")}function showNotification(message,type="success"){const existing=document.querySelector(".vfa-search-favorite-notification");existing&&existing.remove();const notification=document.createElement("div");if(notification.className=`vfa-search-favorite-notification vfa-search-favorite-notification--${type}`,notification.textContent=message,!document.querySelector("#vfa-search-notification-styles")){const style=document.createElement("style");style.id="vfa-search-notification-styles",style.textContent=` 259 .vfa-search-favorite-notification { 260 position: fixed; 261 top: 20px; 262 left: 50%; 263 transform: translateX(-50%); 264 padding: 12px 24px; 265 border-radius: 4px; 266 font-size: 14px; 267 z-index: 99999; 268 animation: vfa-search-toast-in 0.3s ease; 269 } 270 .vfa-search-favorite-notification--success { 271 background: #4caf50; 272 color: #fff; 273 } 274 .vfa-search-favorite-notification--error { 275 background: #f44336; 276 color: #fff; 277 } 278 .vfa-search-favorite-notification--info { 279 background: #333; 280 color: #fff; 281 } 282 @keyframes vfa-search-toast-in { 283 from { 284 opacity: 0; 285 transform: translateX(-50%) translateY(-20px); 286 } 287 to { 288 opacity: 1; 289 transform: translateX(-50%) translateY(0); 290 } 291 } 292 @keyframes vfa-search-toast-out { 293 from { 294 opacity: 1; 295 transform: translateX(-50%) translateY(0); 296 } 297 to { 298 opacity: 0; 299 transform: translateX(-50%) translateY(-20px); 300 } 301 } 302 `,document.head.appendChild(style)}document.body.appendChild(notification),setTimeout(()=>{notification.style.animation="vfa-search-toast-out 0.3s ease",setTimeout(()=>notification.remove(),300)},2e3)}function initializeNewButtons(){document.querySelectorAll(`${BUTTON_SELECTOR}:not([data-vfa-search-initialized="true"])`).length!==0&&(addFavoriteModal(),addLoginModal(),setupEventListeners(),favoritesLoaded?updateAllButtonStates():getCustomerId()&&loadFavoriteStatuses())}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",init):init();let debounceTimer;const observer=new MutationObserver(mutations=>{let hasNewButtons=!1;mutations.forEach(mutation=>{mutation.addedNodes.forEach(node=>{node.nodeType===1&&(node.matches&&node.matches(BUTTON_SELECTOR)||node.querySelector&&node.querySelector(BUTTON_SELECTOR))&&(hasNewButtons=!0)})}),hasNewButtons&&(clearTimeout(debounceTimer),debounceTimer=setTimeout(()=>{initializeNewButtons()},300))}),observeTarget=document.getElementById("CollectionProductGrid")||document.body;observer.observe(observeTarget,{childList:!0,subtree:!0});let retryCount=0;const maxRetries=20,checkInterval=setInterval(()=>{retryCount++,document.querySelectorAll(`${BUTTON_SELECTOR}:not([data-vfa-search-initialized="true"])`).length>0?(initializeNewButtons(),clearInterval(checkInterval)):retryCount>=maxRetries&&clearInterval(checkInterval)},500)})(); 303//# sourceMappingURL=/cdn/shop/t/302/assets/vfa-search-favorite-button.js.map?v=119738511207861209581772071597%3Fv%3D1790273827
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.