aero-slider 1.0.0-beta.0 → 1.0.0-beta.2

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Aero Slider
2
2
 
3
- A lightweight (~6KB), CSS-first slider library for the modern web.
3
+ A lightweight (~6.5KB), CSS-first slider library for the modern web.
4
4
 
5
5
  - **CSS-First Architecture** — Layout via custom properties, responsive via media queries
6
6
  - **Native Scroll Snapping** — Hardware-accelerated, smooth scrolling
@@ -30,17 +30,6 @@ import { createSlider } from "aero-slider";
30
30
  import "aero-slider/slider.css";
31
31
  ```
32
32
 
33
- ## Project setup
33
+ ## Contributing
34
34
 
35
- To install dependencies for this repo:
36
-
37
- ```bash
38
- bun install
39
- ```
40
-
41
- ## Working on the site
42
-
43
- The documentation site lives in `site/` (Astro + Tailwind). Useful commands:
44
-
45
- - **`bun run site:dev`** — Start the dev server for the doc site
46
- - **`bun run site:build`** — Build the doc site for production
35
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, working on the doc site, and publishing.
@@ -11,6 +11,28 @@
11
11
  --slide-gap: 0px;
12
12
  }
13
13
 
14
+ /* Loop spacer: reserves space for prepended clones so the active slide
15
+ renders in its final centered position before JS initializes.
16
+ Add data-aero-defer-visibility to the slider in HTML; JS removes
17
+ the attribute at init, deactivating the spacer once clones are in place. */
18
+ .aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track::before {
19
+ content: "";
20
+ flex: 0 0 max(
21
+ 0px,
22
+ calc(
23
+ 50%
24
+ - (100% - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1))
25
+ / (2 * var(--slides-per-view, 1))
26
+ - var(--slide-gap, 0px)
27
+ )
28
+ );
29
+ scroll-snap-align: none;
30
+ }
31
+
32
+ .aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track > * {
33
+ scroll-snap-align: center;
34
+ }
35
+
14
36
  /* Viewport clips the track; pagination sits below in normal flow */
15
37
  .aero-slider__viewport {
16
38
  position: relative;
@@ -132,14 +154,15 @@
132
154
 
133
155
  /* iOS-style windowed pagination */
134
156
  .aero-slider__pagination--windowed {
135
- width: var(--pagination-width);
136
- max-width: 100%;
157
+ width: calc(var(--pagination-width) + 12px);
158
+ max-width: calc(100% + 12px);
137
159
  margin-left: auto;
138
160
  margin-right: auto;
139
161
  overflow: hidden;
140
162
  justify-content: flex-start;
141
- padding-left: 0;
142
- padding-right: 0;
163
+ padding-left: 6px;
164
+ padding-right: 6px;
165
+ box-sizing: border-box;
143
166
  }
144
167
 
145
168
  .aero-slider__pagination-track {
@@ -164,16 +187,6 @@
164
187
  transform: scale(0.8);
165
188
  }
166
189
 
167
- /* === Thumbnail strip === */
168
- .aero-slider--thumbnails .aero-slider__track > * {
169
- opacity: 0.6;
170
- transition: opacity 0.2s;
171
- }
172
-
173
- .aero-slider--thumbnails .aero-slider__track > .aero-slider__thumb--active {
174
- opacity: 1;
175
- }
176
-
177
190
  /* === RTL === */
178
191
  .aero-slider--rtl .aero-slider__track {
179
192
  direction: rtl;
@@ -39,6 +39,10 @@ declare global {
39
39
 
40
40
  declare function createSlider(container: HTMLElement, userConfig?: SliderConfig): SliderInstance;
41
41
 
42
+ interface SyncThumbnailsOptions {
43
+ /** Loop mode for the thumbnail slider. Defaults to true for backward compatibility. */
44
+ loop?: boolean;
45
+ }
42
46
  /**
43
47
  * Syncs a primary slider with a thumbnail slider. Clicking a thumbnail navigates
44
48
  * the primary to that slide. When the primary changes (drag, arrows, etc.), the
@@ -48,6 +52,6 @@ declare function createSlider(container: HTMLElement, userConfig?: SliderConfig)
48
52
  * Both sliders must have the same number of slides. Call the returned function
49
53
  * to teardown and remove all listeners.
50
54
  */
51
- declare function syncThumbnails(primary: SliderInstance, thumbnail: SliderInstance): () => void;
55
+ declare function syncThumbnails(primary: SliderInstance, thumbnail: SliderInstance, options?: SyncThumbnailsOptions): () => void;
52
56
 
53
- export { type SliderConfig, type SliderEvent, type SliderEventCallback, type SliderEventData, type SliderInstance, createSlider, syncThumbnails };
57
+ export { type SliderConfig, type SliderEvent, type SliderEventCallback, type SliderEventData, type SliderInstance, type SyncThumbnailsOptions, createSlider, syncThumbnails };
@@ -1 +1 @@
1
- var me={loop:!1,autoplay:!1,autoplayInterval:5e3,draggable:!0,maxDots:0,noDrag:"",perMove:0,direction:"ltr"},Z={slidesPerView:1,gap:0,aspectRatio:"16 / 9"},de=.3,oe=80,ve=150,ge=300,Se=100,Ee=250,j="data-aero-slider-index",B="data-aero-slider-clone";function he(e,u,s,a={}){let o=a.debounceMs??100,c=a.maxWaitMs??250,r="",d=null,l=null;function t(){let b=getComputedStyle(e);return u.map(w=>b.getPropertyValue(w).trim()).join("\0")}function v(){d!==null&&(clearTimeout(d),d=null),l=null;let b=t();b!==r&&(r=b,s())}function A(){let b=Date.now();if(l===null&&(l=b),b-l>=c){v();return}d!==null&&clearTimeout(d),d=setTimeout(v,o)}return r=t(),window.addEventListener("resize",A),()=>{window.removeEventListener("resize",A),d!==null&&(clearTimeout(d),d=null)}}var Fe=50,Be=2,Te=3;function Le(e){let{track:u,state:s}=e,a=null,o=Te;function c(){let y=Math.ceil(e.config.slidesPerView)+Be;return Math.max(Te,Math.ceil(y/e.slideCount))}function r(){return o*e.slideCount*s.slideWidthPx}function d(){return(o+1)*e.slideCount*s.slideWidthPx}function l(y){u.style.scrollBehavior="auto",e.setScrollPos(y),requestAnimationFrame(()=>{u.style.scrollBehavior=""})}function t(){if(!s.loopModeActive)return;let y=s.slideWidthPx;if(y===0)return;let m=e.slideCount*y,g=r(),h=d(),f=e.getScrollPos(),E=2;if(f<g-E||f>=h+E){for(;f<g;)f+=m;for(;f>=h;)f-=m;l(f)}}function v(){a!==null&&clearTimeout(a),a=setTimeout(()=>{a=null,t()},Fe)}function A(){a!==null&&(clearTimeout(a),a=null)}function b(){let y=s.slideWidthPx;if(y===0)return s.currentIndex;let m=e.isVertical()?u.clientHeight:u.clientWidth;if(e.isFractionalView()){let f=y-e.config.gap,E=e.getScrollPos()+m/2,M=r();return(Math.round((E-M-f/2)/y)%e.slideCount+e.slideCount)%e.slideCount}let g=e.getScrollPos()-r();return(Math.round(g/y)%e.slideCount+e.slideCount)%e.slideCount}function w(y){if(!e.isLoopEnabled()){s.loopModeActive&&S(y);return}o=c(),u.querySelectorAll(`[${B}]`).forEach(_=>_.remove());let{slides:m,slideCount:g}=e;for(let _=0;_<o;_++)for(let p=g-1;p>=0;p--){let T=m[p].cloneNode(!0);T.setAttribute(B,""),T.removeAttribute(j),u.prepend(T)}for(let _=0;_<o;_++)for(let p=0;p<g;p++){let T=m[p].cloneNode(!0);T.setAttribute(B,""),T.removeAttribute(j),u.append(T)}s.loopModeActive=!0,e.recalcSlideMetrics(),e.applySnapAlignment();let h=e.normalizeIndex(y);s.currentIndex=h;let f=s.slideWidthPx,E=o*e.slideCount*f,M=E+h*f;if(e.isFractionalView()){let _=e.isVertical()?u.clientHeight:u.clientWidth,p=f-e.config.gap;M=E+h*f+p/2-_/2}l(M)}function S(y){A(),u.querySelectorAll(`[${B}]`).forEach(m=>m.remove()),s.loopModeActive=!1,e.recalcSlideMetrics(),s.currentIndex=Math.max(0,Math.min(y,e.getMaxIndex())),l(e.getScrollPosForIndex(s.currentIndex))}return{getLoopRealStart:r,getLoopRealEnd:d,getLoopIndexFromScroll:b,instantScrollTo:l,teleportIfNeeded:t,scheduleTeleport:v,setupLoopTrack:w,teardownLoopTrack:S,cancelTeleport:A}}function be(e,u,s,a,o){let{container:c,track:r,state:d}=e,l=!1;function t(S){return e.isVertical()?S.clientY:S.clientX}function v(){return e.config.direction==="rtl"?-1:1}function A(S){if(S.button!==0||S.pointerType==="touch"||e.config.noDrag&&S.target.closest(e.config.noDrag))return;r.setPointerCapture(S.pointerId),d.isDragging=!0;let y=v(),m=t(S),g=e.getScrollPos(),h=g,f=null,E=0,M=m,_=performance.now();function p(){f=null,e.setScrollPos(h)}r.style.scrollBehavior="auto",r.style.scrollSnapType="none",c.classList.add("aero-slider--dragging");let T=d.currentIndex;e.emit("dragStart",{index:T}),a();function k(H){if(!d.isDragging)return;H.preventDefault();let P=t(H);h=g+(m-P)*y,f===null&&(f=requestAnimationFrame(p));let D=performance.now(),V=D-_;if(V>0){if(V<100){let W=(M-P)*y/V;E=de*W+(1-de)*E}else E*=.5;M=P,_=D}}function R(){if(!d.isDragging)return;d.isDragging=!1,c.classList.remove("aero-slider--dragging"),f!==null&&(cancelAnimationFrame(f),f=null,e.setScrollPos(h));let H=performance.now()-_;H>50&&(E*=Math.max(0,1-H/200));let P=e.getSlideSize();if(r.style.scrollBehavior="",P>0)if(d.loopModeActive){u.teleportIfNeeded();let D=u.getLoopRealStart(),V=e.getScrollPos(),W=e.isVertical()?r.clientHeight:r.clientWidth,U,N;if(e.isFractionalView()){let q=P-e.config.gap,O=V+E*oe+W/2;U=Math.round((O-D-q/2)/P),N=D+U*P+q/2-W/2}else{let O=V-D+E*oe;U=Math.round(O/P),N=D+U*P}d.isProgrammaticScroll=!0,e.scrollToPos(N,"smooth"),u.scheduleTeleport();let $=e.normalizeIndex(U);$!==d.currentIndex&&(d.currentIndex=$,e.emit("slideChange",{index:d.currentIndex}),e.refreshPagination(),e.refreshNavState())}else{let D=e.getScrollPos()+E*oe,V=e.getIndexFromScrollPos(D);s(V)}e.emit("dragEnd",{index:d.currentIndex,fromIndex:T}),r.removeEventListener("pointermove",k),r.removeEventListener("pointerup",R),r.removeEventListener("pointercancel",R),e.config.autoplay&&o()}r.addEventListener("pointermove",k),r.addEventListener("pointerup",R),r.addEventListener("pointercancel",R)}function b(S){S.preventDefault()}function w(S){S!==l&&(S?(r.addEventListener("pointerdown",A),r.addEventListener("dragstart",b),l=!0):(r.removeEventListener("pointerdown",A),r.removeEventListener("dragstart",b),l=!1))}return{setEnabled:w,isActive:()=>l}}function ye(e,u,s){let a=null,o=null,c=s,r=u;function d(){a&&(a.removeEventListener("click",c),a=null),o&&(o.removeEventListener("click",r),o=null)}function l(){d(),a=e.container.querySelector(".aero-slider__nav--prev"),o=e.container.querySelector(".aero-slider__nav--next");let v=e.config.direction==="rtl";c=v?u:s,r=v?s:u,a&&a.addEventListener("click",c),o&&o.addEventListener("click",r),t()}function t(){let v=e.getMaxIndex(),A=v>0,b=e.config.direction==="rtl",w=!A||!e.isLoopEnabled()&&e.state.currentIndex===0,S=!A||!e.isLoopEnabled()&&e.state.currentIndex>=v;a&&(a.disabled=b?S:w),o&&(o.disabled=b?w:S)}return{build:l,clear:d,refresh:t}}function Me(e,u){let s=null,a=null,o=null,c=[],r=!1,d=10,l=8;function t(m){let g=m.target.closest(".aero-slider__dot");if(!g||!s)return;let h=g.getAttribute("data-slide-index");h!==null&&u(Number(h))}function v(){if(s){s.removeEventListener("click",t),a?.remove(),a=null,o&&(o.style.display="");let m=s.querySelectorAll(".aero-slider__dot");for(let g=1;g<m.length;g++)m[g]?.remove();s.querySelectorAll(".aero-slider__pagination-label").forEach(g=>g.remove()),s=null}o=null,c=[],r=!1}function A(){return e.isLoopEnabled()?e.slideCount:e.getMaxIndex()+1}function b(){if(s=e.container.querySelector(".aero-slider__pagination"),!s||(o=s.querySelector(".aero-slider__dot"),!o))return;o.style.display==="none"&&(o.style.display=""),o.style.transform="",o.style.opacity="",o.offsetWidth;let g=getComputedStyle(o);d=parseFloat(g.width)||10;let h=getComputedStyle(s);l=parseInt(h.gap)||8,s.setAttribute("role","tablist"),s.addEventListener("click",t);let f=A(),E=e.config.maxDots;r=E>0&&f>E,a?.remove();let M=s.querySelectorAll(".aero-slider__dot");for(let p=1;p<M.length;p++)M[p]?.remove();if(s.querySelectorAll(".aero-slider__pagination-label").forEach(p=>p.remove()),r){s.classList.add("aero-slider__pagination--windowed");let p=E*d+(E-1)*l;s.style.setProperty("--pagination-width",`${p}px`),a=document.createElement("div"),a.className="aero-slider__pagination-track",o.style.display="none";for(let T=0;T<f;T++){let k=o.cloneNode(!0);k.style.display="",a.appendChild(k)}s.appendChild(a)}else{s.classList.remove("aero-slider__pagination--windowed"),s.style.removeProperty("--pagination-width"),o.style.display="";for(let p=1;p<f;p++){let T=o.cloneNode(!0);s.appendChild(T)}}c=Array.from((r&&a?a:s).querySelectorAll(".aero-slider__dot")),c.forEach((p,T)=>{p.setAttribute("role","tab"),p.setAttribute("data-slide-index",String(T)),p.setAttribute("aria-label",`Go to slide ${T+1}`)}),y()}function w(m,g,h,f){if(m<0||m>=g)return"aero-slider__dot--hidden";let E=m===0,M=m===g-1,_=m===1,p=m===g-2;return E&&!h?"aero-slider__dot--edge":_&&!h?"aero-slider__dot--near-edge":M&&!f?"aero-slider__dot--edge":p&&!f?"aero-slider__dot--near-edge":null}function S(m){m.classList.remove("aero-slider__dot--hidden","aero-slider__dot--edge","aero-slider__dot--near-edge")}function y(){let m=A(),g=e.state.currentIndex,h=e.config.maxDots;if(r&&h>0&&a){let f=Math.floor(h/2),E=d+l,M=g-f;M=Math.max(0,Math.min(M,m-h)),a.style.setProperty("--track-offset",`${-M*E}px`);let _=M===0,p=M>=m-h;c.forEach((T,k)=>{let R=k===g;T.classList.toggle("aero-slider__dot--active",R),T.setAttribute("aria-selected",String(R)),S(T);let H=w(k-M,h,_,p);H&&T.classList.add(H)})}else c.forEach((f,E)=>{let M=E===g;f.classList.toggle("aero-slider__dot--active",M),f.setAttribute("aria-selected",String(M)),S(f)})}return{build:b,clear:v,refresh:y}}function Ae(e,u,s){let a=!1;function o(r){let d=e.config.direction;d==="ttb"?r.key==="ArrowUp"?(r.preventDefault(),s()):r.key==="ArrowDown"&&(r.preventDefault(),u()):d==="rtl"?r.key==="ArrowRight"?(r.preventDefault(),s()):r.key==="ArrowLeft"&&(r.preventDefault(),u()):r.key==="ArrowLeft"?(r.preventDefault(),s()):r.key==="ArrowRight"&&(r.preventDefault(),u())}function c(r){r!==a&&(r?(e.container.setAttribute("tabindex","0"),e.container.addEventListener("keydown",o),a=!0):(e.container.removeAttribute("tabindex"),e.container.removeEventListener("keydown",o),a=!1))}return{setEnabled:c}}function Ce(e,u){let s=null,a=!1,o=null;function c(){e.config.autoplay&&(r(),s=setInterval(()=>{if(!e.state.loopModeActive&&e.state.currentIndex>=e.getMaxIndex()){r();return}u()},e.config.autoplayInterval),e.emit("autoplayStart",{index:e.state.currentIndex}))}function r(){s!==null&&(clearInterval(s),s=null,e.emit("autoplayStop",{index:e.state.currentIndex}))}function d(){r()}function l(){e.config.autoplay&&c()}function t(){o!==null&&(clearTimeout(o),o=null),r()}function v(){e.config.autoplay&&(o=setTimeout(()=>{o=null,e.config.autoplay&&c()},1e3))}function A(b){b!==a&&(b?(e.container.addEventListener("mouseenter",d),e.container.addEventListener("mouseleave",l),e.track.addEventListener("touchstart",t,{passive:!0}),e.track.addEventListener("touchend",v,{passive:!0}),e.track.addEventListener("touchcancel",v,{passive:!0}),a=!0):(e.container.removeEventListener("mouseenter",d),e.container.removeEventListener("mouseleave",l),e.track.removeEventListener("touchstart",t),e.track.removeEventListener("touchend",v),e.track.removeEventListener("touchcancel",v),o!==null&&(clearTimeout(o),o=null),a=!1))}return{start:c,pause:r,setHoverPause:A}}function We(e,u={}){let s=e,a=e.querySelector(".aero-slider__track");if(!a)throw new Error("aero-slider: missing .aero-slider__track");let o=a,c=Array.from(o.children).filter(n=>!n.hasAttribute(B)),r=c.length;if(r===0)throw new Error("aero-slider: no slides found");c.forEach((n,i)=>n.setAttribute(j,String(i)));function d(){let n=getComputedStyle(e),i=parseFloat(n.getPropertyValue("--slides-per-view")?.trim()||"")||Z.slidesPerView,L=n.getPropertyValue("--slide-gap")?.trim()||"0px",I=parseFloat(L)||Z.gap,C=n.getPropertyValue("--slide-aspect")?.trim()||Z.aspectRatio;return{slidesPerView:i,gap:I,aspectRatio:C}}let l={...me,...u,...Z},t={currentIndex:0,isDragging:!1,isDestroyed:!1,loopModeActive:!1,isProgrammaticScroll:!1,slideWidthPx:0},v=new Map,A=null,b=null,w=null;function S(n,i){v.get(n)?.forEach(L=>L(i))}function y(){return l.direction==="ttb"}function m(){return l.slidesPerView%1!==0?Math.max(0,r-1):Math.max(0,Math.floor(r-l.slidesPerView))}function g(){return l.slidesPerView%1!==0}function h(){return l.loop&&m()>0}function f(){return l.perMove>0?l.perMove:1}function E(n){let i=m();return h()?(Math.trunc(n)%r+r)%r:Math.max(0,Math.min(n,i))}function M(){return l.direction==="rtl"?-o.scrollLeft:l.direction==="ttb"?o.scrollTop:o.scrollLeft}function _(n){l.direction==="rtl"?o.scrollLeft=-n:l.direction==="ttb"?o.scrollTop=n:o.scrollLeft=n}function p(n,i="auto"){l.direction==="ttb"?o.scrollTo({top:n,behavior:i}):l.direction==="rtl"?o.scrollTo({left:-n,behavior:i}):o.scrollTo({left:n,behavior:i})}function T(){return y()?o.clientHeight:o.clientWidth}function k(){return y()?o.scrollHeight:o.scrollWidth}function R(){if(t.slideWidthPx>0)return t.slideWidthPx;let n=c[0];if(!n)return 0;let i=n.getBoundingClientRect();return t.slideWidthPx=(y()?i.height:i.width)+l.gap,t.slideWidthPx}function H(){t.slideWidthPx=0,R()}function P(){Object.assign(l,d())}function D(n){let i=R();if(i===0)return 0;if(!g())return n*i;let L=T(),I=i-l.gap;if(t.loopModeActive)return n*i+I/2-L/2;let C=m();return n<=0?0:n>=C?k()-T():n*i+I/2-L/2}function V(n){let i=R();if(i===0)return t.currentIndex;let L=t.loopModeActive?r-1:m(),I=k()-T();if(!g()){let re=Math.round(n/i);return Math.max(0,Math.min(re,L))}if(I<=0||n<=1)return 0;if(n>=I-1)return L;let C=T(),Y=i-l.gap,ee=n+C/2,te=Math.round((ee-Y/2)/i);return Math.max(0,Math.min(te,L))}function W(){let n=Array.from(o.children);if(!g()){for(let i of n)i.style.scrollSnapAlign="";return}if(t.loopModeActive){for(let i of n)i.style.scrollSnapAlign="center";return}for(let i of n)i.style.scrollSnapAlign="center"}function U(){e.classList.remove("aero-slider--rtl","aero-slider--vertical"),e.removeAttribute("dir"),l.direction==="rtl"?(e.setAttribute("dir","rtl"),e.classList.add("aero-slider--rtl")):l.direction==="ttb"&&e.classList.add("aero-slider--vertical")}let N=new Set;function $(){let n=new Set,i=Math.ceil(l.slidesPerView);for(let L=0;L<i;L++){let I=t.currentIndex+L;if(t.loopModeActive)I=(I%r+r)%r;else if(I>=r)break;n.add(I)}return n}function q(){let n=$();for(let i of N)n.has(i)||S("hidden",{index:i});for(let i of n)N.has(i)||S("visible",{index:i});N.clear();for(let i of n)N.add(i)}let O={container:e,track:o,get slides(){return c},get slideCount(){return r},get config(){return l},state:t,listeners:v,emit:S,getSlideSize:R,recalcSlideMetrics:H,normalizeIndex:E,getMaxIndex:m,getEffectivePerMove:f,isLoopEnabled:h,isFractionalView:g,isVertical:y,getScrollPos:M,setScrollPos:_,scrollToPos:p,getScrollPosForIndex:D,getIndexFromScrollPos:V,refreshPagination:()=>F.refresh(),refreshNavState:()=>K.refresh(),applySnapAlignment:W},x=Le(O),K=ye(O,Q,le),F=Me(O,G),ne=Ae(O,Q,le),z=Ce(O,Q),ie=be(O,x,G,z.pause,z.start);function J(){if(t.isDragging||t.isProgrammaticScroll)return;let n=t.loopModeActive?x.getLoopIndexFromScroll():V(M());n!==t.currentIndex&&(t.currentIndex=n,S("slideChange",{index:t.currentIndex}),F.refresh(),K.refresh(),q())}function Ie(){b=null,t.isProgrammaticScroll=!1,X===null&&(o.style.scrollSnapType=""),J()}function ue(){t.loopModeActive&&x.scheduleTeleport(),b!==null&&clearTimeout(b),b=setTimeout(Ie,ve),A===null&&(A=requestAnimationFrame(()=>{A=null,J()}))}let X=null;function fe(){t.isDragging||(o.style.scrollSnapType="none",X!==null&&clearTimeout(X),X=setTimeout(()=>{X=null,o.style.scrollSnapType=""},ge))}let xe=["--slides-per-view","--slide-gap","--slide-aspect"];function we(){w?.(),w=he(e,xe,()=>{t.isDestroyed||(S("resize",{index:t.currentIndex}),pe(),S("resized",{index:t.currentIndex}))},{debounceMs:Se,maxWaitMs:Ee})}function Q(){t.isDestroyed||G(E(t.currentIndex+f()))}function le(){t.isDestroyed||G(E(t.currentIndex-f()))}function G(n){if(t.isDestroyed)return;let i=E(n),L=R();if(L!==0){if(i!==t.currentIndex&&(t.currentIndex=i,S("slideChange",{index:t.currentIndex}),F.refresh(),K.refresh(),q()),t.loopModeActive){x.cancelTeleport(),t.isProgrammaticScroll=!0;let I=x.getLoopIndexFromScroll(),C=(i-I+r)%r,Y=C-r,ee=Math.abs(Y)<C?Y:C;if(ee===0){let te=x.getLoopRealStart(),re=te+i*L;if(g()){let Ne=T(),Oe=L-l.gap;re=te+i*L+Oe/2-Ne/2}p(re,"smooth"),x.scheduleTeleport();return}p(M()+ee*L,"smooth"),x.scheduleTeleport();return}t.isProgrammaticScroll=!0,p(D(i),"smooth")}}function pe(n){let i=l;if(l={...l,...d(),...n??{}},i.direction!==l.direction&&U(),P(),H(),ie.setEnabled(l.draggable),ne.setEnabled(!0),z.setHoverPause(l.autoplay),(i.slidesPerView!==l.slidesPerView||i.loop!==l.loop||i.maxDots!==l.maxDots||i.perMove!==l.perMove)&&(F.clear(),F.build()),(i.autoplay!==l.autoplay||i.autoplayInterval!==l.autoplayInterval||i.loop!==l.loop)&&(l.autoplay?z.start():z.pause()),i.loop!==l.loop?h()?x.setupLoopTrack(t.currentIndex):x.teardownLoopTrack(t.currentIndex):t.loopModeActive&&i.slidesPerView!==l.slidesPerView&&x.setupLoopTrack(t.currentIndex),W(),!t.loopModeActive){let L=E(t.currentIndex);t.currentIndex=L,p(D(L))}J(),F.refresh(),K.refresh(),q()}function se(){if(!t.isDestroyed&&(t.loopModeActive&&x.teardownLoopTrack(t.currentIndex),c=Array.from(o.children).filter(n=>!n.hasAttribute(B)),r=c.length,r!==0)){if(c.forEach((n,i)=>{n.setAttribute(j,String(i)),n.classList.add("aero-slider__slide")}),P(),H(),h()&&x.setupLoopTrack(t.currentIndex),W(),!t.loopModeActive){let n=E(t.currentIndex);t.currentIndex=n,p(D(n))}F.clear(),F.build(),K.build(),J(),q()}}function Pe(n,i){if(t.isDestroyed)return;let L=Array.isArray(n)?n:[n];t.loopModeActive&&x.teardownLoopTrack(t.currentIndex);let I=Array.from(o.children).filter(C=>!C.hasAttribute(B));if(i!==void 0&&i<I.length){let C=I[i]??null;for(let Y of L)o.insertBefore(Y,C)}else for(let C of L)o.appendChild(C);se()}function De(n){if(t.isDestroyed)return;let i=Array.isArray(n)?n:[n];t.loopModeActive&&x.teardownLoopTrack(t.currentIndex);let L=Array.from(o.children).filter(C=>!C.hasAttribute(B)),I=[...i].sort((C,Y)=>Y-C);for(let C of I)C>=0&&C<L.length&&L[C].remove();se()}function Re(n,i){v.has(n)||v.set(n,new Set),v.get(n).add(i)}function He(n,i){v.get(n)?.delete(i)}function ke(){t.isDestroyed||(S("destroy",{index:t.currentIndex}),t.isDestroyed=!0,z.pause(),t.loopModeActive&&x.teardownLoopTrack(t.currentIndex),x.cancelTeleport(),t.isProgrammaticScroll=!1,w?.(),w=null,o.removeEventListener("scroll",ue),o.removeEventListener("wheel",fe),X!==null&&clearTimeout(X),b!==null&&clearTimeout(b),ie.setEnabled(!1),ne.setEnabled(!1),z.setHoverPause(!1),A!==null&&cancelAnimationFrame(A),K.clear(),F.clear(),e.removeAttribute("aria-roledescription"),e.removeAttribute("dir"),e.classList.remove("aero-slider--dragging","aero-slider--rtl","aero-slider--vertical"),s.aeroSlider===ae&&delete s.aeroSlider,v.clear())}e.classList.add("aero-slider"),e.setAttribute("aria-roledescription","carousel"),o.classList.add("aero-slider__track");for(let n of c)n.classList.add("aero-slider__slide");U(),P(),H(),W(),o.addEventListener("scroll",ue,{passive:!0}),o.addEventListener("wheel",fe,{passive:!0}),h()?x.setupLoopTrack(0):_(0),we(),ie.setEnabled(l.draggable),ne.setEnabled(!0),z.setHoverPause(l.autoplay),K.build(),F.build(),l.autoplay&&z.start();let Ve=$();for(let n of Ve)N.add(n);for(let n of N)S("visible",{index:n});let ae={get element(){return e},next:Q,prev:le,goTo:G,destroy:ke,update:pe,refresh:se,add:Pe,remove:De,on:Re,off:He,get currentIndex(){return t.currentIndex},get slideCount(){return r}};return s.aeroSlider=ae,S("ready",{index:t.currentIndex}),ae}var _e="aero-slider__thumb--active";function ce(e,u){e.querySelectorAll(":scope > *").forEach(a=>{let c=a.getAttribute("data-aero-slider-index")===String(u);a.classList.toggle(_e,c)})}function ze(e,u,s){let a=u[s];if(!a)return;let o=e.getBoundingClientRect(),c=a.getBoundingClientRect(),r=a.offsetLeft+c.width/2,d=o.width/2,l=r-d,t=e.scrollWidth-e.clientWidth,v=Math.max(0,Math.min(l,t));e.scrollTo({left:v,behavior:"smooth"})}function Ue(e,u){let s=u.element.querySelector(".aero-slider__track");if(!s)return()=>{};u.update({draggable:!1,loop:!0});let a=Array.from(s.children),o=[],c=null,r=null;a.forEach((t,v)=>{let A=()=>{c=v,ce(s,v),e.goTo(v)};t.addEventListener("click",A),t.style.cursor="pointer",o.push({el:t,fn:A})});let d=null,l=t=>{if(c!==null){t.index===c?(r!==null&&clearTimeout(r),r=setTimeout(()=>{r=null,c=null},200)):r!==null&&(clearTimeout(r),r=null);return}d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,ce(s,t.index),u.goTo(t.index)},50)};return e.on("slideChange",l),ce(s,e.currentIndex),ze(s,a,e.currentIndex),()=>{d!==null&&clearTimeout(d),r!==null&&clearTimeout(r),c=null,o.forEach(({el:t,fn:v})=>t.removeEventListener("click",v)),a.forEach(t=>t.classList.remove(_e)),e.off("slideChange",l)}}export{We as createSlider,Ue as syncThumbnails};
1
+ var he={loop:!1,autoplay:!1,autoplayInterval:5e3,draggable:!0,maxDots:0,noDrag:"",perMove:0,direction:"ltr"},J={slidesPerView:1,gap:0,aspectRatio:"16 / 9"},ue=.3,ie=80,be=150,Te=300,fe=100,ye=250,$="data-aero-slider-index",z="data-aero-slider-clone";function Le(e,g,s,d={}){let t=d.debounceMs??100,v=d.maxWaitMs??250,o="",c=null,i=null;function r(){let p=getComputedStyle(e);return g.map(A=>p.getPropertyValue(A).trim()).join("\0")}function S(){c!==null&&(clearTimeout(c),c=null),i=null;let p=r();p!==o&&(o=p,s())}function L(){let p=Date.now();if(i===null&&(i=p),p-i>=v){S();return}c!==null&&clearTimeout(c),c=setTimeout(S,t)}return o=r(),window.addEventListener("resize",L),()=>{window.removeEventListener("resize",L),c!==null&&(clearTimeout(c),c=null)}}var qe=50,Ye=2,Me=3;function Ae(e){let{track:g,state:s}=e,d=null,t=Me;function v(){let u=Math.ceil(e.config.slidesPerView)+Ye;return Math.max(Me,Math.ceil(u/e.slideCount))}function o(){return t*e.slideCount*s.slideWidthPx}function c(){return(t+1)*e.slideCount*s.slideWidthPx}function i(u){g.style.scrollBehavior="auto",e.setScrollPos(u),requestAnimationFrame(()=>{g.style.scrollBehavior=""})}function r(){if(!s.loopModeActive)return;let u=s.slideWidthPx;if(u===0)return;let a=e.slideCount*u,f=o(),h=c(),m=e.getScrollPos(),T=2;if(m<f-T||m>=h+T){for(;m<f;)m+=a;for(;m>=h;)m-=a;i(m)}}function S(){d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,r()},qe)}function L(){d!==null&&(clearTimeout(d),d=null)}function p(){let u=s.slideWidthPx;if(u===0)return s.currentIndex;let a=e.isVertical()?g.clientHeight:g.clientWidth;if(e.isFractionalView()){let m=u-e.config.gap,T=e.getScrollPos()+a/2,C=o();return(Math.round((T-C-m/2)/u)%e.slideCount+e.slideCount)%e.slideCount}let f=e.getScrollPos()-o();return(Math.round(f/u)%e.slideCount+e.slideCount)%e.slideCount}function A(u){if(!e.isLoopEnabled()){s.loopModeActive&&E(u);return}t=v(),g.querySelectorAll(`[${z}]`).forEach(I=>I.remove());let{slides:a,slideCount:f}=e;for(let I=0;I<t;I++)for(let b=f-1;b>=0;b--){let M=a[b].cloneNode(!0);M.setAttribute(z,""),M.removeAttribute($),g.prepend(M)}for(let I=0;I<t;I++)for(let b=0;b<f;b++){let M=a[b].cloneNode(!0);M.setAttribute(z,""),M.removeAttribute($),g.append(M)}s.loopModeActive=!0,e.recalcSlideMetrics(),e.applySnapAlignment();let h=e.normalizeIndex(u);s.currentIndex=h;let m=s.slideWidthPx,T=t*e.slideCount*m,C=T+h*m;if(e.isFractionalView()){let I=e.isVertical()?g.clientHeight:g.clientWidth,b=m-e.config.gap;C=T+h*m+b/2-I/2}i(C)}function E(u){L(),g.querySelectorAll(`[${z}]`).forEach(a=>a.remove()),s.loopModeActive=!1,e.recalcSlideMetrics(),s.currentIndex=Math.max(0,Math.min(u,e.getMaxIndex())),i(e.getScrollPosForIndex(s.currentIndex))}return{getLoopRealStart:o,getLoopRealEnd:c,getLoopIndexFromScroll:p,instantScrollTo:i,teleportIfNeeded:r,scheduleTeleport:S,setupLoopTrack:A,teardownLoopTrack:E,cancelTeleport:L}}function Ce(e,g,s,d,t){let{container:v,track:o,state:c}=e,i=!1;function r(E){return e.isVertical()?E.clientY:E.clientX}function S(){return e.config.direction==="rtl"?-1:1}function L(E){if(E.button!==0||E.pointerType==="touch"||e.config.noDrag&&E.target.closest(e.config.noDrag))return;o.setPointerCapture(E.pointerId),c.isDragging=!0;let u=S(),a=r(E),f=e.getScrollPos(),h=f,m=null,T=0,C=a,I=performance.now();function b(){m=null,e.setScrollPos(h)}o.style.scrollBehavior="auto",o.style.scrollSnapType="none",v.classList.add("aero-slider--dragging");let M=c.currentIndex;e.emit("dragStart",{index:M}),d();function D(V){if(!c.isDragging)return;V.preventDefault();let P=r(V);h=f+(a-P)*u,m===null&&(m=requestAnimationFrame(b));let H=performance.now(),k=H-I;if(k>0){if(k<100){let O=(C-P)*u/k;T=ue*O+(1-ue)*T}else T*=.5;C=P,I=H}}function R(){if(!c.isDragging)return;c.isDragging=!1,v.classList.remove("aero-slider--dragging"),m!==null&&(cancelAnimationFrame(m),m=null,e.setScrollPos(h));let V=performance.now()-I;V>50&&(T*=Math.max(0,1-V/200));let P=e.getSlideSize();if(o.style.scrollBehavior="",P>0)if(c.loopModeActive){g.teleportIfNeeded();let H=g.getLoopRealStart(),k=e.getScrollPos(),O=e.isVertical()?o.clientHeight:o.clientWidth,B,U;if(e.isFractionalView()){let N=P-e.config.gap,X=k+T*ie+O/2;B=Math.round((X-H-N/2)/P),U=H+B*P+N/2-O/2}else{let X=k-H+T*ie;B=Math.round(X/P),U=H+B*P}c.isProgrammaticScroll=!0,e.scrollToPos(U,"smooth"),g.scheduleTeleport();let G=e.normalizeIndex(B);G!==c.currentIndex&&(c.currentIndex=G,e.emit("slideChange",{index:c.currentIndex}),e.refreshPagination(),e.refreshNavState())}else{let H=e.getScrollPos()+T*ie,k=e.getIndexFromScrollPos(H);s(k)}e.emit("dragEnd",{index:c.currentIndex,fromIndex:M}),o.removeEventListener("pointermove",D),o.removeEventListener("pointerup",R),o.removeEventListener("pointercancel",R),e.config.autoplay&&t()}o.addEventListener("pointermove",D),o.addEventListener("pointerup",R),o.addEventListener("pointercancel",R)}function p(E){E.preventDefault()}function A(E){E!==i&&(E?(o.addEventListener("pointerdown",L),o.addEventListener("dragstart",p),i=!0):(o.removeEventListener("pointerdown",L),o.removeEventListener("dragstart",p),i=!1))}return{setEnabled:A,isActive:()=>i}}function Ie(e,g,s){let d=null,t=null,v=s,o=g;function c(){d&&(d.removeEventListener("click",v),d=null),t&&(t.removeEventListener("click",o),t=null)}function i(){c(),d=e.container.querySelector(".aero-slider__nav--prev"),t=e.container.querySelector(".aero-slider__nav--next");let S=e.config.direction==="rtl";v=S?g:s,o=S?s:g,d&&d.addEventListener("click",v),t&&t.addEventListener("click",o),r()}function r(){let S=e.getMaxIndex(),L=S>0,p=e.config.direction==="rtl",A=!L||!e.isLoopEnabled()&&e.state.currentIndex===0,E=!L||!e.isLoopEnabled()&&e.state.currentIndex>=S;d&&(d.disabled=p?E:A),t&&(t.disabled=p?A:E)}return{build:i,clear:c,refresh:r}}function _e(e,g){let s=null,d=null,t=null,v=[],o=!1,c=10,i=8;function r(a){let f=a.target.closest(".aero-slider__dot");if(!f||!s)return;let h=f.getAttribute("data-slide-index");h!==null&&g(Number(h))}function S(){if(s){s.removeEventListener("click",r),d?.remove(),d=null,t&&(t.style.display="");let a=s.querySelectorAll(".aero-slider__dot");for(let f=1;f<a.length;f++)a[f]?.remove();s.querySelectorAll(".aero-slider__pagination-label").forEach(f=>f.remove()),s=null}t=null,v=[],o=!1}function L(){return e.isLoopEnabled()?e.slideCount:e.getMaxIndex()+1}function p(){if(s=e.container.querySelector(".aero-slider__pagination"),!s||(t=s.querySelector(".aero-slider__dot"),!t))return;t.style.display==="none"&&(t.style.display=""),t.style.transform="",t.style.opacity="",t.offsetWidth;let f=getComputedStyle(t);c=parseFloat(f.width)||10;let h=getComputedStyle(s);i=parseInt(h.gap)||8,s.setAttribute("role","tablist"),s.addEventListener("click",r);let m=L(),T=e.config.maxDots;o=T>0&&m>T,d?.remove();let C=s.querySelectorAll(".aero-slider__dot");for(let b=1;b<C.length;b++)C[b]?.remove();if(s.querySelectorAll(".aero-slider__pagination-label").forEach(b=>b.remove()),o){s.classList.add("aero-slider__pagination--windowed");let b=T*c+(T-1)*i;s.style.setProperty("--pagination-width",`${b}px`),d=document.createElement("div"),d.className="aero-slider__pagination-track",t.style.display="none";for(let M=0;M<m;M++){let D=t.cloneNode(!0);D.style.display="",d.appendChild(D)}s.appendChild(d)}else{s.classList.remove("aero-slider__pagination--windowed"),s.style.removeProperty("--pagination-width"),t.style.display="";for(let b=1;b<m;b++){let M=t.cloneNode(!0);s.appendChild(M)}}v=Array.from((o&&d?d:s).querySelectorAll(".aero-slider__dot")),v.forEach((b,M)=>{b.setAttribute("role","tab"),b.setAttribute("data-slide-index",String(M)),b.setAttribute("aria-label",`Go to slide ${M+1}`)}),u()}function A(a,f,h,m){if(a<0||a>=f)return"aero-slider__dot--hidden";let T=a===0,C=a===f-1,I=a===1,b=a===f-2;return T&&!h?"aero-slider__dot--edge":I&&!h?"aero-slider__dot--near-edge":C&&!m?"aero-slider__dot--edge":b&&!m?"aero-slider__dot--near-edge":null}function E(a){a.classList.remove("aero-slider__dot--hidden","aero-slider__dot--edge","aero-slider__dot--near-edge")}function u(){let a=L(),f=e.state.currentIndex,h=e.config.maxDots;if(o&&h>0&&d){let m=Math.floor(h/2),T=c+i,C=f-m;C=Math.max(0,Math.min(C,a-h)),d.style.setProperty("--track-offset",`${-C*T}px`);let I=C===0,b=C>=a-h;v.forEach((M,D)=>{let R=D===f;M.classList.toggle("aero-slider__dot--active",R),M.setAttribute("aria-selected",String(R)),E(M);let V=A(D-C,h,I,b);V&&M.classList.add(V)})}else v.forEach((m,T)=>{let C=T===f;m.classList.toggle("aero-slider__dot--active",C),m.setAttribute("aria-selected",String(C)),E(m)})}return{build:p,clear:S,refresh:u}}function xe(e,g,s){let d=!1;function t(o){let c=e.config.direction;c==="ttb"?o.key==="ArrowUp"?(o.preventDefault(),s()):o.key==="ArrowDown"&&(o.preventDefault(),g()):c==="rtl"?o.key==="ArrowRight"?(o.preventDefault(),s()):o.key==="ArrowLeft"&&(o.preventDefault(),g()):o.key==="ArrowLeft"?(o.preventDefault(),s()):o.key==="ArrowRight"&&(o.preventDefault(),g())}function v(o){o!==d&&(o?(e.container.setAttribute("tabindex","0"),e.container.addEventListener("keydown",t),d=!0):(e.container.removeAttribute("tabindex"),e.container.removeEventListener("keydown",t),d=!1))}return{setEnabled:v}}function we(e,g){let s=null,d=!1,t=null;function v(){e.config.autoplay&&(o(),s=setInterval(()=>{if(!e.state.loopModeActive&&e.state.currentIndex>=e.getMaxIndex()){o();return}g()},e.config.autoplayInterval),e.emit("autoplayStart",{index:e.state.currentIndex}))}function o(){s!==null&&(clearInterval(s),s=null,e.emit("autoplayStop",{index:e.state.currentIndex}))}function c(){o()}function i(){e.config.autoplay&&v()}function r(){t!==null&&(clearTimeout(t),t=null),o()}function S(){e.config.autoplay&&(t=setTimeout(()=>{t=null,e.config.autoplay&&v()},1e3))}function L(p){p!==d&&(p?(e.container.addEventListener("mouseenter",c),e.container.addEventListener("mouseleave",i),e.track.addEventListener("touchstart",r,{passive:!0}),e.track.addEventListener("touchend",S,{passive:!0}),e.track.addEventListener("touchcancel",S,{passive:!0}),d=!0):(e.container.removeEventListener("mouseenter",c),e.container.removeEventListener("mouseleave",i),e.track.removeEventListener("touchstart",r),e.track.removeEventListener("touchend",S),e.track.removeEventListener("touchcancel",S),t!==null&&(clearTimeout(t),t=null),d=!1))}return{start:v,pause:o,setHoverPause:L}}function Ke(e,g={}){let s=e,d=e.querySelector(".aero-slider__track");if(!d)throw new Error("aero-slider: missing .aero-slider__track");let t=d,v=Array.from(t.children).filter(n=>!n.hasAttribute(z)),o=v.length;if(o===0)throw new Error("aero-slider: no slides found");v.forEach((n,l)=>n.setAttribute($,String(l)));function c(){let n=getComputedStyle(e),l=parseFloat(n.getPropertyValue("--slides-per-view")?.trim()||"")||J.slidesPerView,y=n.getPropertyValue("--slide-gap")?.trim()||"0px",x=parseFloat(y)||J.gap,_=n.getPropertyValue("--slide-aspect")?.trim()||J.aspectRatio;return{slidesPerView:l,gap:x,aspectRatio:_}}let i={...he,...g,...J},r={currentIndex:0,isDragging:!1,isDestroyed:!1,loopModeActive:!1,isProgrammaticScroll:!1,slideWidthPx:0},S=new Map,L=null,p=null,A=null,E=null,u=null;function a(n,l){S.get(n)?.forEach(y=>y(l))}function f(){return i.direction==="ttb"}function h(){return i.slidesPerView%1!==0?Math.max(0,o-1):Math.max(0,Math.floor(o-i.slidesPerView))}function m(){return i.slidesPerView%1!==0}function T(){return i.loop&&h()>0}function C(){return i.perMove>0?i.perMove:1}function I(n){let l=h();return T()?(Math.trunc(n)%o+o)%o:Math.max(0,Math.min(n,l))}function b(){return i.direction==="rtl"?-t.scrollLeft:i.direction==="ttb"?t.scrollTop:t.scrollLeft}function M(n){i.direction==="rtl"?t.scrollLeft=-n:i.direction==="ttb"?t.scrollTop=n:t.scrollLeft=n}function D(n,l="auto"){i.direction==="ttb"?t.scrollTo({top:n,behavior:l}):i.direction==="rtl"?t.scrollTo({left:-n,behavior:l}):t.scrollTo({left:n,behavior:l})}function R(){return f()?t.clientHeight:t.clientWidth}function V(){return f()?t.scrollHeight:t.scrollWidth}function P(){if(r.slideWidthPx>0)return r.slideWidthPx;let n=v[0];if(!n)return 0;let l=n.getBoundingClientRect();return r.slideWidthPx=(f()?l.height:l.width)+i.gap,r.slideWidthPx}function H(){r.slideWidthPx=0,P()}function k(){Object.assign(i,c())}function O(n){let l=P();if(l===0)return 0;if(!m())return n*l;let y=R(),x=l-i.gap;if(r.loopModeActive)return n*l+x/2-y/2;let _=h();return n<=0?0:n>=_?V()-R():n*l+x/2-y/2}function B(n){let l=P();if(l===0)return r.currentIndex;let y=r.loopModeActive?o-1:h(),x=V()-R();if(!m()){let oe=Math.round(n/l);return Math.max(0,Math.min(oe,y))}if(x<=0||n<=1)return 0;if(n>=x-1)return y;let _=R(),q=l-i.gap,re=n+_/2,ne=Math.round((re-q/2)/l);return Math.max(0,Math.min(ne,y))}function U(){let n=Array.from(t.children);if(!m()){for(let l of n)l.style.scrollSnapAlign="";return}if(r.loopModeActive){for(let l of n)l.style.scrollSnapAlign="center";return}for(let l of n)l.style.scrollSnapAlign="center"}function G(){e.classList.remove("aero-slider--rtl","aero-slider--vertical"),e.removeAttribute("dir"),i.direction==="rtl"?(e.setAttribute("dir","rtl"),e.classList.add("aero-slider--rtl")):i.direction==="ttb"&&e.classList.add("aero-slider--vertical")}let N=new Set;function X(){let n=new Set,l=Math.ceil(i.slidesPerView);for(let y=0;y<l;y++){let x=r.currentIndex+y;if(r.loopModeActive)x=(x%o+o)%o;else if(x>=o)break;n.add(x)}return n}function Q(){let n=X();for(let l of N)n.has(l)||a("hidden",{index:l});for(let l of n)N.has(l)||a("visible",{index:l});N.clear();for(let l of n)N.add(l)}let j={container:e,track:t,get slides(){return v},get slideCount(){return o},get config(){return i},state:r,listeners:S,emit:a,getSlideSize:P,recalcSlideMetrics:H,normalizeIndex:I,getMaxIndex:h,getEffectivePerMove:C,isLoopEnabled:T,isFractionalView:m,isVertical:f,getScrollPos:b,setScrollPos:M,scrollToPos:D,getScrollPosForIndex:O,getIndexFromScrollPos:B,refreshPagination:()=>F.refresh(),refreshNavState:()=>Y.refresh(),applySnapAlignment:U},w=Ae(j),Y=Ie(j,te,ae),F=_e(j,Z),le=xe(j,te,ae),W=we(j,te),se=Ce(j,w,Z,W.pause,W.start);function ee(){if(r.isDragging||r.isProgrammaticScroll)return;let n=r.loopModeActive?w.getLoopIndexFromScroll():B(b());n!==r.currentIndex&&(r.currentIndex=n,a("slideChange",{index:r.currentIndex}),F.refresh(),Y.refresh(),Q())}function He(){p=null,r.isProgrammaticScroll=!1,K===null&&(t.style.scrollSnapType=""),ee()}function pe(){r.loopModeActive&&w.scheduleTeleport(),p!==null&&clearTimeout(p),p=setTimeout(He,be),L===null&&(L=requestAnimationFrame(()=>{L=null,ee()}))}let K=null;function ve(){r.isDragging||(t.style.scrollSnapType="none",K!==null&&clearTimeout(K),K=setTimeout(()=>{K=null,t.style.scrollSnapType=""},Te))}function ge(){if(H(),r.loopModeActive){let n=P();if(n>0){let l=w.getLoopRealStart(),y=l+r.currentIndex*n;if(m()){let x=R(),_=n-i.gap;y=l+r.currentIndex*n+_/2-x/2}M(y)}}else M(O(r.currentIndex))}function Se(){r.isDestroyed||(E===null&&(t.style.scrollSnapType="none",r.isProgrammaticScroll=!0),u===null&&(u=requestAnimationFrame(()=>{u=null,r.isDestroyed||ge()})),E!==null&&clearTimeout(E),E=setTimeout(()=>{E=null,!r.isDestroyed&&(ge(),r.isProgrammaticScroll=!1,t.style.scrollSnapType="")},fe))}let Re=["--slides-per-view","--slide-gap","--slide-aspect"];function ke(){A?.(),A=Le(e,Re,()=>{r.isDestroyed||(a("resize",{index:r.currentIndex}),Ee(),a("resized",{index:r.currentIndex}))},{debounceMs:fe,maxWaitMs:ye})}function te(){r.isDestroyed||Z(I(r.currentIndex+C()))}function ae(){r.isDestroyed||Z(I(r.currentIndex-C()))}function Z(n){if(r.isDestroyed)return;let l=I(n),y=P();if(y!==0){if(l!==r.currentIndex&&(r.currentIndex=l,a("slideChange",{index:r.currentIndex}),F.refresh(),Y.refresh(),Q()),r.loopModeActive){w.cancelTeleport(),r.isProgrammaticScroll=!0;let x=w.getLoopIndexFromScroll(),_=(l-x+o)%o,q=_-o,re=Math.abs(q)<_?q:_;if(re===0){let ne=w.getLoopRealStart(),oe=ne+l*y;if(m()){let Be=R(),Ue=y-i.gap;oe=ne+l*y+Ue/2-Be/2}D(oe,"smooth"),w.scheduleTeleport();return}D(b()+re*y,"smooth"),w.scheduleTeleport();return}r.isProgrammaticScroll=!0,D(O(l),"smooth")}}function Ee(n){let l=i;if(i={...i,...c(),...n??{}},l.direction!==i.direction&&G(),k(),H(),se.setEnabled(i.draggable),le.setEnabled(!0),W.setHoverPause(i.autoplay),(l.slidesPerView!==i.slidesPerView||l.loop!==i.loop||l.maxDots!==i.maxDots||l.perMove!==i.perMove)&&(F.clear(),F.build()),(l.autoplay!==i.autoplay||l.autoplayInterval!==i.autoplayInterval||l.loop!==i.loop)&&(i.autoplay?W.start():W.pause()),l.loop!==i.loop?T()?w.setupLoopTrack(r.currentIndex):w.teardownLoopTrack(r.currentIndex):r.loopModeActive&&l.slidesPerView!==i.slidesPerView&&w.setupLoopTrack(r.currentIndex),U(),!r.loopModeActive){let y=I(r.currentIndex);r.currentIndex=y,D(O(y))}ee(),F.refresh(),Y.refresh(),Q()}function de(){if(!r.isDestroyed&&(r.loopModeActive&&w.teardownLoopTrack(r.currentIndex),v=Array.from(t.children).filter(n=>!n.hasAttribute(z)),o=v.length,o!==0)){if(v.forEach((n,l)=>{n.setAttribute($,String(l)),n.classList.add("aero-slider__slide")}),k(),H(),T()&&w.setupLoopTrack(r.currentIndex),U(),!r.loopModeActive){let n=I(r.currentIndex);r.currentIndex=n,D(O(n))}F.clear(),F.build(),Y.build(),ee(),Q()}}function Ve(n,l){if(r.isDestroyed)return;let y=Array.isArray(n)?n:[n];r.loopModeActive&&w.teardownLoopTrack(r.currentIndex);let x=Array.from(t.children).filter(_=>!_.hasAttribute(z));if(l!==void 0&&l<x.length){let _=x[l]??null;for(let q of y)t.insertBefore(q,_)}else for(let _ of y)t.appendChild(_);de()}function Oe(n){if(r.isDestroyed)return;let l=Array.isArray(n)?n:[n];r.loopModeActive&&w.teardownLoopTrack(r.currentIndex);let y=Array.from(t.children).filter(_=>!_.hasAttribute(z)),x=[...l].sort((_,q)=>q-_);for(let _ of x)_>=0&&_<y.length&&y[_].remove();de()}function Ne(n,l){S.has(n)||S.set(n,new Set),S.get(n).add(l)}function Fe(n,l){S.get(n)?.delete(l)}function ze(){r.isDestroyed||(a("destroy",{index:r.currentIndex}),r.isDestroyed=!0,W.pause(),r.loopModeActive&&w.teardownLoopTrack(r.currentIndex),w.cancelTeleport(),r.isProgrammaticScroll=!1,A?.(),A=null,window.removeEventListener("resize",Se),E!==null&&(clearTimeout(E),E=null),u!==null&&(cancelAnimationFrame(u),u=null),t.removeEventListener("scroll",pe),t.removeEventListener("wheel",ve),K!==null&&clearTimeout(K),p!==null&&clearTimeout(p),se.setEnabled(!1),le.setEnabled(!1),W.setHoverPause(!1),L!==null&&cancelAnimationFrame(L),Y.clear(),F.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"),s.aeroSlider===ce&&delete s.aeroSlider,S.clear())}e.removeAttribute("data-aero-defer-visibility"),k(),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");G(),k(),H(),U(),t.addEventListener("scroll",pe,{passive:!0}),t.addEventListener("wheel",ve,{passive:!0}),window.addEventListener("resize",Se),T()?w.setupLoopTrack(0):M(0),ke(),se.setEnabled(i.draggable),le.setEnabled(!0),W.setHoverPause(i.autoplay),Y.build(),F.build(),i.autoplay&&W.start();let We=X();for(let n of We)N.add(n);for(let n of N)a("visible",{index:n});let ce={get element(){return e},next:te,prev:ae,goTo:Z,destroy:ze,update:Ee,refresh:de,add:Ve,remove:Oe,on:Ne,off:Fe,get currentIndex(){return r.currentIndex},get slideCount(){return o}};return s.aeroSlider=ce,e.classList.add("aero-slider--ready"),a("ready",{index:r.currentIndex}),ce}var De="aero-slider__thumb--active";function me(e,g,s){e.querySelectorAll(":scope > *").forEach(t=>{let v=s(t);t.classList.toggle(De,v===g)})}function Pe(e,g,s){let d=e.clientWidth,t=e.scrollLeft,v=Array.from(e.children).filter(i=>s(i)===g);if(v.length===0)return;let o=0,c=1/0;for(let i of v){let S=i.offsetLeft+i.offsetWidth/2-d/2,L=e.scrollWidth-d,p=Math.max(0,Math.min(S,L)),A=Math.abs(p-t);A<c&&(c=A,o=p)}e.scrollTo({left:o,behavior:"smooth"})}function Xe(e,g,s){let d=g.element.querySelector(".aero-slider__track");if(!d)return()=>{};let t=d,v=s?.loop??!0;g.update({draggable:!1,loop:v});let o=Array.from(t.children).filter(u=>u.hasAttribute("data-aero-slider-index"));o.sort((u,a)=>Number(u.getAttribute("data-aero-slider-index"))-Number(a.getAttribute("data-aero-slider-index")));let c=o.length,i=Array.from(t.children).indexOf(o[0]??t),r=[];function S(u){let a=u.getAttribute("data-aero-slider-index");if(a!==null)return Number(a);let f=Array.from(t.children).indexOf(u);return f<i?f%c:(f-i-c)%c}let L=null,p=null;Array.from(t.children).forEach(u=>{let a=u,f=()=>{let h=S(a);L=h,me(t,h,S),e.goTo(h)};a.addEventListener("click",f),a.style.cursor="pointer",r.push({el:a,fn:f})});let A=null,E=u=>{if(L!==null){u.index===L?(p!==null&&clearTimeout(p),p=setTimeout(()=>{p=null,L=null},200)):p!==null&&(clearTimeout(p),p=null);return}A!==null&&clearTimeout(A),A=setTimeout(()=>{A=null,me(t,u.index,S),Pe(t,u.index,S)},50)};return e.on("slideChange",E),me(t,e.currentIndex,S),Pe(t,e.currentIndex,S),()=>{A!==null&&clearTimeout(A),p!==null&&clearTimeout(p),L=null,r.forEach(({el:u,fn:a})=>u.removeEventListener("click",a)),t.querySelectorAll(":scope > *").forEach(u=>u.classList.remove(De)),e.off("slideChange",E)}}export{Ke as createSlider,Xe as syncThumbnails};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aero-slider",
3
- "version": "1.0.0-beta.0",
3
+ "version": "1.0.0-beta.2",
4
4
  "description": "A lightweight, CSS-first slider library for the modern web",
5
5
  "type": "module",
6
6
  "workspaces": [