react-spring-carousel 3.0.0-beta026 → 3.0.0-beta028

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/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react/jsx-runtime"),t=require("@react-spring/web"),n=require("react"),r=require("@use-gesture/react"),i=require("screenfull");function s(){const e=n.useRef(null);return{useListenToCustomEvent:function(t){n.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener("RSC::Event",n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener("RSC::Event",n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent("RSC::Event",{detail:t});e.current.dispatchEvent(n)}}}}function c({thumbsSlideAxis:r="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=n.useRef(null),[l,u]=t.useSpring((()=>({val:0})));function a(){var e;return Math.round(Number(null===(e=o.current)||void 0===e?void 0:e["x"===r?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===r?"width":"height"])}return{thumbsFragment:i?e.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===r?"row":"column"},"x"===r?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:t,renderThumb:n})=>{const r=`thumb-item-${t}`;return e.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(e){var t,n;const i=o.current?o.current.querySelector(`#thumb-item-${c[e].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const e=i.offsetLeft,s=e>a()?a():e;u.start({from:{val:null!==(n=null===(t=o.current)||void 0===t?void 0:t["x"===r?"scrollLeft":"scrollTop"])&&void 0!==n?n:0},to:{val:s},onChange:({value:e})=>{o.current&&(o.current["x"===r?"scrollLeft":"scrollTop"]=Math.abs(e.val))}})}}}}const o=n.createContext(void 0);const l={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const u=n.createContext(void 0);exports.useSpringCarousel=function({items:l,init:u=!0,withThumbs:a,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:g="fixed",gutter:h=0,withLoop:v=!1,startEndGutter:m=0,carouselSlideAxis:x="x",disableGestures:p=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:j=!1,freeScroll:w,enableFreeScrollDrag:y,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:E=0}){const C=f>l.length?l.length:f,R=n.useRef(0),S=n.useRef(null!=b?b:0),I=n.useRef("initial"),M=n.useRef("initial"),F=n.useRef(0),[L,N]=t.useSpring((()=>({val:0,pause:!u,onChange({value:e}){w&&P.current?("x"===x?P.current.scrollLeft=Math.abs(e.val):P.current.scrollTop=Math.abs(e.val),re()):W.current&&(W.current.style.transform="x"===x?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),A=n.useRef(E),$=n.useRef(0===E),k=n.useRef(!1),P=n.useRef(null),W=n.useRef(null),q=n.useCallback((()=>v?[...l.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...l,...l.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...l]),[l,v])(),{emitEvent:D,useListenToCustomEvent:B}=s(),{thumbsFragment:z,handleScroll:H}=c({withThumbs:!!a,thumbsSlideAxis:d,prepareThumbsData:O,items:l}),{enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y}=function({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:r}){const s=n.useRef(!1);function c(e){s.current=e}return n.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),r&&r()),document.fullscreenElement||(c(!1),t(!1),r&&r())}if(i.isEnabled)return i.on("change",e),()=>{i.isEnabled&&i.off("change",e)}}),[]),{enterFullscreen:function(t){i.isEnabled&&i.request(t||e.current)},exitFullscreen:function(){i.isEnabled&&i.exit()},getIsFullscreen:function(){return s.current}}}({mainCarouselWrapperRef:P,handleResize:()=>{console.log("resize"),V()},onFullScreenChange:e=>{D({eventName:"onFullscreenChange",isFullscreen:e})}});function J(){var e;const t=null===(e=P.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===x?"width":"height"]+h}function K({from:e,to:n,nextActiveItem:r,immediate:i=!1,slideMode:s}){M.current=s,"number"==typeof r&&(w||(A.current=r),D({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:M.current,nextItem:{startReached:$.current,endReached:k.current,index:w?-1:A.current,id:w?"":l[A.current].id}})),F.current=n,N.start({immediate:i,from:{val:e},to:{val:n},config:Object.assign(Object.assign({},t.config.default),{velocity:L.val.velocity}),onRest(e){!i&&e.finished&&D({eventName:"onSlideChange",slideActionType:I.current,slideMode:M.current,currentItem:{startReached:$.current,endReached:k.current,index:w?-1:A.current,id:w?"":l[A.current].id}})}}),a&&!i&&H(A.current)}function Q(){var e;return v?J()*l.length:Math.round(Number(null===(e=W.current)||void 0===e?void 0:e["x"===x?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===x?"width":"height"]-2*m)}function U(){var e;const t=null===(e=W.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===x?"width":"height"]+h}function V(){const e="x"===x?"left":"top";function t(t){const n=W.current;n&&(v?(n.style.top="0px",n.style.left="0px",n.style[e]=`-${t-m}px`):(n.style.left="0px",n.style.top="0px"))}const n=Math.abs(Z());if(n<Q()&&k.current&&!v&&(k.current=!1),n>Q()&&!v){const e=-Q();return k.current=!0,F.current=e,void N.start({immediate:!0,val:e})}if(t("center"===T?U()*l.length-J()*Math.round((C-1)/2):"end"===T?U()*l.length-J()*Math.round(C-1):U()*l.length),!w&&"fixed"===g){const e=-J()*A.current;F.current=e,N.start({immediate:!0,val:e})}}function Z(){return w&&P.current?P.current["x"===x?"scrollLeft":"scrollTop"]:L.val.get()}function _(e,t){if(w&&"next"===e){const e=F.current+J();return e>Q()?Q():e}if(w&&"prev"===e){const e=F.current-J();return e<0?0:e}return"next"===e?t?-t*J():F.current-J():t?-t*J():F.current+J()}function ee(e="click",t){if(!u||$.current&&!v)return;I.current="prev",k.current=!1;const n=t||A.current-1;if(!v){const n=w?_("prev",t)-J()/3<0:_("prev",t)+J()/3>0;if($.current)return;if(n)return $.current=!0,k.current=!1,void K({slideMode:e,from:Z(),to:0,nextActiveItem:0})}if(v&&$.current)return $.current=!1,k.current=!0,void K({slideMode:e,from:Z()-J()*l.length,to:-J()*l.length+J(),nextActiveItem:l.length-1});0===n&&($.current=!0),n!==l.length-1&&-1!==n||(k.current=!0),K({slideMode:e,from:Z(),to:_("prev",t),nextActiveItem:n})}function te(e="click",t){if(!u||k.current&&!v)return;I.current="next",$.current=!1;const n=t||A.current+1;if(console.log({nextItem:n}),!v){const r=Math.abs(_("next",t))>Q()-J()/3;if(k.current)return;if(r)return $.current=!1,k.current=!0,void K({slideMode:e,from:Z(),to:w?Q():-Q(),nextActiveItem:n})}if(v&&k.current)return k.current=!1,$.current=!0,void K({slideMode:e,from:Z()+J()*l.length,to:0,nextActiveItem:0});0===n&&($.current=!0),n===l.length-1&&(k.current=!0),K({slideMode:e,from:Z(),to:_("next",t),nextActiveItem:n})}n.useEffect((()=>{if(u){if(E>l.length-1)throw new Error(`initialActiveItem (${E}) is greater than the total quantity available items (${l.length}).`);C>l.length&&console.warn(`itemsPerSlide (${C}) is greater than the total quantity available items (${l.length}). Fallback to ${l.length})`)}}),[E,l,C,u]),n.useEffect((()=>{R.current=window.innerWidth}),[]),n.useEffect((()=>{V()}),[T,C,v,m,h,w,g,u]),n.useLayoutEffect((()=>{W.current&&V()}),[]),n.useEffect((()=>{S.current=b||Math.floor(J()/2/2)}),[b]),n.useEffect((()=>{function e(){window.innerWidth!==R.current&&(R.current=window.innerWidth,V())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[T,C,v,m,h,w,g,u]);const ne=r.useDrag((e=>{const n=e.dragging,r=e.offset["x"===x?0:1],i=e.movement["x"===x?0:1],s=e.direction["x"===x?0:1],c=i>S.current,o=i<-S.current;if(n)return I.current=s>0?"prev":"next",D(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),w?"prev"===I.current&&r>0?(e.cancel(),void N.start({from:{val:Z()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void N.start({from:{val:Z()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(N.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(j&&o?(te("drag"),e.cancel()):j&&c&&(ee("drag"),e.cancel())));e.last&&!e.canceled&&w&&("prev"===I.current&&ee("drag"),"next"===I.current&&te("drag")),!e.last||e.canceled||w||(o?!v&&k.current?N.start({val:-Q(),config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):te("drag"):c?!v&&$.current?N.start({val:0,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):ee("drag"):N.start({val:F.current,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}))}),{enabled:u&&!p&&!w||!!w&&!!y,axis:x,from:()=>w&&P.current?[-P.current.scrollLeft,-P.current.scrollTop]:[L.val.get(),L.val.get()]});function re(){P.current&&(F.current=P.current["x"===x?"scrollLeft":"scrollTop"],0===P.current["x"===x?"scrollLeft":"scrollTop"]&&($.current=!0,k.current=!1),P.current["x"===x?"scrollLeft":"scrollTop"]>0&&P.current["x"===x?"scrollLeft":"scrollTop"]<Q()&&($.current=!1,k.current=!1),P.current["x"===x?"scrollLeft":"scrollTop"]===Q()&&($.current=!1,k.current=!0))}function ie(e,t){let n=0;if(n="string"==typeof e?l.findIndex((t=>t.id===e)):e,n<0||n>=l.length){if(t)throw new Error(t);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),n=-1}return n}const se=w?{useListenToCustomEvent:B,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te()}:{useListenToCustomEvent:B,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te(),slideToItem:function(e){if(!u)return;$.current=!1,k.current=!1;const t=ie(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===A.current)return;const n=ie(l[A.current].id),r=ie(l[t].id);r>n?te("click",r):ee("click",r)},getIsNextItem:function(e){const t=ie(e,"The item doesn't exist; check the provided id."),n=A.current;return v&&n===l.length-1?0===t:t===n+1},getIsPrevItem:function(e){const t=ie(e,"The item doesn't exist; check the provided id."),n=A.current;return v&&0===n?t===l.length-1:t===n-1},getIsActiveItem:e=>ie(e,"The item you want to check doesn't exist; check the provided id.")===A.current},ce=e.jsx(o.Provider,Object.assign({value:se},{children:z})),oe=e.jsx(o.Provider,Object.assign({value:se},{children:e.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:P},w?{onWheel(){L.val.stop(),re()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},w?"x"===x?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:e.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:W},ne(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===x?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*m}px)`;return{width:"x"===x?e:"100%",height:"y"===x?e:"100%"}}())},{children:[w&&m?e.jsx("div",{style:{flexShrink:0,width:m}}):null,q.map(((t,n)=>{return e.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(r=!!w&&n===l.length-1,"fixed"!==g||w?Object.assign({marginRight:`${r?0:h}px`}):{marginRight:`${r?0:h}px`,flex:`1 0 calc(100% / ${C} - ${h*(C-1)/C}px)`}))},{children:t.renderItem}),`${t.id}-${n}`);var r})),w&&m?e.jsx("div",{style:{flexShrink:0,width:m}}):null]}))}))}));return Object.assign(Object.assign({},se),{carouselFragment:oe,thumbsFragment:ce})},exports.useSpringCarouselContext=function(){const e=n.useContext(o);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},exports.useTransitionCarousel=function({init:i=!0,disableGestures:o=!1,items:a,springConfig:d=t.config.default,exitBeforeEnter:f=!1,trail:g,withLoop:h=!1,activeItem:v,toPrevItemSpringProps:m=l,toNextItemSpringProps:x=l,draggingSlideTreshold:p=50,thumbsSlideAxis:b="x"}){const j=n.useRef("next"),w=n.useRef("initial"),y=n.useRef(null),[T,O]=n.useState(null!=v?v:0),{emitEvent:E,useListenToCustomEvent:C}=s(),{handleScroll:R,thumbsFragment:S}=c({thumbsSlideAxis:b,items:a});function I({to:e,slideType:t,slideMode:n}){j.current=t,w.current=n,E({eventName:"onSlideStartChange",slideActionType:j.current,slideMode:w.current,nextItem:{index:e,id:a[e].id,startReached:0===e,endReached:e===a.length-1}}),O(e),R(T)}function M(e){if(!i)return;const t=0===T;!h&&t||I(h&&t?{to:a.length-1,slideType:"prev",slideMode:e}:{to:T-1,slideType:"prev",slideMode:e})}function F(e){if(!i)return;const t=T===a.length-1;!h&&t||I(h&&t?{to:0,slideType:"next",slideMode:e}:{to:T+1,slideType:"next",slideMode:e})}n.useEffect((()=>{"number"==typeof v&&v!==T&&O(v)}),[v]);const L=t.useTransition(T,Object.assign(Object.assign({config:d,key:null,trail:g,exitBeforeEnter:f},"prev"===j.current?{initial:Object.assign({},m.initial),from:Object.assign({},m.from),enter:Object.assign({},m.enter),leave:Object.assign({},m.leave)}:"next"===j.current?{initial:Object.assign({},x.initial),from:Object.assign({},x.from),enter:Object.assign({},x.enter),leave:Object.assign({},x.leave)}:{initial:Object.assign({},l.initial),from:Object.assign({},l.from),enter:Object.assign({},l.enter),leave:Object.assign({},l.leave)}),{onRest(e,t,n){e.finished&&n===T&&E({eventName:"onSlideChange",slideActionType:j.current,slideMode:w.current,currentItem:{index:T,id:a[T].id,startReached:0===T,endReached:T===a.length-1}})}})),N=r.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>p,n=t<-p,r=0===T,i=T===a.length-1;if(n){if(!h&&i)return;E({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!h&&r)return;E({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!o}),A=L(((n,r,i,s)=>e.jsx(t.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},n),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:a[r].renderItem})))),$={useListenToCustomEvent:C,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=e.jsx(u.Provider,Object.assign({value:$},{children:S})),P=e.jsx(u.Provider,Object.assign({value:$},{children:e.jsx("div",Object.assign({ref:y},N(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:A}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},exports.useTransitionCarouselContext=function(){const e=n.useContext(u);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e};
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("@react-spring/web"),n=require("react"),r=require("@use-gesture/react"),i=require("screenfull");function s(){const e=n.useRef(null);return{useListenToCustomEvent:function(t){n.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener("RSC::Event",n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener("RSC::Event",n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent("RSC::Event",{detail:t});e.current.dispatchEvent(n)}}}}function c({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:r}){const s=n.useRef(!1);function c(e){s.current=e}return n.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),r&&r()),document.fullscreenElement||(c(!1),t(!1),r&&r())}if(i.isEnabled)return i.on("change",e),()=>{i.isEnabled&&i.off("change",e)}}),[]),{enterFullscreen:function(t){i.isEnabled&&i.request(t||e.current)},exitFullscreen:function(){i.isEnabled&&i.exit()},getIsFullscreen:function(){return s.current}}}function o({thumbsSlideAxis:r="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=n.useRef(null),[l,u]=t.useSpring((()=>({val:0})));function a(){var e;return Math.round(Number(null===(e=o.current)||void 0===e?void 0:e["x"===r?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===r?"width":"height"])}return{thumbsFragment:i?e.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===r?"row":"column"},"x"===r?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:t,renderThumb:n})=>{const r=`thumb-item-${t}`;return e.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(e){var t,n;const i=o.current?o.current.querySelector(`#thumb-item-${c[e].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const e=i.offsetLeft,s=e>a()?a():e;u.start({from:{val:null!==(n=null===(t=o.current)||void 0===t?void 0:t["x"===r?"scrollLeft":"scrollTop"])&&void 0!==n?n:0},to:{val:s},onChange:({value:e})=>{o.current&&(o.current["x"===r?"scrollLeft":"scrollTop"]=Math.abs(e.val))}})}}}}const l=n.createContext(void 0);const u={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const a=n.createContext(void 0);exports.useEventsModule=s,exports.useFullscreenModule=c,exports.useSpringCarousel=function({items:i,init:u=!0,withThumbs:a,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:h="fixed",gutter:g=0,withLoop:v=!1,startEndGutter:m=0,carouselSlideAxis:x="x",disableGestures:p=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:w=!1,freeScroll:j,enableFreeScrollDrag:y,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:E=0}){const R=f>i.length?i.length:f,C=n.useRef(0),S=n.useRef(null!=b?b:0),I=n.useRef("initial"),M=n.useRef("initial"),F=n.useRef(0),[L,N]=t.useSpring((()=>({val:0,pause:!u,onChange({value:e}){j&&P.current?("x"===x?P.current.scrollLeft=Math.abs(e.val):P.current.scrollTop=Math.abs(e.val),re()):W.current&&(W.current.style.transform="x"===x?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),A=n.useRef(E),$=n.useRef(0===E),k=n.useRef(!1),P=n.useRef(null),W=n.useRef(null),q=n.useCallback((()=>v?[...i.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...i,...i.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...i]),[i,v])(),{emitEvent:D,useListenToCustomEvent:z}=s(),{thumbsFragment:B,handleScroll:H}=o({withThumbs:!!a,thumbsSlideAxis:d,prepareThumbsData:O,items:i}),{enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y}=c({mainCarouselWrapperRef:P,handleResize:()=>{console.log("resize"),V()},onFullScreenChange:e=>{D({eventName:"onFullscreenChange",isFullscreen:e})}});function J(){var e;const t=null===(e=P.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===x?"width":"height"]+g}function K({from:e,to:n,nextActiveItem:r,immediate:s=!1,slideMode:c}){M.current=c,"number"==typeof r&&(j||(A.current=r),D({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:M.current,nextItem:{startReached:$.current,endReached:k.current,index:j?-1:A.current,id:j?"":i[A.current].id}})),F.current=n,N.start({immediate:s,from:{val:e},to:{val:n},config:Object.assign(Object.assign({},t.config.default),{velocity:L.val.velocity}),onRest(e){!s&&e.finished&&D({eventName:"onSlideChange",slideActionType:I.current,slideMode:M.current,currentItem:{startReached:$.current,endReached:k.current,index:j?-1:A.current,id:j?"":i[A.current].id}})}}),a&&!s&&H(A.current)}function Q(){var e;return v?J()*i.length:Math.round(Number(null===(e=W.current)||void 0===e?void 0:e["x"===x?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===x?"width":"height"]-2*m)}function U(){var e;const t=null===(e=W.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===x?"width":"height"]+g}function V(){const e="x"===x?"left":"top";function t(t){const n=W.current;n&&(v?(n.style.top="0px",n.style.left="0px",n.style[e]=`-${t-m}px`):(n.style.left="0px",n.style.top="0px"))}const n=Math.abs(Z());if(n<Q()&&k.current&&!v&&(k.current=!1),n>Q()&&!v){const e=-Q();return k.current=!0,F.current=e,void N.start({immediate:!0,val:e})}if(t("center"===T?U()*i.length-J()*Math.round((R-1)/2):"end"===T?U()*i.length-J()*Math.round(R-1):U()*i.length),!j&&"fixed"===h){const e=-J()*A.current;F.current=e,N.start({immediate:!0,val:e})}}function Z(){return j&&P.current?P.current["x"===x?"scrollLeft":"scrollTop"]:L.val.get()}function _(e,t){if(j&&"next"===e){const e=F.current+J();return e>Q()?Q():e}if(j&&"prev"===e){const e=F.current-J();return e<0?0:e}return"next"===e?t?-t*J():F.current-J():t?-t*J():F.current+J()}function ee(e="click",t){if(!u||$.current&&!v)return;I.current="prev",k.current=!1;const n=t||A.current-1;if(!v){const n=j?_("prev",t)-J()/3<0:_("prev",t)+J()/3>0;if($.current)return;if(n)return $.current=!0,k.current=!1,void K({slideMode:e,from:Z(),to:0,nextActiveItem:0})}if(v&&$.current)return $.current=!1,k.current=!0,void K({slideMode:e,from:Z()-J()*i.length,to:-J()*i.length+J(),nextActiveItem:i.length-1});0===n&&($.current=!0),n!==i.length-1&&-1!==n||(k.current=!0),K({slideMode:e,from:Z(),to:_("prev",t),nextActiveItem:n})}function te(e="click",t){if(!u||k.current&&!v)return;I.current="next",$.current=!1;const n=t||A.current+1;if(console.log({nextItem:n}),!v){const r=Math.abs(_("next",t))>Q()-J()/3;if(k.current)return;if(r)return $.current=!1,k.current=!0,void K({slideMode:e,from:Z(),to:j?Q():-Q(),nextActiveItem:n})}if(v&&k.current)return k.current=!1,$.current=!0,void K({slideMode:e,from:Z()+J()*i.length,to:0,nextActiveItem:0});0===n&&($.current=!0),n===i.length-1&&(k.current=!0),K({slideMode:e,from:Z(),to:_("next",t),nextActiveItem:n})}n.useEffect((()=>{if(u){if(E>i.length-1)throw new Error(`initialActiveItem (${E}) is greater than the total quantity available items (${i.length}).`);R>i.length&&console.warn(`itemsPerSlide (${R}) is greater than the total quantity available items (${i.length}). Fallback to ${i.length})`)}}),[E,i,R,u]),n.useEffect((()=>{C.current=window.innerWidth}),[]),n.useEffect((()=>{V()}),[T,R,v,m,g,j,h,u]),n.useLayoutEffect((()=>{W.current&&V()}),[]),n.useEffect((()=>{S.current=b||Math.floor(J()/2/2)}),[b]),n.useEffect((()=>{function e(){window.innerWidth!==C.current&&(C.current=window.innerWidth,V())}if("ResizeObserver"in window&&P.current){const e=new ResizeObserver((()=>{C.current=window.innerWidth,V()}));return e.observe(P.current),()=>{e.disconnect()}}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[x,T,R,v,m,g,j,h,u]);const ne=r.useDrag((e=>{const n=e.dragging,r=e.offset["x"===x?0:1],i=e.movement["x"===x?0:1],s=e.direction["x"===x?0:1],c=i>S.current,o=i<-S.current;if(n)return I.current=s>0?"prev":"next",D(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),j?"prev"===I.current&&r>0?(e.cancel(),void N.start({from:{val:Z()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void N.start({from:{val:Z()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(N.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(w&&o?(te("drag"),e.cancel()):w&&c&&(ee("drag"),e.cancel())));e.last&&!e.canceled&&j&&("prev"===I.current&&ee("drag"),"next"===I.current&&te("drag")),!e.last||e.canceled||j||(o?!v&&k.current?N.start({val:-Q(),config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):te("drag"):c?!v&&$.current?N.start({val:0,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):ee("drag"):N.start({val:F.current,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}))}),{enabled:u&&!p&&!j||!!j&&!!y,axis:x,from:()=>j&&P.current?[-P.current.scrollLeft,-P.current.scrollTop]:[L.val.get(),L.val.get()]});function re(){P.current&&(F.current=P.current["x"===x?"scrollLeft":"scrollTop"],0===P.current["x"===x?"scrollLeft":"scrollTop"]&&($.current=!0,k.current=!1),P.current["x"===x?"scrollLeft":"scrollTop"]>0&&P.current["x"===x?"scrollLeft":"scrollTop"]<Q()&&($.current=!1,k.current=!1),P.current["x"===x?"scrollLeft":"scrollTop"]===Q()&&($.current=!1,k.current=!0))}function ie(e,t){let n=0;if(n="string"==typeof e?i.findIndex((t=>t.id===e)):e,n<0||n>=i.length){if(t)throw new Error(t);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),n=-1}return n}const se=j?{useListenToCustomEvent:z,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te()}:{useListenToCustomEvent:z,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te(),slideToItem:function(e){if(!u)return;$.current=!1,k.current=!1;const t=ie(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===A.current)return;const n=ie(i[A.current].id),r=ie(i[t].id);r>n?te("click",r):ee("click",r)},getIsNextItem:function(e){const t=ie(e,"The item doesn't exist; check the provided id."),n=A.current;return v&&n===i.length-1?0===t:t===n+1},getIsPrevItem:function(e){const t=ie(e,"The item doesn't exist; check the provided id."),n=A.current;return v&&0===n?t===i.length-1:t===n-1},getIsActiveItem:function(e){return ie(e,"The item you want to check doesn't exist; check the provided id.")===A.current}},ce=e.jsx(l.Provider,Object.assign({value:se},{children:B})),oe=e.jsx(l.Provider,Object.assign({value:se},{children:e.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:P},j?{onWheel(){L.val.stop(),re()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},j?"x"===x?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:e.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:W},ne(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===x?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*m}px)`;return{width:"x"===x?e:"100%",height:"y"===x?e:"100%"}}())},{children:[j&&m?e.jsx("div",{style:{flexShrink:0,width:m}}):null,q.map(((t,n)=>{return e.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(r=!!j&&n===i.length-1,"fixed"!==h||j?Object.assign({marginRight:`${r?0:g}px`}):{marginRight:`${r?0:g}px`,flex:`1 0 calc(100% / ${R} - ${g*(R-1)/R}px)`}))},{children:t.renderItem}),`${t.id}-${n}`);var r})),j&&m?e.jsx("div",{style:{flexShrink:0,width:m}}):null]}))}))}));return Object.assign(Object.assign({},se),{carouselFragment:oe,thumbsFragment:ce})},exports.useSpringCarouselContext=function(){const e=n.useContext(l);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},exports.useThumbsModule=o,exports.useTransitionCarousel=function({init:i=!0,disableGestures:c=!1,items:l,springConfig:d=t.config.default,exitBeforeEnter:f=!1,trail:h,withLoop:g=!1,activeItem:v,toPrevItemSpringProps:m=u,toNextItemSpringProps:x=u,draggingSlideTreshold:p=50,thumbsSlideAxis:b="x"}){const w=n.useRef("next"),j=n.useRef("initial"),y=n.useRef(null),[T,O]=n.useState(null!=v?v:0),{emitEvent:E,useListenToCustomEvent:R}=s(),{handleScroll:C,thumbsFragment:S}=o({thumbsSlideAxis:b,items:l});function I({to:e,slideType:t,slideMode:n}){w.current=t,j.current=n,E({eventName:"onSlideStartChange",slideActionType:w.current,slideMode:j.current,nextItem:{index:e,id:l[e].id,startReached:0===e,endReached:e===l.length-1}}),O(e),C(T)}function M(e){if(!i)return;const t=0===T;!g&&t||I(g&&t?{to:l.length-1,slideType:"prev",slideMode:e}:{to:T-1,slideType:"prev",slideMode:e})}function F(e){if(!i)return;const t=T===l.length-1;!g&&t||I(g&&t?{to:0,slideType:"next",slideMode:e}:{to:T+1,slideType:"next",slideMode:e})}n.useEffect((()=>{"number"==typeof v&&v!==T&&O(v)}),[v]);const L=t.useTransition(T,Object.assign(Object.assign({config:d,key:null,trail:h,exitBeforeEnter:f},"prev"===w.current?{initial:Object.assign({},m.initial),from:Object.assign({},m.from),enter:Object.assign({},m.enter),leave:Object.assign({},m.leave)}:"next"===w.current?{initial:Object.assign({},x.initial),from:Object.assign({},x.from),enter:Object.assign({},x.enter),leave:Object.assign({},x.leave)}:{initial:Object.assign({},u.initial),from:Object.assign({},u.from),enter:Object.assign({},u.enter),leave:Object.assign({},u.leave)}),{onRest(e,t,n){e.finished&&n===T&&E({eventName:"onSlideChange",slideActionType:w.current,slideMode:j.current,currentItem:{index:T,id:l[T].id,startReached:0===T,endReached:T===l.length-1}})}})),N=r.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>p,n=t<-p,r=0===T,i=T===l.length-1;if(n){if(!g&&i)return;E({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!g&&r)return;E({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!c}),A=L(((n,r,i,s)=>e.jsx(t.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},n),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:l[r].renderItem})))),$={useListenToCustomEvent:R,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=e.jsx(a.Provider,Object.assign({value:$},{children:S})),P=e.jsx(a.Provider,Object.assign({value:$},{children:e.jsx("div",Object.assign({ref:y},N(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:A}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},exports.useTransitionCarouselContext=function(){const e=n.useContext(a);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/useTransitionCarousel.tsx","../../src/modules/useFullscreenModule.ts"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange<T> = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange<T> = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype OnLeftSwipe = {\n eventName: 'onLeftSwipe'\n}\n\ntype OnRightSwipe = {\n eventName: 'onRightSwipe'\n}\n\ntype SpringCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnDrag\n | OnFullscreenChange\n\ntype TransitionCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnFullscreenChange\n | OnLeftSwipe\n | OnRightSwipe\n\ntype Events<T> = T extends 'use-spring'\n ? SpringCarouselEvents<'use-spring'>\n : TransitionCarouselEvents<'use-transition'>\n\ntype EventHandler<T> = (props: Events<T>) => void\n\nexport type UseListenToCustomEvent<T> = {\n useListenToCustomEvent: (eventHandler: EventHandler<T>) => void\n emitEvent: (event: Events<T>) => void\n}\n\nexport function useEventsModule<T extends 'use-spring' | 'use-transition'>() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\n if (!targetEvent.current) {\n targetEvent.current = document.createElement('div')\n }\n\n function handleEvent(event: CustomEvent<Events<T>>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [eventHandler])\n }\n function emitEvent(event: Events<T>) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\n\nimport { ItemWithThumb, PrepareThumbsData, SpringCarouselWithThumbs } from '../types'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: ItemWithThumb[]\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n","import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem: (id: string | number) => {\n return (\n findItemIndex(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n },\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState, createContext, useContext } from 'react'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useThumbsModule } from './modules'\nimport {\n ItemWithThumb,\n UseTransitionCarouselProps,\n UseTransitionCarouselReturnProps,\n SlideActionType,\n TransitionSlideMode,\n} from './types'\n\nconst defaultAnimationProps = {\n initial: {\n opacity: 1,\n position: 'relative',\n },\n from: {\n opacity: 0,\n position: 'relative',\n },\n enter: {\n position: 'relative',\n opacity: 1,\n },\n leave: {\n opacity: 1,\n position: 'absolute',\n },\n}\n\nfunction useTransitionCarousel({\n init = true,\n disableGestures = false,\n items,\n springConfig = config.default,\n exitBeforeEnter = false,\n trail,\n withLoop = false,\n activeItem: externalActiveItem,\n toPrevItemSpringProps = defaultAnimationProps,\n toNextItemSpringProps = defaultAnimationProps,\n draggingSlideTreshold = 50,\n thumbsSlideAxis = 'x',\n}: UseTransitionCarouselProps): UseTransitionCarouselReturnProps {\n const slideActionType = useRef<SlideActionType>('next')\n const slideModeType = useRef<TransitionSlideMode>('initial')\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const [activeItem, setActiveItem] = useState(externalActiveItem ?? 0)\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-transition'>()\n const { handleScroll, thumbsFragment } = useThumbsModule({\n thumbsSlideAxis,\n items: items as ItemWithThumb[],\n })\n\n function getConfig() {\n if (slideActionType.current === 'prev') {\n return {\n initial: {\n ...toPrevItemSpringProps.initial,\n },\n from: {\n ...toPrevItemSpringProps.from,\n },\n enter: {\n ...toPrevItemSpringProps.enter,\n },\n leave: {\n ...toPrevItemSpringProps.leave,\n },\n }\n }\n if (slideActionType.current === 'next') {\n return {\n initial: {\n ...toNextItemSpringProps.initial,\n },\n from: {\n ...toNextItemSpringProps.from,\n },\n enter: {\n ...toNextItemSpringProps.enter,\n },\n leave: {\n ...toNextItemSpringProps.leave,\n },\n }\n }\n return {\n initial: {\n ...defaultAnimationProps.initial,\n },\n from: {\n ...defaultAnimationProps.from,\n },\n enter: {\n ...defaultAnimationProps.enter,\n },\n leave: {\n ...defaultAnimationProps.leave,\n },\n }\n }\n\n useEffect(() => {\n if (typeof externalActiveItem === 'number' && externalActiveItem !== activeItem) {\n setActiveItem(externalActiveItem)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalActiveItem])\n\n type SlideToItem = {\n to: number\n slideType: SlideActionType\n slideMode: TransitionSlideMode\n }\n\n function slideToItem({ to, slideType, slideMode }: SlideToItem) {\n slideActionType.current = slideType\n slideModeType.current = slideMode\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n index: to,\n id: items[to].id,\n startReached: to === 0,\n endReached: to === items.length - 1,\n },\n })\n setActiveItem(to)\n handleScroll(activeItem)\n }\n\n function slideToPrevItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isFirstItem = activeItem === 0\n\n if (!withLoop && isFirstItem) return\n\n if (withLoop && isFirstItem) {\n slideToItem({\n to: items.length - 1,\n slideType: 'prev',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem - 1,\n slideType: 'prev',\n slideMode,\n })\n }\n }\n function slideToNextItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isLastItem = activeItem === items.length - 1\n\n if (!withLoop && isLastItem) return\n\n if (withLoop && isLastItem) {\n slideToItem({\n to: 0,\n slideType: 'next',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem + 1,\n slideType: 'next',\n slideMode,\n })\n }\n }\n\n const transitions = useTransition(activeItem, {\n config: springConfig,\n key: null,\n trail,\n exitBeforeEnter,\n ...getConfig(),\n onRest(value, _, index) {\n if (value.finished && index === activeItem) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n index: activeItem,\n id: items[activeItem].id,\n startReached: activeItem === 0,\n endReached: activeItem === items.length - 1,\n },\n })\n }\n },\n })\n\n const bindSwipe = useDrag(\n ({ last, movement: [mx] }) => {\n if (last) {\n const prevItemTreshold = mx > draggingSlideTreshold\n const nextItemTreshold = mx < -draggingSlideTreshold\n const isFirstItem = activeItem === 0\n const isLastItem = activeItem === items.length - 1\n\n if (nextItemTreshold) {\n if (!withLoop && isLastItem) return\n\n emitEvent({\n eventName: 'onLeftSwipe',\n })\n slideToNextItem('swipe')\n } else if (prevItemTreshold) {\n if (!withLoop && isFirstItem) return\n\n emitEvent({\n eventName: 'onRightSwipe',\n })\n slideToPrevItem('swipe')\n }\n }\n },\n {\n enabled: !disableGestures,\n },\n )\n\n const itemsFragment = transitions((styles, item, _, indx) => {\n return (\n <a.div\n id={`use-transition-carousel-item-${indx}`}\n className=\"use-transition-carousel-item\"\n style={{\n ...styles,\n flex: '1 0 100%',\n width: '100%',\n height: '100%',\n }}\n >\n {items[item].renderItem}\n </a.div>\n )\n })\n\n const res = {\n useListenToCustomEvent,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n ref={mainCarouselWrapperRef}\n {...bindSwipe()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n {itemsFragment}\n </div>\n </Context.Provider>\n )\n\n return {\n ...res,\n carouselFragment,\n thumbsFragment: _thumbsFragment,\n }\n}\n\ntype ContextProps = Omit<\n UseTransitionCarouselReturnProps,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | undefined>(undefined)\n\nfunction useTransitionCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useTransitionCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useTransitionCarousel, useTransitionCarouselContext }\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n handleResize?(): void\n onFullScreenChange(isFullscreen: boolean): void\n}\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"],"names":["useEventsModule","targetEvent","useRef","useListenToCustomEvent","eventHandler","useEffect","handleEvent","event","detail","current","document","createElement","addEventListener","_a","removeEventListener","emitEvent","newEvent","CustomEvent","dispatchEvent","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","getBoundingClientRect","thumbsFragment","_jsx","jsx","Object","assign","className","ref","onWheel","stop","style","display","flex","position","width","height","flexDirection","overflowX","overflowY","maxHeight","children","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsData","thumbId","handleScroll","activeItem","thumbNode","querySelector","el","rect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","defaultAnimationProps","initial","opacity","enter","leave","init","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","initialActiveItem","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","pause","mainCarouselWrapperRef","scrollLeft","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","transform","firstItemReached","lastItemReached","internalItems","useCallback","getItems","enterFullscreen","exitFullscreen","getIsFullscreen","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","elementRef","request","exit","useFullscreenModule","console","log","adjustCarouselWrapperPosition","eventName","getSlideValue","carouselItem","Error","slideToItem","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","config","default","velocity","onRest","finished","currentItem","getCarouselItemWidth","positionProperty","setPosition","v","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","warn","useLayoutEffect","floor","bindDrag","useDrag","state","isDragging","dragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","Provider","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","context","useContext","springConfig","exitBeforeEnter","trail","externalActiveItem","toPrevItemSpringProps","toNextItemSpringProps","setActiveItem","useState","isFirstItem","transitions","useTransition","key","_","bindSwipe","mx","itemsFragment","styles","indx","a","div","overflow"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/useTransitionCarousel.tsx"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange<T> = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange<T> = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype OnLeftSwipe = {\n eventName: 'onLeftSwipe'\n}\n\ntype OnRightSwipe = {\n eventName: 'onRightSwipe'\n}\n\ntype SpringCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnDrag\n | OnFullscreenChange\n\ntype TransitionCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnFullscreenChange\n | OnLeftSwipe\n | OnRightSwipe\n\ntype Events<T> = T extends 'use-spring'\n ? SpringCarouselEvents<'use-spring'>\n : TransitionCarouselEvents<'use-transition'>\n\ntype EventHandler<T> = (props: Events<T>) => void\n\nexport type UseListenToCustomEvent<T> = {\n useListenToCustomEvent: (eventHandler: EventHandler<T>) => void\n emitEvent: (event: Events<T>) => void\n}\n\nexport function useEventsModule<T extends 'use-spring' | 'use-transition'>() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\n if (!targetEvent.current) {\n targetEvent.current = document.createElement('div')\n }\n\n function handleEvent(event: CustomEvent<Events<T>>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [eventHandler])\n }\n function emitEvent(event: Events<T>) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n handleResize?(): void\n onFullScreenChange(isFullscreen: boolean): void\n}\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 { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\n\nimport { ItemWithThumb, PrepareThumbsData, SpringCarouselWithThumbs } from '../types'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: ItemWithThumb[]\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n","import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n if ('ResizeObserver' in window && mainCarouselWrapperRef.current) {\n const observer = new ResizeObserver(() => {\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n } else {\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n carouselSlideAxis,\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState, createContext, useContext } from 'react'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useThumbsModule } from './modules'\nimport {\n ItemWithThumb,\n UseTransitionCarouselProps,\n UseTransitionCarouselReturnProps,\n SlideActionType,\n TransitionSlideMode,\n} from './types'\n\nconst defaultAnimationProps = {\n initial: {\n opacity: 1,\n position: 'relative',\n },\n from: {\n opacity: 0,\n position: 'relative',\n },\n enter: {\n position: 'relative',\n opacity: 1,\n },\n leave: {\n opacity: 1,\n position: 'absolute',\n },\n}\n\nfunction useTransitionCarousel({\n init = true,\n disableGestures = false,\n items,\n springConfig = config.default,\n exitBeforeEnter = false,\n trail,\n withLoop = false,\n activeItem: externalActiveItem,\n toPrevItemSpringProps = defaultAnimationProps,\n toNextItemSpringProps = defaultAnimationProps,\n draggingSlideTreshold = 50,\n thumbsSlideAxis = 'x',\n}: UseTransitionCarouselProps): UseTransitionCarouselReturnProps {\n const slideActionType = useRef<SlideActionType>('next')\n const slideModeType = useRef<TransitionSlideMode>('initial')\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const [activeItem, setActiveItem] = useState(externalActiveItem ?? 0)\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-transition'>()\n const { handleScroll, thumbsFragment } = useThumbsModule({\n thumbsSlideAxis,\n items: items as ItemWithThumb[],\n })\n\n function getConfig() {\n if (slideActionType.current === 'prev') {\n return {\n initial: {\n ...toPrevItemSpringProps.initial,\n },\n from: {\n ...toPrevItemSpringProps.from,\n },\n enter: {\n ...toPrevItemSpringProps.enter,\n },\n leave: {\n ...toPrevItemSpringProps.leave,\n },\n }\n }\n if (slideActionType.current === 'next') {\n return {\n initial: {\n ...toNextItemSpringProps.initial,\n },\n from: {\n ...toNextItemSpringProps.from,\n },\n enter: {\n ...toNextItemSpringProps.enter,\n },\n leave: {\n ...toNextItemSpringProps.leave,\n },\n }\n }\n return {\n initial: {\n ...defaultAnimationProps.initial,\n },\n from: {\n ...defaultAnimationProps.from,\n },\n enter: {\n ...defaultAnimationProps.enter,\n },\n leave: {\n ...defaultAnimationProps.leave,\n },\n }\n }\n\n useEffect(() => {\n if (typeof externalActiveItem === 'number' && externalActiveItem !== activeItem) {\n setActiveItem(externalActiveItem)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalActiveItem])\n\n type SlideToItem = {\n to: number\n slideType: SlideActionType\n slideMode: TransitionSlideMode\n }\n\n function slideToItem({ to, slideType, slideMode }: SlideToItem) {\n slideActionType.current = slideType\n slideModeType.current = slideMode\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n index: to,\n id: items[to].id,\n startReached: to === 0,\n endReached: to === items.length - 1,\n },\n })\n setActiveItem(to)\n handleScroll(activeItem)\n }\n\n function slideToPrevItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isFirstItem = activeItem === 0\n\n if (!withLoop && isFirstItem) return\n\n if (withLoop && isFirstItem) {\n slideToItem({\n to: items.length - 1,\n slideType: 'prev',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem - 1,\n slideType: 'prev',\n slideMode,\n })\n }\n }\n function slideToNextItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isLastItem = activeItem === items.length - 1\n\n if (!withLoop && isLastItem) return\n\n if (withLoop && isLastItem) {\n slideToItem({\n to: 0,\n slideType: 'next',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem + 1,\n slideType: 'next',\n slideMode,\n })\n }\n }\n\n const transitions = useTransition(activeItem, {\n config: springConfig,\n key: null,\n trail,\n exitBeforeEnter,\n ...getConfig(),\n onRest(value, _, index) {\n if (value.finished && index === activeItem) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n index: activeItem,\n id: items[activeItem].id,\n startReached: activeItem === 0,\n endReached: activeItem === items.length - 1,\n },\n })\n }\n },\n })\n\n const bindSwipe = useDrag(\n ({ last, movement: [mx] }) => {\n if (last) {\n const prevItemTreshold = mx > draggingSlideTreshold\n const nextItemTreshold = mx < -draggingSlideTreshold\n const isFirstItem = activeItem === 0\n const isLastItem = activeItem === items.length - 1\n\n if (nextItemTreshold) {\n if (!withLoop && isLastItem) return\n\n emitEvent({\n eventName: 'onLeftSwipe',\n })\n slideToNextItem('swipe')\n } else if (prevItemTreshold) {\n if (!withLoop && isFirstItem) return\n\n emitEvent({\n eventName: 'onRightSwipe',\n })\n slideToPrevItem('swipe')\n }\n }\n },\n {\n enabled: !disableGestures,\n },\n )\n\n const itemsFragment = transitions((styles, item, _, indx) => {\n return (\n <a.div\n id={`use-transition-carousel-item-${indx}`}\n className=\"use-transition-carousel-item\"\n style={{\n ...styles,\n flex: '1 0 100%',\n width: '100%',\n height: '100%',\n }}\n >\n {items[item].renderItem}\n </a.div>\n )\n })\n\n const res = {\n useListenToCustomEvent,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n ref={mainCarouselWrapperRef}\n {...bindSwipe()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n {itemsFragment}\n </div>\n </Context.Provider>\n )\n\n return {\n ...res,\n carouselFragment,\n thumbsFragment: _thumbsFragment,\n }\n}\n\ntype ContextProps = Omit<\n UseTransitionCarouselReturnProps,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | undefined>(undefined)\n\nfunction useTransitionCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useTransitionCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useTransitionCarousel, useTransitionCarouselContext }\n"],"names":["useEventsModule","targetEvent","useRef","useListenToCustomEvent","eventHandler","useEffect","handleEvent","event","detail","current","document","createElement","addEventListener","_a","removeEventListener","emitEvent","newEvent","CustomEvent","dispatchEvent","useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","enterFullscreen","elementRef","request","exitFullscreen","exit","getIsFullscreen","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","getBoundingClientRect","thumbsFragment","_jsx","jsx","Object","assign","className","ref","onWheel","stop","style","display","flex","position","width","height","flexDirection","overflowX","overflowY","maxHeight","children","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsData","thumbId","handleScroll","activeItem","thumbNode","querySelector","el","rect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","defaultAnimationProps","initial","opacity","enter","leave","init","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","initialActiveItem","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","pause","scrollLeft","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","transform","firstItemReached","lastItemReached","internalItems","useCallback","getItems","console","log","adjustCarouselWrapperPosition","eventName","getSlideValue","carouselItem","Error","slideToItem","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","config","default","velocity","onRest","finished","currentItem","getCarouselItemWidth","positionProperty","setPosition","v","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","warn","useLayoutEffect","floor","observer","ResizeObserver","observe","disconnect","bindDrag","useDrag","state","isDragging","dragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","Provider","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","context","useContext","springConfig","exitBeforeEnter","trail","externalActiveItem","toPrevItemSpringProps","toNextItemSpringProps","setActiveItem","useState","isFirstItem","transitions","useTransition","key","_","bindSwipe","mx","itemsFragment","styles","indx","a","div","overflow"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{useSpringCarousel,useSpringCarouselContext}from"./useSpringCarousel.js";export{useTransitionCarousel,useTransitionCarouselContext}from"./useTransitionCarousel.js";import"react/jsx-runtime";import"@react-spring/web";import"react";import"./useThumbsModule-f4421f49.js";import"@use-gesture/react";import"./useFullscreenModule-519d337d.js";import"screenfull";
1
+ export{useSpringCarousel,useSpringCarouselContext}from"./useSpringCarousel.js";export{useTransitionCarousel,useTransitionCarouselContext}from"./useTransitionCarousel.js";export{u as useEventsModule,a as useThumbsModule}from"./useThumbsModule-f4421f49.js";export{u as useFullscreenModule}from"./useFullscreenModule-519d337d.js";import"react/jsx-runtime";import"@react-spring/web";import"react";import"@use-gesture/react";import"screenfull";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useSpring as r,config as n}from"@react-spring/web";import{createContext as i,useRef as c,useCallback as o,useEffect as l,useLayoutEffect as s,useContext as u}from"react";import{u as a,a as d}from"./useThumbsModule-f4421f49.js";import{useDrag as h}from"@use-gesture/react";import{u as g}from"./useFullscreenModule-519d337d.js";import"screenfull";function v({items:i,init:u=!0,withThumbs:v,thumbsSlideAxis:m="x",itemsPerSlide:p=1,slideType:x="fixed",gutter:b=0,withLoop:y=!1,startEndGutter:w=0,carouselSlideAxis:T="x",disableGestures:I=!1,draggingSlideTreshold:j,slideWhenThresholdIsReached:O=!1,freeScroll:M,enableFreeScrollDrag:S,initialStartingPosition:F,prepareThumbsData:$,initialActiveItem:A=0}){const k=p>i.length?i.length:p,C=c(0),L=c(null!=j?j:0),N=c("initial"),R=c("initial"),E=c(0),[P,W]=r((()=>({val:0,pause:!u,onChange({value:e}){M&&B.current?("x"===T?B.current.scrollLeft=Math.abs(e.val):B.current.scrollTop=Math.abs(e.val),se()):G.current&&(G.current.style.transform="x"===T?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),D=c(A),q=c(0===A),z=c(!1),B=c(null),G=c(null),H=o((()=>y?[...i.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...i,...i.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...i]),[i,y])(),{emitEvent:X,useListenToCustomEvent:Y}=a(),{thumbsFragment:J,handleScroll:K}=d({withThumbs:!!v,thumbsSlideAxis:m,prepareThumbsData:$,items:i}),{enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V}=g({mainCarouselWrapperRef:B,handleResize:()=>{console.log("resize"),re()},onFullScreenChange:e=>{X({eventName:"onFullscreenChange",isFullscreen:e})}});function Z(){var e;const t=null===(e=B.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===T?"width":"height"]+b}function _({from:e,to:t,nextActiveItem:r,immediate:c=!1,slideMode:o}){R.current=o,"number"==typeof r&&(M||(D.current=r),X({eventName:"onSlideStartChange",slideActionType:N.current,slideMode:R.current,nextItem:{startReached:q.current,endReached:z.current,index:M?-1:D.current,id:M?"":i[D.current].id}})),E.current=t,W.start({immediate:c,from:{val:e},to:{val:t},config:Object.assign(Object.assign({},n.default),{velocity:P.val.velocity}),onRest(e){!c&&e.finished&&X({eventName:"onSlideChange",slideActionType:N.current,slideMode:R.current,currentItem:{startReached:q.current,endReached:z.current,index:M?-1:D.current,id:M?"":i[D.current].id}})}}),v&&!c&&K(D.current)}function ee(){var e;return y?Z()*i.length:Math.round(Number(null===(e=G.current)||void 0===e?void 0:e["x"===T?"scrollWidth":"scrollHeight"])-G.current.getBoundingClientRect()["x"===T?"width":"height"]-2*w)}function te(){var e;const t=null===(e=G.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===T?"width":"height"]+b}function re(){const e="x"===T?"left":"top";function t(t){const r=G.current;r&&(y?(r.style.top="0px",r.style.left="0px",r.style[e]=`-${t-w}px`):(r.style.left="0px",r.style.top="0px"))}const r=Math.abs(ne());if(r<ee()&&z.current&&!y&&(z.current=!1),r>ee()&&!y){const e=-ee();return z.current=!0,E.current=e,void W.start({immediate:!0,val:e})}if(t("center"===F?te()*i.length-Z()*Math.round((k-1)/2):"end"===F?te()*i.length-Z()*Math.round(k-1):te()*i.length),!M&&"fixed"===x){const e=-Z()*D.current;E.current=e,W.start({immediate:!0,val:e})}}function ne(){return M&&B.current?B.current["x"===T?"scrollLeft":"scrollTop"]:P.val.get()}function ie(e,t){if(M&&"next"===e){const e=E.current+Z();return e>ee()?ee():e}if(M&&"prev"===e){const e=E.current-Z();return e<0?0:e}return"next"===e?t?-t*Z():E.current-Z():t?-t*Z():E.current+Z()}function ce(e="click",t){if(!u||q.current&&!y)return;N.current="prev",z.current=!1;const r=t||D.current-1;if(!y){const r=M?ie("prev",t)-Z()/3<0:ie("prev",t)+Z()/3>0;if(q.current)return;if(r)return q.current=!0,z.current=!1,void _({slideMode:e,from:ne(),to:0,nextActiveItem:0})}if(y&&q.current)return q.current=!1,z.current=!0,void _({slideMode:e,from:ne()-Z()*i.length,to:-Z()*i.length+Z(),nextActiveItem:i.length-1});0===r&&(q.current=!0),r!==i.length-1&&-1!==r||(z.current=!0),_({slideMode:e,from:ne(),to:ie("prev",t),nextActiveItem:r})}function oe(e="click",t){if(!u||z.current&&!y)return;N.current="next",q.current=!1;const r=t||D.current+1;if(console.log({nextItem:r}),!y){const n=Math.abs(ie("next",t))>ee()-Z()/3;if(z.current)return;if(n)return q.current=!1,z.current=!0,void _({slideMode:e,from:ne(),to:M?ee():-ee(),nextActiveItem:r})}if(y&&z.current)return z.current=!1,q.current=!0,void _({slideMode:e,from:ne()+Z()*i.length,to:0,nextActiveItem:0});0===r&&(q.current=!0),r===i.length-1&&(z.current=!0),_({slideMode:e,from:ne(),to:ie("next",t),nextActiveItem:r})}l((()=>{if(u){if(A>i.length-1)throw new Error(`initialActiveItem (${A}) is greater than the total quantity available items (${i.length}).`);k>i.length&&console.warn(`itemsPerSlide (${k}) is greater than the total quantity available items (${i.length}). Fallback to ${i.length})`)}}),[A,i,k,u]),l((()=>{C.current=window.innerWidth}),[]),l((()=>{re()}),[F,k,y,w,b,M,x,u]),s((()=>{G.current&&re()}),[]),l((()=>{L.current=j||Math.floor(Z()/2/2)}),[j]),l((()=>{function e(){window.innerWidth!==C.current&&(C.current=window.innerWidth,re())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[F,k,y,w,b,M,x,u]);const le=h((e=>{const t=e.dragging,r=e.offset["x"===T?0:1],i=e.movement["x"===T?0:1],c=e.direction["x"===T?0:1],o=i>L.current,l=i<-L.current;if(t)return N.current=c>0?"prev":"next",X(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:N.current})),M?"prev"===N.current&&r>0?(e.cancel(),void W.start({from:{val:ne()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void W.start({from:{val:ne()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(W.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(O&&l?(oe("drag"),e.cancel()):O&&o&&(ce("drag"),e.cancel())));e.last&&!e.canceled&&M&&("prev"===N.current&&ce("drag"),"next"===N.current&&oe("drag")),!e.last||e.canceled||M||(l?!y&&z.current?W.start({val:-ee(),config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}):oe("drag"):o?!y&&q.current?W.start({val:0,config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}):ce("drag"):W.start({val:E.current,config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}))}),{enabled:u&&!I&&!M||!!M&&!!S,axis:T,from:()=>M&&B.current?[-B.current.scrollLeft,-B.current.scrollTop]:[P.val.get(),P.val.get()]});function se(){B.current&&(E.current=B.current["x"===T?"scrollLeft":"scrollTop"],0===B.current["x"===T?"scrollLeft":"scrollTop"]&&(q.current=!0,z.current=!1),B.current["x"===T?"scrollLeft":"scrollTop"]>0&&B.current["x"===T?"scrollLeft":"scrollTop"]<ee()&&(q.current=!1,z.current=!1),B.current["x"===T?"scrollLeft":"scrollTop"]===ee()&&(q.current=!1,z.current=!0))}function ue(e,t){let r=0;if(r="string"==typeof e?i.findIndex((t=>t.id===e)):e,r<0||r>=i.length){if(t)throw new Error(t);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),r=-1}return r}const ae=M?{useListenToCustomEvent:Y,enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V,slideToPrevItem:()=>ce(),slideToNextItem:()=>oe()}:{useListenToCustomEvent:Y,enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V,slideToPrevItem:()=>ce(),slideToNextItem:()=>oe(),slideToItem:function(e){if(!u)return;q.current=!1,z.current=!1;const t=ue(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===D.current)return;const r=ue(i[D.current].id),n=ue(i[t].id);n>r?oe("click",n):ce("click",n)},getIsNextItem:function(e){const t=ue(e,"The item doesn't exist; check the provided id."),r=D.current;return y&&r===i.length-1?0===t:t===r+1},getIsPrevItem:function(e){const t=ue(e,"The item doesn't exist; check the provided id."),r=D.current;return y&&0===r?t===i.length-1:t===r-1},getIsActiveItem:e=>ue(e,"The item you want to check doesn't exist; check the provided id.")===D.current},de=e(f.Provider,Object.assign({value:ae},{children:J})),he=e(f.Provider,Object.assign({value:ae},{children:e("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:B},M?{onWheel(){P.val.stop(),se()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},M?"x"===T?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:G},le(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===T?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*w}px)`;return{width:"x"===T?e:"100%",height:"y"===T?e:"100%"}}())},{children:[M&&w?e("div",{style:{flexShrink:0,width:w}}):null,H.map(((t,r)=>{return e("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(n=!!M&&r===i.length-1,"fixed"!==x||M?Object.assign({marginRight:`${n?0:b}px`}):{marginRight:`${n?0:b}px`,flex:`1 0 calc(100% / ${k} - ${b*(k-1)/k}px)`}))},{children:t.renderItem}),`${t.id}-${r}`);var n})),M&&w?e("div",{style:{flexShrink:0,width:w}}):null]}))}))}));return Object.assign(Object.assign({},ae),{carouselFragment:he,thumbsFragment:de})}const f=i(void 0);function m(){const e=u(f);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e}export{v as useSpringCarousel,m as useSpringCarouselContext};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useSpring as r,config as n}from"@react-spring/web";import{createContext as i,useRef as c,useCallback as o,useEffect as s,useLayoutEffect as l,useContext as u}from"react";import{u as a,a as d}from"./useThumbsModule-f4421f49.js";import{useDrag as h}from"@use-gesture/react";import{u as g}from"./useFullscreenModule-519d337d.js";import"screenfull";function v({items:i,init:u=!0,withThumbs:v,thumbsSlideAxis:m="x",itemsPerSlide:p=1,slideType:x="fixed",gutter:b=0,withLoop:w=!1,startEndGutter:y=0,carouselSlideAxis:T="x",disableGestures:I=!1,draggingSlideTreshold:j,slideWhenThresholdIsReached:O=!1,freeScroll:M,enableFreeScrollDrag:S,initialStartingPosition:F,prepareThumbsData:$,initialActiveItem:A=0}){const R=p>i.length?i.length:p,k=c(0),C=c(null!=j?j:0),L=c("initial"),N=c("initial"),E=c(0),[P,W]=r((()=>({val:0,pause:!u,onChange({value:e}){M&&B.current?("x"===T?B.current.scrollLeft=Math.abs(e.val):B.current.scrollTop=Math.abs(e.val),le()):G.current&&(G.current.style.transform="x"===T?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),z=c(A),D=c(0===A),q=c(!1),B=c(null),G=c(null),H=o((()=>w?[...i.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...i,...i.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...i]),[i,w])(),{emitEvent:X,useListenToCustomEvent:Y}=a(),{thumbsFragment:J,handleScroll:K}=d({withThumbs:!!v,thumbsSlideAxis:m,prepareThumbsData:$,items:i}),{enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V}=g({mainCarouselWrapperRef:B,handleResize:()=>{console.log("resize"),re()},onFullScreenChange:e=>{X({eventName:"onFullscreenChange",isFullscreen:e})}});function Z(){var e;const t=null===(e=B.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===T?"width":"height"]+b}function _({from:e,to:t,nextActiveItem:r,immediate:c=!1,slideMode:o}){N.current=o,"number"==typeof r&&(M||(z.current=r),X({eventName:"onSlideStartChange",slideActionType:L.current,slideMode:N.current,nextItem:{startReached:D.current,endReached:q.current,index:M?-1:z.current,id:M?"":i[z.current].id}})),E.current=t,W.start({immediate:c,from:{val:e},to:{val:t},config:Object.assign(Object.assign({},n.default),{velocity:P.val.velocity}),onRest(e){!c&&e.finished&&X({eventName:"onSlideChange",slideActionType:L.current,slideMode:N.current,currentItem:{startReached:D.current,endReached:q.current,index:M?-1:z.current,id:M?"":i[z.current].id}})}}),v&&!c&&K(z.current)}function ee(){var e;return w?Z()*i.length:Math.round(Number(null===(e=G.current)||void 0===e?void 0:e["x"===T?"scrollWidth":"scrollHeight"])-G.current.getBoundingClientRect()["x"===T?"width":"height"]-2*y)}function te(){var e;const t=null===(e=G.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===T?"width":"height"]+b}function re(){const e="x"===T?"left":"top";function t(t){const r=G.current;r&&(w?(r.style.top="0px",r.style.left="0px",r.style[e]=`-${t-y}px`):(r.style.left="0px",r.style.top="0px"))}const r=Math.abs(ne());if(r<ee()&&q.current&&!w&&(q.current=!1),r>ee()&&!w){const e=-ee();return q.current=!0,E.current=e,void W.start({immediate:!0,val:e})}if(t("center"===F?te()*i.length-Z()*Math.round((R-1)/2):"end"===F?te()*i.length-Z()*Math.round(R-1):te()*i.length),!M&&"fixed"===x){const e=-Z()*z.current;E.current=e,W.start({immediate:!0,val:e})}}function ne(){return M&&B.current?B.current["x"===T?"scrollLeft":"scrollTop"]:P.val.get()}function ie(e,t){if(M&&"next"===e){const e=E.current+Z();return e>ee()?ee():e}if(M&&"prev"===e){const e=E.current-Z();return e<0?0:e}return"next"===e?t?-t*Z():E.current-Z():t?-t*Z():E.current+Z()}function ce(e="click",t){if(!u||D.current&&!w)return;L.current="prev",q.current=!1;const r=t||z.current-1;if(!w){const r=M?ie("prev",t)-Z()/3<0:ie("prev",t)+Z()/3>0;if(D.current)return;if(r)return D.current=!0,q.current=!1,void _({slideMode:e,from:ne(),to:0,nextActiveItem:0})}if(w&&D.current)return D.current=!1,q.current=!0,void _({slideMode:e,from:ne()-Z()*i.length,to:-Z()*i.length+Z(),nextActiveItem:i.length-1});0===r&&(D.current=!0),r!==i.length-1&&-1!==r||(q.current=!0),_({slideMode:e,from:ne(),to:ie("prev",t),nextActiveItem:r})}function oe(e="click",t){if(!u||q.current&&!w)return;L.current="next",D.current=!1;const r=t||z.current+1;if(console.log({nextItem:r}),!w){const n=Math.abs(ie("next",t))>ee()-Z()/3;if(q.current)return;if(n)return D.current=!1,q.current=!0,void _({slideMode:e,from:ne(),to:M?ee():-ee(),nextActiveItem:r})}if(w&&q.current)return q.current=!1,D.current=!0,void _({slideMode:e,from:ne()+Z()*i.length,to:0,nextActiveItem:0});0===r&&(D.current=!0),r===i.length-1&&(q.current=!0),_({slideMode:e,from:ne(),to:ie("next",t),nextActiveItem:r})}s((()=>{if(u){if(A>i.length-1)throw new Error(`initialActiveItem (${A}) is greater than the total quantity available items (${i.length}).`);R>i.length&&console.warn(`itemsPerSlide (${R}) is greater than the total quantity available items (${i.length}). Fallback to ${i.length})`)}}),[A,i,R,u]),s((()=>{k.current=window.innerWidth}),[]),s((()=>{re()}),[F,R,w,y,b,M,x,u]),l((()=>{G.current&&re()}),[]),s((()=>{C.current=j||Math.floor(Z()/2/2)}),[j]),s((()=>{function e(){window.innerWidth!==k.current&&(k.current=window.innerWidth,re())}if("ResizeObserver"in window&&B.current){const e=new ResizeObserver((()=>{k.current=window.innerWidth,re()}));return e.observe(B.current),()=>{e.disconnect()}}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[T,F,R,w,y,b,M,x,u]);const se=h((e=>{const t=e.dragging,r=e.offset["x"===T?0:1],i=e.movement["x"===T?0:1],c=e.direction["x"===T?0:1],o=i>C.current,s=i<-C.current;if(t)return L.current=c>0?"prev":"next",X(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:L.current})),M?"prev"===L.current&&r>0?(e.cancel(),void W.start({from:{val:ne()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void W.start({from:{val:ne()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(W.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(O&&s?(oe("drag"),e.cancel()):O&&o&&(ce("drag"),e.cancel())));e.last&&!e.canceled&&M&&("prev"===L.current&&ce("drag"),"next"===L.current&&oe("drag")),!e.last||e.canceled||M||(s?!w&&q.current?W.start({val:-ee(),config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}):oe("drag"):o?!w&&D.current?W.start({val:0,config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}):ce("drag"):W.start({val:E.current,config:Object.assign(Object.assign({},n.default),{velocity:e.velocity})}))}),{enabled:u&&!I&&!M||!!M&&!!S,axis:T,from:()=>M&&B.current?[-B.current.scrollLeft,-B.current.scrollTop]:[P.val.get(),P.val.get()]});function le(){B.current&&(E.current=B.current["x"===T?"scrollLeft":"scrollTop"],0===B.current["x"===T?"scrollLeft":"scrollTop"]&&(D.current=!0,q.current=!1),B.current["x"===T?"scrollLeft":"scrollTop"]>0&&B.current["x"===T?"scrollLeft":"scrollTop"]<ee()&&(D.current=!1,q.current=!1),B.current["x"===T?"scrollLeft":"scrollTop"]===ee()&&(D.current=!1,q.current=!0))}function ue(e,t){let r=0;if(r="string"==typeof e?i.findIndex((t=>t.id===e)):e,r<0||r>=i.length){if(t)throw new Error(t);console.error(`The item doesn't exist; check that the id provided - ${e} - is correct.`),r=-1}return r}const ae=M?{useListenToCustomEvent:Y,enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V,slideToPrevItem:()=>ce(),slideToNextItem:()=>oe()}:{useListenToCustomEvent:Y,enterFullscreen:Q,exitFullscreen:U,getIsFullscreen:V,slideToPrevItem:()=>ce(),slideToNextItem:()=>oe(),slideToItem:function(e){if(!u)return;D.current=!1,q.current=!1;const t=ue(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===z.current)return;const r=ue(i[z.current].id),n=ue(i[t].id);n>r?oe("click",n):ce("click",n)},getIsNextItem:function(e){const t=ue(e,"The item doesn't exist; check the provided id."),r=z.current;return w&&r===i.length-1?0===t:t===r+1},getIsPrevItem:function(e){const t=ue(e,"The item doesn't exist; check the provided id."),r=z.current;return w&&0===r?t===i.length-1:t===r-1},getIsActiveItem:function(e){return ue(e,"The item you want to check doesn't exist; check the provided id.")===z.current}},de=e(f.Provider,Object.assign({value:ae},{children:J})),he=e(f.Provider,Object.assign({value:ae},{children:e("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:B},M?{onWheel(){P.val.stop(),le()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},M?"x"===T?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:G},se(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===T?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*y}px)`;return{width:"x"===T?e:"100%",height:"y"===T?e:"100%"}}())},{children:[M&&y?e("div",{style:{flexShrink:0,width:y}}):null,H.map(((t,r)=>{return e("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(n=!!M&&r===i.length-1,"fixed"!==x||M?Object.assign({marginRight:`${n?0:b}px`}):{marginRight:`${n?0:b}px`,flex:`1 0 calc(100% / ${R} - ${b*(R-1)/R}px)`}))},{children:t.renderItem}),`${t.id}-${r}`);var n})),M&&y?e("div",{style:{flexShrink:0,width:y}}):null]}))}))}));return Object.assign(Object.assign({},ae),{carouselFragment:he,thumbsFragment:de})}const f=i(void 0);function m(){const e=u(f);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e}export{v as useSpringCarousel,m as useSpringCarouselContext};
2
2
  //# sourceMappingURL=useSpringCarousel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSpringCarousel.js","sources":["../../src/useSpringCarousel.tsx"],"sourcesContent":["import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem: (id: string | number) => {\n return (\n findItemIndex(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n },\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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":["useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","length","prevWindowWidth","useRef","slideActionType","slideModeType","prevSlidedValue","spring","setSpring","useSpring","val","pause","onChange","value","mainCarouselWrapperRef","current","scrollLeft","Math","abs","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","style","transform","activeItem","firstItemReached","lastItemReached","internalItems","useCallback","map","i","Object","assign","id","getItems","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","enterFullscreen","exitFullscreen","getIsFullscreen","useFullscreenModule","handleResize","console","log","adjustCarouselWrapperPosition","onFullScreenChange","eventName","isFullscreen","getSlideValue","carouselItem","_a","querySelector","Error","getBoundingClientRect","slideToItem","from","to","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","start","config","default","velocity","onRest","finished","currentItem","getTotalScrollValue","round","Number","getCarouselItemWidth","positionProperty","setPosition","v","ref","top","left","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","useEffect","warn","window","innerWidth","useLayoutEffect","floor","addEventListener","removeEventListener","bindDrag","useDrag","state","isDragging","dragging","movement","offset","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","_jsx","Context","Provider","children","carouselFragment","className","onWheel","stop","display","position","width","height","overflowX","overflowY","_jsxs","flexDirection","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","flex","isLastItem","marginRight","renderItem","createContext","undefined","useSpringCarouselContext","context","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"useSpringCarousel.js","sources":["../../src/useSpringCarousel.tsx"],"sourcesContent":["import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n if ('ResizeObserver' in window && mainCarouselWrapperRef.current) {\n const observer = new ResizeObserver(() => {\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n } else {\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n carouselSlideAxis,\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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":["useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","length","prevWindowWidth","useRef","slideActionType","slideModeType","prevSlidedValue","spring","setSpring","useSpring","val","pause","onChange","value","mainCarouselWrapperRef","current","scrollLeft","Math","abs","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","style","transform","activeItem","firstItemReached","lastItemReached","internalItems","useCallback","map","i","Object","assign","id","getItems","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","enterFullscreen","exitFullscreen","getIsFullscreen","useFullscreenModule","handleResize","console","log","adjustCarouselWrapperPosition","onFullScreenChange","eventName","isFullscreen","getSlideValue","carouselItem","_a","querySelector","Error","getBoundingClientRect","slideToItem","from","to","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","start","config","default","velocity","onRest","finished","currentItem","getTotalScrollValue","round","Number","getCarouselItemWidth","positionProperty","setPosition","v","ref","top","left","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","useEffect","warn","window","innerWidth","useLayoutEffect","floor","observer","ResizeObserver","observe","disconnect","addEventListener","removeEventListener","bindDrag","useDrag","state","isDragging","dragging","movement","offset","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","_jsx","Context","Provider","children","carouselFragment","className","onWheel","stop","display","position","width","height","overflowX","overflowY","_jsxs","flexDirection","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","flex","isLastItem","marginRight","renderItem","createContext","undefined","useSpringCarouselContext","context","useContext"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './common';
