1(self.webpackChunkfoxpad=self.webpackChunkfoxpad||[]).push([[1794],{7347(t,e,i){"use strict";i.d(e,{A:()=>_});var n=i(295),r=i(1852),s=i(1964),l=i(275),a=i(7003),o=i(7905),d=i(6217),u=i(2365),c=i(3432),h=i(6767),p=i(7964),m=i(3673),g=i(1209);i(6309);const f=window.theme?.locales?.default_title||"Default Title",b="customBundleSelectedProducts",v={...l.A,...a.A,...o.A,...d.A},S=t=>t?`${t.pathname||""}${t.search||""}`:"",y="customBundlePageUrl",B=()=>{try{const t=sessionStorage.getItem(y);if(t&&t===S(window.location))return!0}catch{}const t=(()=>{try{const t=window.performance?.getEntriesByType?.("navigation")||[];if(t.length>0&&t[0]?.type)return t[0].type;if(1===window.performance?.navigation?.type)return"reload"}catch{return"navigate"}return"navigate"})();return"reload"===t||"navigate"===t&&(()=>{try{if(!document.referrer)return!1;const t=new URL(window.location.href),e=new URL(document.referrer,window.location.origin);return e.origin===t.origin&&S(e)===S(t)}catch{return!1}})()},_={name:"CustomBundle",tracking:v,components:{ProductReviewStars:p.A,ProductBadges:u.A,ProductPricing:h.A,ProductOption:c.A,ShadePicker:m.A,VariantSelector:g.A},props:{heading:{type:String,default:""},maxSlots:{type:Number,default:0},minSlots:{type:Number,default:0},availableSlots:{type:Number,default:0},bundleProducts:{type:Array,default:()=>[]},isLoaded:{type:Boolean,default:!1},priceTiers:{type:Array,default:()=>[]},yourSetLabel:{type:String,default:""},termsAndConditionsText:{type:String,default:""},giftProduct:{type:Object,default:null},giftProductWhitelist:{type:Array,default:()=>[]}},data:()=>({selectedVariantIds:{},activeTypeFilter:null,activeSubFilter:null,bundleVariantListenersBound:!1,bundleVariantHandlers:null,bundleImageCache:{},bundleActiveImages:{},bundleImagePreloadPromises:{},bundleLoadedImageUrls:{},bundlePreviewExpanded:!1,addButtonStateByHandle:{},addButtonTimeoutByHandle:{},slotProducts:{},slotsRestored:!1,allowSessionRestore:B(),sessionStorageResetForNavigation:!1,bundleTileImpressionObserver:null,trackedBundleImpressionHandles:new Set,initialBundleImpressionCount:0,giftRemoved:!1,ctaPending:!1,suppressTrackingOnNextFilterChange:!1,hasTrackedLaunchViewItem:!1,launchViewInteractionHandlers:null,lastBundleProductClickAtByHandle:{}}),computed:{productTypes(){const t=this.bundleProducts.map(t=>t.product.type).filter(Boolean);return[...new Set(t)]},subFilterOptions(){if(!this.activeTypeFilter)return[];const t={};return this.bundleProducts.filter(t=>t.product.type===this.activeTypeFilter).forEach(e=>{const i=e.subFilter;i&&i.collectionHandle&&!t[i.collectionHandle]&&(t[i.collectionHandle]={handle:i.collectionHandle,title:i.collectionTitle,image:i.collectionImage})}),Object.values(t)},filteredBundleProducts(){if(!this.activeTypeFilter||"all"===this.activeTypeFilter)return this.bundleProducts;let t=this.bundleProducts.filter(t=>t.product.type===this.activeTypeFilter);return this.activeSubFilter&&(t=t.filter(t=>t.subFilter&&t.subFilter.collectionHandle===this.activeSubFilter)),t},displayProducts(){return this.bundleProducts||[]},freeGiftSlotNumber(){const t=this.priceTiers.findIndex(t=>!0===t?.isFree);return-1===t?null:t+1},hasUnlockedGift(){return!!(this.freeGiftSlotNumber&&this.giftProduct&&this.isBundleComplete&&this.slotProducts[this.freeGiftSlotNumber])},displaySetCount(){return this.filledSlotCount+(this.hasUnlockedGift?1:0)},displaySetTotalCount(){return this.availableSlots+(this.hasFreeSlot?1:0)},bundleSlots(){const t=[];for(let e=1;e<=this.maxSlots;e+=1){const i=this.priceTiers[e-1]||{},n=i.percentDiscount,r=i.isFree||!1,s=this.freeGiftSlotNumber===e,l=e===this.maxSlots,a=s&&r?this.giftProduct:null,o=s&&this.isBundleComplete,d=o&&this.slotProducts[e];let u="";!r&&n&&(u=this.$t("custom_bundle.save_discount",{discount:n}));const c=this.slotProducts[e]||null;let h="empty";s&&r?h=o&&!d?"free-gift-eligible":d?"free-gift":"free-gift-locked":c&&(h="selected"),t.push({number:e,discount:u,discountValue:n,isFree:r,isLastSlot:l,freeGiftProduct:a,slotProduct:c,state:h})}return t},hasFreeSlot(){return this.priceTiers.some(t=>!0===t.isFree)},regularSlotNumbers(){const t=[];for(let e=1;e<=this.maxSlots;e+=1)e!==this.freeGiftSlotNumber&&t.push(e);return t},discountTiers(){return(this.priceTiers||[]).filter(t=>!t?.isFree)},bundleTotalPrice(){let t=0;
1return this.regularSlotNumbers.forEach(e=>{const i=this.slotProducts[e];if(!i)return;const n=this.bundleProducts.flatMap(t=>t.availableVariants).find(t=>String(t.id)===String(i.variantId));n&&(t+=n.price||0)}),t},currentDiscount(){if(0===this.filledSlotCount)return 0;const t=Math.min(this.filledSlotCount,this.discountTiers.length)-1;return(t>=0&&this.discountTiers[t]||{}).percentDiscount||0},bundleDiscountedPrice(){return this.currentDiscount?Math.round(this.bundleTotalPrice*(1-this.currentDiscount/100)):this.bundleTotalPrice},formattedOriginalPrice(){return this.formatBundlePrice(this.bundleTotalPrice)},formattedDiscountedPrice(){return this.formatBundlePrice(this.bundleDiscountedPrice)},hasActiveDiscount(){return this.currentDiscount>0&&this.bundleTotalPrice>0},filledSlotCount(){return this.regularSlotNumbers.filter(t=>!!this.slotProducts[t]).length},savingsBadgeMessage(){if(0===this.filledSlotCount)return null;const t=Math.min(this.filledSlotCount,this.discountTiers.length)-1,e=t>=0&&this.discountTiers[t]||{},i=e.percentDiscount;return!i||e.isFree?null:this.$t("custom_bundle.savings_badge",{discount:i})},isBundleComplete(){return this.freeGiftSlotNumber?this.filledSlotCount>=this.freeGiftSlotNumber-1:this.availableSlots>0&&this.filledSlotCount>=this.availableSlots},minSlotsRequired(){return this.minSlots>0?this.minSlots:this.availableSlots},isCtaEnabled(){return this.filledSlotCount>=this.minSlotsRequired&&!this.ctaPending&&this.filteredBundleProducts.length>0},isLocalizationUS:()=>"US"===window.theme?.localization?.country?.iso_code},watch:{bundleProducts:{immediate:!0,handler(t){this.allowSessionRestore||this.sessionStorageResetForNavigation||(this.clearStoredBundleProducts(),this.sessionStorageResetForNavigation=!0),t.forEach(t=>{const e=t.availableVariants[0]||t.product?.variants?.[0]||null;e?.id&&!this.selectedVariantIds[t.product.handle]&&(this.selectedVariantIds[t.product.handle]=Number(e.id)),this.addButtonStateByHandle[t.product.handle]=this.isBundleProductStored(t)?"close":"plus"}),t.length&&(this.initializeBundleImages(t),this.preloadBundleVariantImages(t),this.slotsRestored||(this.slotsRestored=!0,this.allowSessionRestore&&this.restoreSlotsFromSession()))}},maxSlots(){this.$forceUpdate()},availableSlots(){this.$forceUpdate()},priceTiers(){this.$forceUpdate()},filteredBundleProducts(){if(this.suppressTrackingOnNextFilterChange)return this.suppressTrackingOnNextFilterChange=!1,void this.teardownBundleTileImpressionTracking();this.$nextTick(()=>{this.setupBundleTileImpressionTracking()})},isLoaded(t){t&&this.$nextTick(()=>{this.trackBundleLaunchViewItem(),this.setupBundleTileImpressionTracking()})},giftProduct(t){t&&this.isBundleComplete&&!this.giftRemoved&&this.freeGiftSlotNumber&&(this.slotProducts[this.freeGiftSlotNumber]||this.addGift())},filledSlotCount(){this.$nextTick(()=>{this.isBundleComplete&&!this.giftRemoved&&this.freeGiftSlotNumber&&(this.slotProducts[this.freeGiftSlotNumber]||this.addGift()),!this.isBundleComplete&&this.freeGiftSlotNumber&&(!!this.slotProducts[this.freeGiftSlotNumber]&&delete this.slotProducts[this.freeGiftSlotNumber],this.giftRemoved=!1)})}},mounted(){this.bindLaunchViewInteractionTracking(),this.bindBundleVariantListeners(),this.$nextTick(()=>{this.setupBundleTileImpressionTracking()}),document.addEventListener("shopify:section:load",this.onShopifySectionLoad,!0),window.addEventListener("pageshow",this.onPageShow),window.addEventListener("pagehide",this.onPageHide),window.addEventListener("beforeunload",this.onPageHide),sessionStorage.setItem("isCustomBundle",JSON.stringify(!0)),n.A.$on("custom-bundle:product-added",this.onBundleProductAddedFromQuickView),this.$forceUpdate()},beforeUnmount(){this.unbindLaunchViewInteractionTracking(),this.unbindBundleVariantListeners(),this.teardownBundleTileImpressionTracking(),document.removeEventListener("shopify:section:load",this.onShopifySectionLoad,!0),window.removeEventListener("pageshow",this.onPageShow),window.removeEventListener("pagehide",this.onPageHide),window.removeEventListener("beforeunload",this.onPageHide),n.A.$off("custom-bundle:product-added",this.onBundleProductAddedFromQuickView),Object.values(this.addButtonTimeoutByHandle).forEach(t=>{window.clearTimeout(t)}),this.clearIsCustomBundleFlag()},methods:{getByosFilterCategory(t=""){if(t)return t.toLowerCase();if(this.activeSubFilter){const t=this.subFilterOptions.find(t=>t.handle===this.activeSubFilter);return t?.title?t.title.toLowerCase():String(this.activeSubFilter).toLowerCase()}return this.activeTypeFilter?String(this.activeTypeFilter).toLowerCase():"all"},emitFilterTracking(t=!1,e=""){const i=[];this.activeTypeFilter&&i.push({title:"type",refinements:[{name:this.activeTypeFilter}]}),this.activeSubFilter&&i.push({title:"collection",refinements:[{name:e||this.activeSubFilter}]}),this.$tracking.onFilterClick({current_facets:i,reset:t,heading:this.heading})},onPrimaryFilterClick(t){this.suppressTrackingOnNextFilterChange=!0,this.activeTypeFilter=t,this.activeSubFilter=null,this.emitFilterTracking(!1)},onSecondaryFilterClick(t){this.suppressTrackingOnNextFilterChange=!0,this.activeSubFilter=t.handle,this.emitFilterTracking(!1,t.title)},bindLaunchViewInteractionTracking(){if(!this.$el||this.launchViewInteractionHandlers||this.hasTrackedLaunchViewItem)return;const t=t=>{t&&!1===t.isTrusted||(this.trackBundleLaunchViewItem(),this.unbindLaunchViewInteractionTracking())},e=["pointerdown","keydown","change"];
1e.forEach(e=>{this.$el.addEventListener(e,t,!0)}),this.launchViewInteractionHandlers={events:e,trackFromInteraction:t}},unbindLaunchViewInteractionTracking(){if(!this.$el||!this.launchViewInteractionHandlers)return;const{events:t,trackFromInteraction:e}=this.launchViewInteractionHandlers;t.forEach(t=>{this.$el.removeEventListener(t,e,!0)}),this.launchViewInteractionHandlers=null},trackBundleLaunchViewItem(t=null){if(this.hasTrackedLaunchViewItem)return;const e=window.theme?.product;e&&(this.$tracking.onProductView({...e,isCustomBundle:!0,byos_filter_category:t||this.getByosFilterCategory()}),this.hasTrackedLaunchViewItem=!0)},setupBundleTileImpressionTracking(){if(!this.$el)return;const t=this.$el.querySelectorAll(".bundle-product-card[data-bundle-product-handle]");if(t.length){if(this.teardownBundleTileImpressionTracking(),!window.IntersectionObserver){const t=this.filteredBundleProducts.slice(0,3).map(t=>t?.product?.handle).filter(Boolean);return void this.trackBundleTileImpressionsByHandle(t)}this.bundleTileImpressionObserver=new IntersectionObserver(t=>{this.onBundleTileIntersection(t)},{root:null,threshold:.5}),t.forEach(t=>this.bundleTileImpressionObserver.observe(t))}},teardownBundleTileImpressionTracking(){this.bundleTileImpressionObserver&&(this.bundleTileImpressionObserver.disconnect(),this.bundleTileImpressionObserver=null)},onBundleTileIntersection(t){const e=t.filter(t=>t.isIntersecting&&t.intersectionRatio>=.5).map(t=>t.target?.dataset?.bundleProductHandle).filter(Boolean).filter(t=>!this.trackedBundleImpressionHandles.has(t));if(!e.length)return;const i=this.filteredBundleProducts.reduce((t,e,i)=>(t[e?.product?.handle]=i,t),{}),n=[...new Set(e)].sort((t,e)=>(i[t]??0)-(i[e]??0)),r=Math.min(3,this.filteredBundleProducts.length),s=Math.max(0,r-this.initialBundleImpressionCount);if(s>0){const t=n.slice(0,s);this.trackBundleTileImpressionsByHandle(t)}if(this.initialBundleImpressionCount>=r){const t=n.filter(t=>!this.trackedBundleImpressionHandles.has(t));this.trackBundleTileImpressionsByHandle(t)}},getBundleTileBadgeValue(t){const e=this.$el?.querySelector(`.bundle-product-card[data-bundle-product-handle="${t}"] .badge--badgetext`);return e?.textContent?.trim()||null},trackBundleTileImpressionsByHandle(t){if(!t?.length)return;const e=[...new Set(t)].filter(t=>!this.trackedBundleImpressionHandles.has(t));if(!e.length)return;const i=e.map(t=>this.filteredBundleProducts.find(e=>e?.product?.handle===t)).filter(Boolean).map(t=>{const e=this.getBundleProduct(t),i=this.getSelectedVariant(t);return{...e,selected_variant:i,selected_or_first_available_variant:i,badge:this.getBundleTileBadgeValue(t?.product?.handle),position:this.filteredBundleProducts.findIndex(e=>e?.product?.handle===t?.product?.handle)+1,isCustomBundle:!0,price:i.compare_at_price,compare_at_price:i.price}});i.length&&(this.$tracking.onProductImpression({name:(this.heading||"byos builder").toLowerCase(),numberOfProducts:this.filteredBundleProducts.length},i),e.forEach(t=>this.trackedBundleImpressionHandles.add(t)),this.initialBundleImpressionCount+=e.length)},getGiftRequiredRegularCount(){return this.freeGiftSlotNumber?this.freeGiftSlotNumber-1:this.availableSlots},hasGiftEligibilityForCount(t){const e=this.getGiftRequiredRegularCount();return!!(this.freeGiftSlotNumber&&this.giftProduct&&e>0&&t>=e)},getLastFilledSlotProduct(){const t=Object.keys(this.slotProducts).map(t=>Number(t)).filter(t=>Number.isFinite(t)).sort((t,e)=>e-t).find(t=>!!this.slotProducts[t]);return t?this.slotProducts[t]:null},getSlotProductSku(t){if(!t?.variantId)return"";if(t?.isGift){const e=(this.giftProduct?.variants||[]).find(e=>String(e.id)===String(t.variantId));return e?.sku||""}const e=this.getBundleSlotByHandle(t.productHandle);if(!e)return"";const i=e.availableVariants.find(e=>String(e.id)===String(t.variantId))||null;return i?.sku||""},getSlotProductPrice(t){if(!t?.variantId)return 0;if(t?.isGift){const e=(this.giftProduct?.variants||[]).find(e=>String(e.id)===String(t.variantId));return Number(e?.price||0)}const e=this.getBundleSlotByHandle(t.productHandle);if(!e)return 0;const i=e.availableVariants.find(e=>String(e.id)===String(t.variantId))||null;return Number(i?.price||0)},getCompleteEventItemDetails(t,e){const i=this.getLastFilledSlotProduct();if(!i)return{itemName:t?.product?.title||"",itemVariant:e?.id||"",itemSku:e?.sku||"",filterCategory:this.activeTypeFilter};if(i.isGift)return{itemName:i.productTitle||this.giftProduct?.title||"",itemVariant:i.variantId||this.giftProduct?.variants?.[0]?.id||"",itemSku:this.getSlotProductSku(i),filterCategory:this.activeTypeFilter};const n=this.getBundleSlotByHandle(i.productHandle);return{itemName:i.productTitle||n?.product?.title||"",itemVariant:i.variantId||"",itemSku:this.getSlotProductSku(i),filterCategory:this.activeTypeFilter}},formatBundlePrice(t){const e=window.theme?.locales?.country_list,i=e?.find(t=>window.Shopify.country===t.country_code);let n=window.Shopify?.locales,r=window.Shopify?.currency?.active;i&&(n=i.locales,r=i.currency_iso_code);const s=Number.parseFloat(Number(t/100).toFixed(2));try{return new Intl.NumberFormat(n,{style:"currency",currency:r,currencyDisplay:"narrowSymbol",minimumFractionDigits:2,maximumFractionDigits:2,localeMatcher:"lookup"}).format(s).replace(/\s/g,"")}catch{return`$${s.toFixed(2)}`}},onBundleProductAddedFromQuickView(t){t?.productHandle&&t?.variantId&&this.setSelectedVariantId(t.productHandle,t.variantId,!1);const e=this.filledSlotCount;if(this.syncSlotsFromSession(),this.$tracking?.onByosInteraction&&t?.productHandle){const i=this.getBundleSlotByHandle(t.productHandle),n=i?this.get
1SelectedVariant(i):null;i&&n&&(0===e?this.$tracking.onByosInteraction({action:"first item added",itemName:i.product.title,itemVariant:n?.id,itemSku:n?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount}):this.$tracking.onByosInteraction({action:"add",itemName:i.product.title,itemVariant:n?.id,itemSku:n?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount}))}},syncSlotsFromSession(){this.slotProducts={},this.restoreSlotsFromSession(),this.bundleProducts.forEach(t=>{this.setAddButtonState(t.product.handle,this.isBundleProductStored(t)?"close":"plus")})},onShopifySectionLoad(){this.$nextTick(()=>{this.bindBundleVariantListeners()})},onPageShow(t){t?.persisted&&(this.allowSessionRestore=!1,this.sessionStorageResetForNavigation=!0,this.clearStoredBundleProducts(),this.slotProducts={},this.giftRemoved=!1,this.bundleProducts.forEach(t=>{this.setAddButtonState(t.product.handle,"plus")}))},clearIsCustomBundleFlag(){try{sessionStorage.removeItem("isCustomBundle")}catch{}},onPageHide(){this.clearIsCustomBundleFlag()},bindBundleVariantListeners(){if(this.bundleVariantListenersBound||!this.$el)return;const t=t=>{this.handleDelegatedVariantInteraction(t)},e=t=>{this.handleDelegatedVariantInteraction(t)};this.$el.addEventListener("change",t,!0),this.$el.addEventListener("click",e,!0),this.bundleVariantHandlers={changeHandler:t,clickHandler:e},this.bundleVariantListenersBound=!0},unbindBundleVariantListeners(){this.bundleVariantListenersBound&&this.$el&&this.bundleVariantHandlers&&(this.$el.removeEventListener("change",this.bundleVariantHandlers.changeHandler,!0),this.$el.removeEventListener("click",this.bundleVariantHandlers.clickHandler,!0),this.bundleVariantHandlers=null,this.bundleVariantListenersBound=!1)},getBundleSlotByHandle(t){return this.bundleProducts.find(({product:e})=>e.handle===t)||null},handleDelegatedVariantInteraction(t){const e=t.target?.closest(".bundle-product-card__variants");if(!e)return;const i=t.target.closest(".bundle-product-card"),n=i?.dataset?.bundleProductHandle||e.dataset?.bundleProductHandle;n&&window.requestAnimationFrame(()=>{this.syncDelegatedVariantSelection(n,e)})},syncDelegatedVariantSelection(t,e){const i=this.getBundleSlotByHandle(t);if(!i)return;const n=this.getBundleProduct(i),r=this.collectVariantSelections(e,n.options);if(!r.some(Boolean))return;const s=this.findVariantFromSelections(n.variants,r);s?.id&&Number(this.selectedVariantIds[t])!==Number(s.id)&&this.setSelectedVariantId(t,s.id)},collectVariantSelections:(t,e)=>e.map(e=>{const i=[...t.querySelectorAll("input, select")].filter(t=>"string"==typeof t.name&&t.name.includes(`[${e.name}]`)),n=i.find(t=>"radio"===t.type&&t.checked);if(n)return n.value;const r=i.find(t=>"SELECT"===t.tagName);return r?.value?r.value:null}),findVariantFromSelections:(t,e)=>t.find(t=>e.every((e,i)=>!e||t[`option${i+1}`]===e))||null,getBundleOptions(t){const e=t.availableVariants.length?t.availableVariants:t.product.variants;let i=Array.isArray(t.product.options)?t.product.options:[];if(0===i.length&&e.length>0){const t=Array.isArray(e[0].options)?e[0].options.length:0;i=Array.from({length:t},(t,e)=>({name:`Option ${e+1}`,values:[]}))}return i.map((t,i)=>{const n=`option${i+1}`,r=e.reduce((t,e)=>{const r=e[n]||e.options?.[i];return r&&!t.includes(r)&&t.push(r),t},[]),s="string"==typeof t?t:t?.name||`Option ${i+1}`,l=Array.isArray(t?.values)?t.values:r;return{...t,name:s,values:l.filter(t=>r.includes(t))}})},getSelectedVariant(t){const e=this.selectedVariantIds[t.product.handle],i=t.availableVariants.length?t.availableVariants:t.product.variants,n=i.find(t=>Number(t.id)===Number(e))||i[0]||null;if(!n)return null;if(Array.isArray(n.options)&&n.options.length)return n;const r=(t.product.options||[]).map((t,e)=>n[`option${e+1}`]).filter(t=>null!=t);return{...n,options:r}},isSelectedVariantDisabled(t){if(!this.getSelectedVariant(t))return!0;const e=this.$el?.querySelector(`[data-bundle-product-handle="${t.product.handle}"]`);if(!e)return!1;const i=e.querySelector("input.option:checked");return!!i&&i.classList.contains("option--disabled")},getSelectedVariantData(t){const e=this.getSelectedVariant(t);return this.getBundleProduct(t).variant_data.find(({variant:t})=>t.id===e?.id)||null},getBundleProduct(t){const e=t.availableVariants.length?t.availableVariants:t.product.variants,i=t.variantMetafields||{},n=e.map(t=>({...i[String(t.id)]||{variant_id:t.id},variant:t}));return{...t.product,options:this.getBundleOptions(t),variants:e,variant_data:n,selected_variant:this.getSelectedVariant(t)}},getReviewProduct(t){const e=this.getBundleProduct(t),i=e?.bazaarvoice_product_handle||e?.handle||t?.product?.handle||null;return{...e,bazaarvoice_product_handle:i}},getBundleImageCacheKey:(t,e)=>`${t}:${e||"default"}
1`,getVariantImages(t,e=null){const i=e||this.getSelectedVariant(t);let n=t.product.images||[];return window.theme.search?.results[t.product.handle]&&(n=window.theme.search.results[t.product.handle].images),n.filter(t=>t.alt?.includes(i?.sku))},resolveBundleFeaturedImage(t,e=null){const i=e||this.getSelectedVariant(t),n=e?this.getBundleProduct(t).variant_data.find(({variant:t})=>t.id===i?.id)||null:this.getSelectedVariantData(t);let r=null;return this.getVariantImages(t,i).length>0&&n&&(!this.$mq.laptop&&n.alternate_image_mobile?r={src_thumbnail_mobile:`/cdn/shop/${n.alternate_image_mobile}`,alt:`<${t.product.title}>|<${n.variant.sku}>`}:n.algolia_primary_image&&(r={src_thumbnail:`/cdn/shop/${n.algolia_primary_image}`,src_thumbnail_mobile:`/cdn/shop/${n.algolia_primary_image}`,src:`/cdn/shop/${n.algolia_primary_image}`,alt:`<${t.product.title}>|<${n.variant.sku}>`})),!r&&i?.featured_image&&(r=i.featured_image),!r&&i?.image?.src&&null!=i?.image?.alt&&(r={src:i.image.src,alt:i.image.alt||""}),!r&&t.product?.images?.length>0&&([r]=t.product.images),!r&&t.product.featured_image&&(r=t.product.featured_image),r||null}
1,getResolvedBundleFeaturedImage(t,e=null){const i=e||this.getSelectedVariant(t),n=this.getBundleImageCacheKey(t.product.handle,i?.id);if(!this.bundleImageCache[n]){const e=this.resolveBundleFeaturedImage(t,i);this.bundleImageCache[n]=e}return this.bundleImageCache[n]||null},getFeaturedImage(t){return this.bundleActiveImages[t.product.handle]||this.getResolvedBundleFeaturedImage(t)},resolveImageSource:(t,e=!1)=>t?"string"==typeof t?t:e&&t.src_thumbnail_mobile?t.src_thumbnail_mobile:t.src_thumbnail||t.src||t.url||"":"",resolveFeaturedImageSrc(t){const e=!this.$mq.laptop;return this.resolveImageSource(t,e)},getFeaturedImageSrc(t){const e=this.getFeaturedImage(t);return this.resolveFeaturedImageSrc(e)},getFeaturedImageAlt(t){const e=this.getFeaturedImage(t);return e?.alt||t.product.title||""},getGiftImageSrc(t){if(!t)return"";const e=this.resolveImageSource(t.featured_image,!0);if(e)return e;const i=Array.isArray(t.images)&&t.images.length>0?t.images[0]:null;return this.resolveImageSource(i,!0)},setBundleActiveImage(t,e){if(!e)return;const i=this.resolveFeaturedImageSrc(e);this.bundleActiveImages[t]=e,i&&!this.bundleLoadedImageUrls[i]&&this.preloadImageUrl(i)},preloadImageUrl(t){return t?this.bundleLoadedImageUrls[t]?Promise.resolve(!0):(this.bundleImagePreloadPromises[t]||(this.bundleImagePreloadPromises[t]=new Promise(e=>{const i=new Image;i.onload=()=>{this.bundleLoadedImageUrls[t]=!0,e(!0)},i.onerror=()=>{e(!1)},i.src=t})),this.bundleImagePreloadPromises[t]):Promise.resolve(!1)},initializeBundleImages(t){t.forEach(t=>{const e=this.getSelectedVariant(t),i=this.getResolvedBundleFeaturedImage(t,e);i&&this.setBundleActiveImage(t.product.handle,i)})},preloadBundleVariantImages(t){t.forEach(t=>
1{t.availableVariants.forEach(e=>{const i=this.getResolvedBundleFeaturedImage(t,e),n=this.resolveFeaturedImageSrc(i);n&&this.preloadImageUrl(n)})})},onBundleImageLoad(t){const e=this.$el?.querySelector(`[data-bundle-product-handle="${t}"] .bundle-product-card__image`),i=e?.currentSrc||e?.src||null;i&&(this.bundleLoadedImageUrls[i]=!0)},getOptionRenderer:t=>t.toLowerCase()===s.iX.toLowerCase()?"shade-picker":"product-option",getBundleOptionProps(t){const e={isBundleQuickAdd:!0};return t?.toLowerCase()!==s.iX.toLowerCase()?e:{...e,mobileVisibleVariants:4,disableVariantTracking:!0}},getProductUrl:t=>t.url||`/products/${t.handle}`,getBundleVariantLength(t){return this.getBundleProduct(t).variants.length},hasBundleVariants(t){return this.getBundleVariantLength(t)>1},isValidBundleVariant(t){const e=this.getSelectedVariant(t);return!!e?.title},getBundleTileTitle(t){const e=this.getSelectedVariant(t);return e&&"Default Title"!==e.title&&e.title!==f?e.title:t.product.title},getBundleVariantInfo(t){const{product:e}=t;return 1===this.getBundleVariantLength(t)&&e.short_description?e.short_description:this.isValidBundleVariant(t)&&this.getBundleVariantLength(t)>1?e.title:this.hasBundleVariants(t)?this.$tc("product.tile.shades_count",this.getBundleVariantLength(t)):e.short_description?e.short_description:""},getVariantName:t=>t?.options?.[0]?.name?.toLowerCase()||"",setSelectedVariantId(t,e,i=!0){if(e){const n=Number(e),r=this.selectedVariantIds[t]!==n,s=this.getBundleSlotByHandle(t);if(s){const e=s.availableVariants.find(t=>Number(t.id)===n)||s.product.variants.find(t=>Number(t.id)===n)||null;if(e){const i=this.getResolvedBundleFeaturedImage(s,e);this.setBundleActiveImage(t,i)}}this.selectedVariantIds[t]=n;const l=this.getBundleSlotByHandle(t);if(l&&i&&r){const e=l.availableVariants.find(t=>Number(t.id)===n)||l.product.variants.find(t=>Number(t.id)===n)||null,i=this.getBundleProduct(l);if(e){const r={...i,isCustomBundle:!0};r.compare_at_price=e.price,r.price=e.compare_at_price,this.$nextTick(()=>{window.requestAnimationFrame(()=>{if(Number(this.selectedVariantIds[t])!==n)return;const i=this.getBundleTileBadgeValue(t);this.$tracking.onProductVariantSelect({variant:e,product:r,items:[r],position:this.filteredBundleProducts.findIndex(e=>e?.product?.handle===t)+1,sectionTitle:(this.heading||"byos builder").toLowerCase(),groupType:"bundle",badge:i||void 0})})})}}}},syncAddButtonState(t){const e=this.bundleProducts.find(e=>e.product.handle===t);e&&this.setAddButtonState(t,this.isBundleProductStored(e)?"close":"plus")},getStoredBundleProducts(){try{return JSON.parse(sessionStorage.getItem(b)||"[]")}catch{return[]}},setStoredBundleProducts(t){sessionStorage.setItem(b,JSON.stringify(t))},clearStoredBundleProducts(){sessionStorage.removeItem(b),(()=>{try{sessionStorage.removeItem(y)}catch{}})()},isBundleProductStored(t){return this.getStoredBundleProducts().some(e=>e?.productHandle===t.product.handle)},storeBundleProduct(t){const e=this.getBundleProduct(t),i=t.availableVariants[0]||t.product.variants[0]||null,n=this.getSelectedVariant(t)||i;if(!n?.id)return;const r=this.getStoredBundleProducts().filter(e=>e?.productHandle!==t.product.handle);r.push({productHandle:t.product.handle,productId:e.id,productTitle:e.title,variantId:n?.id,variantTitle:n?.title,product:e,selectedVariant:n,filterCategory:this.activeTypeFilter,storedAt:Date.now()}),this.setStoredBundleProducts(r),(()=>{try{sessionStorage.setItem(y,S(window.location))}catch{}})()},removeBundleProduct(t){const e=this.getStoredBundleProducts().filter(e=>e?.productHandle!==t.product.handle);this.setStoredBundleProducts(e)},getNextEmptySlotNumber(){return this.regularSlotNumbers.find(t=>!this.slotProducts[t])||null},findSlotByProductHandle(t){return Object.keys(this.slotProducts).find(e=>this.slotProducts[e].productHandle===t)||null},reorderRegularSlotProducts(){const t=this.freeGiftSlotNumber?this.slotProducts[this.freeGiftSlotNumber]:null,e=this.regularSlotNumbers.map(t=>this.slotProducts[t]).filter(Boolean),i={};this.regularSlotNumbers.forEach((t,n)=>{e[n]&&(i[t]=e[n])}),t&&(i[this.freeGiftSlotNumber]=t),this.slotProducts=i},removeGift(){this.freeGiftSlotNumber&&(delete this.slotProducts[this.freeGiftSlotNumber],this.giftRemoved=!0)}
1,addGift(){if(!this.freeGiftSlotNumber||!this.giftProduct||!this.isBundleComplete)return;const t=this.buildGiftProductPropertyValue();t&&(this.slotProducts[this.freeGiftSlotNumber]={productHandle:this.giftProduct.handle,productId:this.giftProduct.id,productTitle:this.giftProduct.title,variantId:t.variant?.id,variantTitle:t.variant?.title,imageSrc:this.resolveImageSource(t.variant?.featured_image,!0)||this.getGiftImageSrc(this.giftProduct)||"",imageAlt:this.giftProduct.title||"",isGift:!0})},removeFromSlot(t){const e=this.slotProducts[t];if(!e)return;const i=this.getStoredBundleProducts().filter(t=>t?.productHandle!==e.productHandle);if(this.setStoredBundleProducts(i),this.setAddButtonState(e.productHandle,"plus"),delete this.slotProducts[t],this.reorderRegularSlotProducts(),this.$tracking?.onByosInteraction){const t=this.getBundleSlotByHandle(e.productHandle),i=t&&t.availableVariants.find(t=>String(t.id)===String(e.variantId))||null;this.$tracking.onByosInteraction({action:"remove",itemName:e.productTitle,itemVariant:e.variantId,itemSku:i?.sku,filterCategory:e.filterCategory||null,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount})}},restoreSlotsFromSession(){this.getStoredBundleProducts().forEach((t,e)=>{const i=this.regularSlotNumbers[e];if(!i)return;let n="",r=t.productTitle||"";const s=this.getBundleSlotByHandle(t.productHandle);s&&t.variantId&&(this.setSelectedVariantId(t.productHandle,t.variantId,!1),n=this.getFeaturedImageSrc(s),r=this.getFeaturedImageAlt(s)),!n&&t?.selectedVariant?.featured_image&&(n=this.resolveImageSource(t?.selectedVariant?.featured_image,!0)),this.slotProducts[i]={productHandle:t.productHandle,productId:t.productId,productTitle:t.productTitle,variantId:t.variantId,variantTitle:t.variantTitle,imageSrc:n,imageAlt:r,filterCategory:t.filterCategory||null},this.setAddButtonState(t.productHandle,"close")})},setAddButtonState(t,e){this.addButtonTimeoutByHandle[t]&&(window.clearTimeout(this.addButtonTimeoutByHandle[t]),delete this.addButtonTimeoutByHandle[t]),this.addButtonStateByHandle[t]=e},getAddButtonState(t){return this.addButtonStateByHandle[t]||"plus"},onBundleProductClick(t,e=null){e?.stopPropagation&&e.stopPropagation();const i=t?.product?.handle,n=Date.now();if(n-(this.lastBundleProductClickAtByHandle[i]||0)<300)return;this.lastBundleProductClickAtByHandle[i]=n;const r=this.getBundleProduct(t),s=this.getSelectedVariant(t),l=this.getBundleTileBadgeValue(t?.product?.handle),a=this.filteredBundleProducts.findIndex(e=>e?.product?.handle===t?.product?.handle)+1,o=Number(s?.price),d=Number(s?.compare_at_price);Number.isFinite(o)&&o>0&&(r.compare_at_price=o,r.price=Number.isFinite(d)&&d>0?d:o),this.$tracking.onProductClick({name:(this.heading||"byos builder").toLowerCase(),numberOfProducts:this.filteredBundleProducts.length},{...r,selected_variant:s,selected_or_first_available_variant:s,badge:l,position:a,isCustomBundle:!0})},onAddButtonClick(t){const e=t.product.handle,i=this.addButtonStateByHandle[e]||"plus";if("close"===i){const t=this.findSlotByProductHandle(e);if(t){const e=this.slotProducts[t],i=this.getStoredBundleProducts().filter(t=>!(t?.productHandle===e.productHandle&&String(t?.variantId)===String(e.variantId)));if(this.setStoredBundleProducts(i),delete this.slotProducts[Number(t)],this.reorderRegularSlotProducts(),this.$tracking?.onByosInteraction){const t=this.getBundleSlotByHandle(e.productHandle),i=t&&t.availableVariants.find(t=>String(t.id)===String(e.variantId))||null;this.$tracking.onByosInteraction({action:"remove",itemName:e.productTitle,itemVariant:e.variantId,itemSku:i?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount})}}return void this.setAddButtonState(e,"plus")}if("plus"!==i)return;if(this.findSlotByProductHandle(e))return;const n=this.getNextEmptySlotNumber();if(!n)return;const r=this.getBundleProduct(t),s=t.availableVariants[0]||t.product.variants[0]||null,l=this.getSelectedVariant(t)||s;if(!l?.id)return;const a=this.filledSlotCount;this.slotProducts[n]={productHandle:e,productId:r.id,productTitle:r.title,variantId:l?.id,variantTitle:l?.title,imageSrc:this.getFeaturedImageSrc(t),imageAlt:this.getFeaturedImageAlt(t),filterCategory:this.activeTypeFilter},this.storeBundleProduct(t);const o=!this.hasGiftEligibilityForCount(a)&&this.hasGiftEligibilityForCount(this.filledSlotCount);if(this.$tracking?.onByosInteraction&&(0===a?this.$tracking.onByosInteraction({action:"first item added",itemName:r.t
1itle,itemVariant:l?.id,itemSku:l?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount}):this.$tracking.onByosInteraction({action:"add",itemName:r.title,itemVariant:l?.id,itemSku:l?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount})),this.isBundleComplete&&this.$tracking?.onByosInteraction&&(o&&this.$tracking.onByosInteraction({action:"gift unlocked",itemName:this.giftProduct?.title,itemVariant:this.giftProduct?.variants?.[0]?.id,itemSku:this.giftProduct?.variants?.[0]?.sku,filterCategory:this.activeTypeFilter,bundleCount:this.filledSlotCount,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount}),this.filledSlotCount>=this.availableSlots)){const e=this.getCompleteEventItemDetails(t,l),i=this.filledSlotCount+(this.hasGiftEligibilityForCount(this.filledSlotCount)?1:0);this.$tracking.onByosInteraction({action:"complete",itemName:e.itemName,itemVariant:e.itemVariant,itemSku:e.itemSku,filterCategory:e.filterCategory,bundleCount:i,bundleValue:this.bundleDiscountedPrice/100,tierDiscount:this.currentDiscount})}this.setAddButtonState(e,"tick");const d=window.setTimeout(()=>{this.setAddButtonState(e,"close")},1200);this.addButtonTimeoutByHandle[e]=d},showBundleShadeCount:t=>t.availableVariants.length>1||t.product.variant_count>1,showBundleSizeCount:t=>(t.product.sizes||[]).length>1,getBundleActiveVariantCount:t=>t.availableVariants.length||t.product.variants.length,getBundleSizesCount:t=>(t.product.sizes||[]).length,getBundleOptionName(t){const e=(t.product.variant_option_name_override||"").toLowerCase(),i=t.product.options?.[0]?.name||"";return e?`${e}s`:`${i}s`},showVariants(t){return this.getBundleVariantLength(t)>1},resetBundleSelectionsAfterAdd(){Object.values(this.addButtonTimeoutByHandle).forEach(t=>{window.clearTimeout(t)}),this.addButtonTimeoutByHandle={},this.slotProducts={},this.bundlePreviewExpanded=!1,this.giftRemoved=!1,this.bundleProducts.forEach(t=>{const e=t?.product?.handle;if(!e)return;const i=t?.availableVariants?.[0]?.id||t?.product?.variants?.[0]?.id||null;i&&(this.selectedVariantIds[e]=Number(i)),this.setAddButtonState(e,"plus")}),this.clearStoredBundleProducts()},getMainBundleVariantId(){const t=window.theme?.product;return t?.selected_or_first_available_variant?.id||t?.selected_variant?.id||t?.variants?.[0]?.id||null},getSelectedSlotProducts(){return this.regularSlotNumbers.sort((t,e)=>Number(t)-Number(e)).map(t=>this.slotProducts[t]).filter(Boolean)},normalizeVariantId(t){if(Number.isFinite(Number(t)))return Number(t);if("string"==typeof t){const e=t.match(/(\d+)$/);if(e&&Number.isFinite(Number(e[1])))return Number(e[1])}return null},buildBundlePropertyValue(){const t=this.freeGiftSlotNumber?this.slotProducts[this.freeGiftSlotNumber]:null,e=!(!t||!t.isGift),i=e?this.buildGiftProductPropertyValue():null,n=i?this.normalizeVariantId(i.variant?.id):null,r=t=>Number.isFinite(t)&&t>0,s=[];for(let t=1;t<=this.maxSlots;t+=1)if(t===this.freeGiftSlotNumber)e?s.push(n):s.push(0);else{const e=this.slotProducts[t],i=e?this.normalizeVariantId(e.variantId):0;s.push(r(i)?i:0)}let l=-1;for(let t=s.length-1;t>=0;t-=1)if(r(s[t])){l=t;break}return{slots:l>=0?s.slice(0,l+1).map(t=>r(t)?t:0):[],version:"1.0",isCustomBundle:!0,giftInfo:t?{...t,variantId:n??this.normalizeVariantId(t.variantId)}:null,discountPercent:Number(this.currentDiscount)||0,unitTotalCents:Number(this.bundleTotalPrice)||0,unitFinalCents:Number(this.bundleDiscountedPrice)||0}},buildBundleKey(t,e=[]){const i=e.map(t=>Number(t)).filter(t=>Number.isFinite(t)&&t>0).sort((t,e)=>t-e).join("+");return i?`${t}=${i}`:`${t}`},buildGiftProductPropertyValue(){if(!this.giftProduct)return null;const t=this.giftProduct.variants||[];let e=null;if(t.length>0){const[i]=t,n=(this.giftProductWhitelist||[]).map(String);e=n.length>0&&t.find(t=>n.includes(String(t.id))||n.includes(String(t.sku)))||i}return{id:this.giftProduct.id||null,handle:this.giftProduct.handle||null,title:this.giftProduct.title||null,type:this.giftProduct.type||null,variant:e?{id:e.id||null,title:e.title||null,sku:e.sku||null,price:e.price||null,featured_image:e.featured_image||this.giftProduct.featured_image||null}:null}},ensureMiniCartOpened(){window.setTimeout(()=>{const t=document.querySelector("#cart-flyout");if(!t||"none"===t.style.display||t.classList.contains("is-hidden")){const t=document.querySelector(".site-header__action--cart");t&&"function"==typeof t.click&&t.click()}},300)},getCartAddEventItems(t,e,i=[]){const n=e?.[0]||{},r=Number(n.id),s=Object.entries(n?.properties||{}).find(([t])=>"_bundle_key"===t)?.[1]||"",l=(t?.items||[]).filter(t=>{const e=Number(t?.variant_id||t?.id),i=Object.entries(t?.properties||{}).find(([t])=>"_bundle_key"===t)?.[1]||"";return e===r&&i===s});return l.length?l:i},doesCartContainAddedBundle(t,e){return this.getCartAddEventItems(t,e,[]).length>0},refreshCartAfterBundleAdd(t){return r.default.forceRefresh().then(e=>this.doesCartContainAddedBundle(e,t)?e:new Promise(t=>{window.setTimeout(t,250)}).then(()=>r.default.forceRefresh()).catch(()=>e))},addBundleToCart(){if(!this.isCtaEnabled||this.ctaPending)return;const t=this.getMainBundleVariantId();if(!t)return;const e=this.buildBundlePropertyValue(),i=[{id:t,quantity:1,properties:{_bundle:e,_bundle_key:this.buildBundleKey(t,e.slots),_bundle_title:window.theme?.product?.title||"Custom Bundle",_bundle_item_number:"1"}}];this.ctaPending=!0,r.default.addItems(i).then(t=>this.refreshCartAfterBundleAdd(i).then(e=>{try{n.A.$emit("cart:updated",e)}catch(t){window.console.warn("CustomBundle: cart:updated handler failed",t)}return{items:t,updatedCart:e}}).catch(()=>({items:t,updatedCart:null}))).then(({items:t,updatedCart:e})=>{const r=this.getCartAddEventItems(e,i,t),s={...window.theme?.product||{},compare_at_price:this.hasActiveDiscount?this.bundleDiscountedPrice:this.bundleTotalPrice,price:this.bundleTotalPrice,final_price:this.bundleDiscountedPrice,unit_sales_price:this.bundleDiscountedPrice,isCustomBundle:!0};this.resetBundleSelectionsAfterAdd();try{n.A.$emit("cart:add",{items:r,payload:i,product:s}),this.$tracking.onAddToCart({items:r,payload:i,product:s})}
1catch(t){window.console.warn("CustomBundle: cart:add handler failed",t)}this.ensureMiniCartOpened()}).catch(t=>{window.console.error("CustomBundle: failed to add bundle to cart",t)}).finally(()=>{this.ctaPending=!1})}},template:'\n <div class="custom-bundle-section">\n <div class="custom-bundle-container">\n <div class="custom-bundle-left-container">\n <h2 v-if="heading" class="custom-bundle__heading">{{ heading }}</h2>\n <div v-if="filteredBundleProducts.length > 0" class="filters-section">\n \x3c!-- First level filter --\x3e\n <ul class="filters filter-first-lvl">\n <li class="filter-list"\n :class="{ active: !activeTypeFilter || activeTypeFilter === \'all\' }"\n @click="onPrimaryFilterClick(\'all\')">{{ $t(\'custom_bundle.filter_all\') }}</li>\n <li v-for="type in productTypes" :key="type"\n class="filter-list"\n :class="{ active: activeTypeFilter === type }"\n @click="onPrimaryFilterClick(type)">{{ type }}</li>\n </ul>\n \x3c!-- Second level filter --\x3e\n <ul v-if="subFilterOptions.length > 0" class="filters filter-second-lvl">\n \x3c!-- <li class="filter-list"\n :class="{ active: !activeSubFilter }"\n @click="activeSubFilter = null">{{ $t(\'custom_bundle.filter_all\') }}</li> --\x3e\n <li v-for="subFilterItem in subFilterOptions" :key="subFilterItem.handle"\n class="filter-list"\n :class="{ active: activeSubFilter === subFilterItem.handle }"\n @click="onSecondaryFilterClick(subFilterItem)">\n <img class="filter-second-img" v-if="subFilterItem.image" width="91" height="90" :src="subFilterItem.image" :alt="subFilterItem.title" />\n <span class="filter-second-name">{{ subFilterItem.title }}</span>\n </li>\n </ul>\n </div>\n <div class="custom-bundle-products">\n <p v-if="!isLoaded" class="custom-bundle__loading">{{ $t(\'custom_bundle.loading\') }}</p>\n <div v-else class="custom-bundle__grid">\n <article v-for="bundleSlot in filteredBundleProducts" :key="bundleSlot.product.handle"\n class="bundle-product-card product-tile product-tile--custom-bundle"\n :data-bundle-product-handle="bundleSlot.product.handle">\n <div class="bundle-product-card__image-wrapper product-tile__gallery">\n <a class="product-tile__link bundle-product-card__image-link" :href="getProductUrl(bundleSlot.product)" @click.stop="onBundleProductClick(bundleSlot, $event)">\n <img v-if="getFeaturedImageSrc(bundleSlot)" class="bundle-product-card__image responsive-image__image"\n :src="getFeaturedImageSrc(bundleSlot)" :alt="getFeaturedImageAlt(bundleSlot)" width="355"\n height="329">\n </a>\n <div class="action_btns">\n <button type="button" class="button button--primary bundle-product-card__add-btn"\n :aria-label="$t(\'custom_bundle.add_button_aria\')"\n :disabled="isSelectedVariantDisabled(bundleSlot) && addButtonStateByHandle[bundleSlot.product.handle] !== \'tick\' && addButtonStateByHandle[bundleSlot.product.handle] !== \'close\'"\n :class="{ \'is-disabled\': isSelectedVariantDisabled(bundleSlot) && addButtonStateByHandle[bundleSlot.product.handle] !== \'tick\' && addButtonStateByHandle[bundleSlot.product.handle] !== \'close\' }"\n @click="onAddButtonClick(bundleSlot)">\n <img\n v-if="addButtonStateByHandle[bundleSlot.product.handle] === \'tick\'"\n class="bundle-product-card__add-icon-image"\n :src="\'https://cdn.shopify.com/s/files/1/0653/9388/5432/files/tick_icon_image.png?v=1779195734\'"\n alt=""\n aria-hidden="true"\n />\n <img\n v-else-if="addButtonStateByHandle[bundleSlot.product.handle] === \'close\'"\n class="bundle-product-card__add-icon-image"\n :src="\'https://cdn.shopify.com/s/files/1/0653/9388/5432/files/close_icon_with_bg.svg?v=1786365040\'"\n alt=""\n aria-hidden="true"\n />\n <img\n v-else\n class="bundle-product-card__add-icon-image add_icon"\n :src="\'https://cdn.shopify.com/s/files/1/0653/9388/5432/files/plus_icon_image.svg?v=1779441721\'"\n alt=""\n aria-hidden="true"\n />\n </button>\n </div>\n <div class="product-tile__badges">\n <product-badges :product="getBundleProduct(bundleSlot)"></product-badges>\n </div>\n <div v-if="showBundleShadeCount(bundleSlot) || showBundleSizeCount(bundleSlot)" class="product-tile__shades">
1\n <span class="product-tile__shade_label product-tile__shade_label--long">\n {{ showBundleShadeCount(bundleSlot)\n ? $tc(\'product.tile.shades_count\', getBundleActiveVariantCount(bundleSlot))\n : $tc(\'product.tile.sizes_count\', getBundleSizesCount(bundleSlot))\n }}\n </span>\n <span class="product-tile__shade_label product-tile__shade_label--short">\n {{ showBundleShadeCount(bundleSlot)\n ? $tc(\'product.tile.shades_count_short\', getBundleActiveVariantCount(bundleSlot), {\n count: getBundleActiveVariantCount(bundleSlot),\n optionname: getBundleOptionName(bundleSlot),\n })\n : $tc(\'product.tile.sizes_count_short\', getBundleSizesCount(bundleSlot))\n }}\n </span>\n </div>\n </div>\n <div class="bundle-product-card__body product-tile__content"\n :class="{\'product-tile__content--added\': isBundleProductStored(bundleSlot)}">\n <div v-if="showVariants(bundleSlot)" class="bundle-product-card__variants product_slide-variants"\n :class="{\n \'product_slide-variants--pill\': getVariantName(getBundleProduct(bundleSlot)) === \'size\',\n \'product_slide-variants--shade\': getVariantName(getBundleProduct(bundleSlot)) === \'shade\',\n \'product_slide-variants--none\': getVariantName(getBundleProduct(bundleSlot)) === \'title\'\n || getVariantName(getBundleProduct(bundleSlot)) === \'type\',\n }">\n <variant-selector :selected-variant-id="selectedVariantIds[bundleSlot.product.handle]"\n :disable-tracking="true"\n :options="getBundleProduct(bundleSlot).options"\n :selected-variant="getSelectedVariant(bundleSlot)"\n :variants="getBundleProduct(bundleSlot).variants" :product="getBundleProduct(bundleSlot)"\n @update:selectedVariantId="setSelectedVariantId(bundleSlot.product.handle, $event)">\n <template v-slot:default="{ options, selections, possibleVariants }">\n <div class="variant-selector">\n <template v-for="(option, index) in options"\n :key="option.name + \'-\' + bundleSlot.product.handle + \'-\' + index">\n <component :is="getOptionRenderer(option.name)"\n v-if="Array.isArray(option?.values) && option.values.length > 0" v-model:selection="selections[index]"\n :field-id="$id(\'CustomBundle-\' + bundleSlot.product.handle + \'-option\' + (index + 1))"\n :option="option" :possible-variants="possibleVariants[index]" :max-variants="true"\n :product-url="getProductUrl(bundleSlot.product)" :product="getBundleProduct(bundleSlot)"\n v-bind="getBundleOptionProps(option.name)">\n </component>\n </template>\n </div>\n </template>\n </variant-selector>\n </div>\n <div class="product-tile__reviews-wrapper">\n <product-review-stars :tile="true" :product="getReviewProduct(bundleSlot)"\n class="review-preview product-tile__ratings"></product-review-stars>\n </div>\n <div class="common_div">\n <div class="common_div--title-price">\n <div v-if="showVariants(bundleSlot)" class="common_div--title-variant">\n <span v-if="getBundleVariantLength(bundleSlot) === 1 && bundleSlot.product.short_description">\n {{ bundleSlot.product.short_description }}\n </span>
1\n <span v-else-if="isValidBundleVariant(bundleSlot)">\n <template v-if="getBundleVariantLength(bundleSlot) > 1">\n {{ bundleSlot.product.title }}\n </template>\n </span>\n <span v-else-if="hasBundleVariants(bundleSlot)">\n {{ $tc(\'product.tile.shades_count\', getBundleVariantLength(bundleSlot)) }}\n </span>\n <span v-else-if="bundleSlot.product.short_description">\n {{ bundleSlot.product.short_description }}\n </span>\n </div>\n <div class="product-tile__pricing">\n <product-pricing :product="getBundleProduct(bundleSlot)"></product-pricing>\n </div>\n </div>\n <div>\n <a class="product-tile__link" :href="getProductUrl(bundleSlot.product)">\n <h2 class="bundle-product-card__title product-tile__title">{{ getBundleTileTitle(bundleSlot) }}</h2>\n </a>\n </div>\n </div>\n </div>\n </article>\n </div>\n </div>\n <div class="bundle_terms_conditions_container">\n <div class="bundle_terms_link" v-html="termsAndConditionsText"></div>\n </div>\n </div>\n\n <div class="custom-bundle-right-container bundle-preview" :class="{ \'bundle-preview--expanded\': bundlePreviewExpanded }">\n <div class="bundle-summary" :class="{ \'bundle-summary--with-savings\': savingsBadgeMessage }" @click="bundlePreviewExpanded = !bundlePreviewExpanded">\n <h3 class="bundle-summary__title">{{ yourSetLabel }}<span class="bundle-summary__count"> ({{ displaySetCount }}/{{ displaySetTotalCount }})</span></h3>\n <div class="bundle-summary__price-container">\n <span v-if="hasActiveDiscount" class="bundle-summary__price bundle-summary__price--original">{{ formattedOriginalPrice }}</span>\n <span class="bundle-summary__price" :class="{ \'bundle-summary__price--discounted\': hasActiveDiscount }">{{ hasActiveDiscount ? formattedDiscountedPrice : formattedOriginalPrice }}</span>\n <span class="bundle-summary__icon" :class="{ \'bundle-summary__icon--expanded\': bundlePreviewExpanded }">\n <svg xmlns="http://www.w3.org/2000/svg" width="14" height="5" viewBox="0 0 14 6" fill="none">\n <path d="M2.35451 5.04712C2.18948 4.91033 2.17217 4.67156 2.3174 4.51489L6.34865 0.177978C6.42395 0.0969737 6.53264 0.0501179 6.64553 0.0500486L6.72854 0.0588377C6.8103 0.0756349 6.88583 0.117108 6.9424 0.177978L10.9737 4.51489C11.1194 4.67173 11.1017 4.91133 10.9365 5.0481C10.773 5.18296 10.5249 5.1676 10.3809 5.01294L6.64553 0.995361L2.91115 5.01294C2.76713 5.16777 2.51809 5.18315 2.35451 5.0481V5.04712Z" fill="#393939" stroke="#393939" stroke-width="0.1" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n </span>\n </div>\n </div>\n\n \x3c!-- Savings Badge --\x3e\n <div v-if="savingsBadgeMessage" class="bundle-savings-badge">\n <span class="bundle-savings-badge__icon">\n <img src="https://cdn.shopify.com/s/files/1/0653/9388/5432/files/Frame_1362.svg?v=1779199380" alt="" width="13" height="14" aria-hidden="true">\n </span>\n <span class="bundle-savings-badge__text">{{ savingsBadgeMessage }}</span>\n </div>\n\n <div class="bundle-slots-section">\n <div class="bundle-slots-grid">\n \x3c!-- Comprehensive Slot Card with State Modifiers --\x3e\n <div v-for="slot in bundleSlots"\n :key="slot.number"\n class="bundle-slot-card"\n :class="{\n \'bundle-slot-card--empty\': slot.state === \'empty\',\n \'bundle-slot-card--selected\': slot.state === \'selected\',\n \'bundle-slot-card--discounted\': slot.discount,\n \'bundle-slot-card--free-gift\': slot.state === \'free-gift\' || slot.state === \'free-gift-locked\',\n \'bundle-slot-card--gift-locked\': slot.state === \'free-gift-locked\' || slot.state === \'free-gift-eligible\',\n }"\n :style="{ cursor: \'default\' }"\n :aria-label="$t(\'custom_bundle.slot_aria\', { number: slot.number })">\n\n \x3c!-- Free Gift State --\x3e\n <div v-if="slot.state === \'free-gift\' || slot.state === \'free-gift-eligible\' || slot.state === \'free-gift-locked\'" class="bundle-slot__free-gift-state">\n <div class="bundle-slot__badge bundle-slot__badge--gift">
1\n <span class="bundle-slot__badge-text">{{ $t(\'custom_bundle.free_gift\') }}</span>\n </div>\n <div class="bundle-slot__image-container">\n <img v-if="getGiftImageSrc(slot.freeGiftProduct)"\n :src="getGiftImageSrc(slot.freeGiftProduct)"\n :alt="slot.freeGiftProduct.title"\n class="bundle-slot__image bundle-slot__image--gift">\n </div>\n <button v-if="slot.state === \'free-gift\'" class="bundle-slot__remove-link"\n @click.stop="removeGift()">{{ $t(\'custom_bundle.remove\') }}</button>\n <button v-else-if="slot.state === \'free-gift-eligible\'" class="bundle-slot__remove-link"\n @click.stop="addGift()">{{ $t(\'custom_bundle.add\') }}</button>\n <div v-else class="bundle-slot__gift-content">{{ $t(\'custom_bundle.unlock_gift\', { count: freeGiftSlotNumber - 1 }) }}</div>\n </div>\n\n \x3c!-- Selected Product State --\x3e\n <div v-else-if="slot.state === \'selected\' && slot.slotProduct" class="bundle-slot__selected-state">\n <div class="bundle-slot__image-container">\n <img v-if="slot.slotProduct.imageSrc"\n :src="slot.slotProduct.imageSrc"\n :alt="slot.slotProduct.imageAlt || slot.slotProduct.productTitle"\n class="bundle-slot__image">\n </div>\n <button class="bundle-slot__remove-link"\n @click.stop="removeFromSlot(slot.number)">{{ $t(\'custom_bundle.remove\') }}</button>\n </div>\n\n\n \x3c!-- Empty/Default State --\x3e\n <div v-else class="bundle-slot__empty-state">\n <span class="bundle-slot__number">{{ slot.number }}</span>\n <div class="bundle-slot__content">\n <p class="bundle-slot__placeholder">{{ slot.discount ? $t(\'custom_bundle.select_item_with_discount\', { discount: slot.discount }) : $t(\'custom_bundle.select_item\') }}</p>\n <div class="bundle-slot__discount-badge" v-if="slot.discount">{{ slot.discount }}</div>\n <p v-if="slot.isFree" class="bundle-slot__free-label">{{ $t(\'custom_bundle.free_gift\') }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="bundle-cta-section">\n <button\n class="bundle-cta__button"\n :class="{ \'bundle-cta__button--disabled\': !isCtaEnabled }"\n :disabled="!isCtaEnabled"\n @click="addBundleToCart">\n <span class="bundle-cta__text">{{ $t(\'product.tile.add_to_cart\') }} - <span v-if="hasActiveDiscount" class="bundle-cta__price bundle-cta__price--original">{{ formattedOriginalPrice }}</span> <span class="bundle-cta__price" :class="{ \'bundle-cta__price--discounted\': hasActiveDiscount }"> {{ hasActiveDiscount ? formattedDiscountedPrice : formattedOriginalPrice }}</span></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n '}},3721(t,e,i){"use strict";i.d(e,{A:()=>a});var n=i(66),r=i(9898),s=(i(8545),i(1821));const l={key:0},a={components:{ProductTile:r.A,ProductLoader:n.A},props:{featuredVariantId:{type:String},productHandle:{type:String,required:!0},imageDimensions:{type:String,default:"78x78"},blockTitle:{type:String}},methods:{trackProductClick(){},trackProductView(){}},render:function(t,e){const i=(0,s.resolveComponent)("product-tile"),n=(0,s.resolveComponent)("product-loader");return(0,s.openBlock)(),(0,s.createBlock)(n,{handle:t.productHandle},{default:(0,s.withCtx)(({product:e,isLoaded:n,products:r})=>[n?((0,s.openBlock)(),(0,s.createElementBlock)("div",l,[(0,s.createVNode)(i,{product:e,products:r,"is-variant-tile":"true",featuredVariantId:t.featuredVariantId,onProductClick:t.trackProductClick,onProductView:t.trackProductView},null,8,["product","products","featuredVariantId","onProductClick","onProductView"])])):(0,s.createCommentVNode)("",!0)]),_:1},8,["handle"])}}},8661(t,e,i){"use strict";i.d(e,{A:()=>a});var n=i(7347),r=i(7155);const s={onByosInteraction:t=>{(0,r.MS)(t)}};var l=i(4811);const a={name:"CustomBundlePage",components:{CustomBundle:n.A},tracking:s,data:()=>({heading:"",maxSlots:0,minSlots:0,availableSlots:0,bundleProducts:[],isLoaded:!1,priceTiers:[],yourSetLabel:"",termsAndConditionsText:"",giftProduct:null,giftProductWhitelist:[]}),async mounted(){const t="[CustomBundle]",e=(t,e=1e4)=>{const i=new AbortController,n=setTimeout(()=>i.abort(),e);return fetch(t,{signal:i.signal}).finally(()=>clearTimeout(n))},i=async t=>{const i=await e(`${window.theme.routes.productsUrl}/${t}.js`,15e3);if(!i.ok)throw new Error(`product ${t} HTTP ${i.status}`);return i.json()};try{const n="custom-bundle"===this.$el?.dataset?.vue?this.$el:this.$el?.closest?.('[data-vue="custom-bundle"]')||document.querySelector('[data-vue="custom-bundle"]');
1if(!n)return void console.warn(`${t} mount element not found`);this.heading=n.dataset.heading||"",this.yourSetLabel=n.dataset.yourSetLabel||"",this.maxSlots=parseInt(n.dataset.maxSlots,10)||0,this.minSlots=parseInt(n.dataset.minSlots,10)||0,this.availableSlots=parseInt(n.dataset.availableSlots,10)||0,this.termsAndConditionsText=n.dataset.termsAndConditionsText||"";try{this.priceTiers=JSON.parse(n.dataset.priceTiers||"[]")}catch(e){console.warn(`${t} priceTiers parse failed`,e,n.dataset.priceTiers),this.priceTiers=[]}if(this.availableSlots>0)try{sessionStorage.setItem("customBundleAvailableSlots",this.availableSlots.toString())}catch(e){console.warn(`${t} sessionStorage.setItem failed`,e)}else console.warn(`${t} availableSlots is invalid (${this.availableSlots}), skipping sessionStorage cache`);let r=[];try{r=JSON.parse(n.dataset.slotItems||"[]")}catch(e){console.warn(`${t} slotItems parse failed`,e,n.dataset.slotItems),r=[]}const s=await Promise.all(r.map(async(n,r)=>{const{productHandle:s}=n,a=`${t}[slot${r}:${s}]`;let o,d=[];try{[o,d]=await Promise.all([i(s),e(`${window.theme.routes.productsUrl}/${s}?view=bundle-metafields`).then(t=>t.json()).catch(t=>(console.warn(`${a} metafields fetch failed`,t),{variants:[],subFilter:null}))])}catch(t){return console.warn(`${a} loadProductByHandle failed`,t),null}const u=Array.isArray(d)?d:d?.variants||[],c=Array.isArray(d)?null:d?.subFilter||null,h=(u||[]).reduce((t,e)=>(t[String(e.variant_id)]=e,t),{}),p=(0,l.A)(n,o),m=new Set(p.map(String)),g=(Array.isArray(n.whitelist)?n.whitelist:[]).map(String),f=o.variants.filter(t=>{const e=g.includes(String(t.id)),i=m.has(String(t.sku)),n=0===m.size||e||i,r=h[String(t.id)]||{},s=!0===r.inactive||"true"===r.inactive,l=Number(t.inventory_quantity),a=Number.isFinite(l)&&l>0,o=Boolean(t.available)||a;return n&&o&&!s}).map(t=>({...t,meta:h[String(t.id)]||{}})),b=o.variants.map(t=>t.option1).filter((t,e,i)=>i.indexOf(t)===e),v=f.slice().sort((t,e)=>{const i=b.indexOf(t.option1),n=b.indexOf(e.option1);return-1===i&&-1===n?0:-1===i?1:-1===n?-1:i-n});return 0===v.length?(console.warn(`${a} dropped: no available variants`),null):{product:o,whitelist:p,availableVariants:v,variantMetafields:h,subFilter:c}}));
1this.bundleProducts=s.filter(Boolean);let a={};try{a=JSON.parse(n.dataset.giftProductSlot||"{}")}catch(e){console.warn(`${t} giftProductSlot parse failed`,e,n.dataset.giftProductSlot),a={}}let o=[];try{o=JSON.parse(n.dataset.giftProductWhitelist||"[]")}catch(e){console.warn(`${t} giftProductWhitelist parse failed`,e,n.dataset.giftProductWhitelist),o=[]}const d=n.dataset.giftProductHandle||"";if(d)try{this.giftProduct=await i(d)}catch(e){console.warn(`${t} failed to load gift product "${d}"`,e)}const u=(0,l.A)(a,this.giftProduct);this.giftProductWhitelist=u.length?u:o}catch(e){console.error(`${t} fatal error in beforeMount`,e)}finally{this.isLoaded=!0}},template:'\n <custom-bundle\n :heading="heading"\n :max-slots="maxSlots"\n :min-slots="minSlots"\n :available-slots="availableSlots"\n :bundle-products="bundleProducts"\n :is-loaded="isLoaded"\n :price-tiers="priceTiers"\n :your-set-label="yourSetLabel"\n :terms-and-conditions-text="termsAndConditionsText"\n :gift-product="giftProduct"\n :gift-product-whitelist="giftProductWhitelist"\n ></custom-bundle>\n '}},6246(t,e,i){"use strict";i.r(e),i.d(e,{default:()=>h,initNostoCarousels:()=>m,syncNostoTileVariant:()=>p});var n=i(5156),r=i(3752),s=i(5982),l=i(2451),a=i(3721),o=i(3819),d=i(7155),u=i(6129);var c=i(2795);const h={name:"FeaturedProducts",components:{Swiper:l.Swiper,SwiperSlide:l.SwiperSlide,FeaturedVariant:a.A},data:()=>({modules:[r.A,s.A]}),mounted(){const t=this.$el.closest&&this.$el.closest('[data-vue="featuredProducts"]')||this.$el.parentElement;t&&(0,c.Ay)(t,{threshold:.1}).then(t=>{(t=>{if(!(t instanceof Element))return;if("true"===t.dataset.featuredListTracked)return;const e=(t.dataset.trackingList||"").trim(),i=t.dataset.trackingItems||"",n=parseInt(t.dataset.trackingCount,10)||0,r=(s=i)&&"string"==typeof s?s.split("|").map(t=>{const e=t.trim().split(":");if(e.length<3)return null;const i=e[0].trim(),n=parseInt(e[1],10),r=parseInt(e[2],10);return i&&Number.isFinite(n)&&Number.isFinite(r)?{handle:i,variantId:n,position:r}:null}).filter(Boolean):[];var s;if(!r.length)return;t.dataset.featuredListTracked="true";const l=Number.isFinite(n)&&n>0?n:r.length;Promise.all(r.map(({handle:t,variantId:e,position:i})=>(0,u.L)(t).then(t=>{if(!t)return null;t.is_bundle||"bundle"!==t?.type?.toLowerCase()||(t.is_bundle=!0);const n=Array.isArray(t.variants)?t.variants.find(t=>Number(t.id)===e):void 0;return{...n?{...t,selected_variant:n,selected_or_first_available_variant:n,variant:n,variant_id:n.id}:t,position:i}}).catch(()=>null))).then(t=>{const i=t.filter(Boolean).sort((t,e)=>(t.position||0)-(e.position||0));i.length&&(0,d.h6)({list:{name:e,numberOfProducts:l},products:i})}).catch(()=>{})})(t)}).catch(()=>{})}};function p(t){if(!t||!t.querySelector)return;const e=t.querySelectorAll("input.option--shade");if(!e.length)return;const i=t.querySelector("input.option--shade:checked")||e[0];if(!i)return;const n=i.getAttribute("data-prodid")||i.getAttribute("data-variant-id");if(n){const e=t.querySelector('input[name="id"]');e&&e.value!==n&&(e.value=n)}const r=i.getAttribute("data-name")||i.value;if(r){const e=t.querySelector(".product-tile__title");e&&e.textContent.trim()!==r&&(e.textContent=r)}const s=i.getAttribute("data-image");if(s){const e=t.querySelector(".product-tile__image--alternate img");e&&(e.getAttribute("data-src")!==s&&e.setAttribute("data-src",s),e.getAttribute("src")!==s&&e.setAttribute("src",s))}}function m(t=document){const e=t=>{t.querySelectorAll('article.swiper-slide[role="group"], article.product-tile[role="group"]').forEach(t=>t.removeAttribute("role")),t.querySelectorAll("a[href], button, input, select, textarea, [tabindex]").forEach(t=>{"true"===t.getAttribute("aria-hidden")&&"-1"!==t.getAttribute("tabindex")&&t.setAttribute("tabindex","-1")})},i=t=>{t.querySelectorAll(".product-tile").forEach(t=>{const e=t.querySelector(".product-tile__badges .badge"),i=t.querySelector(".product-tile__badges .badge--badgetext");if(!e||!i)return;const n=t.querySelector("input[data-custom-override], input[data-custom-preset], input[data-prodid]");let r="";if(n){const t=(n.getAttribute("data-custom-override")||"").trim();if(t)r=t;else{const t=n.getAttribute("data-custom-preset");if(t){let e=null;try{e=JSON.parse(t.replace(/"/g,'"'))}catch{e=null}const i=Array.isArray(e)?e[0]:e;i&&String(i).trim()&&(r=String(i).trim())}}}r?(i.textContent!==r&&(i.textContent=r),e.style.display="block"):e.style.display="none"})},l=t=>{window.ReviewDataManager&&t.querySelectorAll(".product-tile__reviews-wrapper[data-
1product-handle]").forEach(t=>{const e=t.getAttribute("data-product-handle");if(!e)return;const i=t.querySelector(".bv-stars");i&&!i.dataset.bvLoaded&&(i.dataset.bvLoaded="true",window.ReviewDataManager.registerListener(e,n=>{if(!n?.Includes?.Products)return;const r=n.Includes.Products[e]||Object.values(n.Includes.Products)[0],s=r?.ReviewStatistics;if(!s||"number"!=typeof s.AverageOverallRating)return;const l=s.AverageOverallRating,a=Math.round(l),o=s.TotalReviewCount||0;let d="";for(let t=0;t<a;t+=1)d+='<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.20233 1.31286C8.20813 1.29448 8.21525 1.28891 8.21902 1.28632C8.22509 1.28215 8.23579 1.27792 8.25 1.27792C8.26421 1.27792 8.27492 1.28215 8.28099 1.28632C8.28476 1.28891 8.29187 1.29448 8.29768 1.31286L9.79246 6.04476C9.89102 6.35675 10.1804 6.56885 10.5076 6.56885H15.3683C15.387 6.56885 15.3945 6.57377 15.3983 6.57669C15.4042 6.5812 15.4114 6.58993 15.4157 6.60308C15.4201 6.61622 15.4196 6.62753 15.4175 6.63466C15.4162 6.63928 15.4132 6.64772 15.3982 6.6589L11.4467 9.6119C11.1912 9.80283 11.0844 10.1345 11.1804 10.4386L12.6852 15.2021C12.6909 15.2202 12.6884 15.2289 12.6868 15.2333C12.6842 15.2402 12.678 15.2498 12.6665 15.2579C12.655 15.2661 12.6439 15.2688 12.6365 15.269C12.6319 15.269 12.6229 15.2686 12.6076 15.2572L8.69897 12.3363C8.43272 12.1373 8.06728 12.1373 7.80104 12.3363L3.89241 15.2572C3.87715 15.2686 3.86815 15.269 3.86349 15.269C3.85611 15.2688 3.845 15.2661 3.83353 15.2579C3.82205 15.2498 3.81579 15.2402 3.81323 15.2333C3.81161 15.2289 3.80906 15.2202 3.8148 15.2021L5.31956 10.4386C5.41563 10.1345 5.30884 9.80283 5.05335 9.6119L1.10179 6.6589C1.08684 6.64772 1.08376 6.63928 1.08246 6.63467C1.08045 6.62753 1.07991 6.61622 1.08428 6.60308C1.08865 6.58993 1.09585 6.5812 1.10173 6.57669C1.10553 6.57377 1.11305 6.56885 1.13172 6.56885H5.99238C6.31956 6.56885 6.60899 6.35675 6.70754 6.04476L8.20233 1.31286Z" fill="#393939" stroke="#393939" stroke-width="0.7"/></svg>';for(let t=a;t<5;t+=1)d+='<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.20233 1.31286C8.20813 1.29448 8.21525 1.28891 8.21902 1.28632C8.22509 1.28215 8.23579 1.27792 8.25 1.27792C8.26421 1.27792 8.27492 1.28215 8.28099 1.28632C8.28476 1.28891 8.29187 1.29448 8.29768 1.31286L9.79246 6.04476C9.89102 6.35675 10.1804 6.56885 10.5076 6.56885H15.3683C15.387 6.56885 15.3945 6.57377 15.3983 6.57669C15.4042 6.5812 15.4114 6.58993 15.4157 6.60308C15.4201 6.61622 15.4196 6.62753 15.4175 6.63466C15.4162 6.63928 15.4132 6.64772 15.3982 6.6589L11.4467 9.6119C11.1912 9.80283 11.0844 10.1345 11.1804 10.4386L12.6852 15.2021C12.6909 15.2202 12.6884 15.2289 12.6868 15.2333C12.6842 15.2402 12.678 15.2498 12.6665 15.2579C12.655 15.2661 12.6439 15.2688 12.6365 15.269C12.6319 15.269 12.6229 15.2686 12.6076 15.2572L8.69897 12.3363C8.43272 12.1373 8.06728 12.1373 7.80104 12.3363L3.89241 15.2572C3.87715 15.2686 3.86815 15.269 3.86349 15.269C3.85611 15.2688 3.845 15.2661 3.83353 15.2579C3.82205 15.2498 3.81579 15.2402 3.81323 15.2333C3.81161 15.2289 3.80906 15.2202 3.8148 15.2021L5.31956 10.4386C5.41563 10.1345 5.30884 9.80283 5.05335 9.6119L1.10179 6.6589C1.08684 6.64772 1.08376 6.63928 1.08246 6.63467C1.08045 6.62753 1.07991 6.61622 1.08428 6.60308C1.08865 6.58993 1.09585 6.5812 1.10173 6.57669C1.10553 6.57377 1.11305 6.56885 1.13172 6.56885H5.99238C6.31956 6.56885 6.60899 6.35675 6.70754 6.04476L8.20233 1.31286Z" fill="#ccc" stroke="#ccc" stroke-width="0.7"/></svg>';if(i.innerHTML=d,!t.querySelector(".bv-total-reviews")&&o>0){const t=document.createElement("p");t.className="bv-total-reviews",t.textContent=`(${o})`,i.parentElement.appendChild(t)}}),window.ReviewDataManager.fetchReviewData(e,{isBundle:!1}))})},a=t=>{t.querySelectorAll(".product-tile").forEach(p)},d=t=>{if(t.swiper)return;const d=t.closest(".products-slider")||t.parentElement;e(t),i(t),l(t),a(t),t.addEventListener("change",t=>{const e=t.target;e&&e.classList&&e.classList.contains("option--shade")&&p(e.closest(".product-tile"))});const u=d?.querySelector(".products-slider__title, .section__heading, h2")?.textContent?.trim().toLowerCase(),c=u||(t.closest(".mini-cart")?"minicart recommendations":"recommendations");(0,o.E)(t,{listName:c}),new MutationObserver(()=>{e(t),i(t),l(t),a(t)}).observe(t,{childList:!0,subtree:!0});const h=t.closest(".mini-cart")?{slidesPerView:2,centeredSlides:!1,spaceBetween:12,breakpointsBase:"container",breakpoints:{400:{slidesPerView:3,centeredSlides:!1}}}:{slidesPerView:1.2,centeredSlides:!0,spaceBetween:16,breakpoints:{540:{slidesPerView:2.3,centeredSlides:!0},720:{slidesPerView:2.7,centeredSlides:!0},960:{slidesPerView:4,centeredSlides:!1}}};new n.A(t,{modules:[r.A,s.A],loop:!1,...h,navigation:{nextEl:d.querySelector(".swiper-button-next"),prevEl:d.querySelector(".swiper-button-prev")},pagination:{el:t.querySelector(".swiper-pagination")||d.querySelector(".swiper-pagination"),clickable:!0,bulletElement:"UL"===(t.querySelector(".swiper-pagination")||d.querySelector(".swiper-pagination"))?.tagName?"li":"span"}})};t.querySelectorAll(".nosto_carousel").forEach(d),new MutationObserver(t=>{for(const e of t)for(const t of e.addedNodes){if(1!==t.nodeType)continue;const e=t.classList?.contains("nosto_carousel")?t:t.querySelector?.(".nosto_carousel");e&&d(e)}}).observe(t,{childList:!0,subtree:!0})}},275(t,e,i){"use strict";i.d(e,{A:()=>r});var n=i(7155);const r={onFilterClick:t=>{(0,n.VW)(t)},onSortClick:t=>{(0,n.Jd)(t)}}},4811(t,e,i){"use strict";function n(t,e){if(!t)return[];const i=(t.mode||"").toLowerCase();if(("whitelist"===i||!i&&Array.isArray(t.whitelist))&&Array.isArray(t.whitelist))return[...t.whitelist];const n=(e?.variants||[]).map(t=>t?.sku).filter(t=>!!t);
1if("blacklist"===i&&Array.isArray(t.blacklist)){const e=new Set(t.blacklist);return n.filter(t=>!e.has(t))}return n}i.d(e,{A:()=>n})},3819(t,e,i){"use strict";i.d(e,{E:()=>a});var n=i(424),r=i.n(n),s=i(7155),l=i(6129);const a=(t,{listName:e}={})=>{if(!(t instanceof Element)||"undefined"==typeof IntersectionObserver)return()=>{};const i=[],n=r()(()=>{if(!i.length)return;const t=i.splice(0).sort((t,e)=>(t.position||0)-(e.position||0));(0,s.h6)({list:{name:e,numberOfProducts:t.length},products:t})},250),a=new IntersectionObserver(e=>{e.forEach(e=>{if(!e.isIntersecting)return;const r=e.target;if(a.unobserve(r),"true"===r.dataset.viewListTracked)return;r.dataset.viewListTracked="true";const s=(t=>{const e=t.querySelector('.product-tile__link, a[href*="/products/"]'),i=e?.href||t.getAttribute("data-product-permalink")||t.querySelector("[data-product-handle]")?.getAttribute("data-product-handle")||"";return i?i.includes("/products/")?i.split("/products/")[1].split(/[?#]/)[0]||null:/^[a-z0-9-]+$/i.test(i)?i:null:null})(r);if(!s)return;const o=[...t.querySelectorAll("article.product-tile")].indexOf(r)+1,d=r.querySelector(".badge--badgetext")?.textContent?.trim().toLowerCase()||void 0;(0,l.L)(s).then(t=>{t&&(i.push({...t,position:o,badge:d}),n())}).catch(()=>{})})},{threshold:.5}),o=()=>{t.querySelectorAll("article.product-tile").forEach(t=>{"true"!==t.dataset.viewListObserved&&(t.dataset.viewListObserved="true",a.observe(t))})};o();const d="undefined"!=typeof MutationObserver?new MutationObserver(()=>o()):null;return d&&d.observe(t,{childList:!0,subtree:!0}),()=>{a.disconnect(),d&&d.disconnect()}}},6309(){}}]);
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.