1import{OverflowList}from"@theme/critical";import VariantPicker from"@theme/variant-picker";import{Component}from"@theme/component";import{debounce,isDesktopBreakpoint,mediaQueryLarge,requestYieldCallback}from"@theme/utilities";import{ThemeEvents,SlideshowSelectEvent}from"@theme/events";import{morph}from"@theme/morph";export class ProductCard extends Component{requiredRefs=["productCardLink"];#deferredUnmountTimeout;#deferredViewportObserver=null;#compareVisibilityRetryTimeout;#compareVisibilityRetries=0;#compareWidgets=new WeakSet;#compareInputs=new WeakSet;#compareVisibilityCleanups=[];get productPageUrl(){return this.refs.productCardLink.href}getSelectedVariantId(){return this.querySelector('input[type="radio"]:checked[data-variant-id]')?.dataset.variantId||null}getProductCardLink(){return this.refs.productCardLink||null}#fetchProductPageHandler=()=>{this.refs.quickAdd?.fetchProductPage(this.productPageUrl)};#navigateToURL=(event,url)=>{if(event instanceof MouseEvent&&(event.metaKey||event.ctrlKey||event.shiftKey||event.button===1)){event.preventDefault(),window.open(url.href,"_blank");return}else window.location.href=url.href};connectedCallback(){if(super.connectedCallback(),!(this.refs.productCardLink instanceof HTMLAnchorElement))throw new Error("Product card link not found");this.#handleQuickAdd(),this.addEventListener(ThemeEvents.variantUpdate,this.#handleVariantUpdate),this.addEventListener(ThemeEvents.variantSelected,this.#handleVariantSelected),this.addEventListener(SlideshowSelectEvent.eventName,this.#handleSlideshowSelect),mediaQueryLarge.addEventListener("change",this.#handleQuickAdd),this.addEventListener("click",this.navigateToProduct),this.#updateOverflowList(),this.#handleCompareVisibilityBreakpoint(),this.#handleDeferredSlideshowViewport(),mediaQueryLarge.addEventListener("change",this.#handleDeferredSlideshowViewport),mediaQueryLarge.addEventListener("change",this.#handleCompareVisibilityBreakpoint),setTimeout(()=>{this.refs.slideshow?.isNested&&this.#preloadNextPreviewImage()})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this.navigateToProduct),clearTimeout(this.#deferredUnmountTimeout),this.#cleanupCompareVisibility(),this.#disconnectDeferredSlideshowViewportObserver(),mediaQueryLarge.removeEventListener("change",this.#handleDeferredSlideshowViewport),mediaQueryLarge.removeEventListener("change",this.#handleCompareVisibilityBreakpoint)}#preloadNextPreviewImage(){this.refs.slideshow?.slides?.[this.refs.slideshow?.current]?.nextElementSibling?.querySelector('img[loading="lazy"]')?.removeAttribute("loading")}#handleQuickAdd=()=>{this.removeEventListener("pointerenter",this.#fetchProductPageHandler),this.removeEventListener("focusin",this.#fetchProductPageHandler),isDesktopBreakpoint()&&(this.addEventListener("pointerenter",this.#fetchProductPageHandler),this.addEventListener("focusin",this.#fetchProductPageHandler))};#handleCompareVisibilityBreakpoint=()=>{if(!isDesktopBreakpoint()){this.#cleanupCompareVisibility();return}this.#handleCompareVisibility()};#handleCompareVisibility=()=>
1{if(!isDesktopBreakpoint())return;const compareWidgets=this.querySelectorAll("sc-add-to-compare");let hasPendingWidget=!1;for(const widget of compareWidgets)this.#connectCompareWidget(widget)||(hasPendingWidget=!0);if(this.querySelectorAll(".sc-app-block").forEach(appBlock=>this.#syncCompareAppBlock(appBlock)),!hasPendingWidget){this.#compareVisibilityRetries=0,clearTimeout(this.#compareVisibilityRetryTimeout);return}this.#compareVisibilityRetries>=40||(clearTimeout(this.#compareVisibilityRetryTimeout),this.#compareVisibilityRetries+=1,this.#compareVisibilityRetryTimeout=setTimeout(this.#handleCompareVisibility,250))};#connectCompareWidget(widget){if(!this.#compareWidgets.has(widget)){const handleWidgetEvent=()=>{setTimeout(()=>{const appBlock2=widget.closest(".sc-app-block");appBlock2&&this.#syncCompareAppBlock(appBlock2)})};widget.addEventListener("click",handleWidgetEvent),widget.addEventListener("change",handleWidgetEvent),this.#compareWidgets.add(widget),this.#compareVisibilityCleanups.push(()=>{widget.removeEventListener("click",handleWidgetEvent),widget.removeEventListener("change",handleWidgetEvent)})}const input=widget.shadowRoot?.querySelector('input[name="add_to_compare"][type="checkbox"]');if(!(input instanceof HTMLInputElement))return!1;if(!this.#compareInputs.has(input)){const handleInputEvent=()=>{const appBlock2=widget.closest(".sc-app-block");appBlock2&&this.#syncCompareAppBlock(appBlock2)};input.addEventListener("input",handleInputEvent),input.addEventListener("change",handleInputEvent),this.#compareInputs.add(input),this.#compareVisibilityCleanups.push(()=>{input.removeEventListener("input",handleInputEvent),input.removeEventListener("change",handleInputEvent)})}const appBlock=widget.closest(".sc-app-block");return appBlock&&this.#syncCompareAppBlock(appBlock),!0}#syncCompareAppBlock(appBlock){const hasCheckedCompare=Array.from(appBlock.querySelectorAll("sc-add-to-compare")).some(widget=>{const input=widget.shadowRoot?.querySelector('input[name="add_to_compare"][type="checkbox"]');return input instanceof HTMLInputElement&&input.checked});appBlock.toggleAttribute("data-compare-checked",hasCheckedCompare)}#cleanupCompareVisibility(){clearTimeout(this.#compareVisibilityRetryTimeout),this.#compareVisibilityRetries=0;for(const cleanup of this.#compareVisibilityCleanups)cleanup();this.#compareVisibilityCleanups=[],this.#compareWidgets=new WeakSet,this.#compareInputs=new WeakSet,this.querySelectorAll(".sc-app-block[data-compare-checked]").forEach(appBlock=>{appBlock.removeAttribute("data-compare-checked")})}#handleVariantSelected=event=>{event.target!==this.variantPicker&&this.variantPicker?.updateSelectedOption(event.detail.resource.id)};#handleVariantUpdate=event=>{event.stopPropagation(),this.updatePrice(event),this.#isUnavailableVariantSelected(event),this.#updateProductUrl(event),this.refs.quickAdd?.fetchProductPage(this.productPageUrl),event.target!==this.variantPicker&&this.variantPicker?.updateVariantPicker(event.detail.data.html),this.#updateCardGallery(event),this.querySelectorAll("quick-add-component[stay-visible]").forEach(quickAdd=>{quickAdd.removeAttribute("stay-visible")}),this.#updateVariantImages(),this.#previousSlideIndex=null,this.removeAttribute("data-no-swatch-selected"),this.#updateOverflowList(),this.#handleCompareVisibilityBreakpoint()};#updateCardGallery(event){const currentCardGallery=this.refs.cardGallery;if(!(currentCardGallery instanceof HTMLElement))return;const currentProductId=currentCardGallery.dataset.productId;let newCardGallery=currentProductId?event.detail.data.html?.querySelector(`[ref="cardGallery"][data-product-id="${currentProductId}"]`):null;if(!(newCardGallery instanceof HTMLElement)&&event.detail.data.newProduct?.id&&(newCardGallery=event.detail.data.html?.querySelector(`[ref="cardGallery"][data-product-id="${event.detail.data.newProduct.id}"]`)),newCardGallery instanceof HTMLElement||(newCardGallery=event.detail.data.html?.querySelector('[ref="cardGallery"]')),!(newCardGallery instanceof HTMLElement))return;const newDeferredSlideshowTemplate=newCardGallery.querySelector('[ref="deferredSlideshowTemplate"]'),newPreviewTemplate=newCardGallery.querySelector('[ref="cardGalleryPreviewTemplate"]');morph(currentCardGallery,newCardGallery);const deferredSlideshowTemplate=currentCardGallery.querySelector('[ref="deferredSlideshowTemplate"]'),previewTemplate=currentCardGallery.querySelector('[ref="cardGalleryPreviewTemplate"]');deferredSlideshowTemplate instanceof HTMLTemplateElement&&newDeferredSlideshowTemplate instanceof HTMLTemplateElement&&(deferredSlideshowTemplate.innerHTML=newDeferredSlideshowTemplate.innerHTML),previewTemplate instanceof HTMLTemplateElement&&newPreviewTemplate instanceof HTMLTemplateElement&&(previewTemplate.innerHTML=newPreviewTemplate.innerHTML);const mountPoint=currentCardGallery.querySelector('[ref="deferredSlideshowMount"]');
1if(!(mountPoint instanceof HTMLElement)||!(deferredSlideshowTemplate instanceof HTMLTemplateElement))return;if(mountPoint.querySelector("slideshow-component")){mountPoint.replaceChildren(deferredSlideshowTemplate.content.cloneNode(!0));return}isDesktopBreakpoint()||mountPoint.replaceChildren(deferredSlideshowTemplate.content.cloneNode(!0))}#updateOverflowList(){const overflowList=this.querySelector("swatches-variant-picker-component overflow-list");if(!overflowList)return;const triggerReflow=()=>{overflowList.dispatchEvent(new CustomEvent("reflow",{bubbles:!0,detail:{}}))};requestAnimationFrame(()=>{customElements.get("overflow-list")?triggerReflow():customElements.whenDefined("overflow-list").then(triggerReflow)})}updatePrice(event){const priceContainer=this.querySelectorAll("product-price [ref='priceContainer']")[1],newPriceElement=event.detail.data.html.querySelector("product-price [ref='priceContainer']");newPriceElement&&priceContainer&&morph(priceContainer,newPriceElement)}#updateProductUrl(event){const anchorElement=event.detail.data.html?.querySelector("product-card a"),featuredMediaUrl=event.detail.data.html?.querySelector("product-card-link")?.getAttribute("data-featured-media-url");if(featuredMediaUrl&&this.closest("product-card-link")&&this.closest("product-card-link")?.setAttribute("data-featured-media-url",featuredMediaUrl),anchorElement instanceof HTMLAnchorElement){if(anchorElement.getAttribute("href")?.trim()==="")return;const productUrl=anchorElement.href,{productCardLink,productTitleLink,cardGalleryLink}=this.refs;productCardLink.href=productUrl,cardGalleryLink instanceof HTMLAnchorElement&&(cardGalleryLink.href=productUrl),productTitleLink instanceof HTMLAnchorElement&&(productTitleLink.href=productUrl)}}#isUnavailableVariantSelected(event){const allVariants=event.detail.data.html.querySelectorAll("input:checked");for(const variant of allVariants)this.#toggleAddToCartButton(variant.dataset.optionAvailable==="true")}#toggleAddToCartButton(enable){const addToCartButton=this.querySelector(".add-to-cart__button button");addToCartButton instanceof HTMLButtonElement&&(addToCartButton.disabled=!enable)}#updateVariantImages(){const{slideshow}=this.refs;if(!this.variantPicker?.selectedOption)return;const selectedImageId=this.variantPicker?.selectedOption.dataset.optionMediaId;if(slideshow&&selectedImageId){const{slides=[]}=slideshow.refs;if(slides.some(slide=>slide.getAttribute("variant-image")!=null))for(const slide of slides)slide.getAttribute("variant-image")!=null&&(slide.hidden=slide.getAttribute("slide-id")!==selectedImageId);slideshow.select({id:selectedImageId},void 0,{animate:!1})}}get allVariants(){return this.querySelectorAll("input[data-variant-id]")}get variantPicker(){return this.querySelector("swatches-variant-picker-component")}#previousSlideIndex=null;#handleSlideshowSelect=event=>{event.detail.userInitiated&&(this.#previousSlideIndex=event.detail.index)};previewVariant(id){this.#ensureDeferredSlideshowMounted();const slideshow=this.refs.slideshow??this.querySelector("slideshow-component");!slideshow||typeof slideshow.select!="function"||(this.resetVariant.cancel(),slideshow.select({id},void 0,{animate:!1}))}previewImage(event){if(event.pointerType!=="mouse")return;this.#ensureDeferredSlideshowMounted();const slideshow=this.refs.slideshow??this.querySelector("slideshow-component");!slideshow||typeof slideshow.select!="function"||(this.resetVariant.cancel(),!((slideshow.slides?.length||0)<2)&&(slideshow.select(1,void 0,{animate:!1}),setTimeout(()=>this.#preloadNextPreviewImage())))}resetImage(event){if(event.pointerType!=="mouse")return;const{slideshow}=this.refs;if(this.variantPicker)this.#resetVariant();else{if(!slideshow)return;slideshow.previous(void 0,{animate:!1})}}resetToFirstImage(event){if(event.pointerType!=="mouse")return;const slideshow=this.refs.slideshow??this.querySelector("slideshow-component");!slideshow||typeof slideshow.select!="function"||(this.resetVariant.cancel(),this.#previousSlideIndex=null,slideshow.select(0,void 0,{animate:!1}))}#ensureDeferredSlideshowMounted(){if(this.refs.slideshow)return!0;const mountPoint=this.querySelector('[ref="deferredSlideshowMount"]'),slideshowTemplate=this.querySelector('[ref="deferredSlideshowTemplate"]');return!(mountPoint instanceof HTMLElement)||!(slideshowTemplate instanceof HTMLTemplateElement)?!1:(clearTimeout(this.#deferredUnmountTimeout),(mountPoint.children.length===0||!mountPoint.querySelector("slideshow-component"))&&mountPoint.replaceChildren(slideshowTemplate.content.cloneNode(!0)),!0)}#teardownDeferredSlideshow(){const mountPoint=this.querySelector('[ref="deferredSlideshowMount"]'),previewTemplate=this.querySelector('[ref="cardGalleryPreviewTemplate"]');!(mountPoint instanceof HTMLElement)||!(previewTemplate instanceof HTMLTemplateElement)||(mountPoint.replaceChildren(previewTemplate.content.cloneNode(!0)),this.#previousSlideIndex=null)}#handleDeferredSlideshowViewport=()=>{if(this.#isForceDeferredGallery()){if(isDesktopBreakpoint()){this.#disconnectDeferredSlideshowViewportObserver(),this.#teardownDeferredSlideshow();return}this.#observeDeferredSlideshowViewport()}};#scheduleDeferredSlideshowTeardown(delayMs){clearTimeout(this.#deferredUnmountTimeout),this.#deferredUnmountTimeout=setTimeout(()=>{this.isConnected&&this.#teardownDeferredSlideshow()},delayMs)}#isForceDeferredGallery(){return this.refs.cardGallery?.dataset.forceDeferredGallery==="true"}#disconnectDeferredSlideshowViewportObserver(){this.#deferredViewportObserver?.disconnect(),this.#deferredViewportObserver=null}#isIOSWebKit(){const ua=window.navigator.userAgent||"",isIOSDevice=/iP(hone|ad|od)/.test(ua)||window.navigator.platform==="MacIntel"&&window.navigator.maxTouchPoints>
11,isAppleWebKit=/WebKit/.test(ua)&&!/CriOS|FxiOS|EdgiOS|OPiOS/.test(ua);return isIOSDevice&&isAppleWebKit}#observeDeferredSlideshowViewport(){if(this.#deferredViewportObserver||!this.#isForceDeferredGallery())return;const cardGallery=this.refs.cardGallery;if(!(cardGallery instanceof HTMLElement))return;const isIOSWebKit=this.#isIOSWebKit(),rootMargin=isIOSWebKit?"60px 0px 80px 0px":"260px 0px 320px 0px",threshold=isIOSWebKit?.08:.01,teardownDelay=isIOSWebKit?40:180;this.#deferredViewportObserver=new IntersectionObserver(entries=>{for(const entry of entries){if(entry.isIntersecting){this.#ensureDeferredSlideshowMounted();continue}this.#scheduleDeferredSlideshowTeardown(teardownDelay)}},{rootMargin,threshold}),this.#deferredViewportObserver.observe(cardGallery)}activateDeferredSlideshow(event){const pointerType=event.pointerType,isMouse=pointerType==="mouse",isTouchLike=pointerType==="touch"||pointerType==="pen";!isMouse&&!isTouchLike||(clearTimeout(this.#deferredUnmountTimeout),!this.#ensureDeferredSlideshowMounted())||isTouchLike||queueMicrotask(()=>{this.isConnected&&this.previewImage(event)})}deactivateDeferredSlideshow(event){event.pointerType==="mouse"&&(this.resetToFirstImage(event),this.#scheduleDeferredSlideshowTeardown(60))}#resetVariant=()=>{const{slideshow}=this.refs;if(!slideshow)return;if(this.variantPicker?.selectedOption){const id=this.variantPicker.selectedOption.dataset.optionMediaId;if(id){slideshow.select({id},void 0,{animate:!1});return}}const initialSlide=slideshow.initialSlide,slideId=initialSlide?.getAttribute("slide-id");if(initialSlide&&slideshow.slides?.includes(initialSlide)&&slideId){slideshow.select({id:slideId},void 0,{animate:!1});return}slideshow.previous(void 0,{animate:!1})};navigateToProduct=event=>{if(!(event.target instanceof Element)||this.hasAttribute("data-no-navigation")||event.target.closest('button, input, label, select, [tabindex="1"]'))return;const link=this.refs.productCardLink;if(!link.href)return;const linkURL=new URL(link.href),productCardAnchor=link.getAttribute("id");if(!productCardAnchor)return;const url=new URL(window.location.href),parent=this.closest("li");url.hash=productCardAnchor,parent&&parent.dataset.page&&url.searchParams.set("page",parent.dataset.page),window.Shopify.designMode||requestYieldCallback(()=>{history.replaceState({},"",url.toString())}),event.target.closest("a")||this.#navigateToURL(event,linkURL)};resetVariant=debounce(this.#resetVariant,100)}customElements.get("product-card")||customElements.define("product-card",ProductCard);class SwatchesVariantPickerComponent extends VariantPicker{connectedCallback(){super.connectedCallback(),this.parentProductCard=this.closest("product-card"),this.addEventListener(ThemeEvents.variantUpdate,this.#handleCardVariantUrlUpdate.bind(this))}#handleCardVariantUrlUpdate(){if(this.pendingVariantId&&this.parentProductCard instanceof ProductCard){const currentUrl=new URL(this.parentProductCard.refs.productCardLink.href);currentUrl.searchParams.set("variant",this.pendingVariantId),this.parentProductCard.refs.productCardLink.href=currentUrl.toString(),this.pendingVariantId=null}}variantChanged(event){if(!(event.target instanceof HTMLElement))return;const isSwatchInput=event.target instanceof HTMLInputElement&&event.target.name?.includes("-swatch"),clickedSwatch=event.target,availableCount=parseInt(clickedSwatch.dataset.availableCount||"0"),firstAvailableVariantId=clickedSwatch.dataset.firstAvailableOrFirstVariantId;if(isSwatchInput&&availableCount>0&&firstAvailableVariantId){event.stopPropagation(),this.updateSelectedOption(clickedSwatch);const productUrl=this.dataset.productUrl?.split("?")[0];if(!productUrl)return;const url=new URL(productUrl,window.location.origin);url.searchParams.set("variant",firstAvailableVariantId),url.searchParams.set("section_id","section-rendering-product-card");const requestUrl=url.href;this.pendingVariantId=firstAvailableVariantId,this.fetchUpdatedSection(requestUrl);return}super.variantChanged(event)}showAllSwatches(event){event?.preventDefault();const{overflowList}=this.refs;overflowList instanceof OverflowList&&overflowList.showAll()}}customElements.get("swatches-variant-picker-component")||customElements.define("swatches-variant-picker-component",SwatchesVariantPickerComponent); 2//# sourceMappingURL=/cdn/shop/t/5/assets/product-card.js.map?v=120971119390145122301777992560
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.