2
2
  export * from './useSpringCarousel.types';
3
3
  export * from './useTransitionCarousel.types';
4
+ export * from '../modules';
package/dist/umd/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react/jsx-runtime"),require("@react-spring/web"),require("react"),require("@use-gesture/react"),require("screenfull")):"function"==typeof define&&define.amd?define(["exports","react/jsx-runtime","@react-spring/web","react","@use-gesture/react","screenfull"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactSpringCarousel={},e.ReactJSXRuntime,e.ReactSpring,e.React,e.UseGestureReact,e.Screenfull)}(this,(function(e,t,n,r,i,s){"use strict";const c="RSC::Event";function o(){const e=r.useRef(null);return{useListenToCustomEvent:function(t){r.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener(c,n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(c,n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent(c,{detail:t});e.current.dispatchEvent(n)}}}}function l({thumbsSlideAxis:e="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=r.useRef(null),[l,u]=n.useSpring((()=>({val:0})));function a(){var t;return Math.round(Number(null===(t=o.current)||void 0===t?void 0:t["x"===e?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===e?"width":"height"])}return{thumbsFragment:i?t.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===e?"row":"column"},"x"===e?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:e,renderThumb:n})=>{const r=`thumb-item-${e}`;return t.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(t){var n,r;const i=o.current?o.current.querySelector(`#thumb-item-${c[t].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const t=i.offsetLeft,s=t>a()?a():t;u.start({from:{val:null!==(r=null===(n=o.current)||void 0===n?void 0:n["x"===e?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:s},onChange:({value:t})=>{o.current&&(o.current["x"===e?"scrollLeft":"scrollTop"]=Math.abs(t.val))}})}}}}const u=r.createContext(void 0);const a={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const d=r.createContext(void 0);e.useSpringCarousel=function({items:e,init:c=!0,withThumbs:a,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:g="fixed",gutter:h=0,withLoop:m=!1,startEndGutter:v=0,carouselSlideAxis:p="x",disableGestures:x=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:j=!1,freeScroll:y,enableFreeScrollDrag:w,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:R=0}){const S=f>e.length?e.length:f,E=r.useRef(0),C=r.useRef(null!=b?b:0),I=r.useRef("initial"),M=r.useRef("initial"),F=r.useRef(0),[L,N]=n.useSpring((()=>({val:0,pause:!c,onChange({value:e}){y&&P.current?("x"===p?P.current.scrollLeft=Math.abs(e.val):P.current.scrollTop=Math.abs(e.val),re()):W.current&&(W.current.style.transform="x"===p?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),A=r.useRef(R),$=r.useRef(0===R),k=r.useRef(!1),P=r.useRef(null),W=r.useRef(null),q=r.useCallback((()=>m?[...e.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...e,...e.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...e]),[e,m])(),{emitEvent:D,useListenToCustomEvent:B}=o(),{thumbsFragment:z,handleScroll:H}=l({withThumbs:!!a,thumbsSlideAxis:d,prepareThumbsData:O,items:e}),{enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y}=function({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:n}){const i=r.useRef(!1);function c(e){i.current=e}return r.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),n&&n()),document.fullscreenElement||(c(!1),t(!1),n&&n())}if(s.isEnabled)return s.on("change",e),()=>{s.isEnabled&&s.off("change",e)}}),[]),{enterFullscreen:function(t){s.isEnabled&&s.request(t||e.current)},exitFullscreen:function(){s.isEnabled&&s.exit()},getIsFullscreen:function(){return i.current}}}({mainCarouselWrapperRef:P,handleResize:()=>{console.log("resize"),V()},onFullScreenChange:e=>{D({eventName:"onFullscreenChange",isFullscreen:e})}});function J(){var e;const t=null===(e=P.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+h}function U({from:t,to:r,nextActiveItem:i,immediate:s=!1,slideMode:c}){M.current=c,"number"==typeof i&&(y||(A.current=i),D({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:M.current,nextItem:{startReached:$.current,endReached:k.current,index:y?-1:A.current,id:y?"":e[A.current].id}})),F.current=r,N.start({immediate:s,from:{val:t},to:{val:r},config:Object.assign(Object.assign({},n.config.default),{velocity:L.val.velocity}),onRest(t){!s&&t.finished&&D({eventName:"onSlideChange",slideActionType:I.current,slideMode:M.current,currentItem:{startReached:$.current,endReached:k.current,index:y?-1:A.current,id:y?"":e[A.current].id}})}}),a&&!s&&H(A.current)}function K(){var t;return m?J()*e.length:Math.round(Number(null===(t=W.current)||void 0===t?void 0:t["x"===p?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===p?"width":"height"]-2*v)}function Q(){var e;const t=null===(e=W.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+h}function V(){const t="x"===p?"left":"top";function n(e){const n=W.current;n&&(m?(n.style.top="0px",n.style.left="0px",n.style[t]=`-${e-v}px`):(n.style.left="0px",n.style.top="0px"))}const r=Math.abs(Z());if(r<K()&&k.current&&!m&&(k.current=!1),r>K()&&!m){const e=-K();return k.current=!0,F.current=e,void N.start({immediate:!0,val:e})}if(n("center"===T?Q()*e.length-J()*Math.round((S-1)/2):"end"===T?Q()*e.length-J()*Math.round(S-1):Q()*e.length),!y&&"fixed"===g){const e=-J()*A.current;F.current=e,N.start({immediate:!0,val:e})}}function Z(){return y&&P.current?P.current["x"===p?"scrollLeft":"scrollTop"]:L.val.get()}function _(e,t){if(y&&"next"===e){const e=F.current+J();return e>K()?K():e}if(y&&"prev"===e){const e=F.current-J();return e<0?0:e}return"next"===e?t?-t*J():F.current-J():t?-t*J():F.current+J()}function ee(t="click",n){if(!c||$.current&&!m)return;I.current="prev",k.current=!1;const r=n||A.current-1;if(!m){const e=y?_("prev",n)-J()/3<0:_("prev",n)+J()/3>0;if($.current)return;if(e)return $.current=!0,k.current=!1,void U({slideMode:t,from:Z(),to:0,nextActiveItem:0})}if(m&&$.current)return $.current=!1,k.current=!0,void U({slideMode:t,from:Z()-J()*e.length,to:-J()*e.length+J(),nextActiveItem:e.length-1});0===r&&($.current=!0),r!==e.length-1&&-1!==r||(k.current=!0),U({slideMode:t,from:Z(),to:_("prev",n),nextActiveItem:r})}function te(t="click",n){if(!c||k.current&&!m)return;I.current="next",$.current=!1;const r=n||A.current+1;if(console.log({nextItem:r}),!m){const e=Math.abs(_("next",n))>K()-J()/3;if(k.current)return;if(e)return $.current=!1,k.current=!0,void U({slideMode:t,from:Z(),to:y?K():-K(),nextActiveItem:r})}if(m&&k.current)return k.current=!1,$.current=!0,void U({slideMode:t,from:Z()+J()*e.length,to:0,nextActiveItem:0});0===r&&($.current=!0),r===e.length-1&&(k.current=!0),U({slideMode:t,from:Z(),to:_("next",n),nextActiveItem:r})}r.useEffect((()=>{if(c){if(R>e.length-1)throw new Error(`initialActiveItem (${R}) is greater than the total quantity available items (${e.length}).`);S>e.length&&console.warn(`itemsPerSlide (${S}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,S,c]),r.useEffect((()=>{E.current=window.innerWidth}),[]),r.useEffect((()=>{V()}),[T,S,m,v,h,y,g,c]),r.useLayoutEffect((()=>{W.current&&V()}),[]),r.useEffect((()=>{C.current=b||Math.floor(J()/2/2)}),[b]),r.useEffect((()=>{function e(){window.innerWidth!==E.current&&(E.current=window.innerWidth,V())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[T,S,m,v,h,y,g,c]);const ne=i.useDrag((e=>{const t=e.dragging,r=e.offset["x"===p?0:1],i=e.movement["x"===p?0:1],s=e.direction["x"===p?0:1],c=i>C.current,o=i<-C.current;if(t)return I.current=s>0?"prev":"next",D(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),y?"prev"===I.current&&r>0?(e.cancel(),void N.start({from:{val:Z()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void N.start({from:{val:Z()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(N.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(j&&o?(te("drag"),e.cancel()):j&&c&&(ee("drag"),e.cancel())));e.last&&!e.canceled&&y&&("prev"===I.current&&ee("drag"),"next"===I.current&&te("drag")),!e.last||e.canceled||y||(o?!m&&k.current?N.start({val:-K(),config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):te("drag"):c?!m&&$.current?N.start({val:0,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):ee("drag"):N.start({val:F.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}))}),{enabled:c&&!x&&!y||!!y&&!!w,axis:p,from:()=>y&&P.current?[-P.current.scrollLeft,-P.current.scrollTop]:[L.val.get(),L.val.get()]});function re(){P.current&&(F.current=P.current["x"===p?"scrollLeft":"scrollTop"],0===P.current["x"===p?"scrollLeft":"scrollTop"]&&($.current=!0,k.current=!1),P.current["x"===p?"scrollLeft":"scrollTop"]>0&&P.current["x"===p?"scrollLeft":"scrollTop"]<K()&&($.current=!1,k.current=!1),P.current["x"===p?"scrollLeft":"scrollTop"]===K()&&($.current=!1,k.current=!0))}function ie(t,n){let r=0;if(r="string"==typeof t?e.findIndex((e=>e.id===t)):t,r<0||r>=e.length){if(n)throw new Error(n);console.error(`The item doesn't exist; check that the id provided - ${t} - is correct.`),r=-1}return r}const se=y?{useListenToCustomEvent:B,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te()}:{useListenToCustomEvent:B,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te(),slideToItem:function(t){if(!c)return;$.current=!1,k.current=!1;const n=ie(t,"The item you want to slide to doesn't exist; check the provided id.");if(n===A.current)return;const r=ie(e[A.current].id),i=ie(e[n].id);i>r?te("click",i):ee("click",i)},getIsNextItem:function(t){const n=ie(t,"The item doesn't exist; check the provided id."),r=A.current;return m&&r===e.length-1?0===n:n===r+1},getIsPrevItem:function(t){const n=ie(t,"The item doesn't exist; check the provided id."),r=A.current;return m&&0===r?n===e.length-1:n===r-1},getIsActiveItem:e=>ie(e,"The item you want to check doesn't exist; check the provided id.")===A.current},ce=t.jsx(u.Provider,Object.assign({value:se},{children:z})),oe=t.jsx(u.Provider,Object.assign({value:se},{children:t.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:P},y?{onWheel(){L.val.stop(),re()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},y?"x"===p?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:W},ne(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===p?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===p?e:"100%",height:"y"===p?e:"100%"}}())},{children:[y&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null,q.map(((n,r)=>{return t.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(i=!!y&&r===e.length-1,"fixed"!==g||y?Object.assign({marginRight:`${i?0:h}px`}):{marginRight:`${i?0:h}px`,flex:`1 0 calc(100% / ${S} - ${h*(S-1)/S}px)`}))},{children:n.renderItem}),`${n.id}-${r}`);var i})),y&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}))}));return Object.assign(Object.assign({},se),{carouselFragment:oe,thumbsFragment:ce})},e.useSpringCarouselContext=function(){const e=r.useContext(u);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},e.useTransitionCarousel=function({init:e=!0,disableGestures:s=!1,items:c,springConfig:u=n.config.default,exitBeforeEnter:f=!1,trail:g,withLoop:h=!1,activeItem:m,toPrevItemSpringProps:v=a,toNextItemSpringProps:p=a,draggingSlideTreshold:x=50,thumbsSlideAxis:b="x"}){const j=r.useRef("next"),y=r.useRef("initial"),w=r.useRef(null),[T,O]=r.useState(null!=m?m:0),{emitEvent:R,useListenToCustomEvent:S}=o(),{handleScroll:E,thumbsFragment:C}=l({thumbsSlideAxis:b,items:c});function I({to:e,slideType:t,slideMode:n}){j.current=t,y.current=n,R({eventName:"onSlideStartChange",slideActionType:j.current,slideMode:y.current,nextItem:{index:e,id:c[e].id,startReached:0===e,endReached:e===c.length-1}}),O(e),E(T)}function M(t){if(!e)return;const n=0===T;!h&&n||I(h&&n?{to:c.length-1,slideType:"prev",slideMode:t}:{to:T-1,slideType:"prev",slideMode:t})}function F(t){if(!e)return;const n=T===c.length-1;!h&&n||I(h&&n?{to:0,slideType:"next",slideMode:t}:{to:T+1,slideType:"next",slideMode:t})}r.useEffect((()=>{"number"==typeof m&&m!==T&&O(m)}),[m]);const L=n.useTransition(T,Object.assign(Object.assign({config:u,key:null,trail:g,exitBeforeEnter:f},"prev"===j.current?{initial:Object.assign({},v.initial),from:Object.assign({},v.from),enter:Object.assign({},v.enter),leave:Object.assign({},v.leave)}:"next"===j.current?{initial:Object.assign({},p.initial),from:Object.assign({},p.from),enter:Object.assign({},p.enter),leave:Object.assign({},p.leave)}:{initial:Object.assign({},a.initial),from:Object.assign({},a.from),enter:Object.assign({},a.enter),leave:Object.assign({},a.leave)}),{onRest(e,t,n){e.finished&&n===T&&R({eventName:"onSlideChange",slideActionType:j.current,slideMode:y.current,currentItem:{index:T,id:c[T].id,startReached:0===T,endReached:T===c.length-1}})}})),N=i.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>x,n=t<-x,r=0===T,i=T===c.length-1;if(n){if(!h&&i)return;R({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!h&&r)return;R({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!s}),A=L(((e,r,i,s)=>t.jsx(n.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},e),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:c[r].renderItem})))),$={useListenToCustomEvent:S,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=t.jsx(d.Provider,Object.assign({value:$},{children:C})),P=t.jsx(d.Provider,Object.assign({value:$},{children:t.jsx("div",Object.assign({ref:w},N(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:A}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},e.useTransitionCarouselContext=function(){const e=r.useContext(d);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e}}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react/jsx-runtime"),require("@react-spring/web"),require("react"),require("@use-gesture/react"),require("screenfull")):"function"==typeof define&&define.amd?define(["exports","react/jsx-runtime","@react-spring/web","react","@use-gesture/react","screenfull"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactSpringCarousel={},e.ReactJSXRuntime,e.ReactSpring,e.React,e.UseGestureReact,e.Screenfull)}(this,(function(e,t,n,r,i,s){"use strict";const c="RSC::Event";function o(){const e=r.useRef(null);return{useListenToCustomEvent:function(t){r.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener(c,n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(c,n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent(c,{detail:t});e.current.dispatchEvent(n)}}}}function l({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:n}){const i=r.useRef(!1);function c(e){i.current=e}return r.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),n&&n()),document.fullscreenElement||(c(!1),t(!1),n&&n())}if(s.isEnabled)return s.on("change",e),()=>{s.isEnabled&&s.off("change",e)}}),[]),{enterFullscreen:function(t){s.isEnabled&&s.request(t||e.current)},exitFullscreen:function(){s.isEnabled&&s.exit()},getIsFullscreen:function(){return i.current}}}function u({thumbsSlideAxis:e="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=r.useRef(null),[l,u]=n.useSpring((()=>({val:0})));function a(){var t;return Math.round(Number(null===(t=o.current)||void 0===t?void 0:t["x"===e?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===e?"width":"height"])}return{thumbsFragment:i?t.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===e?"row":"column"},"x"===e?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:e,renderThumb:n})=>{const r=`thumb-item-${e}`;return t.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(t){var n,r;const i=o.current?o.current.querySelector(`#thumb-item-${c[t].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const t=i.offsetLeft,s=t>a()?a():t;u.start({from:{val:null!==(r=null===(n=o.current)||void 0===n?void 0:n["x"===e?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:s},onChange:({value:t})=>{o.current&&(o.current["x"===e?"scrollLeft":"scrollTop"]=Math.abs(t.val))}})}}}}const a=r.createContext(void 0);const d={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const f=r.createContext(void 0);e.useEventsModule=o,e.useFullscreenModule=l,e.useSpringCarousel=function({items:e,init:s=!0,withThumbs:c,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:g="fixed",gutter:h=0,withLoop:m=!1,startEndGutter:v=0,carouselSlideAxis:p="x",disableGestures:x=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:w=!1,freeScroll:j,enableFreeScrollDrag:y,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:R=0}){const E=f>e.length?e.length:f,S=r.useRef(0),C=r.useRef(null!=b?b:0),I=r.useRef("initial"),M=r.useRef("initial"),F=r.useRef(0),[L,N]=n.useSpring((()=>({val:0,pause:!s,onChange({value:e}){j&&P.current?("x"===p?P.current.scrollLeft=Math.abs(e.val):P.current.scrollTop=Math.abs(e.val),re()):W.current&&(W.current.style.transform="x"===p?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),A=r.useRef(R),$=r.useRef(0===R),k=r.useRef(!1),P=r.useRef(null),W=r.useRef(null),q=r.useCallback((()=>m?[...e.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...e,...e.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...e]),[e,m])(),{emitEvent:D,useListenToCustomEvent:z}=o(),{thumbsFragment:B,handleScroll:H}=u({withThumbs:!!c,thumbsSlideAxis:d,prepareThumbsData:O,items:e}),{enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y}=l({mainCarouselWrapperRef:P,handleResize:()=>{console.log("resize"),V()},onFullScreenChange:e=>{D({eventName:"onFullscreenChange",isFullscreen:e})}});function J(){var e;const t=null===(e=P.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+h}function U({from:t,to:r,nextActiveItem:i,immediate:s=!1,slideMode:o}){M.current=o,"number"==typeof i&&(j||(A.current=i),D({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:M.current,nextItem:{startReached:$.current,endReached:k.current,index:j?-1:A.current,id:j?"":e[A.current].id}})),F.current=r,N.start({immediate:s,from:{val:t},to:{val:r},config:Object.assign(Object.assign({},n.config.default),{velocity:L.val.velocity}),onRest(t){!s&&t.finished&&D({eventName:"onSlideChange",slideActionType:I.current,slideMode:M.current,currentItem:{startReached:$.current,endReached:k.current,index:j?-1:A.current,id:j?"":e[A.current].id}})}}),c&&!s&&H(A.current)}function K(){var t;return m?J()*e.length:Math.round(Number(null===(t=W.current)||void 0===t?void 0:t["x"===p?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===p?"width":"height"]-2*v)}function Q(){var e;const t=null===(e=W.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+h}function V(){const t="x"===p?"left":"top";function n(e){const n=W.current;n&&(m?(n.style.top="0px",n.style.left="0px",n.style[t]=`-${e-v}px`):(n.style.left="0px",n.style.top="0px"))}const r=Math.abs(Z());if(r<K()&&k.current&&!m&&(k.current=!1),r>K()&&!m){const e=-K();return k.current=!0,F.current=e,void N.start({immediate:!0,val:e})}if(n("center"===T?Q()*e.length-J()*Math.round((E-1)/2):"end"===T?Q()*e.length-J()*Math.round(E-1):Q()*e.length),!j&&"fixed"===g){const e=-J()*A.current;F.current=e,N.start({immediate:!0,val:e})}}function Z(){return j&&P.current?P.current["x"===p?"scrollLeft":"scrollTop"]:L.val.get()}function _(e,t){if(j&&"next"===e){const e=F.current+J();return e>K()?K():e}if(j&&"prev"===e){const e=F.current-J();return e<0?0:e}return"next"===e?t?-t*J():F.current-J():t?-t*J():F.current+J()}function ee(t="click",n){if(!s||$.current&&!m)return;I.current="prev",k.current=!1;const r=n||A.current-1;if(!m){const e=j?_("prev",n)-J()/3<0:_("prev",n)+J()/3>0;if($.current)return;if(e)return $.current=!0,k.current=!1,void U({slideMode:t,from:Z(),to:0,nextActiveItem:0})}if(m&&$.current)return $.current=!1,k.current=!0,void U({slideMode:t,from:Z()-J()*e.length,to:-J()*e.length+J(),nextActiveItem:e.length-1});0===r&&($.current=!0),r!==e.length-1&&-1!==r||(k.current=!0),U({slideMode:t,from:Z(),to:_("prev",n),nextActiveItem:r})}function te(t="click",n){if(!s||k.current&&!m)return;I.current="next",$.current=!1;const r=n||A.current+1;if(console.log({nextItem:r}),!m){const e=Math.abs(_("next",n))>K()-J()/3;if(k.current)return;if(e)return $.current=!1,k.current=!0,void U({slideMode:t,from:Z(),to:j?K():-K(),nextActiveItem:r})}if(m&&k.current)return k.current=!1,$.current=!0,void U({slideMode:t,from:Z()+J()*e.length,to:0,nextActiveItem:0});0===r&&($.current=!0),r===e.length-1&&(k.current=!0),U({slideMode:t,from:Z(),to:_("next",n),nextActiveItem:r})}r.useEffect((()=>{if(s){if(R>e.length-1)throw new Error(`initialActiveItem (${R}) is greater than the total quantity available items (${e.length}).`);E>e.length&&console.warn(`itemsPerSlide (${E}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,E,s]),r.useEffect((()=>{S.current=window.innerWidth}),[]),r.useEffect((()=>{V()}),[T,E,m,v,h,j,g,s]),r.useLayoutEffect((()=>{W.current&&V()}),[]),r.useEffect((()=>{C.current=b||Math.floor(J()/2/2)}),[b]),r.useEffect((()=>{function e(){window.innerWidth!==S.current&&(S.current=window.innerWidth,V())}if("ResizeObserver"in window&&P.current){const e=new ResizeObserver((()=>{S.current=window.innerWidth,V()}));return e.observe(P.current),()=>{e.disconnect()}}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[p,T,E,m,v,h,j,g,s]);const ne=i.useDrag((e=>{const t=e.dragging,r=e.offset["x"===p?0:1],i=e.movement["x"===p?0:1],s=e.direction["x"===p?0:1],c=i>C.current,o=i<-C.current;if(t)return I.current=s>0?"prev":"next",D(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),j?"prev"===I.current&&r>0?(e.cancel(),void N.start({from:{val:Z()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void N.start({from:{val:Z()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(N.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(w&&o?(te("drag"),e.cancel()):w&&c&&(ee("drag"),e.cancel())));e.last&&!e.canceled&&j&&("prev"===I.current&&ee("drag"),"next"===I.current&&te("drag")),!e.last||e.canceled||j||(o?!m&&k.current?N.start({val:-K(),config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):te("drag"):c?!m&&$.current?N.start({val:0,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):ee("drag"):N.start({val:F.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}))}),{enabled:s&&!x&&!j||!!j&&!!y,axis:p,from:()=>j&&P.current?[-P.current.scrollLeft,-P.current.scrollTop]:[L.val.get(),L.val.get()]});function re(){P.current&&(F.current=P.current["x"===p?"scrollLeft":"scrollTop"],0===P.current["x"===p?"scrollLeft":"scrollTop"]&&($.current=!0,k.current=!1),P.current["x"===p?"scrollLeft":"scrollTop"]>0&&P.current["x"===p?"scrollLeft":"scrollTop"]<K()&&($.current=!1,k.current=!1),P.current["x"===p?"scrollLeft":"scrollTop"]===K()&&($.current=!1,k.current=!0))}function ie(t,n){let r=0;if(r="string"==typeof t?e.findIndex((e=>e.id===t)):t,r<0||r>=e.length){if(n)throw new Error(n);console.error(`The item doesn't exist; check that the id provided - ${t} - is correct.`),r=-1}return r}const se=j?{useListenToCustomEvent:z,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te()}:{useListenToCustomEvent:z,enterFullscreen:G,exitFullscreen:X,getIsFullscreen:Y,slideToPrevItem:()=>ee(),slideToNextItem:()=>te(),slideToItem:function(t){if(!s)return;$.current=!1,k.current=!1;const n=ie(t,"The item you want to slide to doesn't exist; check the provided id.");if(n===A.current)return;const r=ie(e[A.current].id),i=ie(e[n].id);i>r?te("click",i):ee("click",i)},getIsNextItem:function(t){const n=ie(t,"The item doesn't exist; check the provided id."),r=A.current;return m&&r===e.length-1?0===n:n===r+1},getIsPrevItem:function(t){const n=ie(t,"The item doesn't exist; check the provided id."),r=A.current;return m&&0===r?n===e.length-1:n===r-1},getIsActiveItem:function(e){return ie(e,"The item you want to check doesn't exist; check the provided id.")===A.current}},ce=t.jsx(a.Provider,Object.assign({value:se},{children:B})),oe=t.jsx(a.Provider,Object.assign({value:se},{children:t.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:P},j?{onWheel(){L.val.stop(),re()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},j?"x"===p?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:W},ne(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===p?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===p?e:"100%",height:"y"===p?e:"100%"}}())},{children:[j&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null,q.map(((n,r)=>{return t.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(i=!!j&&r===e.length-1,"fixed"!==g||j?Object.assign({marginRight:`${i?0:h}px`}):{marginRight:`${i?0:h}px`,flex:`1 0 calc(100% / ${E} - ${h*(E-1)/E}px)`}))},{children:n.renderItem}),`${n.id}-${r}`);var i})),j&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}))}));return Object.assign(Object.assign({},se),{carouselFragment:oe,thumbsFragment:ce})},e.useSpringCarouselContext=function(){const e=r.useContext(a);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},e.useThumbsModule=u,e.useTransitionCarousel=function({init:e=!0,disableGestures:s=!1,items:c,springConfig:l=n.config.default,exitBeforeEnter:a=!1,trail:g,withLoop:h=!1,activeItem:m,toPrevItemSpringProps:v=d,toNextItemSpringProps:p=d,draggingSlideTreshold:x=50,thumbsSlideAxis:b="x"}){const w=r.useRef("next"),j=r.useRef("initial"),y=r.useRef(null),[T,O]=r.useState(null!=m?m:0),{emitEvent:R,useListenToCustomEvent:E}=o(),{handleScroll:S,thumbsFragment:C}=u({thumbsSlideAxis:b,items:c});function I({to:e,slideType:t,slideMode:n}){w.current=t,j.current=n,R({eventName:"onSlideStartChange",slideActionType:w.current,slideMode:j.current,nextItem:{index:e,id:c[e].id,startReached:0===e,endReached:e===c.length-1}}),O(e),S(T)}function M(t){if(!e)return;const n=0===T;!h&&n||I(h&&n?{to:c.length-1,slideType:"prev",slideMode:t}:{to:T-1,slideType:"prev",slideMode:t})}function F(t){if(!e)return;const n=T===c.length-1;!h&&n||I(h&&n?{to:0,slideType:"next",slideMode:t}:{to:T+1,slideType:"next",slideMode:t})}r.useEffect((()=>{"number"==typeof m&&m!==T&&O(m)}),[m]);const L=n.useTransition(T,Object.assign(Object.assign({config:l,key:null,trail:g,exitBeforeEnter:a},"prev"===w.current?{initial:Object.assign({},v.initial),from:Object.assign({},v.from),enter:Object.assign({},v.enter),leave:Object.assign({},v.leave)}:"next"===w.current?{initial:Object.assign({},p.initial),from:Object.assign({},p.from),enter:Object.assign({},p.enter),leave:Object.assign({},p.leave)}:{initial:Object.assign({},d.initial),from:Object.assign({},d.from),enter:Object.assign({},d.enter),leave:Object.assign({},d.leave)}),{onRest(e,t,n){e.finished&&n===T&&R({eventName:"onSlideChange",slideActionType:w.current,slideMode:j.current,currentItem:{index:T,id:c[T].id,startReached:0===T,endReached:T===c.length-1}})}})),N=i.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>x,n=t<-x,r=0===T,i=T===c.length-1;if(n){if(!h&&i)return;R({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!h&&r)return;R({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!s}),A=L(((e,r,i,s)=>t.jsx(n.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},e),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:c[r].renderItem})))),$={useListenToCustomEvent:E,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=t.jsx(f.Provider,Object.assign({value:$},{children:C})),P=t.jsx(f.Provider,Object.assign({value:$},{children:t.jsx("div",Object.assign({ref:y},N(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:A}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},e.useTransitionCarouselContext=function(){const e=r.useContext(f);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e}}));
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/useTransitionCarousel.tsx","../../src/modules/useFullscreenModule.ts"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange<T> = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange<T> = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype OnLeftSwipe = {\n eventName: 'onLeftSwipe'\n}\n\ntype OnRightSwipe = {\n eventName: 'onRightSwipe'\n}\n\ntype SpringCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnDrag\n | OnFullscreenChange\n\ntype TransitionCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnFullscreenChange\n | OnLeftSwipe\n | OnRightSwipe\n\ntype Events<T> = T extends 'use-spring'\n ? SpringCarouselEvents<'use-spring'>\n : TransitionCarouselEvents<'use-transition'>\n\ntype EventHandler<T> = (props: Events<T>) => void\n\nexport type UseListenToCustomEvent<T> = {\n useListenToCustomEvent: (eventHandler: EventHandler<T>) => void\n emitEvent: (event: Events<T>) => void\n}\n\nexport function useEventsModule<T extends 'use-spring' | 'use-transition'>() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\n if (!targetEvent.current) {\n targetEvent.current = document.createElement('div')\n }\n\n function handleEvent(event: CustomEvent<Events<T>>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [eventHandler])\n }\n function emitEvent(event: Events<T>) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\n\nimport { ItemWithThumb, PrepareThumbsData, SpringCarouselWithThumbs } from '../types'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: ItemWithThumb[]\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n","import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem: (id: string | number) => {\n return (\n findItemIndex(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n },\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState, createContext, useContext } from 'react'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useThumbsModule } from './modules'\nimport {\n ItemWithThumb,\n UseTransitionCarouselProps,\n UseTransitionCarouselReturnProps,\n SlideActionType,\n TransitionSlideMode,\n} from './types'\n\nconst defaultAnimationProps = {\n initial: {\n opacity: 1,\n position: 'relative',\n },\n from: {\n opacity: 0,\n position: 'relative',\n },\n enter: {\n position: 'relative',\n opacity: 1,\n },\n leave: {\n opacity: 1,\n position: 'absolute',\n },\n}\n\nfunction useTransitionCarousel({\n init = true,\n disableGestures = false,\n items,\n springConfig = config.default,\n exitBeforeEnter = false,\n trail,\n withLoop = false,\n activeItem: externalActiveItem,\n toPrevItemSpringProps = defaultAnimationProps,\n toNextItemSpringProps = defaultAnimationProps,\n draggingSlideTreshold = 50,\n thumbsSlideAxis = 'x',\n}: UseTransitionCarouselProps): UseTransitionCarouselReturnProps {\n const slideActionType = useRef<SlideActionType>('next')\n const slideModeType = useRef<TransitionSlideMode>('initial')\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const [activeItem, setActiveItem] = useState(externalActiveItem ?? 0)\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-transition'>()\n const { handleScroll, thumbsFragment } = useThumbsModule({\n thumbsSlideAxis,\n items: items as ItemWithThumb[],\n })\n\n function getConfig() {\n if (slideActionType.current === 'prev') {\n return {\n initial: {\n ...toPrevItemSpringProps.initial,\n },\n from: {\n ...toPrevItemSpringProps.from,\n },\n enter: {\n ...toPrevItemSpringProps.enter,\n },\n leave: {\n ...toPrevItemSpringProps.leave,\n },\n }\n }\n if (slideActionType.current === 'next') {\n return {\n initial: {\n ...toNextItemSpringProps.initial,\n },\n from: {\n ...toNextItemSpringProps.from,\n },\n enter: {\n ...toNextItemSpringProps.enter,\n },\n leave: {\n ...toNextItemSpringProps.leave,\n },\n }\n }\n return {\n initial: {\n ...defaultAnimationProps.initial,\n },\n from: {\n ...defaultAnimationProps.from,\n },\n enter: {\n ...defaultAnimationProps.enter,\n },\n leave: {\n ...defaultAnimationProps.leave,\n },\n }\n }\n\n useEffect(() => {\n if (typeof externalActiveItem === 'number' && externalActiveItem !== activeItem) {\n setActiveItem(externalActiveItem)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalActiveItem])\n\n type SlideToItem = {\n to: number\n slideType: SlideActionType\n slideMode: TransitionSlideMode\n }\n\n function slideToItem({ to, slideType, slideMode }: SlideToItem) {\n slideActionType.current = slideType\n slideModeType.current = slideMode\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n index: to,\n id: items[to].id,\n startReached: to === 0,\n endReached: to === items.length - 1,\n },\n })\n setActiveItem(to)\n handleScroll(activeItem)\n }\n\n function slideToPrevItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isFirstItem = activeItem === 0\n\n if (!withLoop && isFirstItem) return\n\n if (withLoop && isFirstItem) {\n slideToItem({\n to: items.length - 1,\n slideType: 'prev',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem - 1,\n slideType: 'prev',\n slideMode,\n })\n }\n }\n function slideToNextItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isLastItem = activeItem === items.length - 1\n\n if (!withLoop && isLastItem) return\n\n if (withLoop && isLastItem) {\n slideToItem({\n to: 0,\n slideType: 'next',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem + 1,\n slideType: 'next',\n slideMode,\n })\n }\n }\n\n const transitions = useTransition(activeItem, {\n config: springConfig,\n key: null,\n trail,\n exitBeforeEnter,\n ...getConfig(),\n onRest(value, _, index) {\n if (value.finished && index === activeItem) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n index: activeItem,\n id: items[activeItem].id,\n startReached: activeItem === 0,\n endReached: activeItem === items.length - 1,\n },\n })\n }\n },\n })\n\n const bindSwipe = useDrag(\n ({ last, movement: [mx] }) => {\n if (last) {\n const prevItemTreshold = mx > draggingSlideTreshold\n const nextItemTreshold = mx < -draggingSlideTreshold\n const isFirstItem = activeItem === 0\n const isLastItem = activeItem === items.length - 1\n\n if (nextItemTreshold) {\n if (!withLoop && isLastItem) return\n\n emitEvent({\n eventName: 'onLeftSwipe',\n })\n slideToNextItem('swipe')\n } else if (prevItemTreshold) {\n if (!withLoop && isFirstItem) return\n\n emitEvent({\n eventName: 'onRightSwipe',\n })\n slideToPrevItem('swipe')\n }\n }\n },\n {\n enabled: !disableGestures,\n },\n )\n\n const itemsFragment = transitions((styles, item, _, indx) => {\n return (\n <a.div\n id={`use-transition-carousel-item-${indx}`}\n className=\"use-transition-carousel-item\"\n style={{\n ...styles,\n flex: '1 0 100%',\n width: '100%',\n height: '100%',\n }}\n >\n {items[item].renderItem}\n </a.div>\n )\n })\n\n const res = {\n useListenToCustomEvent,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n ref={mainCarouselWrapperRef}\n {...bindSwipe()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n {itemsFragment}\n </div>\n </Context.Provider>\n )\n\n return {\n ...res,\n carouselFragment,\n thumbsFragment: _thumbsFragment,\n }\n}\n\ntype ContextProps = Omit<\n UseTransitionCarouselReturnProps,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | undefined>(undefined)\n\nfunction useTransitionCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useTransitionCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useTransitionCarousel, useTransitionCarouselContext }\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n handleResize?(): void\n onFullScreenChange(isFullscreen: boolean): void\n}\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"],"names":["eventLabel","useEventsModule","targetEvent","useRef","useListenToCustomEvent","eventHandler","useEffect","handleEvent","event","detail","current","document","createElement","addEventListener","_a","removeEventListener","emitEvent","newEvent","CustomEvent","dispatchEvent","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","getBoundingClientRect","thumbsFragment","_jsx","jsx","Object","assign","className","ref","onWheel","stop","style","display","flex","position","width","height","flexDirection","overflowX","overflowY","maxHeight","children","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsData","thumbId","handleScroll","activeItem","thumbNode","querySelector","el","rect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","defaultAnimationProps","initial","opacity","enter","leave","init","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","initialActiveItem","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","pause","mainCarouselWrapperRef","scrollLeft","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","transform","firstItemReached","lastItemReached","internalItems","useCallback","getItems","enterFullscreen","exitFullscreen","getIsFullscreen","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","elementRef","request","exit","useFullscreenModule","console","log","adjustCarouselWrapperPosition","eventName","getSlideValue","carouselItem","Error","slideToItem","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","config","default","velocity","onRest","finished","currentItem","getCarouselItemWidth","positionProperty","setPosition","v","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","warn","useLayoutEffect","floor","bindDrag","useDrag","state","isDragging","dragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","Provider","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","context","useContext","springConfig","exitBeforeEnter","trail","externalActiveItem","toPrevItemSpringProps","toNextItemSpringProps","setActiveItem","useState","isFirstItem","transitions","useTransition","key","_","bindSwipe","mx","itemsFragment","styles","indx","a","div","overflow"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/useTransitionCarousel.tsx"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange<T> = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange<T> = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype OnLeftSwipe = {\n eventName: 'onLeftSwipe'\n}\n\ntype OnRightSwipe = {\n eventName: 'onRightSwipe'\n}\n\ntype SpringCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnDrag\n | OnFullscreenChange\n\ntype TransitionCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnFullscreenChange\n | OnLeftSwipe\n | OnRightSwipe\n\ntype Events<T> = T extends 'use-spring'\n ? SpringCarouselEvents<'use-spring'>\n : TransitionCarouselEvents<'use-transition'>\n\ntype EventHandler<T> = (props: Events<T>) => void\n\nexport type UseListenToCustomEvent<T> = {\n useListenToCustomEvent: (eventHandler: EventHandler<T>) => void\n emitEvent: (event: Events<T>) => void\n}\n\nexport function useEventsModule<T extends 'use-spring' | 'use-transition'>() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\n if (!targetEvent.current) {\n targetEvent.current = document.createElement('div')\n }\n\n function handleEvent(event: CustomEvent<Events<T>>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [eventHandler])\n }\n function emitEvent(event: Events<T>) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n handleResize?(): void\n onFullScreenChange(isFullscreen: boolean): void\n}\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 { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\n\nimport { ItemWithThumb, PrepareThumbsData, SpringCarouselWithThumbs } from '../types'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: ItemWithThumb[]\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n","import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\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(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): 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}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\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 const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\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 { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => {\n console.log('resize')\n adjustCarouselWrapperPosition()\n },\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\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: 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\n function getTotalScrollValue() {\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 }\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 function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\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 } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (\n currentFromValue < getTotalScrollValue() &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\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 -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\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 (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\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 })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\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 })\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 })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n console.log({ nextItem })\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 })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\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 })\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 })\n }\n\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n if ('ResizeObserver' in window && mainCarouselWrapperRef.current) {\n const observer = new ResizeObserver(() => {\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n } else {\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n carouselSlideAxis,\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\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\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\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\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('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\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('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('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 },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\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\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n 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\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(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) 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) {\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('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\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(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\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: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && 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(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && 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 =\n 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","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState, createContext, useContext } from 'react'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useThumbsModule } from './modules'\nimport {\n ItemWithThumb,\n UseTransitionCarouselProps,\n UseTransitionCarouselReturnProps,\n SlideActionType,\n TransitionSlideMode,\n} from './types'\n\nconst defaultAnimationProps = {\n initial: {\n opacity: 1,\n position: 'relative',\n },\n from: {\n opacity: 0,\n position: 'relative',\n },\n enter: {\n position: 'relative',\n opacity: 1,\n },\n leave: {\n opacity: 1,\n position: 'absolute',\n },\n}\n\nfunction useTransitionCarousel({\n init = true,\n disableGestures = false,\n items,\n springConfig = config.default,\n exitBeforeEnter = false,\n trail,\n withLoop = false,\n activeItem: externalActiveItem,\n toPrevItemSpringProps = defaultAnimationProps,\n toNextItemSpringProps = defaultAnimationProps,\n draggingSlideTreshold = 50,\n thumbsSlideAxis = 'x',\n}: UseTransitionCarouselProps): UseTransitionCarouselReturnProps {\n const slideActionType = useRef<SlideActionType>('next')\n const slideModeType = useRef<TransitionSlideMode>('initial')\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const [activeItem, setActiveItem] = useState(externalActiveItem ?? 0)\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-transition'>()\n const { handleScroll, thumbsFragment } = useThumbsModule({\n thumbsSlideAxis,\n items: items as ItemWithThumb[],\n })\n\n function getConfig() {\n if (slideActionType.current === 'prev') {\n return {\n initial: {\n ...toPrevItemSpringProps.initial,\n },\n from: {\n ...toPrevItemSpringProps.from,\n },\n enter: {\n ...toPrevItemSpringProps.enter,\n },\n leave: {\n ...toPrevItemSpringProps.leave,\n },\n }\n }\n if (slideActionType.current === 'next') {\n return {\n initial: {\n ...toNextItemSpringProps.initial,\n },\n from: {\n ...toNextItemSpringProps.from,\n },\n enter: {\n ...toNextItemSpringProps.enter,\n },\n leave: {\n ...toNextItemSpringProps.leave,\n },\n }\n }\n return {\n initial: {\n ...defaultAnimationProps.initial,\n },\n from: {\n ...defaultAnimationProps.from,\n },\n enter: {\n ...defaultAnimationProps.enter,\n },\n leave: {\n ...defaultAnimationProps.leave,\n },\n }\n }\n\n useEffect(() => {\n if (typeof externalActiveItem === 'number' && externalActiveItem !== activeItem) {\n setActiveItem(externalActiveItem)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalActiveItem])\n\n type SlideToItem = {\n to: number\n slideType: SlideActionType\n slideMode: TransitionSlideMode\n }\n\n function slideToItem({ to, slideType, slideMode }: SlideToItem) {\n slideActionType.current = slideType\n slideModeType.current = slideMode\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n index: to,\n id: items[to].id,\n startReached: to === 0,\n endReached: to === items.length - 1,\n },\n })\n setActiveItem(to)\n handleScroll(activeItem)\n }\n\n function slideToPrevItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isFirstItem = activeItem === 0\n\n if (!withLoop && isFirstItem) return\n\n if (withLoop && isFirstItem) {\n slideToItem({\n to: items.length - 1,\n slideType: 'prev',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem - 1,\n slideType: 'prev',\n slideMode,\n })\n }\n }\n function slideToNextItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isLastItem = activeItem === items.length - 1\n\n if (!withLoop && isLastItem) return\n\n if (withLoop && isLastItem) {\n slideToItem({\n to: 0,\n slideType: 'next',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem + 1,\n slideType: 'next',\n slideMode,\n })\n }\n }\n\n const transitions = useTransition(activeItem, {\n config: springConfig,\n key: null,\n trail,\n exitBeforeEnter,\n ...getConfig(),\n onRest(value, _, index) {\n if (value.finished && index === activeItem) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n index: activeItem,\n id: items[activeItem].id,\n startReached: activeItem === 0,\n endReached: activeItem === items.length - 1,\n },\n })\n }\n },\n })\n\n const bindSwipe = useDrag(\n ({ last, movement: [mx] }) => {\n if (last) {\n const prevItemTreshold = mx > draggingSlideTreshold\n const nextItemTreshold = mx < -draggingSlideTreshold\n const isFirstItem = activeItem === 0\n const isLastItem = activeItem === items.length - 1\n\n if (nextItemTreshold) {\n if (!withLoop && isLastItem) return\n\n emitEvent({\n eventName: 'onLeftSwipe',\n })\n slideToNextItem('swipe')\n } else if (prevItemTreshold) {\n if (!withLoop && isFirstItem) return\n\n emitEvent({\n eventName: 'onRightSwipe',\n })\n slideToPrevItem('swipe')\n }\n }\n },\n {\n enabled: !disableGestures,\n },\n )\n\n const itemsFragment = transitions((styles, item, _, indx) => {\n return (\n <a.div\n id={`use-transition-carousel-item-${indx}`}\n className=\"use-transition-carousel-item\"\n style={{\n ...styles,\n flex: '1 0 100%',\n width: '100%',\n height: '100%',\n }}\n >\n {items[item].renderItem}\n </a.div>\n )\n })\n\n const res = {\n useListenToCustomEvent,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n ref={mainCarouselWrapperRef}\n {...bindSwipe()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n {itemsFragment}\n </div>\n </Context.Provider>\n )\n\n return {\n ...res,\n carouselFragment,\n thumbsFragment: _thumbsFragment,\n }\n}\n\ntype ContextProps = Omit<\n UseTransitionCarouselReturnProps,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | undefined>(undefined)\n\nfunction useTransitionCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useTransitionCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useTransitionCarousel, useTransitionCarouselContext }\n"],"names":["eventLabel","useEventsModule","targetEvent","useRef","useListenToCustomEvent","eventHandler","useEffect","handleEvent","event","detail","current","document","createElement","addEventListener","_a","removeEventListener","emitEvent","newEvent","CustomEvent","dispatchEvent","useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","enterFullscreen","elementRef","request","exitFullscreen","exit","getIsFullscreen","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","getBoundingClientRect","thumbsFragment","_jsx","jsx","Object","assign","className","ref","onWheel","stop","style","display","flex","position","width","height","flexDirection","overflowX","overflowY","maxHeight","children","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsData","thumbId","handleScroll","activeItem","thumbNode","querySelector","el","rect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","defaultAnimationProps","initial","opacity","enter","leave","init","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","initialActiveItem","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","pause","scrollLeft","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","transform","firstItemReached","lastItemReached","internalItems","useCallback","getItems","console","log","adjustCarouselWrapperPosition","eventName","getSlideValue","carouselItem","Error","slideToItem","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","config","default","velocity","onRest","finished","currentItem","getCarouselItemWidth","positionProperty","setPosition","v","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","warn","useLayoutEffect","floor","observer","ResizeObserver","observe","disconnect","bindDrag","useDrag","state","isDragging","dragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","res","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","_thumbsFragment","Provider","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","context","useContext","springConfig","exitBeforeEnter","trail","externalActiveItem","toPrevItemSpringProps","toNextItemSpringProps","setActiveItem","useState","isFirstItem","transitions","useTransition","key","_","bindSwipe","mx","itemsFragment","styles","indx","a","div","overflow"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-spring-carousel",
3
- "version": "3.0.0-beta026",
3
+ "version": "3.0.0-beta028",
4
4
  "description": "A new <Carousel /> experience for the web",
5
5
  "homepage": "https://react-spring-carousel.emilianobucci.com",
6
6
  "repository": "https://github.com/Emiliano-Bucci/react-spring-carousel",