aero-slider
Version:
A lightweight, CSS-first slider library for the modern web
3 lines (2 loc) • 25.1 kB
JavaScript
/*! Aero Slider v1.0.0-beta.10 | git+https://github.com/Negative-Space-Dev/aero-slider */
var _e={loop:!1,autoplay:!1,autoplayInterval:5e3,draggable:!0,alignment:"center",maxDots:0,noDrag:"",perMove:0,direction:"ltr"},ie={slidesPerView:1,gap:0,aspectRatio:"16 / 9"},De=5,ye=.3,be=80,He=250,Re=300,Ee=100,ke=250,X="data-aero-slider-index",V="data-aero-slider-clone";function Fe(e,c,i,s={}){let t=s.debounceMs??100,v=s.maxWaitMs??250,o="",u=null,g=null;function a(){let h=getComputedStyle(e);return c.map(P=>h.getPropertyValue(P).trim()).join("\0")}function r(){u!==null&&(clearTimeout(u),u=null),g=null;let h=a();h!==o&&(o=h,i())}function A(){let h=Date.now();if(g===null&&(g=h),h-g>=v){r();return}u!==null&&clearTimeout(u),u=setTimeout(r,t)}return o=a(),window.addEventListener("resize",A),()=>{window.removeEventListener("resize",A),u!==null&&(clearTimeout(u),u=null)}}var ue=new WeakMap;function it(e){let c=ue.get(e);return c||(c=document.createElement("div"),c.style.cssText="position:absolute;visibility:hidden;pointer-events:none;height:0;padding:0;margin:0;border:0;top:0;left:0;",e.appendChild(c),ue.set(e,c)),c}function Oe(e){ue.get(e)?.remove(),ue.delete(e)}function G(e,c,i){let s=e.trim();if(!s||s==="0"||s==="0px")return 0;let t=s.match(/^(-?[\d.]+)px$/);if(t)return parseFloat(t[1]);let v=s.match(/^(-?[\d.]+)rem$/);if(v){let g=parseFloat(getComputedStyle(document.documentElement).fontSize)||16;return parseFloat(v[1])*g}if(s.endsWith("%")){let g=parseFloat(s);return Number.isFinite(g)?g/100*i:0}let o=it(c);o.style.width=s;let u=o.offsetWidth;return o.style.width="",u||0}function Ne(e,c,i,s,t,v=!0){if(i<=0||s<=0)return 0;let o=i;if(v){let g=c.getPropertyValue("--aero-layout-width").trim()||"100%";o=g==="100%"||g==="100vw"?i:G(g,e,i)}let u=(o-t*(s-1))/s;return u>0?u+t:0}function lt(e,c){let i=getComputedStyle(e),s=c?e.clientHeight:e.clientWidth;return c?{start:G(i.scrollPaddingBlockStart||i.scrollPaddingTop||"0",e,s),end:G(i.scrollPaddingBlockEnd||i.scrollPaddingBottom||"0",e,s)}:{start:G(i.scrollPaddingInlineStart||i.scrollPaddingLeft||"0",e,s),end:G(i.scrollPaddingInlineEnd||i.scrollPaddingRight||"0",e,s)}}function st(e,c,i){if(e.parentElement===c)return i?e.offsetTop:e.offsetLeft;let s=c.getBoundingClientRect(),t=e.getBoundingClientRect();return(i?c.scrollTop:c.scrollLeft)+(i?t.top-s.top:t.left-s.left)}function le(e,c,i,s){let t=lt(c,s),v=s?c.clientHeight:c.clientWidth,o=st(e,c,s),u=s?e.offsetHeight:e.offsetWidth;if(i==="center"){let g=t.start+(v-t.start-t.end)/2;return o+u/2-g}return i==="right"?o+u-v+t.end:o-t.start}var at=50,dt=2,ze=3;function Ve(e){let{track:c,state:i}=e,s=null,t=ze;function v(){let M=Math.ceil(e.config.slidesPerView)+dt;return Math.max(ze,Math.ceil(M/e.slideCount))}function o(){return t*e.slideCount*i.slideWidthPx}function u(){return(t+1)*e.slideCount*i.slideWidthPx}function g(M){i.isProgrammaticScroll=!0,i.suppressSettleEmit=!0,c.style.scrollBehavior="auto",c.style.scrollSnapType="none",e.setScrollPos(M),requestAnimationFrame(()=>{requestAnimationFrame(()=>{c.style.scrollBehavior="",c.style.scrollSnapType="",i.isProgrammaticScroll=!1})})}function a(){if(!i.loopModeActive||i.isProgrammaticScroll||i.isDragging)return;let M=i.slideWidthPx;if(M===0)return;let d=e.slideCount*M,f=o(),m=u(),S=e.getScrollPos(),b=2;if(S<f-b||S>=m+b){for(;S<f;)S+=d;for(;S>=m;)S-=d;g(S)}}function r(){s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null,a()},at)}function A(){s!==null&&(clearTimeout(s),s=null)}function h(){return e.getIndexFromScrollPos(e.getScrollPos())}function P(M){if(!e.isLoopEnabled()){i.loopModeActive&&x(M);return}t=v(),c.querySelectorAll(`[${V}]`).forEach(m=>m.remove());let{slides:d,slideCount:f}=e;for(let m=0;m<t;m++)for(let S=f-1;S>=0;S--){let b=d[S].cloneNode(!0);b.setAttribute(V,""),b.removeAttribute(X),c.prepend(b)}for(let m=0;m<t;m++)for(let S=0;S<f;S++){let b=d[S].cloneNode(!0);b.setAttribute(V,""),b.removeAttribute(X),c.append(b)}i.loopModeActive=!0,e.applySnapAlignment(),requestAnimationFrame(()=>{e.recalcSlideMetrics();let m=e.normalizeIndex(M);if(i.currentIndex=m,i.slideWidthPx===0)return;let S=e.slides[m],b=S?le(S,c,e.config.alignment,e.isVertical()):e.getScrollPosForLoopIndex(m);i.isProgrammaticScroll=!0,i.suppressSettleEmit=!0,c.style.scrollBehavior="auto",c.style.scrollSnapType="none",e.setScrollPos(b),requestAnimationFrame(()=>{requestAnimationFrame(()=>{c.style.scrollBehavior="",c.style.scrollSnapType="",i.isProgrammaticScroll=!1})})})}function x(M){A(),c.querySelectorAll(`[${V}]`).forEach(d=>d.remove()),i.loopModeActive=!1,e.recalcSlideMetrics(),i.currentIndex=Math.max(0,Math.min(M,e.getMaxIndex())),g(e.getScrollPosForIndex(i.currentIndex))}return{getLoopRealStart:o,getLoopRealEnd:u,getLoopIndexFromScroll:h,instantScrollTo:g,teleportIfNeeded:a,scheduleTeleport:r,setupLoopTrack:P,teardownLoopTrack:x,cancelTeleport:A}}function We(e,c,i,s,t){let{container:v,track:o,state:u}=e,g=!1,a=!1;function r(d){return e.isVertical()?d.clientY:d.clientX}function A(){return e.config.direction==="rtl"?-1:1}function h(d){if(d.button!==0||d.pointerType==="touch"||e.config.noDrag&&d.target.closest(e.config.noDrag))return;a=!1;let f=A(),m=r(d),S=e.getScrollPos(),b=S,T=null,C=0,W=m,L=performance.now(),_=!1,D=u.currentIndex;function k(){T=null,e.setScrollPos(b)}function U(H){let N=r(H);if(!_){if(Math.abs(N-m)<De)return;_=!0,a=!0,o.setPointerCapture(H.pointerId),u.isDragging=!0,u.suppressSettleEmit=!1,o.style.scrollBehavior="auto",o.style.scrollSnapType="none",v.classList.add("aero-slider--dragging"),e.emit("dragStart",{index:D}),s()}H.preventDefault(),b=S+(m-N)*f,T===null&&(T=requestAnimationFrame(k));let B=performance.now(),F=B-L;if(F>0){if(F<100){let R=(W-N)*f/F;C=ye*R+(1-ye)*C}else C*=.5;W=N,L=B}}function O(){if(o.removeEventListener("pointermove",U),o.removeEventListener("pointerup",O),o.removeEventListener("pointercancel",O),!_)return;u.isDragging=!1,v.classList.remove("aero-slider--dragging"),T!==null&&(cancelAnimationFrame(T),T=null,e.setScrollPos(b));let H=performance.now()-L;H>50&&(C*=Math.max(0,1-H/200));let N=e.getSlideSize();if(o.style.scrollBehavior="",N>0)if(u.loopModeActive){c.teleportIfNeeded();let B=e.getScrollPos()+C*be,F=e.getIndexFromScrollPos(B),R=e.normalizeIndex(F),j=e.getScrollPosForLoopIndex(R);u.isProgrammaticScroll=!0,u.suppressSettleEmit=!0,e.scrollToPos(j,"smooth"),R!==u.currentIndex&&(u.currentIndex=R,e.emit("slideChange",{index:u.currentIndex}),e.refreshPagination(),e.refreshNavState())}else{let B=e.getScrollPos()+C*be,F=e.getIndexFromScrollPos(B);i(F)}e.emit("dragEnd",{index:u.currentIndex,fromIndex:D}),e.config.autoplay&&t()}o.addEventListener("pointermove",U),o.addEventListener("pointerup",O),o.addEventListener("pointercancel",O)}function P(d){a&&(d.preventDefault(),d.stopPropagation(),a=!1)}function x(d){d.preventDefault()}function M(d){d!==g&&(d?(o.addEventListener("pointerdown",h),o.addEventListener("click",P,{capture:!0}),o.addEventListener("dragstart",x),g=!0):(o.removeEventListener("pointerdown",h),o.removeEventListener("click",P,{capture:!0}),o.removeEventListener("dragstart",x),g=!1))}return{setEnabled:M,isActive:()=>g}}function Be(e,c,i){let s=null,t=null,v=i,o=c;function u(){s&&(s.removeEventListener("click",v),s=null),t&&(t.removeEventListener("click",o),t=null)}function g(){u(),s=e.container.querySelector(".aero-slider__nav--prev"),t=e.container.querySelector(".aero-slider__nav--next");let r=e.config.direction==="rtl";v=r?c:i,o=r?i:c,s&&s.addEventListener("click",v),t&&t.addEventListener("click",o),a()}function a(){let r=e.getMaxIndex(),A=r>0,h=e.config.direction==="rtl",P=!A||!e.isLoopEnabled()&&e.state.currentIndex===0,x=!A||!e.isLoopEnabled()&&e.state.currentIndex>=r;s&&(s.disabled=h?x:P),t&&(t.disabled=h?P:x)}return{build:g,clear:u,refresh:a}}function qe(e,c){let i=null,s=null,t=null,v=[],o=!1,u=10,g=8;function a(d){let f=d.target.closest(".aero-slider__dot");if(!f||!i)return;let m=f.getAttribute("data-slide-index");m!==null&&c(Number(m))}function r(){if(i){i.removeEventListener("click",a),s?.remove(),s=null,t&&(t.style.display="");let d=i.querySelectorAll(".aero-slider__dot");for(let f=1;f<d.length;f++)d[f]?.remove();i.querySelectorAll(".aero-slider__pagination-label").forEach(f=>f.remove()),i=null}t=null,v=[],o=!1}function A(){return e.isLoopEnabled()?e.slideCount:e.getMaxIndex()+1}function h(){if(i=e.container.querySelector(".aero-slider__pagination"),!i||(t=i.querySelector(".aero-slider__dot"),!t))return;t.style.display==="none"&&(t.style.display=""),t.style.transform="",t.style.opacity="";let f=getComputedStyle(t),m=parseFloat(f.width);u=m>0?m:t.getBoundingClientRect().width||10;let S=getComputedStyle(i);g=parseInt(S.gap,10)||8,i.setAttribute("role","tablist"),i.addEventListener("click",a);let b=A(),T=e.config.maxDots;o=T>0&&b>T,s?.remove();let C=i.querySelectorAll(".aero-slider__dot");for(let L=1;L<C.length;L++)C[L]?.remove();if(i.querySelectorAll(".aero-slider__pagination-label").forEach(L=>L.remove()),o){i.classList.add("aero-slider__pagination--windowed");let L=T*u+(T-1)*g;i.style.setProperty("--pagination-width",`${L}px`),s=document.createElement("div"),s.className="aero-slider__pagination-track",t.style.display="none";for(let _=0;_<b;_++){let D=t.cloneNode(!0);D.style.display="",s.appendChild(D)}i.appendChild(s)}else{i.classList.remove("aero-slider__pagination--windowed"),i.style.removeProperty("--pagination-width"),t.style.display="";for(let L=1;L<b;L++){let _=t.cloneNode(!0);i.appendChild(_)}}v=Array.from((o&&s?s:i).querySelectorAll(".aero-slider__dot")),v.forEach((L,_)=>{L.setAttribute("role","tab"),L.setAttribute("data-slide-index",String(_)),L.setAttribute("aria-label",`Go to slide ${_+1}`)}),M()}function P(d,f,m,S){if(d<0||d>=f)return"aero-slider__dot--hidden";let b=d===0,T=d===f-1,C=d===1,W=d===f-2;return b&&!m?"aero-slider__dot--edge":C&&!m?"aero-slider__dot--near-edge":T&&!S?"aero-slider__dot--edge":W&&!S?"aero-slider__dot--near-edge":null}function x(d){d.classList.remove("aero-slider__dot--hidden","aero-slider__dot--edge","aero-slider__dot--near-edge")}function M(){let d=A(),f=e.state.currentIndex,m=e.config.maxDots;if(o&&m>0&&s){let S=Math.floor(m/2),b=u+g,T=f-S;T=Math.max(0,Math.min(T,d-m)),s.style.setProperty("--track-offset",`${-T*b}px`);let C=T===0,W=T>=d-m;v.forEach((L,_)=>{let D=_===f;L.classList.toggle("aero-slider__dot--active",D),L.setAttribute("aria-selected",String(D)),x(L);let k=P(_-T,m,C,W);k&&L.classList.add(k)})}else v.forEach((S,b)=>{let T=b===f;S.classList.toggle("aero-slider__dot--active",T),S.setAttribute("aria-selected",String(T)),x(S)})}return{build:h,clear:r,refresh:M}}function Ue(e,c,i){let s=!1;function t(o){let u=e.config.direction;u==="ttb"?o.key==="ArrowUp"?(o.preventDefault(),i()):o.key==="ArrowDown"&&(o.preventDefault(),c()):u==="rtl"?o.key==="ArrowRight"?(o.preventDefault(),i()):o.key==="ArrowLeft"&&(o.preventDefault(),c()):o.key==="ArrowLeft"?(o.preventDefault(),i()):o.key==="ArrowRight"&&(o.preventDefault(),c())}function v(o){o!==s&&(o?(e.container.setAttribute("tabindex","0"),e.container.addEventListener("keydown",t),s=!0):(e.container.removeAttribute("tabindex"),e.container.removeEventListener("keydown",t),s=!1))}return{setEnabled:v}}function Ye(e,c){let i=null,s=!1,t=null;function v(){e.config.autoplay&&(o(),i=setInterval(()=>{if(!e.state.loopModeActive&&e.state.currentIndex>=e.getMaxIndex()){o();return}c()},e.config.autoplayInterval),e.emit("autoplayStart",{}))}function o(){i!==null&&(clearInterval(i),i=null,e.emit("autoplayStop",{}))}function u(){o()}function g(){e.config.autoplay&&v()}function a(){t!==null&&(clearTimeout(t),t=null),o()}function r(){e.config.autoplay&&(t=setTimeout(()=>{t=null,e.config.autoplay&&v()},1e3))}function A(h){h!==s&&(h?(e.container.addEventListener("mouseenter",u),e.container.addEventListener("mouseleave",g),e.track.addEventListener("touchstart",a,{passive:!0}),e.track.addEventListener("touchend",r,{passive:!0}),e.track.addEventListener("touchcancel",r,{passive:!0}),s=!0):(e.container.removeEventListener("mouseenter",u),e.container.removeEventListener("mouseleave",g),e.track.removeEventListener("touchstart",a),e.track.removeEventListener("touchend",r),e.track.removeEventListener("touchcancel",r),t!==null&&(clearTimeout(t),t=null),s=!1))}return{start:v,pause:o,setHoverPause:A}}function $e(e,c={}){let i=e,s=e.querySelector(".aero-slider__track");if(!s)throw new Error("aero-slider: missing .aero-slider__track");let t=s,v=Array.from(t.children).filter(n=>!n.hasAttribute(V)),o=v.length;if(o===0)throw new Error("aero-slider: no slides found");v.forEach((n,l)=>n.setAttribute(X,String(l)));let u=-1;function g(){u=-1,r.slideWidthPx=0,r.viewportSizePx=0,r.trackScrollSizePx=0}let a={..._e,...c,...ie},r={currentIndex:0,isDragging:!1,isDestroyed:!1,loopModeActive:!1,isProgrammaticScroll:!1,suppressSettleEmit:!1,slideWidthPx:0,viewportSizePx:0,trackScrollSizePx:0},A=null,h=null,P=null,x=null,M=null,d=typeof window<"u"?window.innerWidth:0;function f(n,l){e.dispatchEvent(new CustomEvent(`aero:${n}`,{detail:l,bubbles:!0}))}function m(){return a.direction==="ttb"}let S=null;function b(){if(S!==null)return S;let n=document.createElement("div"),l=document.createElement("div");n.dir="rtl",n.style.width="4px",n.style.height="1px",n.style.position="absolute",n.style.top="-9999px",n.style.overflow="scroll",n.style.visibility="hidden",l.style.width="8px",l.style.height="1px",n.appendChild(l),document.body.appendChild(n);let p="reverse";return n.scrollLeft>0?p="default":(n.scrollLeft=1,n.scrollLeft===0&&(p="negative")),document.body.removeChild(n),S=p,p}function T(){return u>=0||(u=Math.max(0,N()-H())),u}function C(){return a.alignment!=="left"||W()?Math.max(0,o-1):Math.max(0,Math.floor(o-a.slidesPerView))}function W(){return a.slidesPerView%1!==0}function L(){return a.loop&&C()>0}function _(){return a.perMove>0?a.perMove:1}function D(n){let l=C();return L()?(Math.trunc(n)%o+o)%o:Math.max(0,Math.min(n,l))}function k(){if(a.direction==="rtl"){let n=T();switch(b()){case"default":return n-t.scrollLeft;case"negative":return-t.scrollLeft;default:return t.scrollLeft}}return a.direction==="ttb"?t.scrollTop:t.scrollLeft}function U(n){if(a.direction==="rtl"){let l=T();switch(b()){case"default":t.scrollLeft=l-n;break;case"negative":t.scrollLeft=-n;break;default:t.scrollLeft=n;break}}else a.direction==="ttb"?t.scrollTop=n:t.scrollLeft=n}function O(n,l="auto"){if(a.direction==="ttb")t.scrollTo({top:n,behavior:l});else if(a.direction==="rtl"){let p=T(),E=b()==="default"?p-n:b()==="negative"?-n:n;t.scrollTo({left:E,behavior:l})}else t.scrollTo({left:n,behavior:l})}function H(){return r.viewportSizePx>0?r.viewportSizePx:m()?t.clientHeight:t.clientWidth}function N(){return r.trackScrollSizePx>0?r.trackScrollSizePx:m()?t.scrollHeight:t.scrollWidth}function B(){let n=R();if(n<=0)return H();let p=(n-a.gap)*a.slidesPerView+a.gap*(a.slidesPerView-1);return p>0?p:H()}function F(){let n=R();if(n===0||a.alignment==="left")return 0;let l=se(0);if(l!==null)return-l;let p=B(),E=n-a.gap;return a.alignment==="center"?(p-E)/2:p-E}function R(){return r.slideWidthPx>0?r.slideWidthPx:0}function j(){g();let n=getComputedStyle(e),l=parseFloat(n.getPropertyValue("--slides-per-view")?.trim()||"")||ie.slidesPerView,p=n.getPropertyValue("--slide-gap")?.trim()||"0px",E=n.getPropertyValue("--slide-aspect")?.trim()||ie.aspectRatio;m()?(r.viewportSizePx=t.clientHeight,r.trackScrollSizePx=t.scrollHeight):(r.viewportSizePx=t.clientWidth,r.trackScrollSizePx=t.scrollWidth);let y=G(p,e,r.viewportSizePx||ie.gap);a.slidesPerView=l,a.gap=y,a.aspectRatio=E,r.slideWidthPx=Ne(e,n,r.viewportSizePx,l,y,!m())}function he(n){let l=n.getAttribute(X);if(l!==null)return Number(l);if(!n.hasAttribute(V))return-1;let p=Array.from(t.children),E=p.indexOf(n),y=p.findIndex(I=>I.hasAttribute(X));return y<0?-1:E<y?E%o:(E-y-o)%o}function Ge(n,l){let p=D(n),E=null,y=1/0;for(let I of Array.from(t.children)){if(he(I)!==p)continue;if(l===void 0)return I;let Z=le(I,t,a.alignment,m()),K=Math.abs(Z-l);K<y&&(y=K,E=I)}return E}function se(n,l){let p=Ge(n,l??(r.loopModeActive?k():void 0));return p?le(p,t,a.alignment,m()):null}function J(n){let l=se(n);if(l!==null){if(r.loopModeActive)return l;let I=N()-H();return I<=0?0:Math.max(0,Math.min(l,I))}let p=R();if(p===0)return 0;let E=N()-H(),y=n*p-F();return E<=0?0:Math.max(0,Math.min(y,E))}function ae(n){let l=se(n,k());if(l!==null)return l;let p=R();return p===0?0:w.getLoopRealStart()+n*p-F()}let je=5;function Le(n){let l=R(),p=r.loopModeActive?o-1:C(),E=N()-H();if(E<=0)return 0;if(!r.loopModeActive){if(n<=1)return 0;if(n>=E-1)return p}let y=0,I=1/0;for(let Z=0;Z<=p;Z++){let K=se(Z,n);if(K===null)continue;let Ce=Math.abs(K-n);Ce<I&&(I=Ce,y=Z)}if(I!==1/0)return y;if(l===0)return r.currentIndex;let oe=Math.round((n+F())/l);return Math.max(0,Math.min(oe,p))}function Ze(n){let l=r.loopModeActive?ae(n):J(n);t.style.scrollBehavior="auto",t.style.scrollSnapType="none",U(l),t.style.scrollBehavior=""}function te(){$===null&&(t.style.scrollSnapType="")}function fe(){e.setAttribute("data-aero-alignment",a.alignment)}function Te(){e.classList.remove("aero-slider--rtl","aero-slider--vertical"),e.removeAttribute("dir"),a.direction==="rtl"?(e.setAttribute("dir","rtl"),e.classList.add("aero-slider--rtl")):a.direction==="ttb"&&e.classList.add("aero-slider--vertical")}let Q=new Set;function Me(){let n=new Set,l=Math.ceil(a.slidesPerView);for(let p=0;p<l;p++){let E=r.currentIndex+p;if(r.loopModeActive)E=(E%o+o)%o;else if(E>=o)break;n.add(E)}return n}function de(){let n=Me();for(let l of Q)n.has(l)||f("hidden",{index:l});for(let l of n)Q.has(l)||f("visible",{index:l});Q.clear();for(let l of n)Q.add(l)}let ee={container:e,track:t,get slides(){return v},get slideCount(){return o},get config(){return a},state:r,emit:f,getSlideSize:R,recalcSlideMetrics:j,normalizeIndex:D,getMaxIndex:C,getEffectivePerMove:_,isLoopEnabled:L,isFractionalView:W,isVertical:m,getAlignmentOffset:F,getLayoutSize:B,getViewportSize:H,getScrollPos:k,setScrollPos:U,scrollToPos:O,getScrollPosForIndex:J,getScrollPosForLoopIndex:ae,getIndexFromScrollPos:Le,getLogicalIndexForChild:he,refreshPagination:()=>z.refresh(),refreshNavState:()=>Y.refresh(),applySnapAlignment:te},w=Ve(ee),Y=Be(ee,ce,ve),z=qe(ee,ne),me=Ue(ee,ce,ve),q=Ye(ee,ce),pe=We(ee,w,ne,q.pause,q.start);function re(){if(r.isDragging||r.isProgrammaticScroll)return;let n=r.loopModeActive?w.getLoopIndexFromScroll():Le(k());n!==r.currentIndex&&(r.currentIndex=n,f("slideChange",{index:r.currentIndex}),z.refresh(),Y.refresh(),de())}function Je(){h=null,r.isProgrammaticScroll=!1;let n=r.suppressSettleEmit;n&&(r.suppressSettleEmit=!1,Ze(r.currentIndex),r.loopModeActive&&w.teleportIfNeeded(),z.refresh(),Y.refresh(),re()),$===null&&(t.style.scrollSnapType=""),n||(r.loopModeActive&&w.teleportIfNeeded(),re())}function Ae(){r.loopModeActive&&!r.isProgrammaticScroll&&!r.isDragging&&w.scheduleTeleport(),h!==null&&clearTimeout(h),h=setTimeout(Je,He),A===null&&(A=requestAnimationFrame(()=>{A=null,re()}))}let $=null;function xe(){r.isDragging||(r.suppressSettleEmit=!1,t.style.scrollSnapType="none",$!==null&&clearTimeout($),$=setTimeout(()=>{$=null,t.style.scrollSnapType=""},Re))}function Ie(){j(),r.loopModeActive?U(ae(r.currentIndex)):U(J(r.currentIndex))}function Pe(){r.isDestroyed||window.innerWidth!==d&&(d=window.innerWidth,x===null&&(t.style.scrollSnapType="none",r.isProgrammaticScroll=!0),M===null&&(M=requestAnimationFrame(()=>{M=null,r.isDestroyed||Ie()})),x!==null&&clearTimeout(x),x=setTimeout(()=>{x=null,!r.isDestroyed&&(Ie(),r.isProgrammaticScroll=!1,te())},Ee))}let Qe=["--slides-per-view","--slide-gap","--slide-aspect","--aero-layout-width"];function et(){P?.(),P=Fe(e,Qe,()=>{r.isDestroyed||(f("resize",{}),we(),f("resized",{}))},{debounceMs:Ee,maxWaitMs:ke})}function ce(){r.isDestroyed||ne(D(r.currentIndex+_()))}function ve(){r.isDestroyed||ne(D(r.currentIndex-_()))}function ne(n){if(r.isDestroyed)return;let l=D(n),p=R();if(p!==0){if(l!==r.currentIndex&&(r.currentIndex=l,f("slideChange",{index:r.currentIndex}),z.refresh(),Y.refresh(),de()),r.loopModeActive){w.cancelTeleport(),w.teleportIfNeeded();let E=w.getLoopIndexFromScroll(),y=(l-E+o)%o,I=y-o,oe=Math.abs(I)<y?I:y;if(oe===0){let K=ae(l)-k();if(Math.abs(K)<=je)return;r.suppressSettleEmit=!0,r.isProgrammaticScroll=!0,O(k()+K,"smooth");return}r.suppressSettleEmit=!0,r.isProgrammaticScroll=!0,O(k()+oe*p,"smooth");return}r.suppressSettleEmit=!0,r.isProgrammaticScroll=!0,O(J(l),"smooth")}}function we(n){let l={...a};if(n&&Object.assign(a,n),l.direction!==a.direction&&Te(),j(),pe.setEnabled(a.draggable),me.setEnabled(!0),q.setHoverPause(a.autoplay),(l.slidesPerView!==a.slidesPerView||l.loop!==a.loop||l.maxDots!==a.maxDots||l.perMove!==a.perMove||l.alignment!==a.alignment)&&(z.clear(),z.build()),(l.autoplay!==a.autoplay||l.autoplayInterval!==a.autoplayInterval||l.loop!==a.loop)&&(a.autoplay?q.start():q.pause()),l.loop!==a.loop?L()?w.setupLoopTrack(r.currentIndex):w.teardownLoopTrack(r.currentIndex):r.loopModeActive&&l.slidesPerView!==a.slidesPerView&&w.setupLoopTrack(r.currentIndex),fe(),te(),!r.loopModeActive){let p=D(r.currentIndex);r.currentIndex=p,O(J(p))}re(),z.refresh(),Y.refresh(),de()}function ge(){if(!r.isDestroyed&&(r.loopModeActive&&w.teardownLoopTrack(r.currentIndex),v=Array.from(t.children).filter(n=>!n.hasAttribute(V)),o=v.length,o!==0)){if(v.forEach((n,l)=>{n.setAttribute(X,String(l)),n.classList.add("aero-slider__slide")}),j(),L()&&w.setupLoopTrack(r.currentIndex),fe(),te(),!r.loopModeActive){let n=D(r.currentIndex);r.currentIndex=n,O(J(n))}z.clear(),z.build(),Y.build(),re(),de()}}function tt(n,l){if(r.isDestroyed)return;let p=Array.isArray(n)?n:[n];r.loopModeActive&&w.teardownLoopTrack(r.currentIndex);let E=Array.from(t.children).filter(y=>!y.hasAttribute(V));if(l!==void 0&&l<E.length){let y=E[l]??null;for(let I of p)t.insertBefore(I,y)}else for(let y of p)t.appendChild(y);ge()}function rt(n){if(r.isDestroyed)return;let l=Array.isArray(n)?n:[n];r.loopModeActive&&w.teardownLoopTrack(r.currentIndex);let p=Array.from(t.children).filter(y=>!y.hasAttribute(V)),E=[...l].sort((y,I)=>I-y);for(let y of E)y>=0&&y<p.length&&p[y].remove();ge()}function nt(){r.isDestroyed||(f("destroy",{}),r.isDestroyed=!0,q.pause(),r.loopModeActive&&w.teardownLoopTrack(r.currentIndex),w.cancelTeleport(),r.isProgrammaticScroll=!1,P?.(),P=null,window.removeEventListener("resize",Pe),x!==null&&(clearTimeout(x),x=null),M!==null&&(cancelAnimationFrame(M),M=null),t.removeEventListener("scroll",Ae),t.removeEventListener("wheel",xe),$!==null&&clearTimeout($),h!==null&&clearTimeout(h),pe.setEnabled(!1),me.setEnabled(!1),q.setHoverPause(!1),A!==null&&cancelAnimationFrame(A),Y.clear(),z.clear(),e.removeAttribute("aria-roledescription"),e.removeAttribute("dir"),e.classList.remove("aero-slider--dragging","aero-slider--rtl","aero-slider--vertical","aero-slider--ready"),e.removeAttribute("data-aero-defer-visibility"),Oe(e),i.aeroSlider===Se&&delete i.aeroSlider)}e.removeAttribute("data-aero-defer-visibility"),e.classList.add("aero-slider"),e.setAttribute("aria-roledescription","carousel"),t.classList.add("aero-slider__track");for(let n of v)n.classList.add("aero-slider__slide");Te(),j(),fe(),te(),t.addEventListener("scroll",Ae,{passive:!0}),t.addEventListener("wheel",xe,{passive:!0}),window.addEventListener("resize",Pe),L()?w.setupLoopTrack(0):U(0),et(),pe.setEnabled(a.draggable),me.setEnabled(!0),q.setHoverPause(a.autoplay),Y.build(),z.build(),a.autoplay&&q.start();let ot=Me();for(let n of ot)Q.add(n);for(let n of Q)f("visible",{index:n});let Se={get element(){return e},next:ce,prev:ve,goTo:ne,destroy:nt,update:we,refresh:ge,add:tt,remove:rt,get currentIndex(){return r.currentIndex},get slideCount(){return o}};return i.aeroSlider=Se,e.classList.add("aero-slider--ready"),f("ready",{}),Se}var Ke="aero-slider__thumb--active";function ct(e,c,i){e.querySelectorAll(":scope > *").forEach(t=>{let v=i(t);t.classList.toggle(Ke,v===c)})}function Xe(e,c,i){let s=c.element.querySelector(".aero-slider__track");if(!s)return()=>{};let t=s,v=i?.loop??!0;c.update({draggable:!1,loop:v});let o=Array.from(t.children).filter(d=>d.hasAttribute("data-aero-slider-index"));o.sort((d,f)=>Number(d.getAttribute("data-aero-slider-index"))-Number(f.getAttribute("data-aero-slider-index")));let u=o.length,g=Array.from(t.children).indexOf(o[0]??t),a=[];function r(d){let f=d.getAttribute("data-aero-slider-index");if(f!==null)return Number(f);let m=Array.from(t.children).indexOf(d);return m<g?m%u:(m-g-u)%u}let A=e.currentIndex;function h(d){A=d,ct(t,A,r)}function P(d){h(d),c.goTo(d),e.goTo(d)}function x(d){h(d),c.goTo(d)}Array.from(t.children).forEach(d=>{let f=d,m=()=>{let S=r(f);P(S)};f.addEventListener("click",m),f.style.cursor="pointer",a.push({el:f,fn:m})});let M=d=>{let{index:f}=d.detail;f!==A&&x(f)};return e.element.addEventListener("aero:slideChange",M),x(e.currentIndex),()=>{a.forEach(({el:d,fn:f})=>d.removeEventListener("click",f)),t.querySelectorAll(":scope > *").forEach(d=>d.classList.remove(Ke)),e.element.removeEventListener("aero:slideChange",M)}}typeof window<"u"&&(window.AeroSlider={createSlider:$e,syncThumbnails:Xe});export{$e as createSlider,Xe as syncThumbnails};