1import{E as v}from"./embla-carousel.esm-CMPFBS9o.js";const E=2.5,S=10;class H{constructor(t){this.modal=t,this.closeButton=t.querySelector('[data-js="modal__close"]'),this.slides=document.querySelectorAll('[data-js="product-main-carousel__slide"]'),this.media=null,this.activeSlideIndex=0,this.imagesEmblaApi=null,this.thumbsEmblaApi=null,this._slideHandlers=[],this._onCloseHandler=null,this._closeClickHandler=null,this._touchStartHandler=null,this._touchMoveHandler=null,this._touchEndHandler=null,this._isZoomed=!1,this._zoomedImg=null,this._currentOriginX=50,this._currentOriginY=50,this._isPanning=!1,this._tapOriginX=0,this._tapOriginY=0,this._tapStartX=0,this._tapStartY=0}init(){this.media=this.modal.querySelectorAll("[data-js='product-zoom-image__images-container'] > *"),this._onCloseHandler=()=>document.body.classList.remove("overflow-hidden"),this.modal.addEventListener("close",this._onCloseHandler),this._closeClickHandler=this.closeModal.bind(this),this.closeButton.addEventListener("click",this._closeClickHandler),this.slides.forEach((t,e)=>{const c=()=>this.openModal(e);this._slideHandlers.push({slide:t,handler:c}),t.addEventListener("click",c)})}openModal(t){document.body.classList.add("overflow-hidden"),this.modal.showModal(),this.activeSlideIndex=t,this.media.forEach(e=>{e.classList.remove("hidden"),e.tagName.toLowerCase()==="video"&&e.pause()}),this._initCarousels(t)}closeModal(){var t;document.body.classList.remove("overflow-hidden"),(t=this.media)==null||t.forEach(e=>{e.tagName.toLowerCase()==="video"&&e.pause()}),this.closeButton.closest("dialog").close()}_initCarousels(t){var p,b;this._exitZoom();const e=this.modal.querySelector('[data-js="product-zoom-image__images"]'),c=this.modal.querySelector('[data-js="product-zoom-image__images-container"]');this._touchStartHandler&&(e.removeEventListener("touchstart",this._touchStartHandler),e.removeEventListener("touchmove",this._touchMoveHandler),e.removeEventListener("touchend",this._touchEndHandler),this._touchStartHandler=null),(p=this.imagesEmblaApi)==null||p.destroy(),(b=this.thumbsEmblaApi)==null||b.destroy(),c.style.display="flex",c.style.height="100%";const _=e.getBoundingClientRect().width;Array.from(c.children).forEach(r=>{r.style.flex=`0 0 ${_}px`,r.style.minWidth="0",r.style.height="100%"}),this.imagesEmblaApi=v(e,{axis:"x",align:"center",startIndex:t,containScroll:"keepSnaps"});const d=this.modal.querySelector('[data-js="product-zoom-image__carousel"]'),g=this.modal.querySelector('[data-js="product-zoom-image__carousel-viewport"]'),s=this.modal.querySelector('[data-js="product-zoom-image__carousel-prev"]'),i=this.modal.querySelector('[data-js="product-zoom-image__carousel-next"]'),a=Array.from(d.querySelectorAll("[data-main-carousel='product-zoom-image__carousel-pagination']"));this.thumbsEmblaApi=v(g,{axis:"x",align:"start",startIndex:t,containScroll:"keepSnaps"});const l=r=>{this.activeSlideIndex=r,a.forEach(m=>delete m.dataset.active),a[r]&&(a[r].dataset.active=""),this.thumbsEmblaApi.scrollTo(r),this.media.forEach((m,f)=>{m.tagName.toLowerCase()==="video"&&(f===r?m.play().catch(()=>{}):m.pause())})},o=()=>{const r=this.thumbsEmblaApi.canScrollPrev(),m=this.thumbsEmblaApi.canScrollNext(),f=r||m;s.classList.toggle("hidden",!f),i.classList.toggle("hidden",!f),r?s.removeAttribute("disabled"):s.setAttribute("disabled","disabled"),m?i.removeAttribute("disabled"):i.setAttribute("disabled","disabled")};this.imagesEmblaApi.on("select",()=>{this._exitZoom(),l(this.imagesEmblaApi.selectedScrollSnap())}),a.forEach((r,m)=>{r.addEventListener("click",()=>this.imagesEmblaApi.scrollTo(m))}),s.addEventListener("click",()=>this.thumbsEmblaApi.scrollPrev()),i.addEventListener("click",()=>this.thumbsEmblaApi.scrollNext()),o(),this.thumbsEmblaApi.on("reInit",o).on("select",o);const n=this.modal.querySelector('[data-js="product-zoom-image__images-prev"]'),h=this.modal.querySelector('[data-js="product-zoom-image__images-next"]'),u=()=>{n&&(this.imagesEmblaApi.canScrollPrev()?n.removeAttribute("disabled"):n.setAttribute("disabled","disabled")),h&&(this.imagesEmblaApi.canScrollNext()?h.removeAttribute("disabled"):h.setAttribute("disabled","disabled"))};n&&n.addEventListener("click",()=>{this._exitZoom(),this.imagesEmblaApi.scrollPrev()}),h&&h.addEventListener("click",()=>{this._exitZoom(),this.imagesEmblaApi.scrollNext()}),u(),this.imagesEmblaApi.on("select",u).on("reInit",u),l(t),this._initTapZoom(e)}_initTapZoom(t){const e=s=>{const i=s.offsetWidth,a=s.offsetHeight,l=t.offsetWidth,o=t.offsetHeight;return{minX:Math.max(0,(l-i)/(3*i))*100,maxX:Math.min(100,(4*i-l)/(3*i))*100,minY:Math.max(0,(o-a)/(3*a)
1)*100,maxY:Math.min(100,(4*a-o)/(3*a))*100}},c=(s,i,a)=>{const l=s.getBoundingClientRect(),o=e(s),n=(i-l.left)/l.width*100,h=(a-l.top)/l.height*100;this._currentOriginX=Math.max(o.minX,Math.min(o.maxX,n)),this._currentOriginY=Math.max(o.minY,Math.min(o.maxY,h)),s.style.transformOrigin=`${this._currentOriginX}% ${this._currentOriginY}%`,t.classList.add("zoomed"),this._isZoomed=!0,this._zoomedImg=s,this.imagesEmblaApi.reInit({watchDrag:!1})},_=s=>{s.preventDefault();const i=s.touches[0];this._tapOriginX=i.clientX,this._tapOriginY=i.clientY,this._tapStartX=i.clientX,this._tapStartY=i.clientY,this._isZoomed&&(this._isPanning=!0)},d=s=>{if(!this._isZoomed||!this._isPanning||!this._zoomedImg)return;s.preventDefault();const i=s.touches[0],a=i.clientX-this._tapStartX,l=i.clientY-this._tapStartY;this._tapStartX=i.clientX,this._tapStartY=i.clientY;const o=this._zoomedImg,n=e(o),h=-a/(o.offsetWidth*(E-1))*100,u=-l/(o.offsetHeight*(E-1))*100;this._currentOriginX=Math.max(n.minX,Math.min(n.maxX,this._currentOriginX+h)),this._currentOriginY=Math.max(n.minY,Math.min(n.maxY,this._currentOriginY+u)),o.style.transformOrigin=`${this._currentOriginX}% ${this._currentOriginY}%`},g=s=>{var n;this._isPanning=!1;const i=s.changedTouches[0],a=i.clientX-this._tapOriginX,l=i.clientY-this._tapOriginY;if(Math.abs(a)<S&&Math.abs(l)<S)if(this._isZoomed)this._exitZoom();else{const h=this.imagesEmblaApi.selectedScrollSnap(),u=Array.from(this.media)[h],p=(n=u.querySelector)==null?void 0:n.call(u,"img");p&&c(p,this._tapStartX,this._tapStartY)}};this._touchStartHandler=_,this._touchMoveHandler=d,this._touchEndHandler=g,t.addEventListener("touchstart",_,{passive:!1}),t.addEventListener("touchmove",d,{passive:!1}),t.addEventListener("touchend",g)}_exitZoom(){var e;if(!this._isZoomed)return;this._zoomedImg&&(this._zoomedImg.style.transformOrigin="",this._zoomedImg=null),this.modal.querySelector('[data-js="product-zoom-image__images"]').classList.remove("zoomed"),this._isZoomed=!1,this._isPanning=!1,(e=this.imagesEmblaApi)==null||e.reInit({watchDrag:!0})}destroy(){var c,_;this._slideHandlers.forEach(({slide:d,handler:g})=>d.removeEventListener("click",g)),this._slideHandlers=[],this._onCloseHandler&&(this.modal.removeEventListener("close",this._onCloseHandler),this._onCloseHandler=null),this._closeClickHandler&&(this.closeButton.removeEventListener("click",this._closeClickHandler),this._closeClickHandler=null);const t=this.modal.querySelector('[data-js="product-zoom-image__images"]');this._touchStartHandler&&t&&(t.removeEventListener("touchstart",this._touchStartHandler),t.removeEventListener("touchmove",this._touchMoveHandler),t.removeEventListener("touchend",this._touchEndHandler),this._touchStartHandler=null);const e=this.modal.querySelector('[data-js="product-zoom-image__images-container"]');e&&(e.style.display="",e.style.height="",Array.from(e.children).forEach(d=>{d.style.flex="",d.style.minWidth="",d.style.height=""})),this._exitZoom(),(c=this.imagesEmblaApi)==null||c.destroy(),(_=this.thumbsEmblaApi)==null||_.destroy(),this.imagesEmblaApi=null,this.thumbsEmblaApi=null}}export{H as default};
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.