aero-slider 1.0.0-beta.4 → 1.0.0-beta.6

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.
@@ -1,10 +1,11 @@
1
+ type SliderAlignment = "left" | "center" | "right";
1
2
  interface SliderConfig {
2
3
  loop?: boolean;
3
4
  autoplay?: boolean;
4
5
  autoplayInterval?: number;
5
6
  draggable?: boolean;
6
- /** Keep currentIndex as the centered slide when possible (clamps at ends without loop). */
7
- centered?: boolean;
7
+ /** Align the active slide to the left, center, or right when possible. */
8
+ alignment?: SliderAlignment;
8
9
  /** Maximum number of pagination dots to show. Beyond this, edge indicators are used. */
9
10
  maxDots?: number;
10
11
  noDrag?: string;
@@ -21,18 +22,35 @@ interface SliderInstance {
21
22
  refresh(): void;
22
23
  add(slides: HTMLElement | HTMLElement[], index?: number): void;
23
24
  remove(index: number | number[]): void;
24
- on(event: SliderEvent, callback: SliderEventCallback): void;
25
- off(event: SliderEvent, callback: SliderEventCallback): void;
26
25
  readonly currentIndex: number;
27
26
  readonly slideCount: number;
28
27
  }
29
- type SliderEvent = "slideChange" | "dragStart" | "dragEnd" | "autoplayStart" | "autoplayStop" | "ready" | "destroy" | "resize" | "resized" | "visible" | "hidden";
30
- /** Event payload. dragEnd includes fromIndex (slide index at drag start). */
31
- type SliderEventData = {
32
- index: number;
33
- fromIndex?: number;
34
- };
35
- type SliderEventCallback = (data: SliderEventData) => void;
28
+ type SliderEvent = "ready" | "slideChange" | "dragStart" | "dragEnd" | "autoplayStart" | "autoplayStop" | "destroy" | "resize" | "resized" | "visible" | "hidden";
29
+ interface SliderEventMap {
30
+ ready: {};
31
+ slideChange: {
32
+ index: number;
33
+ };
34
+ dragStart: {
35
+ index: number;
36
+ };
37
+ dragEnd: {
38
+ index: number;
39
+ fromIndex: number;
40
+ };
41
+ autoplayStart: {};
42
+ autoplayStop: {};
43
+ destroy: {};
44
+ resize: {};
45
+ resized: {};
46
+ visible: {
47
+ index: number;
48
+ };
49
+ hidden: {
50
+ index: number;
51
+ };
52
+ }
53
+ type SliderEventData<E extends SliderEvent = SliderEvent> = SliderEventMap[E];
36
54
  declare global {
37
55
  interface HTMLElement {
38
56
  aeroSlider?: SliderInstance;
@@ -65,4 +83,4 @@ declare global {
65
83
  }
66
84
  }
67
85
 
68
- export { type SliderConfig, type SliderEvent, type SliderEventCallback, type SliderEventData, type SliderInstance, type SyncThumbnailsOptions, createSlider, syncThumbnails };
86
+ export { type SliderAlignment, type SliderConfig, type SliderEvent, type SliderEventData, type SliderInstance, type SyncThumbnailsOptions, createSlider, syncThumbnails };
@@ -1 +1 @@
1
- .aero-slider{position:relative;width:100%;min-width:0;min-height:0;display:flex;flex-direction:column;--slide-aspect: 5 / 3;--slides-per-view: 1;--slide-gap: 0px}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track:before{content:"";flex:0 0 max(0px,calc(50% - (100% - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / (2 * var(--slides-per-view, 1)) - var(--slide-gap, 0px)));scroll-snap-align:none}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track>*{scroll-snap-align:center}.aero-slider__viewport{position:relative;width:100%;min-width:0;min-height:0;overflow:hidden;contain:paint}.aero-slider__track{min-height:0;display:flex;flex-direction:row;flex-wrap:nowrap;width:100%;min-width:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;touch-action:manipulation;overscroll-behavior-x:contain;overflow-anchor:none;gap:var(--slide-gap, 0px);cursor:grab;transform:translateZ(0);backface-visibility:hidden;scrollbar-width:none;-ms-overflow-style:none}.aero-slider__track::-webkit-scrollbar{display:none}.aero-slider__track:focus{outline:none}.aero-slider__track:focus-visible{outline:2px solid currentColor;outline-offset:2px}.aero-slider__slide,.aero-slider__track>*{flex:0 0 calc((100% - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / var(--slides-per-view, 1));flex-shrink:0;flex-grow:0;scroll-snap-align:start;aspect-ratio:var(--slide-aspect, 16 / 9);display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;contain:layout style paint;overflow:hidden;content-visibility:auto;contain-intrinsic-size:auto 100%}.aero-slider__slide>*,.aero-slider__track>*>*{flex:1;min-width:0;min-height:0}.aero-slider--dragging{user-select:none}.aero-slider--dragging .aero-slider__track{cursor:grabbing;scroll-snap-type:none}.aero-slider__nav--prev,.aero-slider__nav--next{touch-action:manipulation}.aero-slider__pagination{display:flex;flex-wrap:nowrap;gap:8px;flex-shrink:0;justify-content:center;align-items:center;padding:12px 0 16px;min-height:44px;box-sizing:border-box}.aero-slider__dot{touch-action:manipulation;cursor:pointer;flex-shrink:0;transition:transform .2s ease-out,opacity .2s ease-out}.aero-slider__pagination--windowed{width:calc(var(--pagination-width) + 12px);max-width:calc(100% + 12px);margin-left:auto;margin-right:auto;overflow:hidden;justify-content:flex-start;padding-left:6px;padding-right:6px;box-sizing:border-box}.aero-slider__pagination-track{display:flex;gap:inherit;align-items:center;transform:translate(var(--track-offset, 0));transition:transform .3s cubic-bezier(.4,0,.2,1)}.aero-slider__dot--hidden{transform:scale(.4);opacity:0}.aero-slider__dot--edge{transform:scale(.6)}.aero-slider__dot--near-edge{transform:scale(.8)}.aero-slider--rtl .aero-slider__track{direction:rtl}.aero-slider--vertical .aero-slider__viewport{aspect-ratio:var(--slide-aspect, 5 / 3);overflow:hidden}.aero-slider--vertical .aero-slider__track{flex-direction:column;overflow-x:hidden;overflow-y:auto;scroll-snap-type:y mandatory;overscroll-behavior-x:initial;overscroll-behavior-y:contain;min-width:initial;height:100%;min-height:100%}.aero-slider--vertical .aero-slider__slide,.aero-slider--vertical .aero-slider__track>*{flex:0 0 calc((100% - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / var(--slides-per-view, 1));aspect-ratio:initial;width:100%}
1
+ .aero-slider{position:relative;width:100%;min-width:0;min-height:0;display:flex;flex-direction:column;--slide-aspect: 5 / 3;--slides-per-view: 1;--slide-gap: 0px;--aero-layout-width: 100%;--aero-edge-inset: 0px}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready){--aero-defer-offset: calc( var(--aero-layout-width, 100%) / 2 - (var(--aero-layout-width, 100%) - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / (2 * var(--slides-per-view, 1)) )}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready)[data-aero-alignment=left]{--aero-defer-offset: 0px}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready)[data-aero-alignment=right]{--aero-defer-offset: calc( var(--aero-layout-width, 100%) - (var(--aero-layout-width, 100%) - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / var(--slides-per-view, 1) )}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track:before{content:"";flex:0 0 max(0px,calc(var(--aero-defer-offset, 0px) - var(--slide-gap, 0px)));scroll-snap-align:none}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready) .aero-slider__track>*{scroll-snap-align:center}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready)[data-aero-alignment=left] .aero-slider__track>*{scroll-snap-align:start}.aero-slider[data-aero-defer-visibility]:not(.aero-slider--ready)[data-aero-alignment=right] .aero-slider__track>*{scroll-snap-align:end}.aero-slider__viewport{position:relative;width:100%;min-width:0;min-height:0;overflow:hidden;contain:paint}.aero-slider--breakout .aero-slider__viewport{overflow:visible;contain:layout style}.aero-slider__track{min-height:0;display:flex;flex-direction:row;flex-wrap:nowrap;width:100%;min-width:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;touch-action:manipulation;overscroll-behavior-x:contain;overflow-anchor:none;gap:var(--slide-gap, 0px);cursor:grab;transform:translateZ(0);backface-visibility:hidden;scrollbar-width:none;-ms-overflow-style:none}.aero-slider__track::-webkit-scrollbar{display:none}.aero-slider--breakout.aero-slider--ready .aero-slider__track:before,.aero-slider--breakout.aero-slider--ready .aero-slider__track:after,.aero-slider--breakout:not([data-aero-defer-visibility]) .aero-slider__track:before,.aero-slider--breakout:not([data-aero-defer-visibility]) .aero-slider__track:after{content:"";flex:0 0 max(0px,calc(var(--aero-edge-inset, 0px) - var(--slide-gap, 0px)));scroll-snap-align:none;pointer-events:none}.aero-slider__track:focus{outline:none}.aero-slider__track:focus-visible{outline:2px solid currentColor;outline-offset:2px}.aero-slider__slide,.aero-slider__track>*{flex:0 0 calc((var(--aero-layout-width, 100%) - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / var(--slides-per-view, 1));flex-shrink:0;flex-grow:0;scroll-snap-align:start;aspect-ratio:var(--slide-aspect, 16 / 9);display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;contain:layout style paint;overflow:hidden}.aero-slider__slide>*,.aero-slider__track>*>*{flex:1;min-width:0;min-height:0}.aero-slider--dragging{user-select:none}.aero-slider--dragging .aero-slider__track{cursor:grabbing;scroll-snap-type:none}.aero-slider__nav--prev,.aero-slider__nav--next{touch-action:manipulation}.aero-slider__pagination{display:flex;flex-wrap:nowrap;gap:8px;flex-shrink:0;justify-content:center;align-items:center;padding:12px 0 16px;min-height:44px;box-sizing:border-box}.aero-slider__dot{touch-action:manipulation;cursor:pointer;flex-shrink:0;transition:transform .2s ease-out,opacity .2s ease-out}.aero-slider__pagination--windowed{width:calc(var(--pagination-width) + 12px);max-width:calc(100% + 12px);margin-left:auto;margin-right:auto;overflow:hidden;justify-content:flex-start;padding-left:6px;padding-right:6px;box-sizing:border-box}.aero-slider__pagination-track{display:flex;gap:inherit;align-items:center;transform:translate(var(--track-offset, 0));transition:transform .3s cubic-bezier(.4,0,.2,1)}.aero-slider__dot--hidden{transform:scale(.4);opacity:0}.aero-slider__dot--edge{transform:scale(.6)}.aero-slider__dot--near-edge{transform:scale(.8)}.aero-slider--rtl .aero-slider__track{direction:rtl}.aero-slider--vertical .aero-slider__viewport{aspect-ratio:var(--slide-aspect, 5 / 3);overflow:hidden}.aero-slider--vertical .aero-slider__track{flex-direction:column;overflow-x:hidden;overflow-y:auto;scroll-snap-type:y mandatory;overscroll-behavior-x:initial;overscroll-behavior-y:contain;min-width:initial;height:100%;min-height:100%}.aero-slider--vertical .aero-slider__slide,.aero-slider--vertical .aero-slider__track>*{flex:0 0 calc((100% - var(--slide-gap, 0px) * (var(--slides-per-view, 1) - 1)) / var(--slides-per-view, 1));aspect-ratio:initial;width:100%;min-height:0}
@@ -1 +1 @@
1
- var Ee={loop:!1,autoplay:!1,autoplayInterval:5e3,draggable:!0,centered:!0,maxDots:0,noDrag:"",perMove:0,direction:"ltr"},ee={slidesPerView:1,gap:0,aspectRatio:"16 / 9"},be=5,fe=.3,le=80,he=250,Le=300,pe=100,Te=250,$="data-aero-slider-index",q="data-aero-slider-clone";function Ae(e,p,a,c={}){let o=c.debounceMs??100,S=c.maxWaitMs??250,n="",m=null,L=null;function s(){let h=getComputedStyle(e);return p.map(C=>h.getPropertyValue(C).trim()).join("\0")}function t(){m!==null&&(clearTimeout(m),m=null),L=null;let h=s();h!==n&&(n=h,a())}function T(){let h=Date.now();if(L===null&&(L=h),h-L>=S){t();return}m!==null&&clearTimeout(m),m=setTimeout(t,o)}return n=s(),window.addEventListener("resize",T),()=>{window.removeEventListener("resize",T),m!==null&&(clearTimeout(m),m=null)}}var Ke=50,Ge=2,Me=3;function Ce(e){let{track:p,state:a}=e,c=null,o=Me;function S(){let y=Math.ceil(e.config.slidesPerView)+Ge;return Math.max(Me,Math.ceil(y/e.slideCount))}function n(){return o*e.slideCount*a.slideWidthPx}function m(){return(o+1)*e.slideCount*a.slideWidthPx}function L(y){a.isProgrammaticScroll=!0,p.style.scrollBehavior="auto",p.style.scrollSnapType="none",e.setScrollPos(y),requestAnimationFrame(()=>{requestAnimationFrame(()=>{p.style.scrollBehavior="",p.style.scrollSnapType="",a.isProgrammaticScroll=!1})})}function s(){if(!a.loopModeActive)return;let y=a.slideWidthPx;if(y===0)return;let l=e.slideCount*y,d=n(),f=m(),u=e.getScrollPos(),g=2;if(u<d-g||u>=f+g){for(;u<d;)u+=l;for(;u>=f;)u-=l;L(u)}}function t(){c!==null&&clearTimeout(c),c=setTimeout(()=>{c=null,s()},Ke)}function T(){c!==null&&(clearTimeout(c),c=null)}function h(){let y=a.slideWidthPx;if(y===0)return a.currentIndex;let l=e.isVertical()?p.clientHeight:p.clientWidth;if(e.isFractionalView()){let u=y-e.config.gap,g=e.getScrollPos()+l/2,E=n();return(Math.round((g-E-u/2)/y)%e.slideCount+e.slideCount)%e.slideCount}let d=e.getScrollPos()-n();return(Math.round(d/y)%e.slideCount+e.slideCount)%e.slideCount}function C(y){if(!e.isLoopEnabled()){a.loopModeActive&&I(y);return}o=S(),p.querySelectorAll(`[${q}]`).forEach(f=>f.remove());let{slides:l,slideCount:d}=e;for(let f=0;f<o;f++)for(let u=d-1;u>=0;u--){let g=l[u].cloneNode(!0);g.setAttribute(q,""),g.removeAttribute($),p.prepend(g)}for(let f=0;f<o;f++)for(let u=0;u<d;u++){let g=l[u].cloneNode(!0);g.setAttribute(q,""),g.removeAttribute($),p.append(g)}a.loopModeActive=!0,e.applySnapAlignment(),requestAnimationFrame(()=>{e.recalcSlideMetrics();let f=e.normalizeIndex(y);a.currentIndex=f;let u=a.slideWidthPx;if(u===0)return;let g=n(),E=g+f*u;if(e.isFractionalView()){let _=e.isVertical()?p.clientHeight:p.clientWidth,b=u-e.config.gap;E=g+f*u+b/2-_/2}a.isProgrammaticScroll=!0,p.style.scrollBehavior="auto",p.style.scrollSnapType="none",e.setScrollPos(E),requestAnimationFrame(()=>{requestAnimationFrame(()=>{p.style.scrollBehavior="",p.style.scrollSnapType="",a.isProgrammaticScroll=!1})})})}function I(y){T(),p.querySelectorAll(`[${q}]`).forEach(l=>l.remove()),a.loopModeActive=!1,e.recalcSlideMetrics(),a.currentIndex=Math.max(0,Math.min(y,e.getMaxIndex())),L(e.getScrollPosForIndex(a.currentIndex))}return{getLoopRealStart:n,getLoopRealEnd:m,getLoopIndexFromScroll:h,instantScrollTo:L,teleportIfNeeded:s,scheduleTeleport:t,setupLoopTrack:C,teardownLoopTrack:I,cancelTeleport:T}}function Ie(e,p,a,c,o){let{container:S,track:n,state:m}=e,L=!1,s=!1;function t(l){return e.isVertical()?l.clientY:l.clientX}function T(){return e.config.direction==="rtl"?-1:1}function h(l){if(l.button!==0||l.pointerType==="touch"||e.config.noDrag&&l.target.closest(e.config.noDrag))return;s=!1;let d=T(),f=t(l),u=e.getScrollPos(),g=u,E=null,_=0,b=f,x=performance.now(),k=!1,H=m.currentIndex;function V(){E=null,e.setScrollPos(g)}function Z(R){let P=t(R);if(!k){if(Math.abs(P-f)<be)return;k=!0,s=!0,n.setPointerCapture(R.pointerId),m.isDragging=!0,m.suppressSettleEmit=!1,n.style.scrollBehavior="auto",n.style.scrollSnapType="none",S.classList.add("aero-slider--dragging"),e.emit("dragStart",{index:H}),c()}R.preventDefault(),g=u+(f-P)*d,E===null&&(E=requestAnimationFrame(V));let D=performance.now(),F=D-x;if(F>0){if(F<100){let B=(b-P)*d/F;_=fe*B+(1-fe)*_}else _*=.5;b=P,x=D}}function O(){if(n.removeEventListener("pointermove",Z),n.removeEventListener("pointerup",O),n.removeEventListener("pointercancel",O),!k)return;m.isDragging=!1,S.classList.remove("aero-slider--dragging"),E!==null&&(cancelAnimationFrame(E),E=null,e.setScrollPos(g));let R=performance.now()-x;R>50&&(_*=Math.max(0,1-R/200));let P=e.getSlideSize();if(n.style.scrollBehavior="",P>0)if(m.loopModeActive){p.teleportIfNeeded();let D=p.getLoopRealStart(),F=e.getScrollPos(),B=e.isVertical()?n.clientHeight:n.clientWidth,Y,z;if(e.isFractionalView()){let K=P-e.config.gap,W=F+_*le+B/2;Y=Math.round((W-D-K/2)/P),z=D+Y*P+K/2-B/2}else{let W=F-D+_*le;Y=Math.round(W/P),z=D+Y*P}m.isProgrammaticScroll=!0,m.suppressSettleEmit=!0,e.scrollToPos(z,"smooth"),p.scheduleTeleport();let J=e.normalizeIndex(Y);J!==m.currentIndex&&(m.currentIndex=J,e.emit("slideChange",{index:m.currentIndex}),e.refreshPagination(),e.refreshNavState())}else{let D=e.getScrollPos()+_*le,F=e.getIndexFromScrollPos(D);a(F)}e.emit("dragEnd",{index:m.currentIndex,fromIndex:H}),e.config.autoplay&&o()}n.addEventListener("pointermove",Z),n.addEventListener("pointerup",O),n.addEventListener("pointercancel",O)}function C(l){s&&(l.preventDefault(),l.stopPropagation(),s=!1)}function I(l){l.preventDefault()}function y(l){l!==L&&(l?(n.addEventListener("pointerdown",h),n.addEventListener("click",C,{capture:!0}),n.addEventListener("dragstart",I),L=!0):(n.removeEventListener("pointerdown",h),n.removeEventListener("click",C,{capture:!0}),n.removeEventListener("dragstart",I),L=!1))}return{setEnabled:y,isActive:()=>L}}function xe(e,p,a){let c=null,o=null,S=a,n=p;function m(){c&&(c.removeEventListener("click",S),c=null),o&&(o.removeEventListener("click",n),o=null)}function L(){m(),c=e.container.querySelector(".aero-slider__nav--prev"),o=e.container.querySelector(".aero-slider__nav--next");let t=e.config.direction==="rtl";S=t?p:a,n=t?a:p,c&&c.addEventListener("click",S),o&&o.addEventListener("click",n),s()}function s(){let t=e.getMaxIndex(),T=t>0,h=e.config.direction==="rtl",C=!T||!e.isLoopEnabled()&&e.state.currentIndex===0,I=!T||!e.isLoopEnabled()&&e.state.currentIndex>=t;c&&(c.disabled=h?I:C),o&&(o.disabled=h?C:I)}return{build:L,clear:m,refresh:s}}function _e(e,p){let a=null,c=null,o=null,S=[],n=!1,m=10,L=8;function s(l){let d=l.target.closest(".aero-slider__dot");if(!d||!a)return;let f=d.getAttribute("data-slide-index");f!==null&&p(Number(f))}function t(){if(a){a.removeEventListener("click",s),c?.remove(),c=null,o&&(o.style.display="");let l=a.querySelectorAll(".aero-slider__dot");for(let d=1;d<l.length;d++)l[d]?.remove();a.querySelectorAll(".aero-slider__pagination-label").forEach(d=>d.remove()),a=null}o=null,S=[],n=!1}function T(){return e.isLoopEnabled()?e.slideCount:e.getMaxIndex()+1}function h(){if(a=e.container.querySelector(".aero-slider__pagination"),!a||(o=a.querySelector(".aero-slider__dot"),!o))return;o.style.display==="none"&&(o.style.display=""),o.style.transform="",o.style.opacity="",o.offsetWidth;let d=getComputedStyle(o);m=parseFloat(d.width)||10;let f=getComputedStyle(a);L=parseInt(f.gap)||8,a.setAttribute("role","tablist"),a.addEventListener("click",s);let u=T(),g=e.config.maxDots;n=g>0&&u>g,c?.remove();let E=a.querySelectorAll(".aero-slider__dot");for(let b=1;b<E.length;b++)E[b]?.remove();if(a.querySelectorAll(".aero-slider__pagination-label").forEach(b=>b.remove()),n){a.classList.add("aero-slider__pagination--windowed");let b=g*m+(g-1)*L;a.style.setProperty("--pagination-width",`${b}px`),c=document.createElement("div"),c.className="aero-slider__pagination-track",o.style.display="none";for(let x=0;x<u;x++){let k=o.cloneNode(!0);k.style.display="",c.appendChild(k)}a.appendChild(c)}else{a.classList.remove("aero-slider__pagination--windowed"),a.style.removeProperty("--pagination-width"),o.style.display="";for(let b=1;b<u;b++){let x=o.cloneNode(!0);a.appendChild(x)}}S=Array.from((n&&c?c:a).querySelectorAll(".aero-slider__dot")),S.forEach((b,x)=>{b.setAttribute("role","tab"),b.setAttribute("data-slide-index",String(x)),b.setAttribute("aria-label",`Go to slide ${x+1}`)}),y()}function C(l,d,f,u){if(l<0||l>=d)return"aero-slider__dot--hidden";let g=l===0,E=l===d-1,_=l===1,b=l===d-2;return g&&!f?"aero-slider__dot--edge":_&&!f?"aero-slider__dot--near-edge":E&&!u?"aero-slider__dot--edge":b&&!u?"aero-slider__dot--near-edge":null}function I(l){l.classList.remove("aero-slider__dot--hidden","aero-slider__dot--edge","aero-slider__dot--near-edge")}function y(){let l=T(),d=e.state.currentIndex,f=e.config.maxDots;if(n&&f>0&&c){let u=Math.floor(f/2),g=m+L,E=d-u;E=Math.max(0,Math.min(E,l-f)),c.style.setProperty("--track-offset",`${-E*g}px`);let _=E===0,b=E>=l-f;S.forEach((x,k)=>{let H=k===d;x.classList.toggle("aero-slider__dot--active",H),x.setAttribute("aria-selected",String(H)),I(x);let V=C(k-E,f,_,b);V&&x.classList.add(V)})}else S.forEach((u,g)=>{let E=g===d;u.classList.toggle("aero-slider__dot--active",E),u.setAttribute("aria-selected",String(E)),I(u)})}return{build:h,clear:t,refresh:y}}function we(e,p,a){let c=!1;function o(n){let m=e.config.direction;m==="ttb"?n.key==="ArrowUp"?(n.preventDefault(),a()):n.key==="ArrowDown"&&(n.preventDefault(),p()):m==="rtl"?n.key==="ArrowRight"?(n.preventDefault(),a()):n.key==="ArrowLeft"&&(n.preventDefault(),p()):n.key==="ArrowLeft"?(n.preventDefault(),a()):n.key==="ArrowRight"&&(n.preventDefault(),p())}function S(n){n!==c&&(n?(e.container.setAttribute("tabindex","0"),e.container.addEventListener("keydown",o),c=!0):(e.container.removeAttribute("tabindex"),e.container.removeEventListener("keydown",o),c=!1))}return{setEnabled:S}}function Pe(e,p){let a=null,c=!1,o=null;function S(){e.config.autoplay&&(n(),a=setInterval(()=>{if(!e.state.loopModeActive&&e.state.currentIndex>=e.getMaxIndex()){n();return}p()},e.config.autoplayInterval),e.emit("autoplayStart",{index:e.state.currentIndex}))}function n(){a!==null&&(clearInterval(a),a=null,e.emit("autoplayStop",{index:e.state.currentIndex}))}function m(){n()}function L(){e.config.autoplay&&S()}function s(){o!==null&&(clearTimeout(o),o=null),n()}function t(){e.config.autoplay&&(o=setTimeout(()=>{o=null,e.config.autoplay&&S()},1e3))}function T(h){h!==c&&(h?(e.container.addEventListener("mouseenter",m),e.container.addEventListener("mouseleave",L),e.track.addEventListener("touchstart",s,{passive:!0}),e.track.addEventListener("touchend",t,{passive:!0}),e.track.addEventListener("touchcancel",t,{passive:!0}),c=!0):(e.container.removeEventListener("mouseenter",m),e.container.removeEventListener("mouseleave",L),e.track.removeEventListener("touchstart",s),e.track.removeEventListener("touchend",t),e.track.removeEventListener("touchcancel",t),o!==null&&(clearTimeout(o),o=null),c=!1))}return{start:S,pause:n,setHoverPause:T}}function De(e,p={}){let a=e,c=e.querySelector(".aero-slider__track");if(!c)throw new Error("aero-slider: missing .aero-slider__track");let o=c,S=Array.from(o.children).filter(r=>!r.hasAttribute(q)),n=S.length;if(n===0)throw new Error("aero-slider: no slides found");S.forEach((r,i)=>r.setAttribute($,String(i)));function m(r,i){if(!r||r==="0"||r==="0px")return i;let v=document.createElement("div");v.style.position="absolute",v.style.visibility="hidden",v.style.width=r,e.appendChild(v);let M=v.offsetWidth;return e.removeChild(v),M||i}function L(){let r=getComputedStyle(e),i=parseFloat(r.getPropertyValue("--slides-per-view")?.trim()||"")||ee.slidesPerView,v=r.getPropertyValue("--slide-gap")?.trim()||"0px",M=m(v,ee.gap),A=r.getPropertyValue("--slide-aspect")?.trim()||ee.aspectRatio;return{slidesPerView:i,gap:M,aspectRatio:A}}let s={...Ee,...p,...ee},t={currentIndex:0,isDragging:!1,isDestroyed:!1,loopModeActive:!1,isProgrammaticScroll:!1,suppressSettleEmit:!1,slideWidthPx:0},T=new Map,h=null,C=null,I=null,y=null,l=null;function d(r,i){T.get(r)?.forEach(v=>v(i))}function f(){return s.direction==="ttb"}function u(){return g()?Math.max(0,n-1):Math.max(0,Math.floor(n-s.slidesPerView))}function g(){return s.centered||s.slidesPerView%1!==0}function E(){return s.loop&&u()>0}function _(){return s.perMove>0?s.perMove:1}function b(r){let i=u();return E()?(Math.trunc(r)%n+n)%n:Math.max(0,Math.min(r,i))}function x(){return s.direction==="rtl"?-o.scrollLeft:s.direction==="ttb"?o.scrollTop:o.scrollLeft}function k(r){s.direction==="rtl"?o.scrollLeft=-r:s.direction==="ttb"?o.scrollTop=r:o.scrollLeft=r}function H(r,i="auto"){s.direction==="ttb"?o.scrollTo({top:r,behavior:i}):s.direction==="rtl"?o.scrollTo({left:-r,behavior:i}):o.scrollTo({left:r,behavior:i})}function V(){return f()?o.clientHeight:o.clientWidth}function Z(){return f()?o.scrollHeight:o.scrollWidth}function O(){if(t.slideWidthPx>0)return t.slideWidthPx;let r=S[0];if(!r)return 0;let i=r.getBoundingClientRect();return t.slideWidthPx=(f()?i.height:i.width)+s.gap,t.slideWidthPx}function R(){t.slideWidthPx=0,O()}function P(){Object.assign(s,L())}function D(r){let i=O();if(i===0)return 0;if(!g())return r*i;let v=V(),M=i-s.gap;if(t.loopModeActive)return r*i+M/2-v/2;let A=u();return r<=0?0:r>=A?Z()-V():r*i+M/2-v/2}function F(r){let i=O();if(i===0)return t.currentIndex;let v=t.loopModeActive?n-1:u(),M=Z()-V();if(!g()){let ie=Math.round(r/i);return Math.max(0,Math.min(ie,v))}if(M<=0||r<=1)return 0;if(r>=M-1)return v;let A=V(),X=i-s.gap,oe=r+A/2,ne=Math.round((oe-X/2)/i);return Math.max(0,Math.min(ne,v))}function B(){let r=Array.from(o.children);if(!g()){for(let i of r)i.style.scrollSnapAlign="";return}if(t.loopModeActive){for(let i of r)i.style.scrollSnapAlign="center";return}for(let i of r)i.style.scrollSnapAlign="center"}function Y(){e.classList.remove("aero-slider--rtl","aero-slider--vertical"),e.removeAttribute("dir"),s.direction==="rtl"?(e.setAttribute("dir","rtl"),e.classList.add("aero-slider--rtl")):s.direction==="ttb"&&e.classList.add("aero-slider--vertical")}let z=new Set;function J(){let r=new Set,i=Math.ceil(s.slidesPerView);for(let v=0;v<i;v++){let M=t.currentIndex+v;if(t.loopModeActive)M=(M%n+n)%n;else if(M>=n)break;r.add(M)}return r}function K(){let r=J();for(let i of z)r.has(i)||d("hidden",{index:i});for(let i of r)z.has(i)||d("visible",{index:i});z.clear();for(let i of r)z.add(i)}let W={container:e,track:o,get slides(){return S},get slideCount(){return n},get config(){return s},state:t,listeners:T,emit:d,getSlideSize:O,recalcSlideMetrics:R,normalizeIndex:b,getMaxIndex:u,getEffectivePerMove:_,isLoopEnabled:E,isFractionalView:g,isVertical:f,getScrollPos:x,setScrollPos:k,scrollToPos:H,getScrollPosForIndex:D,getIndexFromScrollPos:F,refreshPagination:()=>N.refresh(),refreshNavState:()=>G.refresh(),applySnapAlignment:B},w=Ce(W),G=xe(W,re,de),N=_e(W,Q),se=we(W,re,de),U=Pe(W,re),ae=Ie(W,w,Q,U.pause,U.start);function te(){if(t.isDragging||t.isProgrammaticScroll)return;let r=t.loopModeActive?w.getLoopIndexFromScroll():F(x());r!==t.currentIndex&&(t.currentIndex=r,d("slideChange",{index:t.currentIndex}),N.refresh(),G.refresh(),K())}function Re(){if(C=null,t.isProgrammaticScroll=!1,j===null&&(o.style.scrollSnapType=""),t.suppressSettleEmit){t.suppressSettleEmit=!1,N.refresh(),G.refresh();return}te()}function me(){t.loopModeActive&&w.scheduleTeleport(),C!==null&&clearTimeout(C),C=setTimeout(Re,he),h===null&&(h=requestAnimationFrame(()=>{h=null,te()}))}let j=null;function ve(){t.isDragging||(t.suppressSettleEmit=!1,o.style.scrollSnapType="none",j!==null&&clearTimeout(j),j=setTimeout(()=>{j=null,o.style.scrollSnapType=""},Le))}function ge(){if(R(),t.loopModeActive){let r=O();if(r>0){let i=w.getLoopRealStart(),v=i+t.currentIndex*r;if(g()){let M=V(),A=r-s.gap;v=i+t.currentIndex*r+A/2-M/2}k(v)}}else k(D(t.currentIndex))}function Se(){t.isDestroyed||(y===null&&(o.style.scrollSnapType="none",t.isProgrammaticScroll=!0),l===null&&(l=requestAnimationFrame(()=>{l=null,t.isDestroyed||ge()})),y!==null&&clearTimeout(y),y=setTimeout(()=>{y=null,!t.isDestroyed&&(ge(),t.isProgrammaticScroll=!1,o.style.scrollSnapType="")},pe))}let Ve=["--slides-per-view","--slide-gap","--slide-aspect"];function Oe(){I?.(),I=Ae(e,Ve,()=>{t.isDestroyed||(d("resize",{index:t.currentIndex}),ye(),d("resized",{index:t.currentIndex}))},{debounceMs:pe,maxWaitMs:Te})}function re(){t.isDestroyed||Q(b(t.currentIndex+_()))}function de(){t.isDestroyed||Q(b(t.currentIndex-_()))}function Q(r){if(t.isDestroyed)return;let i=b(r),v=O();if(v!==0){if(i!==t.currentIndex&&(t.currentIndex=i,d("slideChange",{index:t.currentIndex}),N.refresh(),G.refresh(),K()),t.suppressSettleEmit=!0,t.loopModeActive){w.cancelTeleport(),t.isProgrammaticScroll=!0;let M=w.getLoopIndexFromScroll(),A=(i-M+n)%n,X=A-n,oe=Math.abs(X)<A?X:A;if(oe===0){let ne=w.getLoopRealStart(),ie=ne+i*v;if(g()){let Ue=V(),Ye=v-s.gap;ie=ne+i*v+Ye/2-Ue/2}H(ie,"smooth"),w.scheduleTeleport();return}H(x()+oe*v,"smooth"),w.scheduleTeleport();return}t.isProgrammaticScroll=!0,H(D(i),"smooth")}}function ye(r){let i=s;if(s={...s,...L(),...r??{}},i.direction!==s.direction&&Y(),P(),R(),ae.setEnabled(s.draggable),se.setEnabled(!0),U.setHoverPause(s.autoplay),(i.slidesPerView!==s.slidesPerView||i.loop!==s.loop||i.maxDots!==s.maxDots||i.perMove!==s.perMove)&&(N.clear(),N.build()),(i.autoplay!==s.autoplay||i.autoplayInterval!==s.autoplayInterval||i.loop!==s.loop)&&(s.autoplay?U.start():U.pause()),i.loop!==s.loop?E()?w.setupLoopTrack(t.currentIndex):w.teardownLoopTrack(t.currentIndex):t.loopModeActive&&i.slidesPerView!==s.slidesPerView&&w.setupLoopTrack(t.currentIndex),B(),!t.loopModeActive){let v=b(t.currentIndex);t.currentIndex=v,H(D(v))}te(),N.refresh(),G.refresh(),K()}function ce(){if(!t.isDestroyed&&(t.loopModeActive&&w.teardownLoopTrack(t.currentIndex),S=Array.from(o.children).filter(r=>!r.hasAttribute(q)),n=S.length,n!==0)){if(S.forEach((r,i)=>{r.setAttribute($,String(i)),r.classList.add("aero-slider__slide")}),P(),R(),E()&&w.setupLoopTrack(t.currentIndex),B(),!t.loopModeActive){let r=b(t.currentIndex);t.currentIndex=r,H(D(r))}N.clear(),N.build(),G.build(),te(),K()}}function Fe(r,i){if(t.isDestroyed)return;let v=Array.isArray(r)?r:[r];t.loopModeActive&&w.teardownLoopTrack(t.currentIndex);let M=Array.from(o.children).filter(A=>!A.hasAttribute(q));if(i!==void 0&&i<M.length){let A=M[i]??null;for(let X of v)o.insertBefore(X,A)}else for(let A of v)o.appendChild(A);ce()}function Ne(r){if(t.isDestroyed)return;let i=Array.isArray(r)?r:[r];t.loopModeActive&&w.teardownLoopTrack(t.currentIndex);let v=Array.from(o.children).filter(A=>!A.hasAttribute(q)),M=[...i].sort((A,X)=>X-A);for(let A of M)A>=0&&A<v.length&&v[A].remove();ce()}function ze(r,i){T.has(r)||T.set(r,new Set),T.get(r).add(i)}function We(r,i){T.get(r)?.delete(i)}function qe(){t.isDestroyed||(d("destroy",{index:t.currentIndex}),t.isDestroyed=!0,U.pause(),t.loopModeActive&&w.teardownLoopTrack(t.currentIndex),w.cancelTeleport(),t.isProgrammaticScroll=!1,I?.(),I=null,window.removeEventListener("resize",Se),y!==null&&(clearTimeout(y),y=null),l!==null&&(cancelAnimationFrame(l),l=null),o.removeEventListener("scroll",me),o.removeEventListener("wheel",ve),j!==null&&clearTimeout(j),C!==null&&clearTimeout(C),ae.setEnabled(!1),se.setEnabled(!1),U.setHoverPause(!1),h!==null&&cancelAnimationFrame(h),G.clear(),N.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"),a.aeroSlider===ue&&delete a.aeroSlider,T.clear())}e.removeAttribute("data-aero-defer-visibility"),P(),e.classList.add("aero-slider"),e.setAttribute("aria-roledescription","carousel"),o.classList.add("aero-slider__track");for(let r of S)r.classList.add("aero-slider__slide");Y(),P(),R(),B(),o.addEventListener("scroll",me,{passive:!0}),o.addEventListener("wheel",ve,{passive:!0}),window.addEventListener("resize",Se),E()?w.setupLoopTrack(0):k(0),Oe(),ae.setEnabled(s.draggable),se.setEnabled(!0),U.setHoverPause(s.autoplay),G.build(),N.build(),s.autoplay&&U.start();let Be=J();for(let r of Be)z.add(r);for(let r of z)d("visible",{index:r});let ue={get element(){return e},next:re,prev:de,goTo:Q,destroy:qe,update:ye,refresh:ce,add:Fe,remove:Ne,on:ze,off:We,get currentIndex(){return t.currentIndex},get slideCount(){return n}};return a.aeroSlider=ue,e.classList.add("aero-slider--ready"),d("ready",{index:t.currentIndex}),ue}var ke="aero-slider__thumb--active";function Xe(e,p,a){e.querySelectorAll(":scope > *").forEach(o=>{let S=a(o);o.classList.toggle(ke,S===p)})}function He(e,p,a){let c=p.element.querySelector(".aero-slider__track");if(!c)return()=>{};let o=c,S=a?.loop??!0;p.update({draggable:!1,loop:S});let n=Array.from(o.children).filter(l=>l.hasAttribute("data-aero-slider-index"));n.sort((l,d)=>Number(l.getAttribute("data-aero-slider-index"))-Number(d.getAttribute("data-aero-slider-index")));let m=n.length,L=Array.from(o.children).indexOf(n[0]??o),s=[];function t(l){let d=l.getAttribute("data-aero-slider-index");if(d!==null)return Number(d);let f=Array.from(o.children).indexOf(l);return f<L?f%m:(f-L-m)%m}let T=e.currentIndex;function h(l){T=l,Xe(o,T,t)}function C(l){h(l),p.goTo(l),e.goTo(l)}function I(l){h(l),p.goTo(l)}Array.from(o.children).forEach(l=>{let d=l,f=()=>{let u=t(d);C(u)};d.addEventListener("click",f),d.style.cursor="pointer",s.push({el:d,fn:f})});let y=l=>{l.index!==T&&I(l.index)};return e.on("slideChange",y),I(e.currentIndex),()=>{s.forEach(({el:l,fn:d})=>l.removeEventListener("click",d)),o.querySelectorAll(":scope > *").forEach(l=>l.classList.remove(ke)),e.off("slideChange",y)}}typeof window<"u"&&(window.AeroSlider={createSlider:De,syncThumbnails:He});export{De as createSlider,He as syncThumbnails};
1
+ var Le={loop:!1,autoplay:!1,autoplayInterval:5e3,draggable:!0,alignment:"center",maxDots:0,noDrag:"",perMove:0,direction:"ltr"},re={slidesPerView:1,gap:0,aspectRatio:"16 / 9"},Te=5,fe=.3,le=80,Ae=250,Me=300,me=100,xe=250,Q="data-aero-slider-index",N="data-aero-slider-clone";function Ce(e,v,a,d={}){let r=d.debounceMs??100,g=d.maxWaitMs??250,n="",f=null,h=null;function l(){let S=getComputedStyle(e);return v.map(I=>S.getPropertyValue(I).trim()).join("\0")}function o(){f!==null&&(clearTimeout(f),f=null),h=null;let S=l();S!==n&&(n=S,a())}function T(){let S=Date.now();if(h===null&&(h=S),S-h>=g){o();return}f!==null&&clearTimeout(f),f=setTimeout(o,r)}return n=l(),window.addEventListener("resize",T),()=>{window.removeEventListener("resize",T),f!==null&&(clearTimeout(f),f=null)}}var Ke=50,Ge=2,Ie=3;function _e(e){let{track:v,state:a}=e,d=null,r=Ie;function g(){let E=Math.ceil(e.config.slidesPerView)+Ge;return Math.max(Ie,Math.ceil(E/e.slideCount))}function n(){return r*e.slideCount*a.slideWidthPx}function f(){return(r+1)*e.slideCount*a.slideWidthPx}function h(E){a.isProgrammaticScroll=!0,v.style.scrollBehavior="auto",v.style.scrollSnapType="none",e.setScrollPos(E),requestAnimationFrame(()=>{requestAnimationFrame(()=>{v.style.scrollBehavior="",v.style.scrollSnapType="",a.isProgrammaticScroll=!1})})}function l(){if(!a.loopModeActive)return;let E=a.slideWidthPx;if(E===0)return;let i=e.slideCount*E,c=n(),m=f(),p=e.getScrollPos(),y=2;if(p<c-y||p>=m+y){for(;p<c;)p+=i;for(;p>=m;)p-=i;h(p)}}function o(){d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,l()},Ke)}function T(){d!==null&&(clearTimeout(d),d=null)}function S(){let E=a.slideWidthPx;if(E===0)return a.currentIndex;let i=e.getScrollPos()-n()+e.getAlignmentOffset();return(Math.round(i/E)%e.slideCount+e.slideCount)%e.slideCount}function I(E){if(!e.isLoopEnabled()){a.loopModeActive&&A(E);return}r=g(),v.querySelectorAll(`[${N}]`).forEach(m=>m.remove());let{slides:i,slideCount:c}=e;for(let m=0;m<r;m++)for(let p=c-1;p>=0;p--){let y=i[p].cloneNode(!0);y.setAttribute(N,""),y.removeAttribute(Q),v.prepend(y)}for(let m=0;m<r;m++)for(let p=0;p<c;p++){let y=i[p].cloneNode(!0);y.setAttribute(N,""),y.removeAttribute(Q),v.append(y)}a.loopModeActive=!0,e.applySnapAlignment(),requestAnimationFrame(()=>{e.recalcSlideMetrics();let m=e.normalizeIndex(E);a.currentIndex=m;let p=a.slideWidthPx;if(p===0)return;let b=n()+m*p-e.getAlignmentOffset();a.isProgrammaticScroll=!0,v.style.scrollBehavior="auto",v.style.scrollSnapType="none",e.setScrollPos(b),requestAnimationFrame(()=>{requestAnimationFrame(()=>{v.style.scrollBehavior="",v.style.scrollSnapType="",a.isProgrammaticScroll=!1})})})}function A(E){T(),v.querySelectorAll(`[${N}]`).forEach(i=>i.remove()),a.loopModeActive=!1,e.recalcSlideMetrics(),a.currentIndex=Math.max(0,Math.min(E,e.getMaxIndex())),h(e.getScrollPosForIndex(a.currentIndex))}return{getLoopRealStart:n,getLoopRealEnd:f,getLoopIndexFromScroll:S,instantScrollTo:h,teleportIfNeeded:l,scheduleTeleport:o,setupLoopTrack:I,teardownLoopTrack:A,cancelTeleport:T}}function we(e,v,a,d,r){let{container:g,track:n,state:f}=e,h=!1,l=!1;function o(i){return e.isVertical()?i.clientY:i.clientX}function T(){return e.config.direction==="rtl"?-1:1}function S(i){if(i.button!==0||i.pointerType==="touch"||e.config.noDrag&&i.target.closest(e.config.noDrag))return;l=!1;let c=T(),m=o(i),p=e.getScrollPos(),y=p,b=null,D=0,L=m,C=performance.now(),P=!1,F=f.currentIndex;function W(){b=null,e.setScrollPos(y)}function z(B){let k=o(B);if(!P){if(Math.abs(k-m)<Te)return;P=!0,l=!0,n.setPointerCapture(B.pointerId),f.isDragging=!0,f.suppressSettleEmit=!1,n.style.scrollBehavior="auto",n.style.scrollSnapType="none",g.classList.add("aero-slider--dragging"),e.emit("dragStart",{index:F}),d()}B.preventDefault(),y=p+(m-k)*c,b===null&&(b=requestAnimationFrame(W));let R=performance.now(),w=R-C;if(w>0){if(w<100){let O=(L-k)*c/w;D=fe*O+(1-fe)*D}else D*=.5;L=k,C=R}}function q(){if(n.removeEventListener("pointermove",z),n.removeEventListener("pointerup",q),n.removeEventListener("pointercancel",q),!P)return;f.isDragging=!1,g.classList.remove("aero-slider--dragging"),b!==null&&(cancelAnimationFrame(b),b=null,e.setScrollPos(y));let B=performance.now()-C;B>50&&(D*=Math.max(0,1-B/200));let k=e.getSlideSize();if(n.style.scrollBehavior="",k>0)if(f.loopModeActive){v.teleportIfNeeded();let R=v.getLoopRealStart(),w=e.getScrollPos(),O=e.isVertical()?n.clientHeight:n.clientWidth,V,U;if(e.isFractionalView()){let K=k-e.config.gap,X=w+D*le+O/2;V=Math.round((X-R-K/2)/k),U=R+V*k+K/2-O/2}else{let X=w-R+D*le;V=Math.round(X/k),U=R+V*k}f.isProgrammaticScroll=!0,f.suppressSettleEmit=!0,e.scrollToPos(U,"smooth"),v.scheduleTeleport();let ee=e.normalizeIndex(V);ee!==f.currentIndex&&(f.currentIndex=ee,e.emit("slideChange",{index:f.currentIndex}),e.refreshPagination(),e.refreshNavState())}else{let R=e.getScrollPos()+D*le,w=e.getIndexFromScrollPos(R);a(w)}e.emit("dragEnd",{index:f.currentIndex,fromIndex:F}),e.config.autoplay&&r()}n.addEventListener("pointermove",z),n.addEventListener("pointerup",q),n.addEventListener("pointercancel",q)}function I(i){l&&(i.preventDefault(),i.stopPropagation(),l=!1)}function A(i){i.preventDefault()}function E(i){i!==h&&(i?(n.addEventListener("pointerdown",S),n.addEventListener("click",I,{capture:!0}),n.addEventListener("dragstart",A),h=!0):(n.removeEventListener("pointerdown",S),n.removeEventListener("click",I,{capture:!0}),n.removeEventListener("dragstart",A),h=!1))}return{setEnabled:E,isActive:()=>h}}function Pe(e,v,a){let d=null,r=null,g=a,n=v;function f(){d&&(d.removeEventListener("click",g),d=null),r&&(r.removeEventListener("click",n),r=null)}function h(){f(),d=e.container.querySelector(".aero-slider__nav--prev"),r=e.container.querySelector(".aero-slider__nav--next");let o=e.config.direction==="rtl";g=o?v:a,n=o?a:v,d&&d.addEventListener("click",g),r&&r.addEventListener("click",n),l()}function l(){let o=e.getMaxIndex(),T=o>0,S=e.config.direction==="rtl",I=!T||!e.isLoopEnabled()&&e.state.currentIndex===0,A=!T||!e.isLoopEnabled()&&e.state.currentIndex>=o;d&&(d.disabled=S?A:I),r&&(r.disabled=S?I:A)}return{build:h,clear:f,refresh:l}}function De(e,v){let a=null,d=null,r=null,g=[],n=!1,f=10,h=8;function l(i){let c=i.target.closest(".aero-slider__dot");if(!c||!a)return;let m=c.getAttribute("data-slide-index");m!==null&&v(Number(m))}function o(){if(a){a.removeEventListener("click",l),d?.remove(),d=null,r&&(r.style.display="");let i=a.querySelectorAll(".aero-slider__dot");for(let c=1;c<i.length;c++)i[c]?.remove();a.querySelectorAll(".aero-slider__pagination-label").forEach(c=>c.remove()),a=null}r=null,g=[],n=!1}function T(){return e.isLoopEnabled()?e.slideCount:e.getMaxIndex()+1}function S(){if(a=e.container.querySelector(".aero-slider__pagination"),!a||(r=a.querySelector(".aero-slider__dot"),!r))return;r.style.display==="none"&&(r.style.display=""),r.style.transform="",r.style.opacity="",r.offsetWidth;let c=getComputedStyle(r);f=parseFloat(c.width)||10;let m=getComputedStyle(a);h=parseInt(m.gap)||8,a.setAttribute("role","tablist"),a.addEventListener("click",l);let p=T(),y=e.config.maxDots;n=y>0&&p>y,d?.remove();let b=a.querySelectorAll(".aero-slider__dot");for(let L=1;L<b.length;L++)b[L]?.remove();if(a.querySelectorAll(".aero-slider__pagination-label").forEach(L=>L.remove()),n){a.classList.add("aero-slider__pagination--windowed");let L=y*f+(y-1)*h;a.style.setProperty("--pagination-width",`${L}px`),d=document.createElement("div"),d.className="aero-slider__pagination-track",r.style.display="none";for(let C=0;C<p;C++){let P=r.cloneNode(!0);P.style.display="",d.appendChild(P)}a.appendChild(d)}else{a.classList.remove("aero-slider__pagination--windowed"),a.style.removeProperty("--pagination-width"),r.style.display="";for(let L=1;L<p;L++){let C=r.cloneNode(!0);a.appendChild(C)}}g=Array.from((n&&d?d:a).querySelectorAll(".aero-slider__dot")),g.forEach((L,C)=>{L.setAttribute("role","tab"),L.setAttribute("data-slide-index",String(C)),L.setAttribute("aria-label",`Go to slide ${C+1}`)}),E()}function I(i,c,m,p){if(i<0||i>=c)return"aero-slider__dot--hidden";let y=i===0,b=i===c-1,D=i===1,L=i===c-2;return y&&!m?"aero-slider__dot--edge":D&&!m?"aero-slider__dot--near-edge":b&&!p?"aero-slider__dot--edge":L&&!p?"aero-slider__dot--near-edge":null}function A(i){i.classList.remove("aero-slider__dot--hidden","aero-slider__dot--edge","aero-slider__dot--near-edge")}function E(){let i=T(),c=e.state.currentIndex,m=e.config.maxDots;if(n&&m>0&&d){let p=Math.floor(m/2),y=f+h,b=c-p;b=Math.max(0,Math.min(b,i-m)),d.style.setProperty("--track-offset",`${-b*y}px`);let D=b===0,L=b>=i-m;g.forEach((C,P)=>{let F=P===c;C.classList.toggle("aero-slider__dot--active",F),C.setAttribute("aria-selected",String(F)),A(C);let W=I(P-b,m,D,L);W&&C.classList.add(W)})}else g.forEach((p,y)=>{let b=y===c;p.classList.toggle("aero-slider__dot--active",b),p.setAttribute("aria-selected",String(b)),A(p)})}return{build:S,clear:o,refresh:E}}function Re(e,v,a){let d=!1;function r(n){let f=e.config.direction;f==="ttb"?n.key==="ArrowUp"?(n.preventDefault(),a()):n.key==="ArrowDown"&&(n.preventDefault(),v()):f==="rtl"?n.key==="ArrowRight"?(n.preventDefault(),a()):n.key==="ArrowLeft"&&(n.preventDefault(),v()):n.key==="ArrowLeft"?(n.preventDefault(),a()):n.key==="ArrowRight"&&(n.preventDefault(),v())}function g(n){n!==d&&(n?(e.container.setAttribute("tabindex","0"),e.container.addEventListener("keydown",r),d=!0):(e.container.removeAttribute("tabindex"),e.container.removeEventListener("keydown",r),d=!1))}return{setEnabled:g}}function ke(e,v){let a=null,d=!1,r=null;function g(){e.config.autoplay&&(n(),a=setInterval(()=>{if(!e.state.loopModeActive&&e.state.currentIndex>=e.getMaxIndex()){n();return}v()},e.config.autoplayInterval),e.emit("autoplayStart",{}))}function n(){a!==null&&(clearInterval(a),a=null,e.emit("autoplayStop",{}))}function f(){n()}function h(){e.config.autoplay&&g()}function l(){r!==null&&(clearTimeout(r),r=null),n()}function o(){e.config.autoplay&&(r=setTimeout(()=>{r=null,e.config.autoplay&&g()},1e3))}function T(S){S!==d&&(S?(e.container.addEventListener("mouseenter",f),e.container.addEventListener("mouseleave",h),e.track.addEventListener("touchstart",l,{passive:!0}),e.track.addEventListener("touchend",o,{passive:!0}),e.track.addEventListener("touchcancel",o,{passive:!0}),d=!0):(e.container.removeEventListener("mouseenter",f),e.container.removeEventListener("mouseleave",h),e.track.removeEventListener("touchstart",l),e.track.removeEventListener("touchend",o),e.track.removeEventListener("touchcancel",o),r!==null&&(clearTimeout(r),r=null),d=!1))}return{start:g,pause:n,setHoverPause:T}}function He(e,v={}){let a=e,d=e.querySelector(".aero-slider__track");if(!d)throw new Error("aero-slider: missing .aero-slider__track");let r=d,g=Array.from(r.children).filter(t=>!t.hasAttribute(N)),n=g.length;if(n===0)throw new Error("aero-slider: no slides found");g.forEach((t,s)=>t.setAttribute(Q,String(s)));function f(t,s){if(!t||t==="0"||t==="0px")return s;let u=document.createElement("div");u.style.position="absolute",u.style.visibility="hidden",u.style.width=t,e.appendChild(u);let M=u.offsetWidth;return e.removeChild(u),M||s}function h(){let t=getComputedStyle(e),s=parseFloat(t.getPropertyValue("--slides-per-view")?.trim()||"")||re.slidesPerView,u=t.getPropertyValue("--slide-gap")?.trim()||"0px",M=f(u,re.gap),x=t.getPropertyValue("--slide-aspect")?.trim()||re.aspectRatio;return{slidesPerView:s,gap:M,aspectRatio:x}}let l={...Le,...v,...re},o={currentIndex:0,isDragging:!1,isDestroyed:!1,loopModeActive:!1,isProgrammaticScroll:!1,suppressSettleEmit:!1,slideWidthPx:0},T=null,S=null,I=null,A=null,E=null;function i(t,s){e.dispatchEvent(new CustomEvent(`aero:${t}`,{detail:s,bubbles:!0}))}function c(){return l.direction==="ttb"}let m=null;function p(){if(m!==null)return m;let t=document.createElement("div"),s=document.createElement("div");t.dir="rtl",t.style.width="4px",t.style.height="1px",t.style.position="absolute",t.style.top="-9999px",t.style.overflow="scroll",t.style.visibility="hidden",s.style.width="8px",s.style.height="1px",t.appendChild(s),document.body.appendChild(t);let u="reverse";return t.scrollLeft>0?u="default":(t.scrollLeft=1,t.scrollLeft===0&&(u="negative")),document.body.removeChild(t),m=u,u}function y(){return Math.max(0,r.scrollWidth-r.clientWidth)}function b(){return l.alignment!=="left"||D()?Math.max(0,n-1):Math.max(0,Math.floor(n-l.slidesPerView))}function D(){return l.slidesPerView%1!==0}function L(){return l.loop&&b()>0}function C(){return l.perMove>0?l.perMove:1}function P(t){let s=b();return L()?(Math.trunc(t)%n+n)%n:Math.max(0,Math.min(t,s))}function F(){if(l.direction==="rtl"){let t=y();switch(p()){case"default":return t-r.scrollLeft;case"negative":return-r.scrollLeft;default:return r.scrollLeft}}return l.direction==="ttb"?r.scrollTop:r.scrollLeft}function W(t){if(l.direction==="rtl"){let s=y();switch(p()){case"default":r.scrollLeft=s-t;break;case"negative":r.scrollLeft=-t;break;default:r.scrollLeft=t;break}}else l.direction==="ttb"?r.scrollTop=t:r.scrollLeft=t}function z(t,s="auto"){if(l.direction==="ttb")r.scrollTo({top:t,behavior:s});else if(l.direction==="rtl"){let u=y(),M=p()==="default"?u-t:p()==="negative"?-t:t;r.scrollTo({left:M,behavior:s})}else r.scrollTo({left:t,behavior:s})}function q(){return c()?r.clientHeight:r.clientWidth}function B(){return c()?r.scrollHeight:r.scrollWidth}function k(){let t=w();if(t<=0)return q();let u=(t-l.gap)*l.slidesPerView+l.gap*(l.slidesPerView-1);return u>0?u:q()}function R(){let t=w();if(t===0||l.alignment==="left")return 0;let s=k(),u=t-l.gap;return l.alignment==="center"?(s-u)/2:s-u}function w(){if(o.slideWidthPx>0)return o.slideWidthPx;let t=g[0];if(!t)return 0;let s=t.getBoundingClientRect();return o.slideWidthPx=(c()?s.height:s.width)+l.gap,o.slideWidthPx}function O(){o.slideWidthPx=0,w()}function V(){Object.assign(l,h())}function U(t){let s=w();if(s===0)return 0;let u=B()-q(),M=t*s-R();return o.loopModeActive?M:u<=0?0:Math.max(0,Math.min(M,u))}function ee(t){let s=w();if(s===0)return o.currentIndex;let u=o.loopModeActive?n-1:b(),M=B()-q();if(M<=0)return 0;if(!o.loopModeActive){if(t<=1)return 0;if(t>=M-1)return u}let x=Math.round((t+R())/s);return Math.max(0,Math.min(x,u))}function K(){let t=Array.from(r.children),s=l.alignment==="center"?"center":l.alignment==="right"?"end":"";for(let u of t)u.style.scrollSnapAlign=s}function X(){e.setAttribute("data-aero-alignment",l.alignment)}function pe(){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 j=new Set;function ve(){let t=new Set,s=Math.ceil(l.slidesPerView);for(let u=0;u<s;u++){let M=o.currentIndex+u;if(o.loopModeActive)M=(M%n+n)%n;else if(M>=n)break;t.add(M)}return t}function oe(){let t=ve();for(let s of j)t.has(s)||i("hidden",{index:s});for(let s of t)j.has(s)||i("visible",{index:s});j.clear();for(let s of t)j.add(s)}let Z={container:e,track:r,get slides(){return g},get slideCount(){return n},get config(){return l},state:o,emit:i,getSlideSize:w,recalcSlideMetrics:O,normalizeIndex:P,getMaxIndex:b,getEffectivePerMove:C,isLoopEnabled:L,isFractionalView:D,isVertical:c,getAlignmentOffset:R,getScrollPos:F,setScrollPos:W,scrollToPos:z,getScrollPosForIndex:U,getIndexFromScrollPos:ee,refreshPagination:()=>H.refresh(),refreshNavState:()=>G.refresh(),applySnapAlignment:K},_=_e(Z),G=Pe(Z,ie,de),H=De(Z,te),se=Re(Z,ie,de),Y=ke(Z,ie),ae=we(Z,_,te,Y.pause,Y.start);function ne(){if(o.isDragging||o.isProgrammaticScroll)return;let t=o.loopModeActive?_.getLoopIndexFromScroll():ee(F());t!==o.currentIndex&&(o.currentIndex=t,i("slideChange",{index:o.currentIndex}),H.refresh(),G.refresh(),oe())}function Ne(){if(S=null,o.isProgrammaticScroll=!1,$===null&&(r.style.scrollSnapType=""),o.suppressSettleEmit){o.suppressSettleEmit=!1,H.refresh(),G.refresh();return}ne()}function ge(){o.loopModeActive&&_.scheduleTeleport(),S!==null&&clearTimeout(S),S=setTimeout(Ne,Ae),T===null&&(T=requestAnimationFrame(()=>{T=null,ne()}))}let $=null;function Se(){o.isDragging||(o.suppressSettleEmit=!1,r.style.scrollSnapType="none",$!==null&&clearTimeout($),$=setTimeout(()=>{$=null,r.style.scrollSnapType=""},Me))}function ye(){if(O(),o.loopModeActive){let t=w();if(t>0){let u=_.getLoopRealStart()+o.currentIndex*t-R();W(u)}}else W(U(o.currentIndex))}function Ee(){o.isDestroyed||(A===null&&(r.style.scrollSnapType="none",o.isProgrammaticScroll=!0),E===null&&(E=requestAnimationFrame(()=>{E=null,o.isDestroyed||ye()})),A!==null&&clearTimeout(A),A=setTimeout(()=>{A=null,!o.isDestroyed&&(ye(),o.isProgrammaticScroll=!1,r.style.scrollSnapType="")},me))}let Fe=["--slides-per-view","--slide-gap","--slide-aspect","--aero-layout-width"];function We(){I?.(),I=Ce(e,Fe,()=>{o.isDestroyed||(i("resize",{}),he(),i("resized",{}))},{debounceMs:me,maxWaitMs:xe})}function ie(){o.isDestroyed||te(P(o.currentIndex+C()))}function de(){o.isDestroyed||te(P(o.currentIndex-C()))}function te(t){if(o.isDestroyed)return;let s=P(t),u=w();if(u!==0){if(s!==o.currentIndex&&(o.currentIndex=s,i("slideChange",{index:o.currentIndex}),H.refresh(),G.refresh(),oe()),o.suppressSettleEmit=!0,o.loopModeActive){_.cancelTeleport(),o.isProgrammaticScroll=!0;let M=_.getLoopIndexFromScroll(),x=(s-M+n)%n,J=x-n,be=Math.abs(J)<x?J:x;if(be===0){let Ye=_.getLoopRealStart()+s*u-R();z(Ye,"smooth"),_.scheduleTeleport();return}z(F()+be*u,"smooth"),_.scheduleTeleport();return}o.isProgrammaticScroll=!0,z(U(s),"smooth")}}function he(t){let s=l;if(l={...l,...h(),...t??{}},s.direction!==l.direction&&pe(),V(),O(),ae.setEnabled(l.draggable),se.setEnabled(!0),Y.setHoverPause(l.autoplay),(s.slidesPerView!==l.slidesPerView||s.loop!==l.loop||s.maxDots!==l.maxDots||s.perMove!==l.perMove||s.alignment!==l.alignment)&&(H.clear(),H.build()),(s.autoplay!==l.autoplay||s.autoplayInterval!==l.autoplayInterval||s.loop!==l.loop)&&(l.autoplay?Y.start():Y.pause()),s.loop!==l.loop?L()?_.setupLoopTrack(o.currentIndex):_.teardownLoopTrack(o.currentIndex):o.loopModeActive&&s.slidesPerView!==l.slidesPerView&&_.setupLoopTrack(o.currentIndex),X(),K(),!o.loopModeActive){let u=P(o.currentIndex);o.currentIndex=u,z(U(u))}ne(),H.refresh(),G.refresh(),oe()}function ce(){if(!o.isDestroyed&&(o.loopModeActive&&_.teardownLoopTrack(o.currentIndex),g=Array.from(r.children).filter(t=>!t.hasAttribute(N)),n=g.length,n!==0)){if(g.forEach((t,s)=>{t.setAttribute(Q,String(s)),t.classList.add("aero-slider__slide")}),V(),O(),L()&&_.setupLoopTrack(o.currentIndex),X(),K(),!o.loopModeActive){let t=P(o.currentIndex);o.currentIndex=t,z(U(t))}H.clear(),H.build(),G.build(),ne(),oe()}}function ze(t,s){if(o.isDestroyed)return;let u=Array.isArray(t)?t:[t];o.loopModeActive&&_.teardownLoopTrack(o.currentIndex);let M=Array.from(r.children).filter(x=>!x.hasAttribute(N));if(s!==void 0&&s<M.length){let x=M[s]??null;for(let J of u)r.insertBefore(J,x)}else for(let x of u)r.appendChild(x);ce()}function qe(t){if(o.isDestroyed)return;let s=Array.isArray(t)?t:[t];o.loopModeActive&&_.teardownLoopTrack(o.currentIndex);let u=Array.from(r.children).filter(x=>!x.hasAttribute(N)),M=[...s].sort((x,J)=>J-x);for(let x of M)x>=0&&x<u.length&&u[x].remove();ce()}function Be(){o.isDestroyed||(i("destroy",{}),o.isDestroyed=!0,Y.pause(),o.loopModeActive&&_.teardownLoopTrack(o.currentIndex),_.cancelTeleport(),o.isProgrammaticScroll=!1,I?.(),I=null,window.removeEventListener("resize",Ee),A!==null&&(clearTimeout(A),A=null),E!==null&&(cancelAnimationFrame(E),E=null),r.removeEventListener("scroll",ge),r.removeEventListener("wheel",Se),$!==null&&clearTimeout($),S!==null&&clearTimeout(S),ae.setEnabled(!1),se.setEnabled(!1),Y.setHoverPause(!1),T!==null&&cancelAnimationFrame(T),G.clear(),H.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"),a.aeroSlider===ue&&delete a.aeroSlider)}e.removeAttribute("data-aero-defer-visibility"),V(),e.classList.add("aero-slider"),e.setAttribute("aria-roledescription","carousel"),r.classList.add("aero-slider__track");for(let t of g)t.classList.add("aero-slider__slide");pe(),V(),O(),X(),K(),r.addEventListener("scroll",ge,{passive:!0}),r.addEventListener("wheel",Se,{passive:!0}),window.addEventListener("resize",Ee),L()?_.setupLoopTrack(0):W(0),We(),ae.setEnabled(l.draggable),se.setEnabled(!0),Y.setHoverPause(l.autoplay),G.build(),H.build(),l.autoplay&&Y.start();let Ue=ve();for(let t of Ue)j.add(t);for(let t of j)i("visible",{index:t});let ue={get element(){return e},next:ie,prev:de,goTo:te,destroy:Be,update:he,refresh:ce,add:ze,remove:qe,get currentIndex(){return o.currentIndex},get slideCount(){return n}};return a.aeroSlider=ue,e.classList.add("aero-slider--ready"),i("ready",{}),ue}var Oe="aero-slider__thumb--active";function Xe(e,v,a){e.querySelectorAll(":scope > *").forEach(r=>{let g=a(r);r.classList.toggle(Oe,g===v)})}function Ve(e,v,a){let d=v.element.querySelector(".aero-slider__track");if(!d)return()=>{};let r=d,g=a?.loop??!0;v.update({draggable:!1,loop:g});let n=Array.from(r.children).filter(i=>i.hasAttribute("data-aero-slider-index"));n.sort((i,c)=>Number(i.getAttribute("data-aero-slider-index"))-Number(c.getAttribute("data-aero-slider-index")));let f=n.length,h=Array.from(r.children).indexOf(n[0]??r),l=[];function o(i){let c=i.getAttribute("data-aero-slider-index");if(c!==null)return Number(c);let m=Array.from(r.children).indexOf(i);return m<h?m%f:(m-h-f)%f}let T=e.currentIndex;function S(i){T=i,Xe(r,T,o)}function I(i){S(i),v.goTo(i),e.goTo(i)}function A(i){S(i),v.goTo(i)}Array.from(r.children).forEach(i=>{let c=i,m=()=>{let p=o(c);I(p)};c.addEventListener("click",m),c.style.cursor="pointer",l.push({el:c,fn:m})});let E=i=>{let{index:c}=i.detail;c!==T&&A(c)};return e.element.addEventListener("aero:slideChange",E),A(e.currentIndex),()=>{l.forEach(({el:i,fn:c})=>i.removeEventListener("click",c)),r.querySelectorAll(":scope > *").forEach(i=>i.classList.remove(Oe)),e.element.removeEventListener("aero:slideChange",E)}}typeof window<"u"&&(window.AeroSlider={createSlider:He,syncThumbnails:Ve});export{He as createSlider,Ve as syncThumbnails};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aero-slider",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.6",
4
4
  "description": "A lightweight, CSS-first slider library for the modern web",
5
5
  "type": "module",
6
6
  "workspaces": [