lazer-slider 1.1.8 → 1.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var O={MIN_DURATION:400,MAX_DURATION:1e3,SPEED_FACTOR:1.5,SCROLL_END_DELAY:50,THUMB_UPDATE_DELAY:500},Le="(min-width: 64rem)",z=()=>window.matchMedia(Le).matches;var B=e=>e===1?1:1-Math.pow(2,-10*e),N=e=>1-Math.pow(1-e,3),ge=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,Ae=e=>1-(1-e)*(1-e),Me=e=>e;var xe=()=>`slider-${Math.random().toString(36).substring(2,9)}`,te=e=>{let{feed:t,prevSlideButton:o,nextSlideButton:l,thumbs:r,slides:s}=e;t.id||(t.id=xe()),t.setAttribute("role","region"),t.setAttribute("aria-label","Carousel"),t.setAttribute("aria-roledescription","carousel"),t.removeAttribute("tabindex"),s.forEach((i,a)=>{i.setAttribute("role","group"),i.setAttribute("aria-roledescription","slide"),i.setAttribute("aria-label",`Slide ${a+1} of ${s.length}`);}),o&&(o.setAttribute("aria-label","Previous slide"),o.setAttribute("aria-controls",t.id),o.setAttribute("tabindex","0"),o.tagName!=="BUTTON"&&o.setAttribute("role","button")),l&&(l.setAttribute("aria-label","Next slide"),l.setAttribute("aria-controls",t.id),l.setAttribute("tabindex","0"),l.tagName!=="BUTTON"&&l.setAttribute("role","button")),r?.length&&r.forEach((i,a)=>{i.tagName!=="BUTTON"&&i.setAttribute("role","button"),i.setAttribute("aria-label",`Go to slide ${a+1}`),i.setAttribute("tabindex","0"),i.setAttribute("aria-controls",t.id);});},_=(e,t,o)=>{if(!e)return;!t&&e===document.activeElement&&o&&o.focus();let l="opacity 0.3s ease",r=t?"1":"0";Object.assign(e.style,{opacity:r,transition:l,pointerEvents:t?"auto":"none"}),t?(e.removeAttribute("aria-hidden"),e.setAttribute("tabindex","0")):(e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex","-1")),t?e.style.visibility="visible":setTimeout(()=>{e.style.opacity==="0"&&(e.style.visibility="hidden");},300);},F=(e,t,o="active")=>{e?.length&&e.forEach((l,r)=>{let s=r===t;l.classList.toggle(o,s),l.setAttribute("aria-selected",s.toString());});},re=(e,t,o,l,r="horizontal")=>{let s=r==="vertical",i=s?"ArrowUp":"ArrowLeft",a=s?"ArrowDown":"ArrowRight";e.addEventListener("keydown",p=>{switch(p.key){case i:p.preventDefault(),t();break;case a:p.preventDefault(),o();break}},{signal:l}),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0");};var C={FRICTION:.94,MIN_VELOCITY:.3,MOMENTUM_RATIO:.8,VELOCITY_SMOOTHING:.4,EDGE_RESISTANCE:.3,MAX_EDGE_OVERSCROLL:100,SHORT_SWIPE_VELOCITY:.5,BOUNCE_DURATION:400},Ie=()=>({isDragging:false,startX:0,startY:0,startScrollLeft:0,startScrollTop:0,velocity:0,lastX:0,lastY:0,lastTime:0,momentumId:null}),De=()=>({...Ie(),velocityHistory:[],dragDistance:0,dragStartTime:0}),U=(e,t,o="horizontal")=>{let l=e.getBoundingClientRect(),r=o==="vertical",s=r?l.top:l.left,i=null,a=1/0;for(let p of t){if(p.offsetParent===null)continue;let u=p.getBoundingClientRect(),b=r?u.top:u.left,n=Math.abs(s-b);n<a&&(a=n,i=p);}return i},Ce=(e,t,o,l="horizontal")=>{let r=e.getBoundingClientRect(),s=l==="vertical",i=s?r.top:r.left,a=t.filter(f=>f.offsetParent!==null);if(a.length===0)return null;let p=0,u=1/0;a.forEach((f,v)=>{let T=f.getBoundingClientRect(),R=s?T.top:T.left,A=Math.abs(i-R);A<u&&(u=A,p=v);});let b=2,n=p;return Math.abs(o)>b&&(o>0?n=Math.min(p+1,a.length-1):n=Math.max(p-1,0)),a[n]??null},He=e=>{if(e.length===0)return 0;let t=0,o=0;return e.forEach((l,r)=>{let s=r+1;t+=l*s,o+=s;}),t/o},we=(e,t,o,l,r,s="horizontal",i=false)=>{let a=s==="vertical",p=e.velocity*C.MOMENTUM_RATIO,u=()=>{if(Math.abs(p)<C.MIN_VELOCITY){e.momentumId=null;let v=U(t,o,s);if(v){let T=a?v.offsetTop:v.offsetLeft;l(T,N);}r?.(v);return}let b=a?t.scrollHeight-t.clientHeight:t.scrollWidth-t.clientWidth,f=(a?t.scrollTop:t.scrollLeft)+p;i||(f<0||f>b)&&(p*=.5),a?t.scrollTop=Math.max(0,Math.min(b,f)):t.scrollLeft=Math.max(0,Math.min(b,f)),p*=C.FRICTION,e.momentumId=requestAnimationFrame(u);};e.momentumId=requestAnimationFrame(u);},oe=e=>"touches"in e?e.touches[0]?.clientX??0:e.clientX,le=e=>"touches"in e?e.touches[0]?.clientY??0:e.clientY,Re=(e,t)=>t==="vertical"?le(e):oe(e),ie=e=>{let {feed:t,slides:o,abortSignal:l,smoothScrollTo:r,onDragEnd:s,direction:i="horizontal",loop:a=false,touchRatio:p=1,shortSwipeThreshold:u=300,swipeDistanceThreshold:b=10}=e,n=De(),f=i==="vertical",v=()=>{if(!a)return o;let y=[],I=t.children;for(let D=0;D<I.length;D++){let M=I[D];(o.includes(M)||M.hasAttribute("data-lazer-clone"))&&y.push(M);}return y.length>0?y:o},T=0,A=()=>{T=f?t.scrollHeight-t.clientHeight:t.scrollWidth-t.clientWidth,f?t.clientHeight:t.clientWidth;},V=y=>{n.momentumId!==null&&(cancelAnimationFrame(n.momentumId),n.momentumId=null),A(),n.isDragging=true,n.startX=oe(y),n.startY=le(y),n.startScrollLeft=t.scrollLeft,n.startScrollTop=t.scrollTop,n.velocity=0,n.lastX=n.startX,n.lastY=n.startY,n.lastTime=performance.now(),n.velocityHistory=[],n.dragDistance=0,n.dragStartTime=performance.now(),t.style.userSelect="none",t.style.cursor="grabbing",t.classList.add("is-dragging"),y.type==="mousedown"&&y.preventDefault();},W=y=>{if(!n.isDragging)return;let I=Re(y,i),D=f?n.startY:n.startX,M=f?n.lastY:n.lastX,E=f?n.startScrollTop:n.startScrollLeft,H=performance.now(),c=H-n.lastTime,d=(D-I)*p,S=E+d;if(n.dragDistance=Math.abs(d),!a){if(S<0){let m=Math.abs(S),h=1-Math.min(m/C.MAX_EDGE_OVERSCROLL,1)*(1-C.EDGE_RESISTANCE);S=-m*h;}else if(S>T){let m=S-T,h=1-Math.min(m/C.MAX_EDGE_OVERSCROLL,1)*(1-C.EDGE_RESISTANCE);S=T+m*h;}}if(f?t.scrollTop=S:t.scrollLeft=S,c>0){let m=(M-I)/c*16;if(n.velocityHistory.length>0){let h=n.velocity;n.velocity=h*(1-C.VELOCITY_SMOOTHING)+m*C.VELOCITY_SMOOTHING;}else n.velocity=m;n.velocityHistory.push(m),n.velocityHistory.length>5&&n.velocityHistory.shift();}f?n.lastY=I:n.lastX=I,n.lastTime=H,y.type==="touchmove"&&y.preventDefault();},P=()=>{if(!n.isDragging)return;n.isDragging=false,t.style.userSelect="",t.style.cursor="",t.classList.remove("is-dragging");let I=performance.now()-n.dragStartTime<u&&n.dragDistance>b,D=He(n.velocityHistory),M=v();if(!a){let E=f?t.scrollTop:t.scrollLeft;if(E<0||E>T){let H=E<0?0:T,c=E,d=performance.now(),S=()=>{let m=performance.now()-d,h=Math.min(m/C.BOUNCE_DURATION,1),L=N(h),w=c+(H-c)*L;if(f?t.scrollTop=w:t.scrollLeft=w,h<1)requestAnimationFrame(S);else {let x=U(t,M,i);if(x){let g=f?x.offsetTop:x.offsetLeft;r(g,N);}s?.(x);}};requestAnimationFrame(S);return}}if(I||Math.abs(D)>C.SHORT_SWIPE_VELOCITY){let E=Ce(t,M,D,i);if(E){let H=f?E.offsetTop:E.offsetLeft;r(H,N),s?.(E);}else s?.(null);}else if(Math.abs(n.velocity)>1&&!n.isLoopDragHandled)we(n,t,M,r,s,i,a);else {let E=U(t,M,i);if(!n.isLoopDragHandled){if(E){let H=f?E.offsetTop:E.offsetLeft;r(H,N);}s?.(E);}}};return t.addEventListener("mousedown",V,{signal:l}),document.addEventListener("mousemove",W,{signal:l}),document.addEventListener("mouseup",P,{signal:l}),t.addEventListener("touchstart",V,{passive:true,signal:l}),t.addEventListener("touchmove",W,{passive:false,signal:l}),t.addEventListener("touchend",P,{signal:l}),t.addEventListener("touchcancel",P,{signal:l}),document.addEventListener("mouseleave",P,{signal:l}),t.style.cursor="grab",n},ne=e=>{e.momentumId!==null&&(cancelAnimationFrame(e.momentumId),e.momentumId=null);};var X=({bulletsContainer:e,slides:t,bulletClass:o,bulletActiveClass:l,feedId:r})=>{if(!e||!(e instanceof HTMLElement))throw new Error("Invalid bulletsContainer: must be a valid HTMLElement");if(!Array.isArray(t)||t.length===0)throw new Error("Invalid slides: must be a non-empty array");if(!r||typeof r!="string")throw new Error("Invalid feedId: must be a non-empty string");if(!o||typeof o!="string")throw new Error("Invalid bulletClass: must be a non-empty string");e.innerHTML="",e.setAttribute("role","tablist"),e.setAttribute("aria-label","Slide navigation");let s=t.map((a,p)=>({slide:a,originalIndex:p})).filter(({slide:a})=>a.offsetParent!==null);return s.length===0?(console.warn("No visible slides found"),[]):s.map(({slide:a,originalIndex:p},u)=>{let b=document.createElement("button");return b.type="button",b.classList.add(o),u===0&&b.classList.add(l),b.setAttribute("role","tab"),b.setAttribute("aria-selected",u===0?"true":"false"),b.setAttribute("aria-controls",r),b.setAttribute("aria-label",`Go to slide ${u+1}`),b.setAttribute("data-slide-index",String(u)),e.appendChild(b),b})};var j=({thumbsContainer:e,slides:t,thumbClass:o,thumbActiveClass:l,feedId:r,thumbImageSelector:s="img",thumbSize:i})=>{if(!e||!(e instanceof HTMLElement))throw new Error("Invalid thumbsContainer: must be a valid HTMLElement");if(!Array.isArray(t)||t.length===0)throw new Error("Invalid slides: must be a non-empty array");if(!r||typeof r!="string")throw new Error("Invalid feedId: must be a non-empty string");if(!o||typeof o!="string")throw new Error("Invalid thumbClass: must be a non-empty string");e.innerHTML="",e.setAttribute("role","tablist"),e.setAttribute("aria-label","Slide thumbnails");let a=t.map((u,b)=>({slide:u,originalIndex:b})).filter(({slide:u})=>u.offsetParent!==null);return a.length===0?(console.warn("No visible slides found"),[]):a.map(({slide:u,originalIndex:b},n)=>{let f=document.createElement("button");f.type="button",f.classList.add(o),n===0&&f.classList.add(l);let v=u.querySelector(s);if(v?.src){let T=document.createElement("img");T.src=v.src,T.alt=v.alt||`Slide ${n+1} thumbnail`,T.draggable=false,i&&(T.style.width=`${i.width}px`,T.style.height=`${i.height}px`,T.style.objectFit="cover"),f.appendChild(T);}return f.setAttribute("role","tab"),f.setAttribute("aria-selected",n===0?"true":"false"),f.setAttribute("aria-controls",r),f.setAttribute("aria-label",`Go to slide ${n+1}`),f.setAttribute("data-slide-index",String(n)),e.appendChild(f),f})};var ae=()=>({initialized:false,clonedSlides:[],styleElement:null}),se=()=>{let e=document.getElementById("lazer-marquee-keyframes");if(e)return e;let t=document.createElement("style");return t.id="lazer-marquee-keyframes",t.textContent=`
|
|
2
2
|
@keyframes lazer-marquee-scroll {
|
|
3
3
|
0% {
|
|
4
4
|
transform: translateX(0);
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
transform: translateX(-50%);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
`,document.head.appendChild(t),t},we=(e,t)=>{t.initialized||(t.styleElement=ae(),e.feed.style.display="flex",e.feed.style.willChange="transform",e.slides.forEach(o=>{let l=o.cloneNode(true);l.setAttribute("data-lazer-marquee-clone","true"),l.setAttribute("aria-hidden","true"),e.feed.appendChild(l),t.clonedSlides.push(l);}),t.initialized=true);},se=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false);},Re=(e,t)=>{ae(),requestAnimationFrame(()=>{let o=e.feed.scrollWidth,l=e.marqueeSpeed??50,r=e.marqueeDirection??"left",a=o/2;if(a<=0||l<=0){console.warn("[lazer-slider] Invalid marquee values:",{distance:a,speed:l,scrollWidth:o});return}let m=`lazer-marquee-scroll ${a/l}s linear infinite ${r==="right"?"reverse":"normal"}`;e.feed.style.animation="none",e.feed.offsetWidth,e.feed.style.animation=m,e.feed.style.animationPlayState=t.marqueePaused?"paused":"running";});},V=(e,t)=>{Re(e,t);},ce=(e,t)=>{t.feed.style.animation="",t.feed.style.animationPlayState="",t.feed.style.transform="",t.feed.style.willChange="";},_=(e,t)=>{e.marqueePaused=true,t.feed.style.animationPlayState="paused";},k=(e,t)=>{e.marqueePaused=false,t.feed.style.animationPlayState="running";},de=(e,t,o)=>{e.marquee&&(we(e,o),V(e,t));},ue=(e,t,o)=>{!e.marquee||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>_(t,e),{signal:o}),e.feed.addEventListener("mouseleave",()=>k(t,e),{signal:o}),e.feed.addEventListener("touchstart",()=>_(t,e),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>k(t,e),{signal:o}));};var me=e=>({initialized:false,clonedSlides:[],realSlides:[...e],clonesPerSide:0}),Oe=e=>{let t=O()?e.desktopSlidesPerView:e.mobileSlidesPerView;return !t||t==="auto"?1:Math.ceil(t)},fe=(e,t,o)=>{if(!e.loop||t.initialized)return;let l=t.realSlides,r=Oe(e);t.clonesPerSide=r;for(let a=l.length-r;a<l.length;a++){let i=l[a];if(!i)continue;let s=i.cloneNode(true);s.setAttribute("data-lazer-clone","prepend"),s.setAttribute("aria-hidden","true"),e.feed.insertBefore(s,e.feed.firstChild),t.clonedSlides.push(s);}for(let a=0;a<r;a++){let i=l[a];if(!i)continue;let s=i.cloneNode(true);s.setAttribute("data-lazer-clone","append"),s.setAttribute("aria-hidden","true"),e.feed.appendChild(s),t.clonedSlides.push(s);}requestAnimationFrame(()=>{let a=l[0];a&&(o?e.feed.scrollTop=a.offsetTop:e.feed.scrollLeft=a.offsetLeft);}),t.initialized=true;},U=(e,t,o,l,r,a,i)=>{if(!t.loop||!o.initialized)return;a(true);let s=o.realSlides,m=s.length;if(e==="next"){let u=s[0];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(0);}else {let u=s[m-1];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(m-1);}requestAnimationFrame(()=>{requestAnimationFrame(()=>{a(false),i();});});},pe=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false,e.clonesPerSide=0);};var j=(e,t,o)=>{if(t.autoplayIntervalId)return;let l=e.autoplayInterval??3e3;t.autoplayIntervalId=setInterval(()=>{t.autoplayPaused||o("next");},l);},K=e=>{e.autoplayIntervalId&&(clearInterval(e.autoplayIntervalId),e.autoplayIntervalId=null);},Se=e=>{e.autoplayPaused=true;},he=e=>{e.autoplayPaused=false;},be=(e,t,o)=>{!e.autoplay||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>Se(t),{signal:o}),e.feed.addEventListener("mouseleave",()=>he(t),{signal:o}),e.feed.addEventListener("touchstart",()=>Se(t),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>he(t),{signal:o}));};var Q=(e,t,o)=>{if(e.scrollbarThumb)if(o){let l=t.height/e.feed.scrollHeight*100;e.scrollbarThumb.style.height=`${l}%`,e.scrollbarThumb.style.width="";}else {let l=t.width/e.feed.scrollWidth*100;e.scrollbarThumb.style.width=`${l}%`,e.scrollbarThumb.style.height="";}},Te=(e,t)=>{if(!(!e.scrollbarThumb||!e.scrollbarTrack))if(t){let o=e.scrollbarTrack.getBoundingClientRect().height,l=e.scrollbarThumb.getBoundingClientRect().height,r=o-l,a=e.feed.scrollHeight-e.feed.clientHeight,i=a>0?e.feed.scrollTop/a:0;e.scrollbarThumb.style.transform=`translateY(${r*i}px)`;}else {let o=e.scrollbarTrack.getBoundingClientRect().width,l=e.scrollbarThumb.getBoundingClientRect().width,r=o-l,a=e.feed.scrollWidth-e.feed.clientWidth,i=a>0?e.feed.scrollLeft/a:0;e.scrollbarThumb.style.transform=`translateX(${r*i}px)`;}};var J=(e,t,o,l=N,r)=>{let a=o?e.scrollTop:e.scrollLeft,i=Math.abs(t-a),s=Math.min(C.MAX_DURATION,Math.max(C.MIN_DURATION,i/C.SPEED_FACTOR)),m=performance.now(),u=h=>{let n=(h-m)/s,d=Math.min(n,1),v=l(d),b=a+(t-a)*v;o?e.scrollTop=b:e.scrollLeft=b,d<1?requestAnimationFrame(u):(o?e.scrollTop=t:e.scrollLeft=t,r?.());};requestAnimationFrame(u);},W=e=>e.filter(t=>t.offsetParent!==null),Z=(e,t,o)=>{let l=o?e.desktopSlidesPerView:e.mobileSlidesPerView,r=e.slideGap??0;if(r>0&&(e.feed.style.gap=`${r}px`),!l||l==="auto"){e.slides.forEach(s=>{s.style.flex="",s.style.minWidth="",s.style.minHeight="";});return}let i=`calc((100% - ${r*(l-1)}px) / ${l})`;t?e.slides.forEach(s=>{s.style.flex=`0 0 ${i}`,s.style.minHeight=i,s.style.minWidth="";}):e.slides.forEach(s=>{s.style.flex=`0 0 ${i}`,s.style.minWidth=i,s.style.minHeight="";});},ve=(e,t,o,l)=>{let r=l?e.clientHeight:e.clientWidth;return !t||o!==r?{rect:e.getBoundingClientRect(),size:r}:{rect:t,size:o}};var Pe=e=>{if(!e.feed)throw new Error("lazer-slider: feed element is required");if(!e.slides?.length)throw new Error("lazer-slider: slides array is required and must not be empty");if(e.feed.id||(e.feed.id=`lazer-slider-feed-${Math.random().toString(36).substr(2,9)}`),e.bulletsContainer&&!e.thumbs){let c=G({bulletsContainer:e.bulletsContainer,slides:e.slides,bulletClass:e.bulletsClass??"slider-bullet",bulletActiveClass:e.bulletsActiveClass??"active",feedId:e.feed.id});e.thumbs=c;}if(e.thumbsContainer&&!e.thumbs){let c=X({thumbsContainer:e.thumbsContainer,slides:e.slides,thumbClass:e.thumbsClass??"slider-thumb",thumbActiveClass:e.thumbsActiveClass??"active",feedId:e.feed.id,thumbImageSelector:e.thumbImageSelector??"img",thumbSize:e.thumbSize});e.thumbs=c;}let t=e.direction??"horizontal",o=t==="vertical",l=e.easing??N,r={currentSlideIndex:0,isScrolling:false,ticking:false,cachedFeedRect:null,lastWidth:0,updateThumbTimeout:null,scrollEndTimeout:null,abortController:new AbortController,autoplayIntervalId:null,autoplayPaused:false,marqueePaused:false,isLoopRepositioning:false},a=null,i=me(e.slides),s=ne(),m=()=>{let c=ve(e.feed,r.cachedFeedRect,r.lastWidth,o);return r.cachedFeedRect=c.rect,r.lastWidth=c.size,c.rect},u=(c,f)=>{J(e.feed,c,o,l,f);},h=(c,f)=>{J(e.feed,c,o,f??l);},n=()=>{if(r.isLoopRepositioning)return;let c=m(),f,T,p;if(o?(f=e.feed.scrollTop<=1,T=e.feed.scrollTop+c.height>=e.feed.scrollHeight-1,p=e.feed.scrollHeight<=c.height):(f=e.feed.scrollLeft<=1,T=e.feed.scrollLeft+c.width>=e.feed.scrollWidth-1,p=e.feed.scrollWidth<=c.width),e.scrollbarTrack&&(e.scrollbarTrack.style.display=p?"none":"block"),e.loop){z(e.prevSlideButton,!p,e.feed),z(e.nextSlideButton,!p,e.feed);return}z(e.prevSlideButton,!f&&!p,e.feed),z(e.nextSlideButton,!T&&!p,e.feed);},d=()=>{let c=m(),f=i.initialized?i.realSlides:W(e.slides),T=f.filter(p=>{let S=p.getBoundingClientRect(),E=20;return o?S.bottom>c.top+E&&S.top<c.bottom-E:S.right>c.left+E&&S.left<c.right-E});if(T.length&&T[0]){let p=f.indexOf(T[0]);if(p!==-1){r.currentSlideIndex=p;let S=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScroll?.({currentScroll:S,currentSlideIndex:r.currentSlideIndex});}}},v=c=>{if(!e.thumbs)return;let f=e.thumbs.indexOf(c);if(f===-1||!e.slides[f])return;r.currentSlideIndex=f,F(e.thumbs,f),r.isScrolling=true,r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.updateThumbTimeout=setTimeout(()=>{r.isScrolling=false;},C.THUMB_UPDATE_DELAY);let T=o?e.slides[f].offsetTop:e.slides[f].offsetLeft;u(T);},b=c=>{let f=i.initialized?i.realSlides:W(e.slides),T=O()?e.desktopSlidesPerScroll??1:e.mobileSlidesPerScroll??1,p=f.length;d();let S,E=false;if(c==="prev")if(e.loop&&i.initialized&&r.currentSlideIndex===0){let x=i.clonedSlides.filter(Y=>Y.getAttribute("data-lazer-clone")==="prepend");S=x[x.length-1],E=true;}else r.currentSlideIndex=Math.max(0,r.currentSlideIndex-T),S=f[r.currentSlideIndex];else e.loop&&i.initialized&&r.currentSlideIndex>=p-1?(S=i.clonedSlides.filter(Y=>Y.getAttribute("data-lazer-clone")==="append")[0],E=true):(r.currentSlideIndex=Math.min(p-1,r.currentSlideIndex+T),S=f[r.currentSlideIndex]);if(!S)return;let B=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollStart?.({currentScroll:B,target:S,direction:c});let D=o?S.offsetTop:S.offsetLeft;E?u(D,()=>{U(c,e,i,o,x=>{r.currentSlideIndex=x;},x=>{r.isLoopRepositioning=x;},n);}):u(D);},P=()=>{Te(e,o),n(),d(),r.isScrolling||F(e.thumbs,r.currentSlideIndex),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),r.scrollEndTimeout=setTimeout(()=>{r.isScrolling=false;let c=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollEnd?.({currentScroll:c,currentSlideIndex:r.currentSlideIndex});},C.SCROLL_END_DELAY);},I=()=>{r.ticking||(requestAnimationFrame(()=>{P(),r.ticking=false;}),r.ticking=true);},q=()=>{r.cachedFeedRect=null,A();},w=()=>{let{signal:c}=r.abortController;if(window.addEventListener("resize",q),e.feed.addEventListener("scroll",I,{passive:true,signal:c}),e.prevSlideButton&&e.prevSlideButton.addEventListener("click",()=>b("prev"),{signal:c}),e.nextSlideButton&&e.nextSlideButton.addEventListener("click",()=>b("next"),{signal:c}),e.thumbs?.length&&(e.thumbs[0]?.classList.add("active"),e.thumbs.forEach(f=>{f.addEventListener("click",()=>v(f),{signal:c});})),te(e.feed,()=>b("prev"),()=>b("next"),c,t),e.enableDragToScroll!==false){let f=e.loop&&i.initialized?[...i.realSlides,...i.clonedSlides]:e.slides;a=le({feed:e.feed,slides:f,abortSignal:c,smoothScrollTo:h,onDragEnd:T=>{if(T&&e.loop&&i.initialized){let p=T.getAttribute("data-lazer-clone");if(p){let S=p==="append"?"next":"prev";setTimeout(()=>{U(S,e,i,o,E=>{r.currentSlideIndex=E;},E=>{r.isLoopRepositioning=E;},n);},50);}}d(),F(e.thumbs,r.currentSlideIndex);},direction:t,loop:e.loop});}be(e,r,c),ue(e,r,c);},L=c=>{let f=i.initialized?i.realSlides:W(e.slides),T=Math.max(0,Math.min(c,f.length-1)),p=f[T];if(!p)return;r.currentSlideIndex=T,F(e.thumbs,T);let S=o?p.offsetTop:p.offsetLeft;u(S);},A=()=>{r.cachedFeedRect=null,Z(e,o,O()),Q(e,m(),o),n(),e.marquee&&!r.marqueePaused&&V(e,r);},R=()=>{K(r),ce(r,e),r.abortController.abort(),window.removeEventListener("resize",q),r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),a&&ie(a),pe(i),se(s),r.cachedFeedRect=null;},y=()=>{e.marquee?r.marqueePaused?k(r,e):V(e,r):e.autoplay&&j(e,r,b);},M=()=>{e.marquee?_(r,e):K(r);};return ee(e),Z(e,o,O()),e.marquee?de(e,r,s):(fe(e,i,o),e.autoplay&&j(e,r,b)),n(),w(),Q(e,m(),o),{goToIndex:L,refresh:A,unload:R,play:y,pause:M,next:()=>b("next"),prev:()=>b("prev")}};exports.createSlider=Pe;exports.easeInOutCubic=ye;exports.easeOutCubic=H;exports.easeOutExpo=N;exports.easeOutQuad=Le;exports.generateBullets=G;exports.generateThumbs=X;exports.linear=ge;
|
|
10
|
+
`,document.head.appendChild(t),t},Oe=(e,t)=>{t.initialized||(t.styleElement=se(),e.feed.style.display="flex",e.feed.style.willChange="transform",e.slides.forEach(o=>{let l=o.cloneNode(true);l.setAttribute("data-lazer-marquee-clone","true"),l.setAttribute("aria-hidden","true"),e.feed.appendChild(l),t.clonedSlides.push(l);}),t.initialized=true);},ce=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false);},Pe=(e,t)=>{se(),requestAnimationFrame(()=>{let o=e.feed.scrollWidth,l=e.marqueeSpeed??50,r=e.marqueeDirection??"left",s=o/2;if(s<=0||l<=0){console.warn("[lazer-slider] Invalid marquee values:",{distance:s,speed:l,scrollWidth:o});return}let p=`lazer-marquee-scroll ${s/l}s linear infinite ${r==="right"?"reverse":"normal"}`;e.feed.style.animation="none",e.feed.offsetWidth,e.feed.style.animation=p,e.feed.style.animationPlayState=t.marqueePaused?"paused":"running";});},G=(e,t)=>{Pe(e,t);},de=(e,t)=>{t.feed.style.animation="",t.feed.style.animationPlayState="",t.feed.style.transform="",t.feed.style.willChange="";},Y=(e,t)=>{e.marqueePaused=true,t.feed.style.animationPlayState="paused";},$=(e,t)=>{e.marqueePaused=false,t.feed.style.animationPlayState="running";},ue=(e,t,o)=>{e.marquee&&(Oe(e,o),G(e,t));},fe=(e,t,o)=>{!e.marquee||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>Y(t,e),{signal:o}),e.feed.addEventListener("mouseleave",()=>$(t,e),{signal:o}),e.feed.addEventListener("touchstart",()=>Y(t,e),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>$(t,e),{signal:o}));};var me=e=>({initialized:false,clonedSlides:[],realSlides:[...e],clonesPerSide:0}),qe=e=>{let t=z()?e.desktopSlidesPerView:e.mobileSlidesPerView;return !t||t==="auto"?1:Math.ceil(t)},pe=(e,t,o)=>{if(!e.loop||t.initialized)return;let l=t.realSlides,r=qe(e);t.clonesPerSide=r;for(let s=l.length-r;s<l.length;s++){let i=l[s];if(!i)continue;let a=i.cloneNode(true);a.setAttribute("data-lazer-clone","prepend"),a.setAttribute("aria-hidden","true"),e.feed.insertBefore(a,e.feed.firstChild),t.clonedSlides.push(a);}for(let s=0;s<r;s++){let i=l[s];if(!i)continue;let a=i.cloneNode(true);a.setAttribute("data-lazer-clone","append"),a.setAttribute("aria-hidden","true"),e.feed.appendChild(a),t.clonedSlides.push(a);}requestAnimationFrame(()=>{let s=l[0];s&&(o?e.feed.scrollTop=s.offsetTop:e.feed.scrollLeft=s.offsetLeft);}),t.initialized=true;},Se=(e,t,o,l,r,s,i)=>{if(!t.loop||!o.initialized)return;s(true);let a=o.realSlides,p=a.length;if(e==="next"){let u=a[0];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(0);}else {let u=a[p-1];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(p-1);}requestAnimationFrame(()=>{requestAnimationFrame(()=>{s(false),i();});});},he=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false,e.clonesPerSide=0);};var K=(e,t,o)=>{if(t.autoplayIntervalId)return;let l=e.autoplayInterval??3e3;t.autoplayIntervalId=setInterval(()=>{t.autoplayPaused||o("next");},l);},Q=e=>{e.autoplayIntervalId&&(clearInterval(e.autoplayIntervalId),e.autoplayIntervalId=null);},be=e=>{e.autoplayPaused=true;},Te=e=>{e.autoplayPaused=false;},ve=(e,t,o)=>{!e.autoplay||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>be(t),{signal:o}),e.feed.addEventListener("mouseleave",()=>Te(t),{signal:o}),e.feed.addEventListener("touchstart",()=>be(t),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>Te(t),{signal:o}));};var J=(e,t,o)=>{if(e.scrollbarThumb)if(o){let l=t.height/e.feed.scrollHeight*100;e.scrollbarThumb.style.height=`${l}%`,e.scrollbarThumb.style.width="";}else {let l=t.width/e.feed.scrollWidth*100;e.scrollbarThumb.style.width=`${l}%`,e.scrollbarThumb.style.height="";}},Ee=(e,t)=>{if(!(!e.scrollbarThumb||!e.scrollbarTrack))if(t){let o=e.scrollbarTrack.getBoundingClientRect().height,l=e.scrollbarThumb.getBoundingClientRect().height,r=o-l,s=e.feed.scrollHeight-e.feed.clientHeight,i=s>0?e.feed.scrollTop/s:0;e.scrollbarThumb.style.transform=`translateY(${r*i}px)`;}else {let o=e.scrollbarTrack.getBoundingClientRect().width,l=e.scrollbarThumb.getBoundingClientRect().width,r=o-l,s=e.feed.scrollWidth-e.feed.clientWidth,i=s>0?e.feed.scrollLeft/s:0;e.scrollbarThumb.style.transform=`translateX(${r*i}px)`;}};var Z=(e,t,o,l=B,r,s)=>{let i=o?e.scrollTop:e.scrollLeft,a=Math.abs(t-i),p=Math.min(O.MAX_DURATION,Math.max(O.MIN_DURATION,a/O.SPEED_FACTOR)),u=performance.now(),b=n=>{if(s?.cancelled)return;let f=(n-u)/p,v=Math.min(f,1),T=l(v),R=i+(t-i)*T;o?e.scrollTop=R:e.scrollLeft=R,v<1?requestAnimationFrame(b):(o?e.scrollTop=t:e.scrollLeft=t,r?.());};requestAnimationFrame(b);},k=e=>e.filter(t=>t.offsetParent!==null),ee=(e,t,o)=>{let l=o?e.desktopSlidesPerView:e.mobileSlidesPerView,r=e.slideGap??0;if(r>0&&(e.feed.style.gap=`${r}px`),!l||l==="auto"){e.slides.forEach(a=>{a.style.flex="",a.style.minWidth="",a.style.minHeight="";});return}let i=`calc((100% - ${r*(l-1)}px) / ${l})`;t?e.slides.forEach(a=>{a.style.flex=`0 0 ${i}`,a.style.minHeight=i,a.style.minWidth="";}):e.slides.forEach(a=>{a.style.flex=`0 0 ${i}`,a.style.minWidth=i,a.style.minHeight="";});},ye=(e,t,o,l)=>{let r=l?e.clientHeight:e.clientWidth;return !t||o!==r?{rect:e.getBoundingClientRect(),size:r}:{rect:t,size:o}};var Ne=e=>{if(!e.feed)throw new Error("lazer-slider: feed element is required");if(!e.slides?.length)throw new Error("lazer-slider: slides array is required and must not be empty");if(e.feed.id||(e.feed.id=`lazer-slider-feed-${Math.random().toString(36).substr(2,9)}`),e.bulletsContainer&&!e.thumbs){let c=X({bulletsContainer:e.bulletsContainer,slides:e.slides,bulletClass:e.bulletsClass??"slider-bullet",bulletActiveClass:e.bulletsActiveClass??"active",feedId:e.feed.id});e.thumbs=c;}if(e.thumbsContainer&&!e.thumbs){let c=j({thumbsContainer:e.thumbsContainer,slides:e.slides,thumbClass:e.thumbsClass??"slider-thumb",thumbActiveClass:e.thumbsActiveClass??"active",feedId:e.feed.id,thumbImageSelector:e.thumbImageSelector??"img",thumbSize:e.thumbSize});e.thumbs=c;}let t=e.direction??"horizontal",o=t==="vertical",l=e.easing??B,r={currentSlideIndex:0,isScrolling:false,ticking:false,cachedFeedRect:null,lastWidth:0,updateThumbTimeout:null,scrollEndTimeout:null,abortController:new AbortController,autoplayIntervalId:null,autoplayPaused:false,marqueePaused:false,isLoopRepositioning:false},s=null,i=me(e.slides),a=ae(),p={cancelled:false},u=null,b=()=>{let c=ye(e.feed,r.cachedFeedRect,r.lastWidth,o);return r.cachedFeedRect=c.rect,r.lastWidth=c.size,c.rect},n=(c,d)=>{Z(e.feed,c,o,l,d);},f=(c,d)=>{p.cancelled=true,p={cancelled:false},Z(e.feed,c,o,d??l,void 0,p);},v=()=>{if(r.isLoopRepositioning)return;let c=b(),d,S,m;if(o?(d=e.feed.scrollTop<=1,S=e.feed.scrollTop+c.height>=e.feed.scrollHeight-1,m=e.feed.scrollHeight<=c.height):(d=e.feed.scrollLeft<=1,S=e.feed.scrollLeft+c.width>=e.feed.scrollWidth-1,m=e.feed.scrollWidth<=c.width),e.scrollbarTrack&&(e.scrollbarTrack.style.display=m?"none":"block"),e.loop){_(e.prevSlideButton,!m,e.feed),_(e.nextSlideButton,!m,e.feed);return}_(e.prevSlideButton,!d&&!m,e.feed),_(e.nextSlideButton,!S&&!m,e.feed);},T=()=>{let c=b(),d=i.initialized?i.realSlides:k(e.slides),S=d.filter(m=>{let h=m.getBoundingClientRect(),L=20;return o?h.bottom>c.top+L&&h.top<c.bottom-L:h.right>c.left+L&&h.left<c.right-L});if(S.length&&S[0]){let m=d.indexOf(S[0]);if(m!==-1){r.currentSlideIndex=m;let h=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScroll?.({currentScroll:h,currentSlideIndex:r.currentSlideIndex});}}},R=c=>{if(!e.thumbs)return;let d=e.thumbs.indexOf(c);if(d===-1||!e.slides[d])return;r.currentSlideIndex=d,F(e.thumbs,d),r.isScrolling=true,r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.updateThumbTimeout=setTimeout(()=>{r.isScrolling=false;},O.THUMB_UPDATE_DELAY);let S=o?e.slides[d].offsetTop:e.slides[d].offsetLeft;n(S);},A=c=>{let d=i.initialized?i.realSlides:k(e.slides),S=z()?e.desktopSlidesPerScroll??1:e.mobileSlidesPerScroll??1,m=d.length;T();let h,L=false;if(c==="prev")if(e.loop&&i.initialized&&r.currentSlideIndex===0){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="prepend");h=g[g.length-1],L=true;}else r.currentSlideIndex=Math.max(0,r.currentSlideIndex-S),h=d[r.currentSlideIndex];else e.loop&&i.initialized&&r.currentSlideIndex>=m-1?(h=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="append")[0],L=true):(r.currentSlideIndex=Math.min(m-1,r.currentSlideIndex+S),h=d[r.currentSlideIndex]);if(!h)return;let w=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollStart?.({currentScroll:w,target:h,direction:c});let x=o?h.offsetTop:h.offsetLeft;L?n(x,()=>{Se(c,e,i,o,g=>{r.currentSlideIndex=g;},g=>{r.isLoopRepositioning=g;},v);}):n(x);},V=()=>{Ee(e,o),v(),T(),r.isScrolling||F(e.thumbs,r.currentSlideIndex),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),r.scrollEndTimeout=setTimeout(()=>{r.isScrolling=false;let c=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollEnd?.({currentScroll:c,currentSlideIndex:r.currentSlideIndex});},O.SCROLL_END_DELAY);},W=()=>{r.ticking||(requestAnimationFrame(()=>{V(),r.ticking=false;}),r.ticking=true);},P=()=>{let c=r.currentSlideIndex;r.cachedFeedRect=null;let d=()=>{let m=(i.initialized?i.realSlides:k(e.slides))[c];if(m){let h=o?m.offsetTop:m.offsetLeft;o?e.feed.scrollTop=h:e.feed.scrollLeft=h;}};d(),u&&clearTimeout(u),u=setTimeout(()=>{D(),d();},150);},y=()=>{let{signal:c}=r.abortController;window.addEventListener("resize",P),e.feed.addEventListener("scroll",W,{passive:true,signal:c}),e.prevSlideButton&&e.prevSlideButton.addEventListener("click",()=>A("prev"),{signal:c}),e.nextSlideButton&&e.nextSlideButton.addEventListener("click",()=>A("next"),{signal:c}),e.thumbs?.length&&(e.thumbs[0]?.classList.add("active"),e.thumbs.forEach(d=>{d.addEventListener("click",()=>R(d),{signal:c});})),re(e.feed,()=>A("prev"),()=>A("next"),c,t),e.enableDragToScroll!==false&&(s=ie({feed:e.feed,slides:e.slides,abortSignal:c,smoothScrollTo:f,onDragEnd:d=>{let S=d?.getAttribute("data-lazer-clone");if(!!(S&&e.loop&&i.initialized)&&d){let h=i.realSlides,L=0,w;if(S==="prepend"){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="prepend").indexOf(d);L=h.length-i.clonesPerSide+g,w=h[L];}else if(S==="append"){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="append").indexOf(d);L=g,w=h[g];}if(w){r.currentSlideIndex=L;let x=o?w.offsetTop:w.offsetLeft;setTimeout(()=>{p.cancelled=true,o?e.feed.scrollTop=x:e.feed.scrollLeft=x;},O.MIN_DURATION),F(e.thumbs,r.currentSlideIndex);}}else T(),F(e.thumbs,r.currentSlideIndex);},direction:t,loop:e.loop})),ve(e,r,c),fe(e,r,c);},I=c=>{let d=i.initialized?i.realSlides:k(e.slides),S=Math.max(0,Math.min(c,d.length-1)),m=d[S];if(!m)return;r.currentSlideIndex=S,F(e.thumbs,S);let h=o?m.offsetTop:m.offsetLeft;n(h);},D=()=>{r.cachedFeedRect=null,ee(e,o,z()),J(e,b(),o),v(),e.marquee&&!r.marqueePaused&&G(e,r);},M=()=>{Q(r),de(r,e),r.abortController.abort(),window.removeEventListener("resize",P),r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),u&&clearTimeout(u),s&&ne(s),he(i),ce(a),r.cachedFeedRect=null;},E=()=>{e.marquee?r.marqueePaused?$(r,e):G(e,r):e.autoplay&&K(e,r,A);},H=()=>{e.marquee?Y(r,e):Q(r);};return te(e),ee(e,o,z()),e.marquee?ue(e,r,a):(pe(e,i,o),e.autoplay&&K(e,r,A)),v(),y(),J(e,b(),o),{goToIndex:I,refresh:D,unload:M,play:E,pause:H,next:()=>A("next"),prev:()=>A("prev")}};exports.createSlider=Ne;exports.easeInOutCubic=ge;exports.easeOutCubic=N;exports.easeOutExpo=B;exports.easeOutQuad=Ae;exports.generateBullets=X;exports.generateThumbs=j;exports.linear=Me;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var O={MIN_DURATION:400,MAX_DURATION:1e3,SPEED_FACTOR:1.5,SCROLL_END_DELAY:50,THUMB_UPDATE_DELAY:500},Le="(min-width: 64rem)",z=()=>window.matchMedia(Le).matches;var B=e=>e===1?1:1-Math.pow(2,-10*e),N=e=>1-Math.pow(1-e,3),ge=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,Ae=e=>1-(1-e)*(1-e),Me=e=>e;var xe=()=>`slider-${Math.random().toString(36).substring(2,9)}`,te=e=>{let{feed:t,prevSlideButton:o,nextSlideButton:l,thumbs:r,slides:s}=e;t.id||(t.id=xe()),t.setAttribute("role","region"),t.setAttribute("aria-label","Carousel"),t.setAttribute("aria-roledescription","carousel"),t.removeAttribute("tabindex"),s.forEach((i,a)=>{i.setAttribute("role","group"),i.setAttribute("aria-roledescription","slide"),i.setAttribute("aria-label",`Slide ${a+1} of ${s.length}`);}),o&&(o.setAttribute("aria-label","Previous slide"),o.setAttribute("aria-controls",t.id),o.setAttribute("tabindex","0"),o.tagName!=="BUTTON"&&o.setAttribute("role","button")),l&&(l.setAttribute("aria-label","Next slide"),l.setAttribute("aria-controls",t.id),l.setAttribute("tabindex","0"),l.tagName!=="BUTTON"&&l.setAttribute("role","button")),r?.length&&r.forEach((i,a)=>{i.tagName!=="BUTTON"&&i.setAttribute("role","button"),i.setAttribute("aria-label",`Go to slide ${a+1}`),i.setAttribute("tabindex","0"),i.setAttribute("aria-controls",t.id);});},_=(e,t,o)=>{if(!e)return;!t&&e===document.activeElement&&o&&o.focus();let l="opacity 0.3s ease",r=t?"1":"0";Object.assign(e.style,{opacity:r,transition:l,pointerEvents:t?"auto":"none"}),t?(e.removeAttribute("aria-hidden"),e.setAttribute("tabindex","0")):(e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex","-1")),t?e.style.visibility="visible":setTimeout(()=>{e.style.opacity==="0"&&(e.style.visibility="hidden");},300);},F=(e,t,o="active")=>{e?.length&&e.forEach((l,r)=>{let s=r===t;l.classList.toggle(o,s),l.setAttribute("aria-selected",s.toString());});},re=(e,t,o,l,r="horizontal")=>{let s=r==="vertical",i=s?"ArrowUp":"ArrowLeft",a=s?"ArrowDown":"ArrowRight";e.addEventListener("keydown",p=>{switch(p.key){case i:p.preventDefault(),t();break;case a:p.preventDefault(),o();break}},{signal:l}),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0");};var C={FRICTION:.94,MIN_VELOCITY:.3,MOMENTUM_RATIO:.8,VELOCITY_SMOOTHING:.4,EDGE_RESISTANCE:.3,MAX_EDGE_OVERSCROLL:100,SHORT_SWIPE_VELOCITY:.5,BOUNCE_DURATION:400},Ie=()=>({isDragging:false,startX:0,startY:0,startScrollLeft:0,startScrollTop:0,velocity:0,lastX:0,lastY:0,lastTime:0,momentumId:null}),De=()=>({...Ie(),velocityHistory:[],dragDistance:0,dragStartTime:0}),U=(e,t,o="horizontal")=>{let l=e.getBoundingClientRect(),r=o==="vertical",s=r?l.top:l.left,i=null,a=1/0;for(let p of t){if(p.offsetParent===null)continue;let u=p.getBoundingClientRect(),b=r?u.top:u.left,n=Math.abs(s-b);n<a&&(a=n,i=p);}return i},Ce=(e,t,o,l="horizontal")=>{let r=e.getBoundingClientRect(),s=l==="vertical",i=s?r.top:r.left,a=t.filter(f=>f.offsetParent!==null);if(a.length===0)return null;let p=0,u=1/0;a.forEach((f,v)=>{let T=f.getBoundingClientRect(),R=s?T.top:T.left,A=Math.abs(i-R);A<u&&(u=A,p=v);});let b=2,n=p;return Math.abs(o)>b&&(o>0?n=Math.min(p+1,a.length-1):n=Math.max(p-1,0)),a[n]??null},He=e=>{if(e.length===0)return 0;let t=0,o=0;return e.forEach((l,r)=>{let s=r+1;t+=l*s,o+=s;}),t/o},we=(e,t,o,l,r,s="horizontal",i=false)=>{let a=s==="vertical",p=e.velocity*C.MOMENTUM_RATIO,u=()=>{if(Math.abs(p)<C.MIN_VELOCITY){e.momentumId=null;let v=U(t,o,s);if(v){let T=a?v.offsetTop:v.offsetLeft;l(T,N);}r?.(v);return}let b=a?t.scrollHeight-t.clientHeight:t.scrollWidth-t.clientWidth,f=(a?t.scrollTop:t.scrollLeft)+p;i||(f<0||f>b)&&(p*=.5),a?t.scrollTop=Math.max(0,Math.min(b,f)):t.scrollLeft=Math.max(0,Math.min(b,f)),p*=C.FRICTION,e.momentumId=requestAnimationFrame(u);};e.momentumId=requestAnimationFrame(u);},oe=e=>"touches"in e?e.touches[0]?.clientX??0:e.clientX,le=e=>"touches"in e?e.touches[0]?.clientY??0:e.clientY,Re=(e,t)=>t==="vertical"?le(e):oe(e),ie=e=>{let {feed:t,slides:o,abortSignal:l,smoothScrollTo:r,onDragEnd:s,direction:i="horizontal",loop:a=false,touchRatio:p=1,shortSwipeThreshold:u=300,swipeDistanceThreshold:b=10}=e,n=De(),f=i==="vertical",v=()=>{if(!a)return o;let y=[],I=t.children;for(let D=0;D<I.length;D++){let M=I[D];(o.includes(M)||M.hasAttribute("data-lazer-clone"))&&y.push(M);}return y.length>0?y:o},T=0,A=()=>{T=f?t.scrollHeight-t.clientHeight:t.scrollWidth-t.clientWidth,f?t.clientHeight:t.clientWidth;},V=y=>{n.momentumId!==null&&(cancelAnimationFrame(n.momentumId),n.momentumId=null),A(),n.isDragging=true,n.startX=oe(y),n.startY=le(y),n.startScrollLeft=t.scrollLeft,n.startScrollTop=t.scrollTop,n.velocity=0,n.lastX=n.startX,n.lastY=n.startY,n.lastTime=performance.now(),n.velocityHistory=[],n.dragDistance=0,n.dragStartTime=performance.now(),t.style.userSelect="none",t.style.cursor="grabbing",t.classList.add("is-dragging"),y.type==="mousedown"&&y.preventDefault();},W=y=>{if(!n.isDragging)return;let I=Re(y,i),D=f?n.startY:n.startX,M=f?n.lastY:n.lastX,E=f?n.startScrollTop:n.startScrollLeft,H=performance.now(),c=H-n.lastTime,d=(D-I)*p,S=E+d;if(n.dragDistance=Math.abs(d),!a){if(S<0){let m=Math.abs(S),h=1-Math.min(m/C.MAX_EDGE_OVERSCROLL,1)*(1-C.EDGE_RESISTANCE);S=-m*h;}else if(S>T){let m=S-T,h=1-Math.min(m/C.MAX_EDGE_OVERSCROLL,1)*(1-C.EDGE_RESISTANCE);S=T+m*h;}}if(f?t.scrollTop=S:t.scrollLeft=S,c>0){let m=(M-I)/c*16;if(n.velocityHistory.length>0){let h=n.velocity;n.velocity=h*(1-C.VELOCITY_SMOOTHING)+m*C.VELOCITY_SMOOTHING;}else n.velocity=m;n.velocityHistory.push(m),n.velocityHistory.length>5&&n.velocityHistory.shift();}f?n.lastY=I:n.lastX=I,n.lastTime=H,y.type==="touchmove"&&y.preventDefault();},P=()=>{if(!n.isDragging)return;n.isDragging=false,t.style.userSelect="",t.style.cursor="",t.classList.remove("is-dragging");let I=performance.now()-n.dragStartTime<u&&n.dragDistance>b,D=He(n.velocityHistory),M=v();if(!a){let E=f?t.scrollTop:t.scrollLeft;if(E<0||E>T){let H=E<0?0:T,c=E,d=performance.now(),S=()=>{let m=performance.now()-d,h=Math.min(m/C.BOUNCE_DURATION,1),L=N(h),w=c+(H-c)*L;if(f?t.scrollTop=w:t.scrollLeft=w,h<1)requestAnimationFrame(S);else {let x=U(t,M,i);if(x){let g=f?x.offsetTop:x.offsetLeft;r(g,N);}s?.(x);}};requestAnimationFrame(S);return}}if(I||Math.abs(D)>C.SHORT_SWIPE_VELOCITY){let E=Ce(t,M,D,i);if(E){let H=f?E.offsetTop:E.offsetLeft;r(H,N),s?.(E);}else s?.(null);}else if(Math.abs(n.velocity)>1&&!n.isLoopDragHandled)we(n,t,M,r,s,i,a);else {let E=U(t,M,i);if(!n.isLoopDragHandled){if(E){let H=f?E.offsetTop:E.offsetLeft;r(H,N);}s?.(E);}}};return t.addEventListener("mousedown",V,{signal:l}),document.addEventListener("mousemove",W,{signal:l}),document.addEventListener("mouseup",P,{signal:l}),t.addEventListener("touchstart",V,{passive:true,signal:l}),t.addEventListener("touchmove",W,{passive:false,signal:l}),t.addEventListener("touchend",P,{signal:l}),t.addEventListener("touchcancel",P,{signal:l}),document.addEventListener("mouseleave",P,{signal:l}),t.style.cursor="grab",n},ne=e=>{e.momentumId!==null&&(cancelAnimationFrame(e.momentumId),e.momentumId=null);};var X=({bulletsContainer:e,slides:t,bulletClass:o,bulletActiveClass:l,feedId:r})=>{if(!e||!(e instanceof HTMLElement))throw new Error("Invalid bulletsContainer: must be a valid HTMLElement");if(!Array.isArray(t)||t.length===0)throw new Error("Invalid slides: must be a non-empty array");if(!r||typeof r!="string")throw new Error("Invalid feedId: must be a non-empty string");if(!o||typeof o!="string")throw new Error("Invalid bulletClass: must be a non-empty string");e.innerHTML="",e.setAttribute("role","tablist"),e.setAttribute("aria-label","Slide navigation");let s=t.map((a,p)=>({slide:a,originalIndex:p})).filter(({slide:a})=>a.offsetParent!==null);return s.length===0?(console.warn("No visible slides found"),[]):s.map(({slide:a,originalIndex:p},u)=>{let b=document.createElement("button");return b.type="button",b.classList.add(o),u===0&&b.classList.add(l),b.setAttribute("role","tab"),b.setAttribute("aria-selected",u===0?"true":"false"),b.setAttribute("aria-controls",r),b.setAttribute("aria-label",`Go to slide ${u+1}`),b.setAttribute("data-slide-index",String(u)),e.appendChild(b),b})};var j=({thumbsContainer:e,slides:t,thumbClass:o,thumbActiveClass:l,feedId:r,thumbImageSelector:s="img",thumbSize:i})=>{if(!e||!(e instanceof HTMLElement))throw new Error("Invalid thumbsContainer: must be a valid HTMLElement");if(!Array.isArray(t)||t.length===0)throw new Error("Invalid slides: must be a non-empty array");if(!r||typeof r!="string")throw new Error("Invalid feedId: must be a non-empty string");if(!o||typeof o!="string")throw new Error("Invalid thumbClass: must be a non-empty string");e.innerHTML="",e.setAttribute("role","tablist"),e.setAttribute("aria-label","Slide thumbnails");let a=t.map((u,b)=>({slide:u,originalIndex:b})).filter(({slide:u})=>u.offsetParent!==null);return a.length===0?(console.warn("No visible slides found"),[]):a.map(({slide:u,originalIndex:b},n)=>{let f=document.createElement("button");f.type="button",f.classList.add(o),n===0&&f.classList.add(l);let v=u.querySelector(s);if(v?.src){let T=document.createElement("img");T.src=v.src,T.alt=v.alt||`Slide ${n+1} thumbnail`,T.draggable=false,i&&(T.style.width=`${i.width}px`,T.style.height=`${i.height}px`,T.style.objectFit="cover"),f.appendChild(T);}return f.setAttribute("role","tab"),f.setAttribute("aria-selected",n===0?"true":"false"),f.setAttribute("aria-controls",r),f.setAttribute("aria-label",`Go to slide ${n+1}`),f.setAttribute("data-slide-index",String(n)),e.appendChild(f),f})};var ae=()=>({initialized:false,clonedSlides:[],styleElement:null}),se=()=>{let e=document.getElementById("lazer-marquee-keyframes");if(e)return e;let t=document.createElement("style");return t.id="lazer-marquee-keyframes",t.textContent=`
|
|
2
2
|
@keyframes lazer-marquee-scroll {
|
|
3
3
|
0% {
|
|
4
4
|
transform: translateX(0);
|
|
@@ -7,4 +7,4 @@ var C={MIN_DURATION:400,MAX_DURATION:1e3,SPEED_FACTOR:1.5,SCROLL_END_DELAY:50,TH
|
|
|
7
7
|
transform: translateX(-50%);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
`,document.head.appendChild(t),t},we=(e,t)=>{t.initialized||(t.styleElement=ae(),e.feed.style.display="flex",e.feed.style.willChange="transform",e.slides.forEach(o=>{let l=o.cloneNode(true);l.setAttribute("data-lazer-marquee-clone","true"),l.setAttribute("aria-hidden","true"),e.feed.appendChild(l),t.clonedSlides.push(l);}),t.initialized=true);},se=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false);},Re=(e,t)=>{ae(),requestAnimationFrame(()=>{let o=e.feed.scrollWidth,l=e.marqueeSpeed??50,r=e.marqueeDirection??"left",a=o/2;if(a<=0||l<=0){console.warn("[lazer-slider] Invalid marquee values:",{distance:a,speed:l,scrollWidth:o});return}let m=`lazer-marquee-scroll ${a/l}s linear infinite ${r==="right"?"reverse":"normal"}`;e.feed.style.animation="none",e.feed.offsetWidth,e.feed.style.animation=m,e.feed.style.animationPlayState=t.marqueePaused?"paused":"running";});},V=(e,t)=>{Re(e,t);},ce=(e,t)=>{t.feed.style.animation="",t.feed.style.animationPlayState="",t.feed.style.transform="",t.feed.style.willChange="";},_=(e,t)=>{e.marqueePaused=true,t.feed.style.animationPlayState="paused";},k=(e,t)=>{e.marqueePaused=false,t.feed.style.animationPlayState="running";},de=(e,t,o)=>{e.marquee&&(we(e,o),V(e,t));},ue=(e,t,o)=>{!e.marquee||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>_(t,e),{signal:o}),e.feed.addEventListener("mouseleave",()=>k(t,e),{signal:o}),e.feed.addEventListener("touchstart",()=>_(t,e),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>k(t,e),{signal:o}));};var me=e=>({initialized:false,clonedSlides:[],realSlides:[...e],clonesPerSide:0}),Oe=e=>{let t=O()?e.desktopSlidesPerView:e.mobileSlidesPerView;return !t||t==="auto"?1:Math.ceil(t)},fe=(e,t,o)=>{if(!e.loop||t.initialized)return;let l=t.realSlides,r=Oe(e);t.clonesPerSide=r;for(let a=l.length-r;a<l.length;a++){let i=l[a];if(!i)continue;let s=i.cloneNode(true);s.setAttribute("data-lazer-clone","prepend"),s.setAttribute("aria-hidden","true"),e.feed.insertBefore(s,e.feed.firstChild),t.clonedSlides.push(s);}for(let a=0;a<r;a++){let i=l[a];if(!i)continue;let s=i.cloneNode(true);s.setAttribute("data-lazer-clone","append"),s.setAttribute("aria-hidden","true"),e.feed.appendChild(s),t.clonedSlides.push(s);}requestAnimationFrame(()=>{let a=l[0];a&&(o?e.feed.scrollTop=a.offsetTop:e.feed.scrollLeft=a.offsetLeft);}),t.initialized=true;},U=(e,t,o,l,r,a,i)=>{if(!t.loop||!o.initialized)return;a(true);let s=o.realSlides,m=s.length;if(e==="next"){let u=s[0];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(0);}else {let u=s[m-1];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(m-1);}requestAnimationFrame(()=>{requestAnimationFrame(()=>{a(false),i();});});},pe=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false,e.clonesPerSide=0);};var j=(e,t,o)=>{if(t.autoplayIntervalId)return;let l=e.autoplayInterval??3e3;t.autoplayIntervalId=setInterval(()=>{t.autoplayPaused||o("next");},l);},K=e=>{e.autoplayIntervalId&&(clearInterval(e.autoplayIntervalId),e.autoplayIntervalId=null);},Se=e=>{e.autoplayPaused=true;},he=e=>{e.autoplayPaused=false;},be=(e,t,o)=>{!e.autoplay||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>Se(t),{signal:o}),e.feed.addEventListener("mouseleave",()=>he(t),{signal:o}),e.feed.addEventListener("touchstart",()=>Se(t),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>he(t),{signal:o}));};var Q=(e,t,o)=>{if(e.scrollbarThumb)if(o){let l=t.height/e.feed.scrollHeight*100;e.scrollbarThumb.style.height=`${l}%`,e.scrollbarThumb.style.width="";}else {let l=t.width/e.feed.scrollWidth*100;e.scrollbarThumb.style.width=`${l}%`,e.scrollbarThumb.style.height="";}},Te=(e,t)=>{if(!(!e.scrollbarThumb||!e.scrollbarTrack))if(t){let o=e.scrollbarTrack.getBoundingClientRect().height,l=e.scrollbarThumb.getBoundingClientRect().height,r=o-l,a=e.feed.scrollHeight-e.feed.clientHeight,i=a>0?e.feed.scrollTop/a:0;e.scrollbarThumb.style.transform=`translateY(${r*i}px)`;}else {let o=e.scrollbarTrack.getBoundingClientRect().width,l=e.scrollbarThumb.getBoundingClientRect().width,r=o-l,a=e.feed.scrollWidth-e.feed.clientWidth,i=a>0?e.feed.scrollLeft/a:0;e.scrollbarThumb.style.transform=`translateX(${r*i}px)`;}};var J=(e,t,o,l=N,r)=>{let a=o?e.scrollTop:e.scrollLeft,i=Math.abs(t-a),s=Math.min(C.MAX_DURATION,Math.max(C.MIN_DURATION,i/C.SPEED_FACTOR)),m=performance.now(),u=h=>{let n=(h-m)/s,d=Math.min(n,1),v=l(d),b=a+(t-a)*v;o?e.scrollTop=b:e.scrollLeft=b,d<1?requestAnimationFrame(u):(o?e.scrollTop=t:e.scrollLeft=t,r?.());};requestAnimationFrame(u);},W=e=>e.filter(t=>t.offsetParent!==null),Z=(e,t,o)=>{let l=o?e.desktopSlidesPerView:e.mobileSlidesPerView,r=e.slideGap??0;if(r>0&&(e.feed.style.gap=`${r}px`),!l||l==="auto"){e.slides.forEach(s=>{s.style.flex="",s.style.minWidth="",s.style.minHeight="";});return}let i=`calc((100% - ${r*(l-1)}px) / ${l})`;t?e.slides.forEach(s=>{s.style.flex=`0 0 ${i}`,s.style.minHeight=i,s.style.minWidth="";}):e.slides.forEach(s=>{s.style.flex=`0 0 ${i}`,s.style.minWidth=i,s.style.minHeight="";});},ve=(e,t,o,l)=>{let r=l?e.clientHeight:e.clientWidth;return !t||o!==r?{rect:e.getBoundingClientRect(),size:r}:{rect:t,size:o}};var Pe=e=>{if(!e.feed)throw new Error("lazer-slider: feed element is required");if(!e.slides?.length)throw new Error("lazer-slider: slides array is required and must not be empty");if(e.feed.id||(e.feed.id=`lazer-slider-feed-${Math.random().toString(36).substr(2,9)}`),e.bulletsContainer&&!e.thumbs){let c=G({bulletsContainer:e.bulletsContainer,slides:e.slides,bulletClass:e.bulletsClass??"slider-bullet",bulletActiveClass:e.bulletsActiveClass??"active",feedId:e.feed.id});e.thumbs=c;}if(e.thumbsContainer&&!e.thumbs){let c=X({thumbsContainer:e.thumbsContainer,slides:e.slides,thumbClass:e.thumbsClass??"slider-thumb",thumbActiveClass:e.thumbsActiveClass??"active",feedId:e.feed.id,thumbImageSelector:e.thumbImageSelector??"img",thumbSize:e.thumbSize});e.thumbs=c;}let t=e.direction??"horizontal",o=t==="vertical",l=e.easing??N,r={currentSlideIndex:0,isScrolling:false,ticking:false,cachedFeedRect:null,lastWidth:0,updateThumbTimeout:null,scrollEndTimeout:null,abortController:new AbortController,autoplayIntervalId:null,autoplayPaused:false,marqueePaused:false,isLoopRepositioning:false},a=null,i=me(e.slides),s=ne(),m=()=>{let c=ve(e.feed,r.cachedFeedRect,r.lastWidth,o);return r.cachedFeedRect=c.rect,r.lastWidth=c.size,c.rect},u=(c,f)=>{J(e.feed,c,o,l,f);},h=(c,f)=>{J(e.feed,c,o,f??l);},n=()=>{if(r.isLoopRepositioning)return;let c=m(),f,T,p;if(o?(f=e.feed.scrollTop<=1,T=e.feed.scrollTop+c.height>=e.feed.scrollHeight-1,p=e.feed.scrollHeight<=c.height):(f=e.feed.scrollLeft<=1,T=e.feed.scrollLeft+c.width>=e.feed.scrollWidth-1,p=e.feed.scrollWidth<=c.width),e.scrollbarTrack&&(e.scrollbarTrack.style.display=p?"none":"block"),e.loop){z(e.prevSlideButton,!p,e.feed),z(e.nextSlideButton,!p,e.feed);return}z(e.prevSlideButton,!f&&!p,e.feed),z(e.nextSlideButton,!T&&!p,e.feed);},d=()=>{let c=m(),f=i.initialized?i.realSlides:W(e.slides),T=f.filter(p=>{let S=p.getBoundingClientRect(),E=20;return o?S.bottom>c.top+E&&S.top<c.bottom-E:S.right>c.left+E&&S.left<c.right-E});if(T.length&&T[0]){let p=f.indexOf(T[0]);if(p!==-1){r.currentSlideIndex=p;let S=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScroll?.({currentScroll:S,currentSlideIndex:r.currentSlideIndex});}}},v=c=>{if(!e.thumbs)return;let f=e.thumbs.indexOf(c);if(f===-1||!e.slides[f])return;r.currentSlideIndex=f,F(e.thumbs,f),r.isScrolling=true,r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.updateThumbTimeout=setTimeout(()=>{r.isScrolling=false;},C.THUMB_UPDATE_DELAY);let T=o?e.slides[f].offsetTop:e.slides[f].offsetLeft;u(T);},b=c=>{let f=i.initialized?i.realSlides:W(e.slides),T=O()?e.desktopSlidesPerScroll??1:e.mobileSlidesPerScroll??1,p=f.length;d();let S,E=false;if(c==="prev")if(e.loop&&i.initialized&&r.currentSlideIndex===0){let x=i.clonedSlides.filter(Y=>Y.getAttribute("data-lazer-clone")==="prepend");S=x[x.length-1],E=true;}else r.currentSlideIndex=Math.max(0,r.currentSlideIndex-T),S=f[r.currentSlideIndex];else e.loop&&i.initialized&&r.currentSlideIndex>=p-1?(S=i.clonedSlides.filter(Y=>Y.getAttribute("data-lazer-clone")==="append")[0],E=true):(r.currentSlideIndex=Math.min(p-1,r.currentSlideIndex+T),S=f[r.currentSlideIndex]);if(!S)return;let B=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollStart?.({currentScroll:B,target:S,direction:c});let D=o?S.offsetTop:S.offsetLeft;E?u(D,()=>{U(c,e,i,o,x=>{r.currentSlideIndex=x;},x=>{r.isLoopRepositioning=x;},n);}):u(D);},P=()=>{Te(e,o),n(),d(),r.isScrolling||F(e.thumbs,r.currentSlideIndex),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),r.scrollEndTimeout=setTimeout(()=>{r.isScrolling=false;let c=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollEnd?.({currentScroll:c,currentSlideIndex:r.currentSlideIndex});},C.SCROLL_END_DELAY);},I=()=>{r.ticking||(requestAnimationFrame(()=>{P(),r.ticking=false;}),r.ticking=true);},q=()=>{r.cachedFeedRect=null,A();},w=()=>{let{signal:c}=r.abortController;if(window.addEventListener("resize",q),e.feed.addEventListener("scroll",I,{passive:true,signal:c}),e.prevSlideButton&&e.prevSlideButton.addEventListener("click",()=>b("prev"),{signal:c}),e.nextSlideButton&&e.nextSlideButton.addEventListener("click",()=>b("next"),{signal:c}),e.thumbs?.length&&(e.thumbs[0]?.classList.add("active"),e.thumbs.forEach(f=>{f.addEventListener("click",()=>v(f),{signal:c});})),te(e.feed,()=>b("prev"),()=>b("next"),c,t),e.enableDragToScroll!==false){let f=e.loop&&i.initialized?[...i.realSlides,...i.clonedSlides]:e.slides;a=le({feed:e.feed,slides:f,abortSignal:c,smoothScrollTo:h,onDragEnd:T=>{if(T&&e.loop&&i.initialized){let p=T.getAttribute("data-lazer-clone");if(p){let S=p==="append"?"next":"prev";setTimeout(()=>{U(S,e,i,o,E=>{r.currentSlideIndex=E;},E=>{r.isLoopRepositioning=E;},n);},50);}}d(),F(e.thumbs,r.currentSlideIndex);},direction:t,loop:e.loop});}be(e,r,c),ue(e,r,c);},L=c=>{let f=i.initialized?i.realSlides:W(e.slides),T=Math.max(0,Math.min(c,f.length-1)),p=f[T];if(!p)return;r.currentSlideIndex=T,F(e.thumbs,T);let S=o?p.offsetTop:p.offsetLeft;u(S);},A=()=>{r.cachedFeedRect=null,Z(e,o,O()),Q(e,m(),o),n(),e.marquee&&!r.marqueePaused&&V(e,r);},R=()=>{K(r),ce(r,e),r.abortController.abort(),window.removeEventListener("resize",q),r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),a&&ie(a),pe(i),se(s),r.cachedFeedRect=null;},y=()=>{e.marquee?r.marqueePaused?k(r,e):V(e,r):e.autoplay&&j(e,r,b);},M=()=>{e.marquee?_(r,e):K(r);};return ee(e),Z(e,o,O()),e.marquee?de(e,r,s):(fe(e,i,o),e.autoplay&&j(e,r,b)),n(),w(),Q(e,m(),o),{goToIndex:L,refresh:A,unload:R,play:y,pause:M,next:()=>b("next"),prev:()=>b("prev")}};export{Pe as createSlider,ye as easeInOutCubic,H as easeOutCubic,N as easeOutExpo,Le as easeOutQuad,G as generateBullets,X as generateThumbs,ge as linear};
|
|
10
|
+
`,document.head.appendChild(t),t},Oe=(e,t)=>{t.initialized||(t.styleElement=se(),e.feed.style.display="flex",e.feed.style.willChange="transform",e.slides.forEach(o=>{let l=o.cloneNode(true);l.setAttribute("data-lazer-marquee-clone","true"),l.setAttribute("aria-hidden","true"),e.feed.appendChild(l),t.clonedSlides.push(l);}),t.initialized=true);},ce=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false);},Pe=(e,t)=>{se(),requestAnimationFrame(()=>{let o=e.feed.scrollWidth,l=e.marqueeSpeed??50,r=e.marqueeDirection??"left",s=o/2;if(s<=0||l<=0){console.warn("[lazer-slider] Invalid marquee values:",{distance:s,speed:l,scrollWidth:o});return}let p=`lazer-marquee-scroll ${s/l}s linear infinite ${r==="right"?"reverse":"normal"}`;e.feed.style.animation="none",e.feed.offsetWidth,e.feed.style.animation=p,e.feed.style.animationPlayState=t.marqueePaused?"paused":"running";});},G=(e,t)=>{Pe(e,t);},de=(e,t)=>{t.feed.style.animation="",t.feed.style.animationPlayState="",t.feed.style.transform="",t.feed.style.willChange="";},Y=(e,t)=>{e.marqueePaused=true,t.feed.style.animationPlayState="paused";},$=(e,t)=>{e.marqueePaused=false,t.feed.style.animationPlayState="running";},ue=(e,t,o)=>{e.marquee&&(Oe(e,o),G(e,t));},fe=(e,t,o)=>{!e.marquee||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>Y(t,e),{signal:o}),e.feed.addEventListener("mouseleave",()=>$(t,e),{signal:o}),e.feed.addEventListener("touchstart",()=>Y(t,e),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>$(t,e),{signal:o}));};var me=e=>({initialized:false,clonedSlides:[],realSlides:[...e],clonesPerSide:0}),qe=e=>{let t=z()?e.desktopSlidesPerView:e.mobileSlidesPerView;return !t||t==="auto"?1:Math.ceil(t)},pe=(e,t,o)=>{if(!e.loop||t.initialized)return;let l=t.realSlides,r=qe(e);t.clonesPerSide=r;for(let s=l.length-r;s<l.length;s++){let i=l[s];if(!i)continue;let a=i.cloneNode(true);a.setAttribute("data-lazer-clone","prepend"),a.setAttribute("aria-hidden","true"),e.feed.insertBefore(a,e.feed.firstChild),t.clonedSlides.push(a);}for(let s=0;s<r;s++){let i=l[s];if(!i)continue;let a=i.cloneNode(true);a.setAttribute("data-lazer-clone","append"),a.setAttribute("aria-hidden","true"),e.feed.appendChild(a),t.clonedSlides.push(a);}requestAnimationFrame(()=>{let s=l[0];s&&(o?e.feed.scrollTop=s.offsetTop:e.feed.scrollLeft=s.offsetLeft);}),t.initialized=true;},Se=(e,t,o,l,r,s,i)=>{if(!t.loop||!o.initialized)return;s(true);let a=o.realSlides,p=a.length;if(e==="next"){let u=a[0];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(0);}else {let u=a[p-1];u&&(l?t.feed.scrollTop=u.offsetTop:t.feed.scrollLeft=u.offsetLeft),r(p-1);}requestAnimationFrame(()=>{requestAnimationFrame(()=>{s(false),i();});});},he=e=>{e.initialized&&(e.clonedSlides.forEach(t=>{t.remove();}),e.clonedSlides=[],e.initialized=false,e.clonesPerSide=0);};var K=(e,t,o)=>{if(t.autoplayIntervalId)return;let l=e.autoplayInterval??3e3;t.autoplayIntervalId=setInterval(()=>{t.autoplayPaused||o("next");},l);},Q=e=>{e.autoplayIntervalId&&(clearInterval(e.autoplayIntervalId),e.autoplayIntervalId=null);},be=e=>{e.autoplayPaused=true;},Te=e=>{e.autoplayPaused=false;},ve=(e,t,o)=>{!e.autoplay||e.pauseOnHover===false||(e.feed.addEventListener("mouseenter",()=>be(t),{signal:o}),e.feed.addEventListener("mouseleave",()=>Te(t),{signal:o}),e.feed.addEventListener("touchstart",()=>be(t),{passive:true,signal:o}),e.feed.addEventListener("touchend",()=>Te(t),{signal:o}));};var J=(e,t,o)=>{if(e.scrollbarThumb)if(o){let l=t.height/e.feed.scrollHeight*100;e.scrollbarThumb.style.height=`${l}%`,e.scrollbarThumb.style.width="";}else {let l=t.width/e.feed.scrollWidth*100;e.scrollbarThumb.style.width=`${l}%`,e.scrollbarThumb.style.height="";}},Ee=(e,t)=>{if(!(!e.scrollbarThumb||!e.scrollbarTrack))if(t){let o=e.scrollbarTrack.getBoundingClientRect().height,l=e.scrollbarThumb.getBoundingClientRect().height,r=o-l,s=e.feed.scrollHeight-e.feed.clientHeight,i=s>0?e.feed.scrollTop/s:0;e.scrollbarThumb.style.transform=`translateY(${r*i}px)`;}else {let o=e.scrollbarTrack.getBoundingClientRect().width,l=e.scrollbarThumb.getBoundingClientRect().width,r=o-l,s=e.feed.scrollWidth-e.feed.clientWidth,i=s>0?e.feed.scrollLeft/s:0;e.scrollbarThumb.style.transform=`translateX(${r*i}px)`;}};var Z=(e,t,o,l=B,r,s)=>{let i=o?e.scrollTop:e.scrollLeft,a=Math.abs(t-i),p=Math.min(O.MAX_DURATION,Math.max(O.MIN_DURATION,a/O.SPEED_FACTOR)),u=performance.now(),b=n=>{if(s?.cancelled)return;let f=(n-u)/p,v=Math.min(f,1),T=l(v),R=i+(t-i)*T;o?e.scrollTop=R:e.scrollLeft=R,v<1?requestAnimationFrame(b):(o?e.scrollTop=t:e.scrollLeft=t,r?.());};requestAnimationFrame(b);},k=e=>e.filter(t=>t.offsetParent!==null),ee=(e,t,o)=>{let l=o?e.desktopSlidesPerView:e.mobileSlidesPerView,r=e.slideGap??0;if(r>0&&(e.feed.style.gap=`${r}px`),!l||l==="auto"){e.slides.forEach(a=>{a.style.flex="",a.style.minWidth="",a.style.minHeight="";});return}let i=`calc((100% - ${r*(l-1)}px) / ${l})`;t?e.slides.forEach(a=>{a.style.flex=`0 0 ${i}`,a.style.minHeight=i,a.style.minWidth="";}):e.slides.forEach(a=>{a.style.flex=`0 0 ${i}`,a.style.minWidth=i,a.style.minHeight="";});},ye=(e,t,o,l)=>{let r=l?e.clientHeight:e.clientWidth;return !t||o!==r?{rect:e.getBoundingClientRect(),size:r}:{rect:t,size:o}};var Ne=e=>{if(!e.feed)throw new Error("lazer-slider: feed element is required");if(!e.slides?.length)throw new Error("lazer-slider: slides array is required and must not be empty");if(e.feed.id||(e.feed.id=`lazer-slider-feed-${Math.random().toString(36).substr(2,9)}`),e.bulletsContainer&&!e.thumbs){let c=X({bulletsContainer:e.bulletsContainer,slides:e.slides,bulletClass:e.bulletsClass??"slider-bullet",bulletActiveClass:e.bulletsActiveClass??"active",feedId:e.feed.id});e.thumbs=c;}if(e.thumbsContainer&&!e.thumbs){let c=j({thumbsContainer:e.thumbsContainer,slides:e.slides,thumbClass:e.thumbsClass??"slider-thumb",thumbActiveClass:e.thumbsActiveClass??"active",feedId:e.feed.id,thumbImageSelector:e.thumbImageSelector??"img",thumbSize:e.thumbSize});e.thumbs=c;}let t=e.direction??"horizontal",o=t==="vertical",l=e.easing??B,r={currentSlideIndex:0,isScrolling:false,ticking:false,cachedFeedRect:null,lastWidth:0,updateThumbTimeout:null,scrollEndTimeout:null,abortController:new AbortController,autoplayIntervalId:null,autoplayPaused:false,marqueePaused:false,isLoopRepositioning:false},s=null,i=me(e.slides),a=ae(),p={cancelled:false},u=null,b=()=>{let c=ye(e.feed,r.cachedFeedRect,r.lastWidth,o);return r.cachedFeedRect=c.rect,r.lastWidth=c.size,c.rect},n=(c,d)=>{Z(e.feed,c,o,l,d);},f=(c,d)=>{p.cancelled=true,p={cancelled:false},Z(e.feed,c,o,d??l,void 0,p);},v=()=>{if(r.isLoopRepositioning)return;let c=b(),d,S,m;if(o?(d=e.feed.scrollTop<=1,S=e.feed.scrollTop+c.height>=e.feed.scrollHeight-1,m=e.feed.scrollHeight<=c.height):(d=e.feed.scrollLeft<=1,S=e.feed.scrollLeft+c.width>=e.feed.scrollWidth-1,m=e.feed.scrollWidth<=c.width),e.scrollbarTrack&&(e.scrollbarTrack.style.display=m?"none":"block"),e.loop){_(e.prevSlideButton,!m,e.feed),_(e.nextSlideButton,!m,e.feed);return}_(e.prevSlideButton,!d&&!m,e.feed),_(e.nextSlideButton,!S&&!m,e.feed);},T=()=>{let c=b(),d=i.initialized?i.realSlides:k(e.slides),S=d.filter(m=>{let h=m.getBoundingClientRect(),L=20;return o?h.bottom>c.top+L&&h.top<c.bottom-L:h.right>c.left+L&&h.left<c.right-L});if(S.length&&S[0]){let m=d.indexOf(S[0]);if(m!==-1){r.currentSlideIndex=m;let h=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScroll?.({currentScroll:h,currentSlideIndex:r.currentSlideIndex});}}},R=c=>{if(!e.thumbs)return;let d=e.thumbs.indexOf(c);if(d===-1||!e.slides[d])return;r.currentSlideIndex=d,F(e.thumbs,d),r.isScrolling=true,r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.updateThumbTimeout=setTimeout(()=>{r.isScrolling=false;},O.THUMB_UPDATE_DELAY);let S=o?e.slides[d].offsetTop:e.slides[d].offsetLeft;n(S);},A=c=>{let d=i.initialized?i.realSlides:k(e.slides),S=z()?e.desktopSlidesPerScroll??1:e.mobileSlidesPerScroll??1,m=d.length;T();let h,L=false;if(c==="prev")if(e.loop&&i.initialized&&r.currentSlideIndex===0){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="prepend");h=g[g.length-1],L=true;}else r.currentSlideIndex=Math.max(0,r.currentSlideIndex-S),h=d[r.currentSlideIndex];else e.loop&&i.initialized&&r.currentSlideIndex>=m-1?(h=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="append")[0],L=true):(r.currentSlideIndex=Math.min(m-1,r.currentSlideIndex+S),h=d[r.currentSlideIndex]);if(!h)return;let w=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollStart?.({currentScroll:w,target:h,direction:c});let x=o?h.offsetTop:h.offsetLeft;L?n(x,()=>{Se(c,e,i,o,g=>{r.currentSlideIndex=g;},g=>{r.isLoopRepositioning=g;},v);}):n(x);},V=()=>{Ee(e,o),v(),T(),r.isScrolling||F(e.thumbs,r.currentSlideIndex),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),r.scrollEndTimeout=setTimeout(()=>{r.isScrolling=false;let c=o?e.feed.scrollTop:e.feed.scrollLeft;e.onScrollEnd?.({currentScroll:c,currentSlideIndex:r.currentSlideIndex});},O.SCROLL_END_DELAY);},W=()=>{r.ticking||(requestAnimationFrame(()=>{V(),r.ticking=false;}),r.ticking=true);},P=()=>{let c=r.currentSlideIndex;r.cachedFeedRect=null;let d=()=>{let m=(i.initialized?i.realSlides:k(e.slides))[c];if(m){let h=o?m.offsetTop:m.offsetLeft;o?e.feed.scrollTop=h:e.feed.scrollLeft=h;}};d(),u&&clearTimeout(u),u=setTimeout(()=>{D(),d();},150);},y=()=>{let{signal:c}=r.abortController;window.addEventListener("resize",P),e.feed.addEventListener("scroll",W,{passive:true,signal:c}),e.prevSlideButton&&e.prevSlideButton.addEventListener("click",()=>A("prev"),{signal:c}),e.nextSlideButton&&e.nextSlideButton.addEventListener("click",()=>A("next"),{signal:c}),e.thumbs?.length&&(e.thumbs[0]?.classList.add("active"),e.thumbs.forEach(d=>{d.addEventListener("click",()=>R(d),{signal:c});})),re(e.feed,()=>A("prev"),()=>A("next"),c,t),e.enableDragToScroll!==false&&(s=ie({feed:e.feed,slides:e.slides,abortSignal:c,smoothScrollTo:f,onDragEnd:d=>{let S=d?.getAttribute("data-lazer-clone");if(!!(S&&e.loop&&i.initialized)&&d){let h=i.realSlides,L=0,w;if(S==="prepend"){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="prepend").indexOf(d);L=h.length-i.clonesPerSide+g,w=h[L];}else if(S==="append"){let g=i.clonedSlides.filter(q=>q.getAttribute("data-lazer-clone")==="append").indexOf(d);L=g,w=h[g];}if(w){r.currentSlideIndex=L;let x=o?w.offsetTop:w.offsetLeft;setTimeout(()=>{p.cancelled=true,o?e.feed.scrollTop=x:e.feed.scrollLeft=x;},O.MIN_DURATION),F(e.thumbs,r.currentSlideIndex);}}else T(),F(e.thumbs,r.currentSlideIndex);},direction:t,loop:e.loop})),ve(e,r,c),fe(e,r,c);},I=c=>{let d=i.initialized?i.realSlides:k(e.slides),S=Math.max(0,Math.min(c,d.length-1)),m=d[S];if(!m)return;r.currentSlideIndex=S,F(e.thumbs,S);let h=o?m.offsetTop:m.offsetLeft;n(h);},D=()=>{r.cachedFeedRect=null,ee(e,o,z()),J(e,b(),o),v(),e.marquee&&!r.marqueePaused&&G(e,r);},M=()=>{Q(r),de(r,e),r.abortController.abort(),window.removeEventListener("resize",P),r.updateThumbTimeout&&clearTimeout(r.updateThumbTimeout),r.scrollEndTimeout&&clearTimeout(r.scrollEndTimeout),u&&clearTimeout(u),s&&ne(s),he(i),ce(a),r.cachedFeedRect=null;},E=()=>{e.marquee?r.marqueePaused?$(r,e):G(e,r):e.autoplay&&K(e,r,A);},H=()=>{e.marquee?Y(r,e):Q(r);};return te(e),ee(e,o,z()),e.marquee?ue(e,r,a):(pe(e,i,o),e.autoplay&&K(e,r,A)),v(),y(),J(e,b(),o),{goToIndex:I,refresh:D,unload:M,play:E,pause:H,next:()=>A("next"),prev:()=>A("prev")}};export{Ne as createSlider,ge as easeInOutCubic,N as easeOutCubic,B as easeOutExpo,Ae as easeOutQuad,X as generateBullets,j as generateThumbs,Me as linear};
|
package/package.json
CHANGED