react-spring-carousel 3.0.0-beta090.5 → 3.0.0-beta090.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs2.js +1 -1
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.es2.js +313 -309
- package/dist/index.es2.js.map +1 -1
- package/dist/types/types/useSpringCarousel.types.d.ts +2 -0
- package/package.json +14 -11
package/dist/index.cjs2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./useThumbsModule-09d1d442.cjs"),j=require("@react-spring/web"),Ve=require("@use-gesture/react"),u=require("react"),De=require("resize-observer-polyfill"),F=require("screenfull");function Be({mainCarouselWrapperRef:n,onFullScreenChange:m,handleResize:$}){const K=u.useRef(!1);u.useEffect(()=>{function v(){document.fullscreenElement&&(O(!0),m(!0),$&&$()),document.fullscreenElement||(O(!1),m(!1),$&&$())}if(F.isEnabled)return F.on("change",v),()=>{F.isEnabled&&F.off("change",v)}},[]);function O(v){K.current=v}function I(){return K.current}function T(v){F.isEnabled&&F.request(v||n.current)}function o(){F.isEnabled&&F.exit()}return{enterFullscreen:T,exitFullscreen:o,getIsFullscreen:I}}function He({items:n,init:m=!0,withThumbs:$,thumbsSlideAxis:K="x",itemsPerSlide:O=1,slideType:I="fixed",gutter:T=0,withLoop:o=!1,startEndGutter:v=0,carouselSlideAxis:i="x",disableGestures:de=!1,draggingSlideTreshold:ee,slideWhenThresholdIsReached:ge=!1,freeScroll:c,enableFreeScrollDrag:te,initialStartingPosition:Q,prepareThumbsData:pe,initialActiveItem:w=0,animateWhenActiveItemChange:ye=!0,getControllerRef:re,slideGroupOfItems:U=!1}){const R=O>n.length?n.length:O,z=u.useRef(!1),Z=u.useRef(ee??0),C=u.useRef("initial"),ne=u.useRef("initial"),ce=u.useRef("initial"),x=u.useRef(w),d=u.useRef(w===0),l=u.useRef(I==="fixed"&&w===n.length-1),a=u.useRef(null),p=u.useRef(null),ue=u.useRef(0),oe=u.useRef(0),g=u.useRef(0),Ie=u.useRef(o),be=u.useRef(I),Te=u.useRef(c),W=u.useRef(!1),_=u.useCallback(()=>o?[...n.map(e=>({...e,id:`prev-repeated-item-${e.id}`})),...n,...n.map(e=>({...e,id:`next-repeated-item-${e.id}`}))]:[...n],[n,o])(),[N,y]=j.useSpring(()=>({val:0,pause:!m,onChange:({value:e})=>{c&&a.current?(i==="x"?a.current.scrollLeft=Math.abs(e.val):a.current.scrollTop=Math.abs(e.val),S()):p.current&&(i==="x"?p.current.style.transform=`translate3d(${e.val}px, 0px,0px)`:p.current.style.transform=`translate3d(0px,${e.val}px,0px)`)}}),[c]),{emitEvent:G,useListenToCustomEvent:L}=k.useEventsModule(),{thumbsFragment:Re,handleScroll:Ee}=k.useThumbsModule({withThumbs:!!$,thumbsSlideAxis:K,prepareThumbsData:pe,items:n,renderThumbFnProps:{getIsActiveItem:fe,getIsPrevItem:le,useListenToCustomEvent:L,getIsNextItem:se}}),{enterFullscreen:he,exitFullscreen:ve,getIsFullscreen:me}=Be({mainCarouselWrapperRef:a,handleResize:()=>A(),onFullScreenChange:e=>{G({eventName:"onFullscreenChange",isFullscreen:e})}});function we(e){return I==="fixed"&&!c?{marginRight:`${e?0:T}px`,flex:`1 0 calc(100% / ${R} - ${T*(R-1)/R}px)`}:{marginRight:`${e?0:T}px`}}const f=u.useCallback(()=>{var r;const e=U?a.current:(r=a.current)==null?void 0:r.querySelector(".use-spring-carousel-item");if(!e)throw Error("No carousel items available!");return e.getBoundingClientRect()[i==="x"?"width":"height"]+T},[i,T,U]);function P({from:e,to:r,nextActiveItem:t,immediate:s=!1,slideMode:E}){ne.current=E,typeof t=="number"&&(c||(x.current=t),G({eventName:"onSlideStartChange",slideActionType:C.current,slideMode:ne.current,nextItem:{startReached:d.current,endReached:l.current,index:c?-1:x.current,id:c?"":n[x.current].id}})),g.current=r,y.start({immediate:s,from:{val:e},to:{val:r},config:{...j.config.default,velocity:N.val.velocity},onRest(B){!s&&B.finished&&G({eventName:"onSlideChange",slideActionType:C.current,slideMode:ne.current,currentItem:{startReached:d.current,endReached:l.current,index:c?-1:x.current,id:c?"":n[x.current].id}})}}),$&&!s&&Ee(x.current)}const h=u.useCallback(()=>{var e;return p.current?o?f()*n.length:Math.round(Number((e=p.current)==null?void 0:e[i==="x"?"scrollWidth":"scrollHeight"])-p.current.getBoundingClientRect()[i==="x"?"width":"height"]-v*2):0},[i,f,n.length,v,o]);function Ce(){const e=`calc(100% - ${v*2}px)`;return{width:i==="x"?e:"100%",height:i==="y"?e:"100%"}}const X=u.useCallback(()=>{var r;const e=(r=p.current)==null?void 0:r.querySelector(".use-spring-carousel-item");if(!e)throw Error("No carousel items available!");return e.getBoundingClientRect()[i==="x"?"width":"height"]+T},[i,T]),Y=u.useCallback(e=>{const r=i==="x"?"left":"top",t=p.current;t&&(o?(t.style.top="0px",t.style.left="0px",t.style[r]=`-${e-v}px`,d.current=!1,l.current=!1):(t.style.left="0px",t.style.top="0px"))},[i,v,o]),A=u.useCallback((e=!1)=>{if(p.current&&e&&(p.current.style.transform="translate3d(0px, 0px,0px)",p.current.style.left="0",p.current.style.top="0"),I==="fixed"&&Y(Q==="center"?X()*n.length-f()*Math.round((R-1)/2):Q==="end"?X()*n.length-f()*Math.round(R-1):X()*n.length),I==="fluid"){if(Y(X()*n.length),l.current&&h()!==Math.abs(g.current)&&!o){const r=-h();g.current=r,y.start({immediate:!0,val:g.current});return}if(Math.abs(g.current)>0&&h()!==Math.abs(g.current)&&!o&&!c&&ce.current==="backward"){const r=ue.current-h(),t=g.current+r;return y.start({immediate:!0,val:t}),()=>{g.current=t}}console.log("here");return}if(!c&&I==="fixed"){const r=-(f()*x.current);if(Math.abs(r)>h()&&!o){const t=-h();l.current=!0,g.current=t,y.start({immediate:!0,val:g.current})}else g.current=r,y.start({immediate:!0,val:r});setTimeout(()=>{z.current=!1},0)}},[c,X,f,h,Q,n.length,R,Y,y,I,o]);function M(){return c&&a.current?a.current[i==="x"?"scrollLeft":"scrollTop"]:N.val.get()}function J(e,r){if(c&&e==="next"){const t=g.current+f();return t>h()?h():t}if(c&&e==="prev"){const t=g.current-f();return t<0?0:t}return e==="next"?typeof r=="number"?-(r*f()):g.current-f():typeof r=="number"?-(r*f()):g.current+f()}function q({type:e,index:r,immediate:t}){if(!m||W.current||d.current&&!o)return;l.current&&(ce.current="backward"),C.current="prev",l.current=!1;const s=typeof r=="number"?r:x.current-1;if(c&&S(),!o){const E=c?J("prev",r)-f()/3<0:J("prev",r)+f()/3>0;if(d.current)return;if(E){d.current=!0,l.current=!1,P({slideMode:e,from:M(),to:0,nextActiveItem:0,immediate:t});return}}if(o&&(d.current||s<0)){d.current=!1,l.current=!0,P({slideMode:e,from:M()-f()*n.length,to:-(f()*n.length)+f(),nextActiveItem:n.length-1,immediate:t});return}s===0&&(d.current=!0),(s===n.length-1||s===-1)&&(l.current=!0),P({slideMode:e,from:M(),to:J("prev",r),nextActiveItem:s,immediate:t})}function V({type:e,index:r,immediate:t}){if(!m||W.current||l.current&&!o)return;d.current&&(ce.current="forward"),C.current="next",d.current=!1;const s=r||x.current+1;if(c&&S(),!o){const E=Math.abs(J("next",r))>h()-f()/3;if(l.current)return;if(E){d.current=!1,l.current=!0,P({slideMode:e,from:M(),to:c?h():-h(),nextActiveItem:s,immediate:t});return}}if(o&&(l.current||s>n.length-1)){l.current=!1,d.current=!0,P({slideMode:e,from:M()+f()*n.length,to:0,nextActiveItem:0,immediate:t});return}s===0&&(d.current=!0),s===n.length-1&&(l.current=!0),P({slideMode:e,from:M(),to:J("next",r),nextActiveItem:s,immediate:t})}function Me(){ee?Z.current=ee:Z.current=Math.floor(f()/2/2)}function xe(){p.current&&(ue.current=h(),Ie.current=o,be.current=I,Te.current=c,oe.current=window.innerWidth,g.current=0,ie({id:0,immediate:!0,shouldReset:!0}),Me(),A())}const ke=m&&!de&&!c||!!c&&!!te,Fe=Ve.useDrag(e=>{const r=e.dragging,t=e.offset[i==="x"?0:1],s=e.movement[i==="x"?0:1],E=e.direction[i==="x"?0:1],B=s>Z.current,H=s<-Z.current,qe=h();if(r){if(E>0?C.current="prev":C.current="next",G({...e,eventName:"onDrag",slideActionType:C.current}),c){if(t>0){y.start({from:{val:M()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}}),e.cancel();return}y.start({from:{val:M()},to:{val:-t},config:{velocity:e.velocity,friction:50,tension:1e3}});return}y.start({val:t,config:{velocity:e.velocity,friction:50,tension:1e3}}),ge&&H?(V({type:"drag"}),e.cancel()):ge&&B&&(q({type:"drag"}),e.cancel()),qe-Math.abs(t)<-(f()*2)&&e.cancel();return}if(e.last&&c&&t>0){y.start({from:{val:M()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}});return}e.last&&!e.canceled&&c&&(C.current==="prev"&&q({type:"drag"}),C.current==="next"&&V({type:"drag"})),e.last&&!e.canceled&&!c&&(H?!o&&l.current?y.start({val:-h(),config:{...j.config.default,velocity:e.velocity}}):V({type:"drag"}):B?!o&&d.current?y.start({val:0,config:{...j.config.default,velocity:e.velocity}}):q({type:"drag"}):y.start({val:g.current,config:{...j.config.default,velocity:e.velocity}})),e.last&&e.canceled&&y.start({val:g.current,config:{...j.config.default,velocity:e.velocity}})},{enabled:ke,axis:i,from:()=>c&&a.current?[-a.current.scrollLeft,-a.current.scrollTop]:i==="x"?[N.val.get(),N.val.get()]:[N.val.get(),N.val.get()]});function $e(){return c?i==="x"?{overflowX:"auto"}:{overflowY:"auto"}:{}}function S(){a.current&&(g.current=a.current[i==="x"?"scrollLeft":"scrollTop"],a.current[i==="x"?"scrollLeft":"scrollTop"]===0&&(d.current=!0,l.current=!1),a.current[i==="x"?"scrollLeft":"scrollTop"]>0&&a.current[i==="x"?"scrollLeft":"scrollTop"]<h()&&(d.current=!1,l.current=!1),a.current[i==="x"?"scrollLeft":"scrollTop"]===h()&&(d.current=!1,l.current=!0))}function Ne(){return c?{onWheel(){N.val.stop(),S()}}:{}}function D(e,r){let t=0;if(typeof e=="string"?t=n.findIndex(s=>s.id===e):t=e,t<0||t>=n.length){if(r)throw new Error(r);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),t=-1}return t}function ie({id:e,immediate:r,shouldReset:t,type:s}){if(!m||W.current)return;d.current=!1,l.current=!1;const E=D(e,"The item you want to slide to doesn't exist; check the provided id.");if(E===x.current&&!t)return;const B=D(n[x.current].id),H=D(n[E].id);H>B?V({type:s||t?"initial":"click",index:H,immediate:r}):q({type:s||t?"initial":"click",index:H,immediate:r})}function se(e){const r=D(e,"The item doesn't exist; check the provided id."),t=x.current;return o&&t===n.length-1?r===0:r===t+1}function le(e){const r=D(e,"The item doesn't exist; check the provided id."),t=x.current;return o&&t===0?r===n.length-1:r===t-1}function fe(e){return D(e,"The item you want to check doesn't exist; check the provided id.")===x.current}function je(){return de?"unset":i==="x"?"pan-y":"pan-x"}const b=c?{useListenToCustomEvent:L,enterFullscreen:he,exitFullscreen:ve,getIsFullscreen:me,slideToPrevItem:(e=!0)=>{q({type:"click",immediate:!e})},slideToNextItem:(e=!0)=>{V({type:"click",immediate:!e})}}:{useListenToCustomEvent:L,enterFullscreen:he,exitFullscreen:ve,getIsFullscreen:me,slideToPrevItem:(e=!0)=>{q({type:"click",immediate:!e})},slideToNextItem:(e=!0)=>{V({type:"click",immediate:!e})},slideToItem:(e,r=!0)=>{ie({id:e,immediate:!r})},getIsNextItem:se,getIsPrevItem:le,getIsActiveItem:fe};j.useIsomorphicLayoutEffect(()=>{p.current&&m&&(z.current=!0,xe())},[m]),u.useEffect(()=>{x.current!==w&&(z.current=!0,ie({id:w,immediate:!ye}))},[w]),u.useEffect(()=>{if(m){if(w>n.length-1)throw new Error(`initialActiveItem (${w}) is greater than the total quantity available items (${n.length}).`);R>n.length&&console.warn(`itemsPerSlide (${R}) is greater than the total quantity available items (${n.length}). Fallback to ${n.length})`)}},[w,n.length,R,m]),u.useEffect(()=>{oe.current=window.innerWidth},[]),u.useEffect(()=>{if(m){if(o&&c)throw new Error("`withLoop` and `freeScroll` can't be used together.");if(c&&I==="fixed")throw new Error("`freeScroll` can't be used when `scrollType=fixed`.");if(te&&(I!=="fluid"||!c))throw new Error("`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`");if(U&&c)throw new Error("`slideGroupOfItems` and `freeScroll` can't be used together.");z.current=!0,xe()}},[Q,R,v,T,m,o,I,c,te,U]),u.useEffect(()=>{if(!m)return;function e(){document.hidden?W.current=!0:W.current=!1}return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[m]),u.useEffect(()=>{if(a.current){let e;const r=new De(()=>{if(!W.current&&!z.current){oe.current=window.innerWidth;const t=A();window.clearTimeout(e),e=setTimeout(()=>{ue.current=h(),typeof t=="function"&&t()},100)}});return r.observe(a.current),()=>{r.disconnect()}}},[A,h]),u.useEffect(()=>{re&&re({slideToNextItem:b.slideToNextItem,slideToPrevItem:b.slideToPrevItem,slideToItem:b==null?void 0:b.slideToItem})},[re,b.slideToItem,b.slideToNextItem,b.slideToPrevItem]);const We=k.jsxRuntimeExports.jsx(ae.Provider,{value:b,children:Re}),Pe=k.jsxRuntimeExports.jsx(ae.Provider,{value:b,children:k.jsxRuntimeExports.jsx("div",{className:"use-spring-carousel-main-wrapper",ref:a,...Ne(),style:{display:"flex",position:"relative",width:"100%",height:"100%",...$e()},children:k.jsxRuntimeExports.jsxs("div",{className:"use-spring-carousel-track-wrapper",ref:p,...Fe(),style:{position:"relative",display:"flex",flexDirection:i==="x"?"row":"column",touchAction:je(),...Ce()},children:[(c||!o)&&v?k.jsxRuntimeExports.jsx("div",{style:{flexShrink:0,width:v}}):null,_.map((e,r)=>k.jsxRuntimeExports.jsx("div",{className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:{display:"flex",position:"relative",flex:"1",...we(r===_.findIndex(t=>t.id===_[_.length-1].id))},children:typeof e.renderItem=="function"?e.renderItem({getIsActiveItem:fe,getIsNextItem:se,getIsPrevItem:le,useListenToCustomEvent:L}):e.renderItem},`${e.id}-${r}`)),(c||!o)&&v?k.jsxRuntimeExports.jsx("div",{style:{flexShrink:0,width:v}}):null]})})});return{...b,carouselFragment:Pe,thumbsFragment:We}}const ae=u.createContext(void 0);function Oe(){const n=u.useContext(ae);if(!n)throw new Error("useSpringCarouselContext must be used within the carousel.");return n}exports.useSpringCarousel=He;exports.useSpringCarouselContext=Oe;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./useThumbsModule-09d1d442.cjs"),W=require("@react-spring/web"),Be=require("@use-gesture/react"),c=require("react"),He=require("resize-observer-polyfill"),$=require("screenfull");function ze({mainCarouselWrapperRef:n,onFullScreenChange:x,handleResize:N}){const U=c.useRef(!1);c.useEffect(()=>{function d(){document.fullscreenElement&&(Y(!0),x(!0),N&&N()),document.fullscreenElement||(Y(!1),x(!1),N&&N())}if($.isEnabled)return $.on("change",d),()=>{$.isEnabled&&$.off("change",d)}},[]);function Y(d){U.current=d}function v(){return U.current}function y(d){$.isEnabled&&$.request(d||n.current)}function s(){$.isEnabled&&$.exit()}return{enterFullscreen:y,exitFullscreen:s,getIsFullscreen:v}}function Xe({items:n,init:x=!0,withThumbs:N,thumbsSlideAxis:U="x",itemsPerSlide:Y=1,slideType:v="fixed",gutter:y=0,withLoop:s=!1,startEndGutter:d=0,carouselSlideAxis:o="x",disableGestures:he=!1,draggingSlideTreshold:te,slideWhenThresholdIsReached:me=!1,freeScroll:u,enableFreeScrollDrag:re,initialStartingPosition:Z,prepareThumbsData:be,initialActiveItem:C=0,animateWhenActiveItemChange:ye=!0,getControllerRef:ne,slideGroupOfItems:P=!1,customSlideValue:ue}){const R=Y>n.length?n.length:Y,J=c.useRef(!1),_=c.useRef(te??0),E=c.useRef("initial"),ce=c.useRef("initial"),se=c.useRef("initial"),p=c.useRef(C),g=c.useRef(C===0),f=c.useRef(v==="fixed"&&C===n.length-1),a=c.useRef(null),I=c.useRef(null),oe=c.useRef(0),ie=c.useRef(0),h=c.useRef(0),Te=c.useRef(s),Re=c.useRef(v),we=c.useRef(u),q=c.useRef(!1),L=c.useCallback(()=>s?[...n.map(e=>({...e,id:`prev-repeated-item-${e.id}`})),...n,...n.map(e=>({...e,id:`next-repeated-item-${e.id}`}))]:[...n],[n,s])(),[j,b]=W.useSpring(()=>({val:0,pause:!x,onChange:({value:e})=>{u&&a.current?(o==="x"?a.current.scrollLeft=Math.abs(e.val):a.current.scrollTop=Math.abs(e.val),ee()):I.current&&(o==="x"?I.current.style.transform=`translate3d(${e.val}px, 0px,0px)`:I.current.style.transform=`translate3d(0px,${e.val}px,0px)`)}}),[u]),{emitEvent:G,useListenToCustomEvent:A}=k.useEventsModule(),{thumbsFragment:Ce,handleScroll:Ee}=k.useThumbsModule({withThumbs:!!N,thumbsSlideAxis:U,prepareThumbsData:be,items:n,renderThumbFnProps:{getIsActiveItem:de,getIsPrevItem:ae,useListenToCustomEvent:A,getIsNextItem:le}}),{enterFullscreen:xe,exitFullscreen:ve,getIsFullscreen:pe}=ze({mainCarouselWrapperRef:a,handleResize:()=>S(),onFullScreenChange:e=>{G({eventName:"onFullscreenChange",isFullscreen:e})}});function Me(e){return v==="fixed"&&!u?{marginRight:`${e?0:y}px`,flex:`1 0 calc(100% / ${R} - ${y*(R-1)/R}px)`}:{marginRight:`${e?0:y}px`}}const l=c.useCallback(()=>{var t;if(v==="fluid"&&typeof ue=="number")return ue;const e=P?a.current:(t=a.current)==null?void 0:t.querySelector(".use-spring-carousel-item");if(!e)throw Error("No carousel items available!");let r=e.getBoundingClientRect()[o==="x"?"width":"height"];return P||(r+=y),P&&(r+=y-d*2),r},[o,y,P,d,ue,v]);function V({from:e,to:r,nextActiveItem:t,immediate:i=!1,slideMode:w}){ce.current=w,typeof t=="number"&&(u||(p.current=t),G({eventName:"onSlideStartChange",slideActionType:E.current,slideMode:ce.current,nextItem:{startReached:g.current,endReached:f.current,index:u?-1:p.current,id:u?"":n[p.current].id}})),h.current=r,b.start({immediate:i,from:{val:e},to:{val:r},config:{...W.config.default,velocity:j.val.velocity},onRest(z){!i&&z.finished&&G({eventName:"onSlideChange",slideActionType:E.current,slideMode:ce.current,currentItem:{startReached:g.current,endReached:f.current,index:u?-1:p.current,id:u?"":n[p.current].id}})}}),N&&!i&&Ee(p.current)}const m=c.useCallback(()=>{var e;return I.current?s?l()*n.length:Math.round(Number((e=I.current)==null?void 0:e[o==="x"?"scrollWidth":"scrollHeight"])-I.current.getBoundingClientRect()[o==="x"?"width":"height"]-d*2):0},[o,l,n.length,d,s]);function ke(){const e=`calc(100% - ${d*2}px)`;return{width:o==="x"?e:"100%",height:o==="y"?e:"100%"}}const K=c.useCallback(()=>{var r;const e=(r=I.current)==null?void 0:r.querySelector(".use-spring-carousel-item");if(!e)throw Error("No carousel items available!");return e.getBoundingClientRect()[o==="x"?"width":"height"]+y},[o,y]),O=c.useCallback(e=>{const r=o==="x"?"left":"top",t=I.current;t&&(s?(t.style.top="0px",t.style.left="0px",t.style[r]=`-${e-d}px`,g.current=!1,f.current=!1):(t.style.left="0px",t.style.top="0px"))},[o,d,s]),S=c.useCallback((e=!1)=>{if(I.current&&e&&(I.current.style.transform="translate3d(0px, 0px,0px)",I.current.style.left="0",I.current.style.top="0"),v==="fixed"&&O(Z==="center"?K()*n.length-l()*Math.round((R-1)/2):Z==="end"?K()*n.length-l()*Math.round(R-1):K()*n.length),v==="fluid"){if(O(K()*n.length),f.current&&m()!==Math.abs(h.current)&&!s){const r=-m();h.current=r,b.start({immediate:!0,val:h.current});return}if(Math.abs(h.current)>0&&m()!==Math.abs(h.current)&&!s&&!u&&se.current==="backward"){const r=oe.current-m(),t=h.current+r;return b.start({immediate:!0,val:t}),()=>{h.current=t}}console.log("here");return}if(!u&&v==="fixed"){const r=-(l()*p.current);if(Math.abs(r)>m()&&!s){const t=-m();f.current=!0,h.current=t,b.start({immediate:!0,val:h.current})}else h.current=r,b.start({immediate:!0,val:r});setTimeout(()=>{J.current=!1},0)}},[u,K,l,m,Z,n.length,R,O,b,v,s]);function M(){return u&&a.current?a.current[o==="x"?"scrollLeft":"scrollTop"]:j.val.get()}function Q(e,r){if(u&&e==="next"){const t=h.current+l();return t>m()?m():t}if(u&&e==="prev"){const t=h.current-l();return t<0?0:t}return e==="next"?typeof r=="number"?-(r*l()):h.current-l():typeof r=="number"?-(r*l()):h.current+l()}function D({type:e,index:r,immediate:t}){if(!x||q.current||g.current&&!s)return;f.current&&(se.current="backward"),E.current="prev",f.current=!1;const i=typeof r=="number"?r:p.current-1;if(u&&ee(),!s){const w=u?Q("prev",r)-l()/3<0:Q("prev",r)+l()/3>0;if(g.current)return;if(w){g.current=!0,f.current=!1,V({slideMode:e,from:M(),to:0,nextActiveItem:0,immediate:t});return}}if(s&&(g.current||i<0)){g.current=!1,f.current=!0,V({slideMode:e,from:M()-l()*n.length,to:-(l()*n.length)+l(),nextActiveItem:n.length-1,immediate:t});return}i===0&&(g.current=!0),(i===n.length-1||i===-1)&&(f.current=!0),V({slideMode:e,from:M(),to:Q("prev",r),nextActiveItem:i,immediate:t})}function B({type:e,index:r,immediate:t}){if(!x||q.current||f.current&&!s)return;g.current&&(se.current="forward"),E.current="next",g.current=!1;const i=r||p.current+1;if(u&&ee(),!s){const w=Math.abs(Q("next",r))>m()-l()/3;if(f.current)return;if(w){g.current=!1,f.current=!0,V({slideMode:e,from:M(),to:u?m():-m(),nextActiveItem:i,immediate:t});return}}if(s&&(f.current||i>n.length-1)){f.current=!1,g.current=!0,V({slideMode:e,from:M()+l()*n.length,to:0,nextActiveItem:0,immediate:t});return}i===0&&(g.current=!0),i===n.length-1&&(f.current=!0),V({slideMode:e,from:M(),to:Q("next",r),nextActiveItem:i,immediate:t})}function Fe(){te?_.current=te:_.current=Math.floor(l()/2/2)}function Ie(){I.current&&(oe.current=m(),Te.current=s,Re.current=v,we.current=u,ie.current=window.innerWidth,h.current=0,fe({id:0,immediate:!0,shouldReset:!0}),Fe(),S())}const $e=x&&!he&&!u||!!u&&!!re,Ne=Be.useDrag(e=>{const r=e.dragging,t=e.offset[o==="x"?0:1],i=e.movement[o==="x"?0:1],w=e.direction[o==="x"?0:1],z=i>_.current,X=i<-_.current,De=m(),F=e.velocity;if(r){if(w>0?E.current="prev":E.current="next",G({...e,eventName:"onDrag",slideActionType:E.current}),u){if(t>0){b.start({from:{val:M()},to:{val:0},config:{velocity:F,friction:50,tension:1e3}}),e.cancel();return}b.start({from:{val:M()},to:{val:-t},config:{velocity:F,friction:50,tension:1e3}});return}b.start({val:t,config:{velocity:F,friction:50,tension:1e3}}),me&&X?(B({type:"drag"}),e.cancel()):me&&z&&(D({type:"drag"}),e.cancel()),De-Math.abs(t)<-(l()*2)&&e.cancel();return}if(e.last&&u&&t>0){b.start({from:{val:M()},to:{val:0},config:{velocity:F,friction:50,tension:1e3}});return}e.last&&!e.canceled&&u&&(E.current==="prev"&&D({type:"drag"}),E.current==="next"&&B({type:"drag"})),e.last&&!e.canceled&&!u&&(X?!s&&f.current?b.start({val:-m(),config:{...W.config.default,velocity:F}}):B({type:"drag"}):z?!s&&g.current?b.start({val:0,config:{...W.config.default,velocity:F}}):D({type:"drag"}):b.start({val:h.current,config:{...W.config.default,velocity:F}})),e.last&&e.canceled&&b.start({val:h.current,config:{...W.config.default,velocity:F}})},{enabled:$e,axis:o,from:()=>u&&a.current?[-a.current.scrollLeft,-a.current.scrollTop]:o==="x"?[j.val.get(),j.val.get()]:[j.val.get(),j.val.get()]});function je(){return u?o==="x"?{overflowX:"auto"}:{overflowY:"auto"}:{}}function ee(){a.current&&(h.current=a.current[o==="x"?"scrollLeft":"scrollTop"],a.current[o==="x"?"scrollLeft":"scrollTop"]===0&&(g.current=!0,f.current=!1),a.current[o==="x"?"scrollLeft":"scrollTop"]>0&&a.current[o==="x"?"scrollLeft":"scrollTop"]<m()&&(g.current=!1,f.current=!1),a.current[o==="x"?"scrollLeft":"scrollTop"]===m()&&(g.current=!1,f.current=!0))}function We(){return u?{onWheel(){j.val.stop(),ee()}}:{}}function H(e,r){let t=0;if(typeof e=="string"?t=n.findIndex(i=>i.id===e):t=e,t<0||t>=n.length){if(r)throw new Error(r);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),t=-1}return t}function fe({id:e,immediate:r,shouldReset:t,type:i}){if(!x||q.current)return;g.current=!1,f.current=!1;const w=H(e,"The item you want to slide to doesn't exist; check the provided id.");if(w===p.current&&!t)return;const z=H(n[p.current].id),X=H(n[w].id);X>z?B({type:i||t?"initial":"click",index:X,immediate:r}):D({type:i||t?"initial":"click",index:X,immediate:r})}function le(e){const r=H(e,"The item doesn't exist; check the provided id."),t=p.current;return s&&t===n.length-1?r===0:r===t+1}function ae(e){const r=H(e,"The item doesn't exist; check the provided id."),t=p.current;return s&&t===0?r===n.length-1:r===t-1}function de(e){return H(e,"The item you want to check doesn't exist; check the provided id.")===p.current}function Pe(){return he?"unset":o==="x"?"pan-y":"pan-x"}const T=u?{useListenToCustomEvent:A,enterFullscreen:xe,exitFullscreen:ve,getIsFullscreen:pe,slideToPrevItem:(e=!0)=>{D({type:"click",immediate:!e})},slideToNextItem:(e=!0)=>{B({type:"click",immediate:!e})}}:{useListenToCustomEvent:A,enterFullscreen:xe,exitFullscreen:ve,getIsFullscreen:pe,slideToPrevItem:(e=!0)=>{D({type:"click",immediate:!e})},slideToNextItem:(e=!0)=>{B({type:"click",immediate:!e})},slideToItem:(e,r=!0)=>{fe({id:e,immediate:!r})},getIsNextItem:le,getIsPrevItem:ae,getIsActiveItem:de};W.useIsomorphicLayoutEffect(()=>{I.current&&x&&(J.current=!0,Ie())},[x]),c.useEffect(()=>{p.current!==C&&(J.current=!0,fe({id:C,immediate:!ye}))},[C]),c.useEffect(()=>{if(x){if(C>n.length-1)throw new Error(`initialActiveItem (${C}) is greater than the total quantity available items (${n.length}).`);R>n.length&&console.warn(`itemsPerSlide (${R}) is greater than the total quantity available items (${n.length}). Fallback to ${n.length})`)}},[C,n.length,R,x]),c.useEffect(()=>{ie.current=window.innerWidth},[]),c.useEffect(()=>{if(x){if(s&&u)throw new Error("`withLoop` and `freeScroll` can't be used together.");if(u&&v==="fixed")throw new Error("`freeScroll` can't be used when `scrollType=fixed`.");if(re&&(v!=="fluid"||!u))throw new Error("`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`");if(P&&u)throw new Error("`slideGroupOfItems` and `freeScroll` can't be used together.");J.current=!0,Ie()}},[Z,R,d,y,x,s,v,u,re,P]),c.useEffect(()=>{if(!x)return;function e(){document.hidden?q.current=!0:q.current=!1}return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[x]),c.useEffect(()=>{if(a.current){let e;const r=new He(()=>{if(!q.current&&!J.current){ie.current=window.innerWidth;const t=S();window.clearTimeout(e),e=setTimeout(()=>{oe.current=m(),typeof t=="function"&&t()},100)}});return r.observe(a.current),()=>{r.disconnect()}}},[S,m]),c.useEffect(()=>{ne&&ne({slideToNextItem:T.slideToNextItem,slideToPrevItem:T.slideToPrevItem,slideToItem:T==null?void 0:T.slideToItem})},[ne,T.slideToItem,T.slideToNextItem,T.slideToPrevItem]);const qe=k.jsxRuntimeExports.jsx(ge.Provider,{value:T,children:Ce}),Ve=k.jsxRuntimeExports.jsx(ge.Provider,{value:T,children:k.jsxRuntimeExports.jsx("div",{className:"use-spring-carousel-main-wrapper",ref:a,...We(),style:{display:"flex",position:"relative",width:"100%",height:"100%",...je()},children:k.jsxRuntimeExports.jsxs("div",{className:"use-spring-carousel-track-wrapper",ref:I,...Ne(),style:{position:"relative",display:"flex",flexDirection:o==="x"?"row":"column",touchAction:Pe(),...ke()},children:[(u||!s)&&d?k.jsxRuntimeExports.jsx("div",{style:{flexShrink:0,width:d}}):null,L.map((e,r)=>k.jsxRuntimeExports.jsx("div",{className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:{display:"flex",position:"relative",flex:"1",...Me(r===L.findIndex(t=>t.id===L[L.length-1].id))},children:typeof e.renderItem=="function"?e.renderItem({getIsActiveItem:de,getIsNextItem:le,getIsPrevItem:ae,useListenToCustomEvent:A}):e.renderItem},`${e.id}-${r}`)),(u||!s)&&d?k.jsxRuntimeExports.jsx("div",{style:{flexShrink:0,width:d}}):null]})})});return{...T,carouselFragment:Ve,thumbsFragment:qe}}const ge=c.createContext(void 0);function Ye(){const n=c.useContext(ge);if(!n)throw new Error("useSpringCarouselContext must be used within the carousel.");return n}exports.useSpringCarousel=Xe;exports.useSpringCarouselContext=Ye;
|
|
2
2
|
//# sourceMappingURL=index.cjs2.js.map
|
package/dist/index.cjs2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs2.js","sources":["../src/modules/useFullscreenModule.ts","../src/useSpringCarousel.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport screenfull from 'screenfull'\n\nimport { FullscreenModule } from '../types/useFullscreenModule.types'\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n onFullScreenChange,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n onFullScreenChange(true)\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n onFullScreenChange(false)\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { config, useIsomorphicLayoutEffect, useSpring } from '@react-spring/web'\nimport { useDrag } from '@use-gesture/react'\nimport React, { createContext, useCallback, useContext, useEffect, useRef } from 'react'\nimport ResizeObserver from 'resize-observer-polyfill'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n ItemWithThumb,\n SlideActionType,\n SlideMode,\n SlideType,\n UseSpringCarouselComplete,\n UseSpringCarouselWithFixedItems,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithThumbs,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithFixedItems<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoFixedItems<false>): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n getControllerRef,\n slideGroupOfItems = false,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n const carouselItem = slideGroupOfItems\n ? mainCarouselWrapperRef.current\n : mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter, slideGroupOfItems])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n if (withLoop && freeScroll) {\n throw new Error(\"`withLoop` and `freeScroll` can't be used together.\")\n }\n if (freeScroll && slideType === 'fixed') {\n throw new Error(\"`freeScroll` can't be used when `scrollType=fixed`.\")\n }\n if (enableFreeScrollDrag && (slideType !== 'fluid' || !freeScroll)) {\n throw new Error(\n '`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`',\n )\n }\n if (slideGroupOfItems && freeScroll) {\n throw new Error(\"`slideGroupOfItems` and `freeScroll` can't be used together.\")\n }\n\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n startEndGutter,\n gutter,\n init,\n withLoop,\n slideType,\n freeScroll,\n enableFreeScrollDrag,\n slideGroupOfItems,\n ])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","slideGroupOfItems","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","enableDrag","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"oRAKO,SAASA,GAAoB,CAClC,uBAAAC,EACA,mBAAAC,EACA,aAAAC,CACF,EAAqB,CACb,MAAAC,EAAeC,SAAO,EAAK,EAEjCC,EAAAA,UAAU,IAAM,CACd,SAASC,GAAyB,CAC5B,SAAS,oBACXC,EAAgB,EAAI,EACpBN,EAAmB,EAAI,EACvBC,GAAgBA,EAAa,GAG1B,SAAS,oBACZK,EAAgB,EAAK,EACrBN,EAAmB,EAAK,EACxBC,GAAgBA,EAAa,EAEjC,CAEA,GAAIM,EAAW,UACF,OAAAA,EAAA,GAAG,SAAUF,CAAsB,EACvC,IAAM,CACPE,EAAW,WACFA,EAAA,IAAI,SAAUF,CAAsB,CACjD,CAIN,EAAG,CAAE,CAAA,EAEL,SAASC,EAAgBE,EAAwB,CAC/CN,EAAa,QAAUM,CACzB,CAEA,SAASC,GAAkB,CACzB,OAAOP,EAAa,OACtB,CAEA,SAASQ,EAAgBC,EAA0B,CAC7CJ,EAAW,WACFA,EAAA,QAASI,GAAcZ,EAAuB,OAAmB,CAEhF,CAEA,SAASa,GAAiB,CACbL,EAAA,WAAaA,EAAW,MACrC,CAEO,MAAA,CACL,gBAAAG,EACA,eAAAE,EACA,gBAAAH,CAAA,CAEJ,CCtBA,SAASI,GAAkB,CACzB,MAAAC,EACA,KAAAC,EAAO,GACP,WAAAC,EACA,gBAAAC,EAAkB,IAClB,cAAeC,EAAiB,EAChC,UAAAC,EAAY,QACZ,OAAAC,EAAS,EACT,SAAAC,EAAW,GACX,eAAAC,EAAiB,EACjB,kBAAAC,EAAoB,IACpB,gBAAAC,GAAkB,GAClB,sBAAuBC,GACvB,4BAAAC,GAA8B,GAC9B,WAAAC,EACA,qBAAAC,GACA,wBAAAC,EACA,kBAAAC,GACA,kBAAAC,EAAoB,EACpB,4BAAAC,GAA8B,GAC9B,iBAAAC,GACA,kBAAAC,EAAoB,EACtB,EAA6D,CAC3D,MAAMC,EAAgBjB,EAAiBJ,EAAM,OAASA,EAAM,OAASI,EAC/DkB,EAAqBjC,SAAO,EAAK,EACjCkC,EAAwBlC,EAAAA,OAAOsB,IAA0B,CAAC,EAC1Da,EAAkBnC,SAAwB,SAAS,EACnDoC,GAAgBpC,SAAkB,SAAS,EAQ3CqC,GAA8BrC,SAA2C,SAAS,EAElFsC,EAAatC,SAAO4B,CAAiB,EACrCW,EAAmBvC,EAAAA,OAAO4B,IAAsB,CAAC,EACjDY,EAAkBxC,EAAO,OAAAgB,IAAc,SAAWY,IAAsBjB,EAAM,OAAS,CAAC,EACxFf,EAAyBI,SAA8B,IAAI,EAC3DyC,EAA0BzC,SAA8B,IAAI,EAE5D0C,GAAuB1C,SAAO,CAAC,EAC/B2C,GAAkB3C,SAAO,CAAC,EAC1B4C,EAAkB5C,SAAO,CAAC,EAC1B6C,GAAe7C,SAAOkB,CAAQ,EAC9B4B,GAAgB9C,SAAOgB,CAAS,EAChC+B,GAAiB/C,SAAOwB,CAAU,EAClCwB,EAAiBhD,SAAO,EAAK,EAkB7BiD,EAhBWC,EAAAA,YAAY,IACvBhC,EACK,CACL,GAAGP,EAAM,IAAKwC,IAAO,CACnB,GAAGA,EACH,GAAI,sBAAsBA,EAAE,IAAA,EAC5B,EACF,GAAGxC,EACH,GAAGA,EAAM,IAAKwC,IAAO,CACnB,GAAGA,EACH,GAAI,sBAAsBA,EAAE,IAAA,EAC5B,CAAA,EAGC,CAAC,GAAGxC,CAAK,EACf,CAACA,EAAOO,CAAQ,CAAC,IAGd,CAACkC,EAAQC,CAAS,EAAIC,EAAA,UAC1B,KAAO,CACL,IAAK,EACL,MAAO,CAAC1C,EACR,SAAU,CAAC,CAAE,MAAA2C,KAAY,CACnB/B,GAAc5B,EAAuB,SACnCwB,IAAsB,IACxBxB,EAAuB,QAAQ,WAAa,KAAK,IAAI2D,EAAM,GAAG,EAE9D3D,EAAuB,QAAQ,UAAY,KAAK,IAAI2D,EAAM,GAAG,EAE5BC,KAC1Bf,EAAwB,UAC7BrB,IAAsB,IACxBqB,EAAwB,QAAQ,MAAM,UAAY,eAAec,EAAM,kBAEvEd,EAAwB,QAAQ,MAAM,UAAY,mBAAmBc,EAAM,aAGjF,CAAA,GAEF,CAAC/B,CAAU,CAAA,EAEP,CAAE,UAAAiC,EAAW,uBAAAC,CAAuB,EAAIC,EAA8B,gBAAA,EACtE,CAAE,eAAAC,GAAgB,aAAAC,EAAa,EAAIC,kBAA8B,CACrE,WAAY,CAAC,CAACjD,EACd,gBAAAC,EACA,kBAAAa,GACA,MAAAhB,EACA,mBAAoB,CAClB,gBAAAoD,GACA,cAAAC,GACA,uBAAAN,EACA,cAAAO,EACF,CAAA,CACD,EACK,CAAE,gBAAA1D,GAAiB,eAAAE,GAAgB,gBAAAH,EAAA,EAAoBX,GAAoB,CAC/E,uBAAAC,EACA,aAAc,IAAMsE,EAA8B,EAClD,mBAAqBC,GAAQ,CACjBV,EAAA,CACR,UAAW,qBACX,aAAcU,CAAA,CACf,CACH,CAAA,CACD,EAED,SAASC,GAAcC,EAAqB,CACtC,OAAArD,IAAc,SAAW,CAACQ,EACrB,CACL,YAAa,GAAG6C,EAAa,EAAIpD,MACjC,KAAM,mBAAmBe,OACtBf,GAAUe,EAAgB,GAAMA,MAAA,EAIhC,CACA,YAAa,GAAGqC,EAAa,EAAIpD,KAAW,CAErD,CACM,MAAAqD,EAAgBpB,EAAAA,YAAY,IAAM,OACtC,MAAMqB,EAAexC,EACjBnC,EAAuB,SACvB4E,EAAA5E,EAAuB,UAAvB,YAAA4E,EAAgC,cAAc,6BAElD,GAAI,CAACD,EACH,MAAM,MAAM,8BAA8B,EAG5C,OACEA,EAAa,sBAAsB,EAAEnD,IAAsB,IAAM,QAAU,QAAQ,EAAIH,CAExF,EAAA,CAACG,EAAmBH,EAAQc,CAAiB,CAAC,EAUxC,SAAA0C,EAAY,CAAE,KAAAC,EAAM,GAAAC,EAAI,eAAAC,EAAgB,UAAAC,EAAY,GAAO,UAAAC,GAA0B,CAC5F1C,GAAc,QAAU0C,EAEpB,OAAOF,GAAmB,WACvBpD,IACHc,EAAW,QAAUsC,GAEbnB,EAAA,CACR,UAAW,qBACX,gBAAiBtB,EAAgB,QACjC,UAAWC,GAAc,QACzB,SAAU,CACR,aAAcG,EAAiB,QAC/B,WAAYC,EAAgB,QAC5B,MAAOhB,EAAa,GAAKc,EAAW,QACpC,GAAId,EAAa,GAAKb,EAAM2B,EAAW,OAAO,EAAE,EAClD,CAAA,CACD,GAGHM,EAAgB,QAAU+B,EAC1BtB,EAAU,MAAM,CACd,UAAAwB,EACA,KAAM,CACJ,IAAKH,CACP,EACA,GAAI,CACF,IAAKC,CACP,EACA,OAAQ,CACN,GAAGI,EAAO,OAAA,QACV,SAAU3B,EAAO,IAAI,QACvB,EACA,OAAOG,EAAO,CACR,CAACsB,GAAatB,EAAM,UACZE,EAAA,CACR,UAAW,gBACX,gBAAiBtB,EAAgB,QACjC,UAAWC,GAAc,QACzB,YAAa,CACX,aAAcG,EAAiB,QAC/B,WAAYC,EAAgB,QAC5B,MAAOhB,EAAa,GAAKc,EAAW,QACpC,GAAId,EAAa,GAAKb,EAAM2B,EAAW,OAAO,EAAE,EAClD,CAAA,CACD,CAEL,CAAA,CACD,EACGzB,GAAc,CAACgE,GACjBhB,GAAavB,EAAW,OAAO,CAEnC,CACM,MAAA0C,EAAsB9B,EAAAA,YAAY,IAAM,OAC5C,OAAKT,EAAwB,QACzBvB,EACKoD,EAAA,EAAkB3D,EAAM,OAE1B,KAAK,MACV,QACE6D,EAAA/B,EAAwB,UAAxB,YAAA+B,EACEpD,IAAsB,IAAM,cAAgB,eAC9C,EAEAqB,EAAwB,QAAQ,wBAC9BrB,IAAsB,IAAM,QAAU,QACxC,EACAD,EAAiB,CAAA,EAbwB,CAc7C,EACC,CAACC,EAAmBkD,EAAe3D,EAAM,OAAQQ,EAAgBD,CAAQ,CAAC,EAC7E,SAAS+D,IAA2B,CAC5B,MAAAC,EAAe,eAAe/D,EAAiB,OAC9C,MAAA,CACL,MAAOC,IAAsB,IAAM8D,EAAe,OAClD,OAAQ9D,IAAsB,IAAM8D,EAAe,MAAA,CAEvD,CAEM,MAAAC,EAAuBjC,EAAAA,YAAY,IAAM,OAC7C,MAAMqB,GAAeC,EAAA/B,EAAwB,UAAxB,YAAA+B,EAAiC,cAAc,6BACpE,GAAI,CAACD,EACH,MAAM,MAAM,8BAA8B,EAE5C,OACEA,EAAa,sBAAsB,EAAEnD,IAAsB,IAAM,QAAU,QAAQ,EAAIH,CAAA,EAExF,CAACG,EAAmBH,CAAM,CAAC,EAExBmE,EAAclC,EAAA,YACjBmC,GAAc,CACP,MAAAC,EAAmBlE,IAAsB,IAAM,OAAS,MACxDmE,EAAM9C,EAAwB,QAC/B8C,IAEDrE,GACFqE,EAAI,MAAM,IAAM,MAChBA,EAAI,MAAM,KAAO,MACjBA,EAAI,MAAMD,CAAgB,EAAI,IAAID,EAAIlE,MAEtCoB,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,KAE1B+C,EAAI,MAAM,KAAO,MACjBA,EAAI,MAAM,IAAM,OAEpB,EACA,CAACnE,EAAmBD,EAAgBD,CAAQ,CAAA,EAGxCgD,EAAgChB,EAAA,YACpC,CAACsC,EAAsB,KAAU,CAsB/B,GArBI/C,EAAwB,SAAW+C,IACb/C,EAAA,QAAQ,MAAM,UAAY,4BAC1BA,EAAA,QAAQ,MAAM,KAAO,IACrBA,EAAA,QAAQ,MAAM,IAAM,KAG1CzB,IAAc,SAEdoE,EADE1D,IAA4B,SAE5ByD,IAAyBxE,EAAM,OAC7B2D,IAAkB,KAAK,OAAOtC,EAAgB,GAAK,CAAC,EAE/CN,IAA4B,MAEnCyD,IAAyBxE,EAAM,OAAS2D,EAAkB,EAAA,KAAK,MAAMtC,EAAgB,CAAC,EAG5EmD,EAAA,EAAyBxE,EAAM,MAPa,EAWxDK,IAAc,QAAS,CAOvB,GANUoE,EAAAD,EAAA,EAAyBxE,EAAM,MAAM,EAM/C6B,EAAgB,SAChBwC,MAA0B,KAAK,IAAIpC,EAAgB,OAAO,GAC1D,CAAC1B,EACD,CACM,MAAAuE,EAAS,CAACT,IAChBpC,EAAgB,QAAU6C,EAC1BpC,EAAU,MAAM,CACd,UAAW,GACX,IAAKT,EAAgB,OAAA,CACtB,EACD,OAGF,GACE,KAAK,IAAIA,EAAgB,OAAO,EAAI,GACpCoC,MAA0B,KAAK,IAAIpC,EAAgB,OAAO,GAC1D,CAAC1B,GACD,CAACM,GACDa,GAA4B,UAAY,WACxC,CACM,MAAAqD,EAAOhD,GAAqB,QAAUsC,EAAoB,EAC1DW,EAAO/C,EAAgB,QAAU8C,EAEvC,OAAArC,EAAU,MAAM,CACd,UAAW,GACX,IAAKsC,CAAA,CACN,EAEM,IAAM,CACX/C,EAAgB,QAAU+C,CAAA,EAI9B,QAAQ,IAAI,MAAM,EAClB,OAGE,GAAA,CAACnE,GAAcR,IAAc,QAAS,CACxC,MAAM4E,EAAY,EAAEtB,EAAc,EAAIhC,EAAW,SAMjD,GAAI,KAAK,IAAIsD,CAAS,EAAIZ,EAAoB,GAAK,CAAC9D,EAAU,CACtD,MAAAiD,EAAM,CAACa,IACbxC,EAAgB,QAAU,GAC1BI,EAAgB,QAAUuB,EAC1Bd,EAAU,MAAM,CACd,UAAW,GACX,IAAKT,EAAgB,OAAA,CACtB,OAEDA,EAAgB,QAAUgD,EAC1BvC,EAAU,MAAM,CACd,UAAW,GACX,IAAKuC,CAAA,CACN,EAGH,WAAW,IAAM,CACf3D,EAAmB,QAAU,IAC5B,CAAC,EAER,EACA,CACET,EACA2D,EACAb,EACAU,EACAtD,EACAf,EAAM,OACNqB,EACAoD,EACA/B,EACArC,EACAE,CACF,CAAA,EAEF,SAAS2E,GAAe,CAClB,OAAArE,GAAc5B,EAAuB,QAChCA,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,EAEvFgC,EAAO,IAAI,KACpB,CACS,SAAA0C,EAAWC,EAAuBC,EAAgB,CACrD,GAAAxE,GAAcuE,IAAS,OAAQ,CAC3B,MAAAJ,EAAO/C,EAAgB,QAAU0B,EAAc,EACjD,OAAAqB,EAAOX,IACFA,EAAoB,EAEtBW,EAGL,GAAAnE,GAAcuE,IAAS,OAAQ,CAC3B,MAAAJ,EAAO/C,EAAgB,QAAU0B,EAAc,EACrD,OAAIqB,EAAO,EACF,EAEFA,EAGT,OAAII,IAAS,OACP,OAAOC,GAAU,SACZ,EAAEA,EAAQ1B,EAAc,GAE1B1B,EAAgB,QAAU0B,IAG/B,OAAO0B,GAAU,SACZ,EAAEA,EAAQ1B,EAAc,GAE1B1B,EAAgB,QAAU0B,GACnC,CAOA,SAAS2B,EAAgB,CAAE,KAAAF,EAAM,MAAAC,EAAO,UAAAnB,GAAkC,CACxE,GAAI,CAACjE,GAAQoC,EAAe,SAAYT,EAAiB,SAAW,CAACrB,EAAW,OAE5EsB,EAAgB,UAClBH,GAA4B,QAAU,YAGxCF,EAAgB,QAAU,OAC1BK,EAAgB,QAAU,GAE1B,MAAM0D,EAAW,OAAOF,GAAU,SAAWA,EAAQ1D,EAAW,QAAU,EAM1E,GAJId,GACiCgC,IAGjC,CAACtC,EAAU,CACb,MAAMiF,EAAqB3E,EACvBsE,EAAW,OAAQE,CAAK,EAAI1B,IAAkB,EAAI,EAClDwB,EAAW,OAAQE,CAAK,EAAI1B,IAAkB,EAAI,EAEtD,GAAI/B,EAAiB,QAAS,OAC9B,GAAI4D,EAAoB,CACtB5D,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,GAEdiC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAa,EACnB,GAAI,EACJ,eAAgB,EAChB,UAAAhB,CAAA,CACD,EACD,QAGJ,GAAI3D,IAAaqB,EAAiB,SAAW2D,EAAW,GAAI,CAC1D3D,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,GACdiC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAiB,EAAAvB,IAAkB3D,EAAM,OAC/C,GAAI,EAAE2D,EAAkB,EAAA3D,EAAM,QAAU2D,EAAc,EACtD,eAAgB3D,EAAM,OAAS,EAC/B,UAAAkE,CAAA,CACD,EACD,OAEEqB,IAAa,IACf3D,EAAiB,QAAU,KAEzB2D,IAAavF,EAAM,OAAS,GAAKuF,IAAa,MAChD1D,EAAgB,QAAU,IAEhBiC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAa,EACnB,GAAIC,EAAW,OAAQE,CAAK,EAC5B,eAAgBE,EAChB,UAAArB,CAAA,CACD,CACH,CACA,SAASuB,EAAgB,CAAE,KAAAL,EAAM,MAAAC,EAAO,UAAAnB,GAAkC,CACxE,GAAI,CAACjE,GAAQoC,EAAe,SAAYR,EAAgB,SAAW,CAACtB,EAAW,OAE3EqB,EAAiB,UACnBF,GAA4B,QAAU,WAGxCF,EAAgB,QAAU,OAC1BI,EAAiB,QAAU,GAErB,MAAA2D,EAAWF,GAAS1D,EAAW,QAAU,EAM/C,GAJId,GACiCgC,IAGjC,CAACtC,EAAU,CACP,MAAAiF,EACJ,KAAK,IAAIL,EAAW,OAAQE,CAAK,CAAC,EAAIhB,EAAA,EAAwBV,EAAA,EAAkB,EAElF,GAAI9B,EAAgB,QAAS,OAC7B,GAAI2D,EAAoB,CACtB5D,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,GAEdiC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAa,EACnB,GAAIrE,EAAawD,EAAoB,EAAI,CAACA,EAAoB,EAC9D,eAAgBkB,EAChB,UAAArB,CAAA,CACD,EACD,QAGJ,GAAI3D,IAAasB,EAAgB,SAAW0D,EAAWvF,EAAM,OAAS,GAAI,CACxE6B,EAAgB,QAAU,GAC1BD,EAAiB,QAAU,GACfkC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAiB,EAAAvB,IAAkB3D,EAAM,OAC/C,GAAI,EACJ,eAAgB,EAChB,UAAAkE,CAAA,CACD,EACD,OAEEqB,IAAa,IACf3D,EAAiB,QAAU,IAEzB2D,IAAavF,EAAM,OAAS,IAC9B6B,EAAgB,QAAU,IAEhBiC,EAAA,CACV,UAAWsB,EACX,KAAMF,EAAa,EACnB,GAAIC,EAAW,OAAQE,CAAK,EAC5B,eAAgBE,EAChB,UAAArB,CAAA,CACD,CACH,CACA,SAASwB,IAA4B,CAC/B/E,GACFY,EAAsB,QAAUZ,GAEhCY,EAAsB,QAAU,KAAK,MAAMoC,IAAkB,EAAI,CAAC,CAEtE,CACA,SAASgC,IAAqB,CACxB7D,EAAwB,UAC1BC,GAAqB,QAAUsC,IAC/BnC,GAAa,QAAU3B,EACvB4B,GAAc,QAAU9B,EACxB+B,GAAe,QAAUvB,EACzBmB,GAAgB,QAAU,OAAO,WACjCC,EAAgB,QAAU,EAE1B2D,GAAoB,CAAE,GAAI,EAAG,UAAW,GAAM,YAAa,GAAM,EACvCF,KACInC,IAElC,CAEM,MAAAsC,GACH5F,GAAQ,CAACS,IAAmB,CAACG,GAAgB,CAAC,CAACA,GAAc,CAAC,CAACC,GAE5DgF,GAAWC,GAAA,QACdC,GAAU,CACT,MAAMC,EAAaD,EAAM,SACnBE,EAAWF,EAAM,OAAOvF,IAAsB,IAAM,EAAI,CAAC,EACzD0F,EAAkBH,EAAM,SAASvF,IAAsB,IAAM,EAAI,CAAC,EAClE2F,EAAYJ,EAAM,UAAUvF,IAAsB,IAAM,EAAI,CAAC,EAE7D4F,EAAmBF,EAAkB5E,EAAsB,QAC3D+E,EAAmBH,EAAkB,CAAC5E,EAAsB,QAC5DgF,GAAMlC,IAEZ,GAAI4B,EAAY,CAad,GAZIG,EAAY,EACd5E,EAAgB,QAAU,OAE1BA,EAAgB,QAAU,OAGlBsB,EAAA,CACR,GAAGkD,EACH,UAAW,SACX,gBAAiBxE,EAAgB,OAAA,CAClC,EAEGX,EAAY,CACd,GAAIqF,EAAW,EAAG,CAChBxD,EAAU,MAAM,CACd,KAAM,CACJ,IAAKwC,EAAa,CACpB,EACA,GAAI,CACF,IAAK,CACP,EACA,OAAQ,CACN,SAAUc,EAAM,SAChB,SAAU,GACV,QAAS,GACX,CAAA,CACD,EACDA,EAAM,OAAO,EACb,OAGFtD,EAAU,MAAM,CACd,KAAM,CACJ,IAAKwC,EAAa,CACpB,EACA,GAAI,CACF,IAAK,CAACgB,CACR,EACA,OAAQ,CACN,SAAUF,EAAM,SAChB,SAAU,GACV,QAAS,GACX,CAAA,CACD,EACD,OAGFtD,EAAU,MAAM,CACd,IAAKwD,EACL,OAAQ,CACN,SAAUF,EAAM,SAChB,SAAU,GACV,QAAS,GACX,CAAA,CACD,EAEGpF,IAA+B0F,GACjBb,EAAA,CAAE,KAAM,MAAA,CAAQ,EAChCO,EAAM,OAAO,GACJpF,IAA+ByF,IACxBf,EAAA,CAAE,KAAM,MAAA,CAAQ,EAChCU,EAAM,OAAO,GAGHO,GAAM,KAAK,IAAIL,CAAQ,EAEzB,EAAEvC,EAAc,EAAI,IAC5BqC,EAAM,OAAO,EAGf,OAGF,GAAIA,EAAM,MAAQnF,GAAcqF,EAAW,EAAG,CAC5CxD,EAAU,MAAM,CACd,KAAM,CACJ,IAAKwC,EAAa,CACpB,EACA,GAAI,CACF,IAAK,CACP,EACA,OAAQ,CACN,SAAUc,EAAM,SAChB,SAAU,GACV,QAAS,GACX,CAAA,CACD,EACD,OAEEA,EAAM,MAAQ,CAACA,EAAM,UAAYnF,IAC/BW,EAAgB,UAAY,QACd8D,EAAA,CAAE,KAAM,MAAA,CAAQ,EAE9B9D,EAAgB,UAAY,QACdiE,EAAA,CAAE,KAAM,MAAA,CAAQ,GAGhCO,EAAM,MAAQ,CAACA,EAAM,UAAY,CAACnF,IAChCyF,EACE,CAAC/F,GAAYsB,EAAgB,QAC/Ba,EAAU,MAAM,CACd,IAAK,CAAC2B,EAAoB,EAC1B,OAAQ,CACN,GAAGD,EAAO,OAAA,QACV,SAAU4B,EAAM,QAClB,CAAA,CACD,EAEeP,EAAA,CAAE,KAAM,MAAA,CAAQ,EAEzBY,EACL,CAAC9F,GAAYqB,EAAiB,QAChCc,EAAU,MAAM,CACd,IAAK,EACL,OAAQ,CACN,GAAG0B,EAAO,OAAA,QACV,SAAU4B,EAAM,QAClB,CAAA,CACD,EAEeV,EAAA,CAAE,KAAM,MAAA,CAAQ,EAGlC5C,EAAU,MAAM,CACd,IAAKT,EAAgB,QACrB,OAAQ,CACN,GAAGmC,EAAO,OAAA,QACV,SAAU4B,EAAM,QAClB,CAAA,CACD,GAGDA,EAAM,MAAQA,EAAM,UACtBtD,EAAU,MAAM,CACd,IAAKT,EAAgB,QACrB,OAAQ,CACN,GAAGmC,EAAO,OAAA,QACV,SAAU4B,EAAM,QAClB,CAAA,CACD,CAEL,EACA,CACE,QAASH,GACT,KAAMpF,EACN,KAAM,IACAI,GAAc5B,EAAuB,QAChC,CACL,CAACA,EAAuB,QAAQ,WAChC,CAACA,EAAuB,QAAQ,SAAA,EAGhCwB,IAAsB,IACjB,CAACgC,EAAO,IAAI,IAAA,EAAOA,EAAO,IAAI,KAAK,EAErC,CAACA,EAAO,IAAI,IAAA,EAAOA,EAAO,IAAI,KAAK,CAE9C,CAAA,EAGF,SAAS+D,IAA2B,CAClC,OAAI3F,EACEJ,IAAsB,IACjB,CACL,UAAW,MAAA,EAGR,CACL,UAAW,MAAA,EAGR,EACT,CACA,SAASoC,GAAqC,CACxC5D,EAAuB,UACzBgD,EAAgB,QACdhD,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,EAErFxB,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,IAAM,IAE3FmB,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,IAG1B5C,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,EACnF,GACFxB,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,EACnF4D,MAEFzC,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,IAI1B5C,EAAuB,QAAQwB,IAAsB,IAAM,aAAe,WAAW,IACrF4D,MAEAzC,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,IAGhC,CACA,SAAS4E,IAAoB,CAC3B,OAAI5F,EACK,CACL,SAAU,CACR4B,EAAO,IAAI,OACwBI,GACrC,CAAA,EAGG,EACT,CACS,SAAA6D,EAAcC,EAAqBC,EAAgB,CAC1D,IAAIC,EAAY,EAOhB,GALI,OAAOF,GAAO,SAChBE,EAAY7G,EAAM,UAAW8G,GAASA,EAAK,KAAOH,CAAE,EAExCE,EAAAF,EAEVE,EAAY,GAAKA,GAAa7G,EAAM,OAAQ,CAC9C,GAAI4G,EACI,MAAA,IAAI,MAAMA,CAAK,EAEf,QAAA,MAAM,wDAAwDD,iBAAkB,EAC5EE,EAAA,GAGP,OAAAA,CACT,CAOA,SAASjB,GAAoB,CAAE,GAAAe,EAAI,UAAAzC,EAAW,YAAA6C,EAAa,KAAA3B,GAA6B,CAClF,GAAA,CAACnF,GAAQoC,EAAe,QAAS,OAErCT,EAAiB,QAAU,GAC3BC,EAAgB,QAAU,GAE1B,MAAMgF,EAAYH,EAChBC,EACA,qEAAA,EAGF,GAAIE,IAAclF,EAAW,SAAW,CAACoF,EACvC,OAGF,MAAMC,EAAcN,EAAc1G,EAAM2B,EAAW,OAAO,EAAE,EAAE,EACxDsF,EAAgBP,EAAc1G,EAAM6G,CAAS,EAAE,EAAE,EAEnDI,EAAgBD,EACFvB,EAAA,CACd,KAAML,GAAQ2B,EAAc,UAAY,QACxC,MAAOE,EACP,UAAA/C,CAAA,CACD,EAEeoB,EAAA,CACd,KAAMF,GAAQ2B,EAAc,UAAY,QACxC,MAAOE,EACP,UAAA/C,CAAA,CACD,CAEL,CACA,SAASZ,GAAcqD,EAAqB,CACpC,MAAAE,EAAYH,EAAcC,EAAI,gDAAgD,EAC9EO,EAAcvF,EAAW,QAC/B,OAAIpB,GAAY2G,IAAgBlH,EAAM,OAAS,EACtC6G,IAAc,EAEhBA,IAAcK,EAAc,CACrC,CACA,SAAS7D,GAAcsD,EAAqB,CACpC,MAAAE,EAAYH,EAAcC,EAAI,gDAAgD,EAC9EO,EAAcvF,EAAW,QAC3B,OAAApB,GAAY2G,IAAgB,EACvBL,IAAc7G,EAAM,OAAS,EAE/B6G,IAAcK,EAAc,CACrC,CACA,SAAS9D,GAAgBuD,EAAqB,CAC5C,OACED,EAAcC,EAAI,kEAAkE,IACpFhF,EAAW,OAEf,CACA,SAASwF,IAAiB,CACxB,OAAIzG,GACK,QAGLD,IAAsB,IACjB,QAEF,OACT,CAEA,MAAM2G,EAAMvG,EACR,CACE,uBAAAkC,EACA,gBAAAnD,GACA,eAAAE,GACA,gBAAAH,GACA,gBAAiB,CAAC0H,EAAU,KAAS,CACnB/B,EAAA,CACd,KAAM,QACN,UAAW,CAAC+B,CAAA,CACb,CACH,EACA,gBAAiB,CAACA,EAAU,KAAS,CACnB5B,EAAA,CACd,KAAM,QACN,UAAW,CAAC4B,CAAA,CACb,CACH,CAAA,EAEF,CACE,uBAAAtE,EACA,gBAAAnD,GACA,eAAAE,GACA,gBAAAH,GACA,gBAAiB,CAAC0H,EAAU,KAAS,CACnB/B,EAAA,CACd,KAAM,QACN,UAAW,CAAC+B,CAAA,CACb,CACH,EACA,gBAAiB,CAACA,EAAU,KAAS,CACnB5B,EAAA,CACd,KAAM,QACN,UAAW,CAAC4B,CAAA,CACb,CACH,EACA,YAAa,CAACV,EAAqBU,EAAU,KAAS,CACpDzB,GAAoB,CAAE,GAAAe,EAAI,UAAW,CAACU,CAAS,CAAA,CACjD,EACA,cAAA/D,GACA,cAAAD,GACA,gBAAAD,EAAA,EAINkE,EAAAA,0BAA0B,IAAM,CAI1BxF,EAAwB,SAAW7B,IACrCqB,EAAmB,QAAU,GACVqE,KACrB,EACC,CAAC1F,CAAI,CAAC,EACTX,EAAAA,UAAU,IAAM,CACVqC,EAAW,UAAYV,IACzBK,EAAmB,QAAU,GACTsE,GAAA,CAClB,GAAI3E,EACJ,UAAW,CAACC,EAAA,CACb,EACH,EAEC,CAACD,CAAiB,CAAC,EACtB3B,EAAAA,UAAU,IAAM,CACd,GAAIW,EAAM,CACJ,GAAAgB,EAAoBjB,EAAM,OAAS,EACrC,MAAM,IAAI,MACR,sBAAsBiB,0DAA0EjB,EAAM,UAAA,EAGtGqB,EAAgBrB,EAAM,QAChB,QAAA,KACN,kBAAkBqB,0DAAsErB,EAAM,wBAAwBA,EAAM,SAAA,EAGlI,EACC,CAACiB,EAAmBjB,EAAM,OAAQqB,EAAepB,CAAI,CAAC,EACzDX,EAAAA,UAAU,IAAM,CACd0C,GAAgB,QAAU,OAAO,UACnC,EAAG,CAAE,CAAA,EAKL1C,EAAAA,UAAU,IAAM,CACd,GAAIW,EAAM,CACR,GAAIM,GAAYM,EACR,MAAA,IAAI,MAAM,qDAAqD,EAEnE,GAAAA,GAAcR,IAAc,QACxB,MAAA,IAAI,MAAM,qDAAqD,EAEvE,GAAIS,KAAyBT,IAAc,SAAW,CAACQ,GACrD,MAAM,IAAI,MACR,kFAAA,EAGJ,GAAIO,GAAqBP,EACjB,MAAA,IAAI,MAAM,8DAA8D,EAGhFS,EAAmB,QAAU,GACVqE,KACrB,EAEC,CACD5E,EACAM,EACAb,EACAF,EACAL,EACAM,EACAF,EACAQ,EACAC,GACAM,CAAA,CACD,EAED9B,EAAAA,UAAU,IAAM,CACd,GAAI,CAACW,EAAM,OACX,SAASsH,GAAyB,CAC5B,SAAS,OACXlF,EAAe,QAAU,GAEzBA,EAAe,QAAU,EAE7B,CACS,gBAAA,iBAAiB,mBAAoBkF,CAAsB,EAC7D,IAAM,CACF,SAAA,oBAAoB,mBAAoBA,CAAsB,CAAA,CACzE,EACC,CAACtH,CAAI,CAAC,EAETX,EAAAA,UAAU,IAAM,CACd,GAAIL,EAAuB,QAAS,CAC9B,IAAAuI,EACE,MAAAC,EAAW,IAAIC,GAAe,IAAM,CACxC,GAAI,CAAArF,EAAe,SACf,CAACf,EAAmB,QAAS,CAC/BU,GAAgB,QAAU,OAAO,WACjC,MAAM2F,EAAKpE,IACX,OAAO,aAAaiE,CAAK,EAEzBA,EAAQ,WAAW,IAAM,CACvBzF,GAAqB,QAAUsC,IAC3B,OAAOsD,GAAO,YACbA,KAEJ,GAAG,EACR,CACD,EACQ,OAAAF,EAAA,QAAQxI,EAAuB,OAAO,EACxC,IAAM,CACXwI,EAAS,WAAW,CAAA,EAExB,EACC,CAAClE,EAA+Bc,CAAmB,CAAC,EACvD/E,EAAAA,UAAU,IAAM,CACV6B,IACeA,GAAA,CACf,gBAAiBiG,EAAI,gBACrB,gBAAiBA,EAAI,gBACrB,YAAaA,GAAA,YAAAA,EAAK,WAAA,CACnB,CACH,EACC,CAACjG,GAAkBiG,EAAI,YAAaA,EAAI,gBAAiBA,EAAI,eAAe,CAAC,EAEhF,MAAMQ,GAAmBC,wBAAAC,GAAQ,SAAR,CAAiB,MAAOV,EAAM,SAAenE,EAAA,CAAA,EAChE8E,GACHF,EAAA,kBAAA,IAAAC,GAAQ,SAAR,CAAiB,MAAOV,EACvB,SAAAS,EAAA,kBAAA,IAAC,MAAA,CACC,UAAU,mCACV,IAAK5I,EACJ,GAAGwH,GAAkB,EACtB,MAAO,CACL,QAAS,OACT,SAAU,WACV,MAAO,OACP,OAAQ,OACR,GAAID,GAAyB,CAC/B,EAEA,SAAAwB,EAAA,kBAAA,KAAC,MAAA,CACC,UAAU,oCACV,IAAKlG,EACJ,GAAGgE,GAAS,EACb,MAAO,CACL,SAAU,WACV,QAAS,OACT,cAAerF,IAAsB,IAAM,MAAQ,SACnD,YAAa0G,GAAe,EAC5B,GAAG7C,GAAyB,CAC9B,EAEE,SAAA,EAAczD,GAAA,CAACN,IAAaC,EAC5BqH,EAAA,kBAAA,IAAC,MAAA,CACC,MAAO,CACL,WAAY,EACZ,MAAOrH,CACT,CAAA,CAAA,EAEA,KACH8B,EAAc,IAAI,CAACwE,EAAMzB,IAEtBwC,EAAA,kBAAA,IAAC,MAAA,CAEC,UAAU,2BACV,cAAY,mCACZ,MAAO,CACL,QAAS,OACT,SAAU,WACV,KAAM,IACN,GAAGpE,GACD4B,IACE/C,EAAc,UACXE,GAAMA,EAAE,KAAOF,EAAcA,EAAc,OAAS,CAAC,EAAE,EAC1D,CACJ,CACF,EAEC,SAAO,OAAAwE,EAAK,YAAe,WACxBA,EAAK,WAAW,CACd,gBAAA1D,GACA,cAAAE,GACA,cAAAD,GACA,uBAAAN,CAAA,CACD,EACD+D,EAAK,UAAA,EAtBJ,GAAGA,EAAK,MAAMzB,GAAA,CAyBxB,GACCxE,GAAc,CAACN,IAAaC,EAC5BqH,EAAA,kBAAA,IAAC,MAAA,CACC,MAAO,CACL,WAAY,EACZ,MAAOrH,CACT,CAAA,CAAA,EAEA,IAAA,CAAA,CACN,CAAA,CAEJ,CAAA,CAAA,EAGF,MAAO,CAAE,GAAG4G,EAAK,iBAAAW,GAAkB,eAAgBH,EAAgB,CACrE,CAOA,MAAME,GAAUG,EAAAA,cAAsE,MAAS,EAE/F,SAASC,IAA8B,CAC/B,MAAAC,EAAUC,aAAWN,EAAO,EAClC,GAAI,CAACK,EACG,MAAA,IAAI,MAAM,4DAA4D,EAEvE,OAAAA,CACT"}
|
|
1
|
+
{"version":3,"file":"index.cjs2.js","sources":["../src/modules/useFullscreenModule.ts","../src/useSpringCarousel.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport screenfull from 'screenfull'\n\nimport { FullscreenModule } from '../types/useFullscreenModule.types'\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n onFullScreenChange,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n onFullScreenChange(true)\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n onFullScreenChange(false)\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { config, useIsomorphicLayoutEffect, useSpring } from '@react-spring/web'\nimport { useDrag } from '@use-gesture/react'\nimport React, { createContext, useCallback, useContext, useEffect, useRef } from 'react'\nimport ResizeObserver from 'resize-observer-polyfill'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n ItemWithThumb,\n SlideActionType,\n SlideMode,\n SlideType,\n UseSpringCarouselComplete,\n UseSpringCarouselWithFixedItems,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithThumbs,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithFixedItems<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoFixedItems<false>): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n getControllerRef,\n slideGroupOfItems = false,\n customSlideValue,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n if (slideType === 'fluid' && typeof customSlideValue === 'number') return customSlideValue\n\n const carouselItem = slideGroupOfItems\n ? mainCarouselWrapperRef.current\n : mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n let main = carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height']\n\n if (!slideGroupOfItems) {\n main += gutter\n }\n if (slideGroupOfItems) {\n main += gutter - startEndGutter * 2\n }\n\n return main\n }, [carouselSlideAxis, gutter, slideGroupOfItems, startEndGutter, customSlideValue, slideType])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n const velocity = state.velocity\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n if (withLoop && freeScroll) {\n throw new Error(\"`withLoop` and `freeScroll` can't be used together.\")\n }\n if (freeScroll && slideType === 'fixed') {\n throw new Error(\"`freeScroll` can't be used when `scrollType=fixed`.\")\n }\n if (enableFreeScrollDrag && (slideType !== 'fluid' || !freeScroll)) {\n throw new Error(\n '`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`',\n )\n }\n if (slideGroupOfItems && freeScroll) {\n throw new Error(\"`slideGroupOfItems` and `freeScroll` can't be used together.\")\n }\n\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n startEndGutter,\n gutter,\n init,\n withLoop,\n slideType,\n freeScroll,\n enableFreeScrollDrag,\n slideGroupOfItems,\n ])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","slideGroupOfItems","customSlideValue","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","main","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","enableDrag","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","velocity","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"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"}
|