react-spring-carousel 3.0.0-beta015 → 3.0.0-beta016
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 +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),t=require("@react-spring/web"),r=require("react"),n=require("@use-gesture/react"),i=require("screenfull");function c({thumbsSlideAxis:n="x",withThumbs:i=!1,prepareThumbsData:c,items:u}){const s=r.useRef(null),[l,o]=t.useSpring((()=>({val:0})));function a(){var e;return Math.round(Number(null===(e=s.current)||void 0===e?void 0:e["x"===n?"scrollWidth":"scrollHeight"])-s.current.getBoundingClientRect()["x"===n?"width":"height"])}return{thumbsFragment:i?e.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:s,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===n?"row":"column"},"x"===n?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return c?c(e(u)):e(u)}().map((({id:t,renderThumb:r})=>{const n=`thumb-item-${t}`;return e.jsx("div",Object.assign({id:n,className:"thumb-item"},{children:r}),n)}))})):null,handleScroll:function(e){var t,r;const i=s.current?s.current.querySelector(`#thumb-item-${u[e].id}`):null;if(i&&s.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,c=e>a()?a():e;o.start({from:{val:null!==(r=null===(t=s.current)||void 0===t?void 0:t["x"===n?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:c},onChange:({value:e})=>{s.current&&(s.current["x"===n?"scrollLeft":"scrollTop"]=Math.abs(e.val))}})}}}}const u=r.createContext(void 0);exports.useSpringCarousel=function({items:u,init:s=!0,withThumbs:l,thumbsSlideAxis:o="x",itemsPerSlide:a=1,slideType:d="fixed",gutter:f=0,withLoop:h=!1,startEndGutter:v=0,carouselSlideAxis:g="x",disableGestures:m=!1,draggingSlideTreshold:x,slideWhenThresholdIsReached:p=!1,freeScroll:b,enableFreeScrollDrag:w,initialStartingPosition:y,prepareThumbsData:E,initialActiveItem:T=0}){const R=a>u.length?u.length:a,j=r.useRef(0),C=r.useRef(null!=x?x:0),S=r.useRef("initial"),I=r.useRef("initial"),F=r.useRef(0),[O,L]=t.useSpring((()=>({val:0,pause:!s,onChange({value:e}){b&&k.current?("x"===g?k.current.scrollLeft=Math.abs(e.val):k.current.scrollTop=Math.abs(e.val),te()):N.current&&(N.current.style.transform="x"===g?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),$=r.useRef(T),M=r.useRef(0===T),A=r.useRef(!1),k=r.useRef(null),N=r.useRef(null),W=r.useCallback((()=>h?[...u.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...u,...u.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...u]),[u,h])(),{emitEvent:q,useListenToCustomEvent:D}=function(){const e=r.useRef(null);return r.useEffect((()=>{e.current=document.createElement("div")}),[]),{useListenToCustomEvent:function(t){r.useEffect((()=>{function r(e){t(e.detail)}if(e.current)return e.current.addEventListener("RSC::Event",r,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener("RSC::Event",r,!1)}}),[])},emitEvent:function(t){if(e.current){const r=new CustomEvent("RSC::Event",{detail:t});e.current.dispatchEvent(r)}}}}(),{thumbsFragment:P,handleScroll:B}=c({withThumbs:!!l,thumbsSlideAxis:o,prepareThumbsData:E,items:u}),{enterFullscreen:H,exitFullscreen:z,getIsFullscreen:G}=function({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:n}){const c=r.useRef(!1);function u(e){c.current=e}return r.useEffect((()=>{function e(){document.fullscreenElement&&(u(!0),t(!0),n&&n()),document.fullscreenElement||(u(!1),t(!1),n&&n())}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 c.current}}}({mainCarouselWrapperRef:k,handleResize:()=>Q(),onFullScreenChange:e=>{q({eventName:"onFullscreenChange",isFullscreen:e})}});function X(){var e;const t=null===(e=k.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===g?"width":"height"]+f}function Y({from:e,to:r,nextActiveItem:n,immediate:i=!1,slideMode:c}){I.current=c,"number"==typeof n&&(b||($.current=n),q({eventName:"onSlideStartChange",slideActionType:S.current,slideMode:I.current,nextItem:{startReached:M.current,endReached:A.current,index:b?-1:$.current,id:b?"":u[$.current].id}})),F.current=r,L.start({immediate:i,from:{val:e},to:{val:r},config:Object.assign(Object.assign({},t.config.default),{velocity:O.val.velocity}),onRest(e){!i&&e.finished&&q({eventName:"onSlideChange",slideActionType:S.current,slideMode:I.current,currentItem:{startReached:M.current,endReached:A.current,index:b?-1:$.current,id:b?"":u[$.current].id}})}}),l&&!i&&B($.current)}function J(){var e;return h?X()*u.length:Math.round(Number(null===(e=N.current)||void 0===e?void 0:e["x"===g?"scrollWidth":"scrollHeight"])-N.current.getBoundingClientRect()["x"===g?"width":"height"]-2*v)}function K(){var e;const t=null===(e=N.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===g?"width":"height"]+f}function Q(){const e="x"===g?"left":"top";function t(t){const r=N.current;r&&(h?(r.style.top="0px",r.style.left="0px",r.style[e]=`-${t-v}px`):(r.style.left="0px",r.style.top="0px"))}const r=Math.abs(U());if(r<J()&&A.current&&(A.current=!1),r>J()){const e=-J();return A.current=!0,F.current=e,void L.start({immediate:!0,val:e})}if(t("center"===y?K()*u.length-X()*Math.round((R-1)/2):"end"===y?K()*u.length-X()*Math.round(R-1):K()*u.length),!b&&"fixed"===d){const e=-X()*$.current;F.current=e,L.start({immediate:!0,val:e})}}function U(){return b&&k.current?k.current["x"===g?"scrollLeft":"scrollTop"]:O.val.get()}function V(e,t){if(b&&"next"===e){const e=F.current+X();return e>J()?J():e}if(b&&"prev"===e){const e=F.current-X();return e<0?0:e}return"next"===e?t?-t*X():F.current-X():t?-t*X():F.current+X()}function Z(e="click",t){if(!s||M.current&&!h)return;S.current="prev",A.current=!1;const r=t||$.current-1;if(!h){const r=b?V("prev",t)-X()/3<0:V("prev",t)+X()/3>0;if(M.current)return;if(r)return M.current=!0,A.current=!1,void Y({slideMode:e,from:U(),to:0,nextActiveItem:0})}if(h&&M.current)return M.current=!1,A.current=!0,void Y({slideMode:e,from:U()-X()*u.length,to:-X()*u.length+X(),nextActiveItem:u.length-1});0===r&&(M.current=!0),r!==u.length-1&&-1!==r||(A.current=!0),Y({slideMode:e,from:U(),to:V("prev",t),nextActiveItem:r})}function _(e="click",t){if(!s||A.current&&!h)return;S.current="next",M.current=!1;const r=t||$.current+1;if(!h){const n=Math.abs(V("next",t))>J()-X()/3;if(A.current)return;if(n)return M.current=!1,A.current=!0,void Y({slideMode:e,from:U(),to:b?J():-J(),nextActiveItem:r})}if(h&&A.current)return A.current=!1,M.current=!0,void Y({slideMode:e,from:U()+X()*u.length,to:0,nextActiveItem:0});0===r&&(M.current=!0),r===u.length-1&&(A.current=!0),Y({slideMode:e,from:U(),to:V("next",t),nextActiveItem:r})}r.useEffect((()=>{if(s){if(T>u.length-1)throw new Error(`initialActiveItem (${T}) is greater than the total quantity available items (${u.length}).`);R>u.length&&console.warn(`itemsPerSlide (${R}) is greater than the total quantity available items (${u.length}). Fallback to ${u.length})`)}}),[T,u,R,s]),r.useEffect((()=>{j.current=window.innerWidth}),[]),r.useEffect((()=>{Q()}),[y,R,h,v,f,b,d,s]),r.useLayoutEffect((()=>{N.current&&Q()}),[]),r.useEffect((()=>{C.current=x||Math.floor(X()/2/2)}),[x]),r.useEffect((()=>{function e(){window.innerWidth!==j.current&&(j.current=window.innerWidth,Q())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]);const ee=n.useDrag((e=>{const r=e.dragging,n=e.offset["x"===g?0:1],i=e.movement["x"===g?0:1],c=e.direction["x"===g?0:1],u=i>C.current,s=i<-C.current;if(r)return S.current=c>0?"prev":"next",q(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:S.current})),b?"prev"===S.current&&n>0?(e.cancel(),void L.start({from:{val:U()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void L.start({from:{val:U()},to:{val:-n},config:{velocity:e.velocity,friction:50,tension:1e3}}):(L.start({val:n,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(p&&s?(_("drag"),e.cancel()):p&&u&&(Z("drag"),e.cancel())));e.last&&!e.canceled&&b&&("prev"===S.current&&Z("drag"),"next"===S.current&&_("drag")),!e.last||e.canceled||b||(s?!h&&A.current?L.start({val:-J(),config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):_("drag"):u?!h&&M.current?L.start({val:0,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):Z("drag"):L.start({val:F.current,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}))}),{enabled:s&&!m&&!b||!!b&&!!w,axis:g,from:()=>b&&k.current?[-k.current.scrollLeft,-k.current.scrollTop]:[O.val.get(),O.val.get()]});function te(){k.current&&(F.current=k.current["x"===g?"scrollLeft":"scrollTop"],0===k.current["x"===g?"scrollLeft":"scrollTop"]&&(M.current=!0,A.current=!1),k.current["x"===g?"scrollLeft":"scrollTop"]>0&&k.current["x"===g?"scrollLeft":"scrollTop"]<J()&&(M.current=!1,A.current=!1),k.current["x"===g?"scrollLeft":"scrollTop"]===J()&&(M.current=!1,A.current=!0))}function re(e,t){let r=0;if(r="string"==typeof e?u.findIndex((t=>t.id===e)):e,r<0||r>=u.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 ne=e.jsx("div",Object.assign({ref:k},b?{onWheel(){O.val.stop(),te()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},b?"x"===g?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:e.jsxs("div",Object.assign({ref:N},ee(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===g?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===g?e:"100%",height:"y"===g?e:"100%"}}())},{children:[b&&v?e.jsx("div",{style:{flexShrink:0,width:v}}):null,W.map(((t,r)=>{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"},(n=!!b&&r===u.length-1,"fixed"!==d||b?Object.assign({marginRight:`${n?0:f}px`}):{marginRight:`${n?0:f}px`,flex:`1 0 calc(100% / ${R} - ${f*(R-1)/R}px)`}))},{children:t.renderItem}),`${t.id}-${r}`);var n})),b&&v?e.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}));return b?{useListenToCustomEvent:D,carouselFragment:ne,enterFullscreen:H,exitFullscreen:z,getIsFullscreen:G,thumbsFragment:P,slideToPrevItem:()=>Z(),slideToNextItem:()=>_()}:{useListenToCustomEvent:D,carouselFragment:ne,enterFullscreen:H,exitFullscreen:z,getIsFullscreen:G,thumbsFragment:P,slideToPrevItem:()=>Z(),slideToNextItem:()=>_(),slideToItem:function(e){if(!s)return;M.current=!1,A.current=!1;const t=re(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===$.current)return;const r=re(u[$.current].id),n=re(u[t].id);n>r?_("click",n):Z("click",n)},getIsNextItem:function(e){const t=re(e,"The item doesn't exist; check the provided id."),r=$.current;return h&&r===u.length-1?0===t:t===r+1},getIsPrevItem:function(e){const t=re(e,"The item doesn't exist; check the provided id."),r=$.current;return h&&0===r?t===u.length-1:t===r-1},getIsActiveItem:e=>re(e,"The item you want to check doesn't exist; check the provided id.")===$.current}},exports.useSpringCarouselContext=function(){const e=r.useContext(u);if(!e)throw new Error("useSpringCarouselContext 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 n.useEffect((()=>{e.current=document.createElement("div")}),[]),{useListenToCustomEvent:function(t){n.useEffect((()=>{function n(e){t(e.detail)}if(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)}}),[])},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"}};exports.useSpringCarousel=function({items:o,init:l=!0,withThumbs:u,thumbsSlideAxis:a="x",itemsPerSlide:d=1,slideType:f="fixed",gutter:g=0,withLoop:h=!1,startEndGutter:v=0,carouselSlideAxis:m="x",disableGestures:p=!1,draggingSlideTreshold:x,slideWhenThresholdIsReached:b=!1,freeScroll:y,enableFreeScrollDrag:w,initialStartingPosition:T,prepareThumbsData:j,initialActiveItem:E=0}){const O=d>o.length?o.length:d,R=n.useRef(0),S=n.useRef(null!=x?x:0),I=n.useRef("initial"),C=n.useRef("initial"),M=n.useRef(0),[F,L]=t.useSpring((()=>({val:0,pause:!l,onChange({value:e}){y&&k.current?("x"===m?k.current.scrollLeft=Math.abs(e.val):k.current.scrollTop=Math.abs(e.val),ne()):W.current&&(W.current.style.transform="x"===m?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),N=n.useRef(E),$=n.useRef(0===E),A=n.useRef(!1),k=n.useRef(null),W=n.useRef(null),q=n.useCallback((()=>h?[...o.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...o,...o.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...o]),[o,h])(),{emitEvent:P,useListenToCustomEvent:D}=s(),{thumbsFragment:B,handleScroll:H}=c({withThumbs:!!u,thumbsSlideAxis:a,prepareThumbsData:j,items:o}),{enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X}=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:k,handleResize:()=>U(),onFullScreenChange:e=>{P({eventName:"onFullscreenChange",isFullscreen:e})}});function Y(){var e;const t=null===(e=k.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===m?"width":"height"]+g}function J({from:e,to:n,nextActiveItem:r,immediate:i=!1,slideMode:s}){C.current=s,"number"==typeof r&&(y||(N.current=r),P({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:C.current,nextItem:{startReached:$.current,endReached:A.current,index:y?-1:N.current,id:y?"":o[N.current].id}})),M.current=n,L.start({immediate:i,from:{val:e},to:{val:n},config:Object.assign(Object.assign({},t.config.default),{velocity:F.val.velocity}),onRest(e){!i&&e.finished&&P({eventName:"onSlideChange",slideActionType:I.current,slideMode:C.current,currentItem:{startReached:$.current,endReached:A.current,index:y?-1:N.current,id:y?"":o[N.current].id}})}}),u&&!i&&H(N.current)}function K(){var e;return h?Y()*o.length:Math.round(Number(null===(e=W.current)||void 0===e?void 0:e["x"===m?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===m?"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"===m?"width":"height"]+g}function U(){const e="x"===m?"left":"top";function t(t){const n=W.current;n&&(h?(n.style.top="0px",n.style.left="0px",n.style[e]=`-${t-v}px`):(n.style.left="0px",n.style.top="0px"))}const n=Math.abs(V());if(n<K()&&A.current&&(A.current=!1),n>K()){const e=-K();return A.current=!0,M.current=e,void L.start({immediate:!0,val:e})}if(t("center"===T?Q()*o.length-Y()*Math.round((O-1)/2):"end"===T?Q()*o.length-Y()*Math.round(O-1):Q()*o.length),!y&&"fixed"===f){const e=-Y()*N.current;M.current=e,L.start({immediate:!0,val:e})}}function V(){return y&&k.current?k.current["x"===m?"scrollLeft":"scrollTop"]:F.val.get()}function Z(e,t){if(y&&"next"===e){const e=M.current+Y();return e>K()?K():e}if(y&&"prev"===e){const e=M.current-Y();return e<0?0:e}return"next"===e?t?-t*Y():M.current-Y():t?-t*Y():M.current+Y()}function _(e="click",t){if(!l||$.current&&!h)return;I.current="prev",A.current=!1;const n=t||N.current-1;if(!h){const n=y?Z("prev",t)-Y()/3<0:Z("prev",t)+Y()/3>0;if($.current)return;if(n)return $.current=!0,A.current=!1,void J({slideMode:e,from:V(),to:0,nextActiveItem:0})}if(h&&$.current)return $.current=!1,A.current=!0,void J({slideMode:e,from:V()-Y()*o.length,to:-Y()*o.length+Y(),nextActiveItem:o.length-1});0===n&&($.current=!0),n!==o.length-1&&-1!==n||(A.current=!0),J({slideMode:e,from:V(),to:Z("prev",t),nextActiveItem:n})}function ee(e="click",t){if(!l||A.current&&!h)return;I.current="next",$.current=!1;const n=t||N.current+1;if(!h){const r=Math.abs(Z("next",t))>K()-Y()/3;if(A.current)return;if(r)return $.current=!1,A.current=!0,void J({slideMode:e,from:V(),to:y?K():-K(),nextActiveItem:n})}if(h&&A.current)return A.current=!1,$.current=!0,void J({slideMode:e,from:V()+Y()*o.length,to:0,nextActiveItem:0});0===n&&($.current=!0),n===o.length-1&&(A.current=!0),J({slideMode:e,from:V(),to:Z("next",t),nextActiveItem:n})}n.useEffect((()=>{if(l){if(E>o.length-1)throw new Error(`initialActiveItem (${E}) is greater than the total quantity available items (${o.length}).`);O>o.length&&console.warn(`itemsPerSlide (${O}) is greater than the total quantity available items (${o.length}). Fallback to ${o.length})`)}}),[E,o,O,l]),n.useEffect((()=>{R.current=window.innerWidth}),[]),n.useEffect((()=>{U()}),[T,O,h,v,g,y,f,l]),n.useLayoutEffect((()=>{W.current&&U()}),[]),n.useEffect((()=>{S.current=x||Math.floor(Y()/2/2)}),[x]),n.useEffect((()=>{function e(){window.innerWidth!==R.current&&(R.current=window.innerWidth,U())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]);const te=r.useDrag((e=>{const n=e.dragging,r=e.offset["x"===m?0:1],i=e.movement["x"===m?0:1],s=e.direction["x"===m?0:1],c=i>S.current,o=i<-S.current;if(n)return I.current=s>0?"prev":"next",P(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),y?"prev"===I.current&&r>0?(e.cancel(),void L.start({from:{val:V()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void L.start({from:{val:V()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(L.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(b&&o?(ee("drag"),e.cancel()):b&&c&&(_("drag"),e.cancel())));e.last&&!e.canceled&&y&&("prev"===I.current&&_("drag"),"next"===I.current&&ee("drag")),!e.last||e.canceled||y||(o?!h&&A.current?L.start({val:-K(),config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):ee("drag"):c?!h&&$.current?L.start({val:0,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}):_("drag"):L.start({val:M.current,config:Object.assign(Object.assign({},t.config.default),{velocity:e.velocity})}))}),{enabled:l&&!p&&!y||!!y&&!!w,axis:m,from:()=>y&&k.current?[-k.current.scrollLeft,-k.current.scrollTop]:[F.val.get(),F.val.get()]});function ne(){k.current&&(M.current=k.current["x"===m?"scrollLeft":"scrollTop"],0===k.current["x"===m?"scrollLeft":"scrollTop"]&&($.current=!0,A.current=!1),k.current["x"===m?"scrollLeft":"scrollTop"]>0&&k.current["x"===m?"scrollLeft":"scrollTop"]<K()&&($.current=!1,A.current=!1),k.current["x"===m?"scrollLeft":"scrollTop"]===K()&&($.current=!1,A.current=!0))}function re(e,t){let n=0;if(n="string"==typeof e?o.findIndex((t=>t.id===e)):e,n<0||n>=o.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 ie=e.jsx("div",Object.assign({ref:k},y?{onWheel(){F.val.stop(),ne()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},y?"x"===m?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:e.jsxs("div",Object.assign({ref:W},te(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===m?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===m?e:"100%",height:"y"===m?e:"100%"}}())},{children:[y&&v?e.jsx("div",{style:{flexShrink:0,width:v}}):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=!!y&&n===o.length-1,"fixed"!==f||y?Object.assign({marginRight:`${r?0:g}px`}):{marginRight:`${r?0:g}px`,flex:`1 0 calc(100% / ${O} - ${g*(O-1)/O}px)`}))},{children:t.renderItem}),`${t.id}-${n}`);var r})),y&&v?e.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}));return y?{useListenToCustomEvent:D,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee()}:{useListenToCustomEvent:D,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee(),slideToItem:function(e){if(!l)return;$.current=!1,A.current=!1;const t=re(e,"The item you want to slide to doesn't exist; check the provided id.");if(t===N.current)return;const n=re(o[N.current].id),r=re(o[t].id);r>n?ee("click",r):_("click",r)},getIsNextItem:function(e){const t=re(e,"The item doesn't exist; check the provided id."),n=N.current;return h&&n===o.length-1?0===t:t===n+1},getIsPrevItem:function(e){const t=re(e,"The item doesn't exist; check the provided id."),n=N.current;return h&&0===n?t===o.length-1:t===n-1},getIsActiveItem:e=>re(e,"The item you want to check doesn't exist; check the provided id.")===N.current}},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:c=!1,items:o,springConfig:u=t.config.default,exitBeforeEnter:a=!1,trail:d,withLoop:f=!1,activeItem:g,toPrevItemSpringProps:h=l,toNextItemSpringProps:v=l,draggingSlideTreshold:m=50}){const p=n.useRef("next"),x=n.useRef("initial"),b=n.useRef(null),[y,w]=n.useState(null!=g?g:0),{emitEvent:T,useListenToCustomEvent:j}=s();function E({to:e,slideType:t,slideMode:n}){p.current=t,x.current=n,T({eventName:"onSlideStartChange",slideActionType:p.current,slideMode:x.current,nextItem:{index:e,id:o[e].id,startReached:0===e,endReached:e===o.length-1}}),w(e)}function O(e){if(!i)return;const t=0===y;!f&&t||E(f&&t?{to:o.length-1,slideType:"prev",slideMode:e}:{to:y-1,slideType:"prev",slideMode:e})}function R(e){if(!i)return;const t=y===o.length-1;!f&&t||E(f&&t?{to:0,slideType:"next",slideMode:e}:{to:y+1,slideType:"next",slideMode:e})}n.useEffect((()=>{"number"==typeof g&&g!==y&&w(g)}),[g]);const S=t.useTransition(y,Object.assign(Object.assign({config:u,key:null,trail:d,exitBeforeEnter:a},"prev"===p.current?{initial:Object.assign({},h.initial),from:Object.assign({},h.from),enter:Object.assign({},h.enter),leave:Object.assign({},h.leave)}:"next"===p.current?{initial:Object.assign({},v.initial),from:Object.assign({},v.from),enter:Object.assign({},v.enter),leave:Object.assign({},v.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===y&&T({eventName:"onSlideChange",slideActionType:p.current,slideMode:x.current,currentItem:{index:y,id:o[y].id,startReached:0===y,endReached:y===o.length-1}})}})),I=r.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>m,n=t<-m,r=0===y,i=y===o.length-1;if(n){if(!f&&i)return;T({eventName:"onLeftSwipe"}),R("swipe")}else if(e){if(!f&&r)return;T({eventName:"onRightSwipe"}),O("swipe")}}}),{enabled:!c}),C=S(((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:o[r].renderItem}))));return{useListenToCustomEvent:j,carouselFragment:e.jsx("div",Object.assign({ref:b},I(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:C})),slideToPrevItem:()=>O("click"),slideToNextItem:()=>R("click")}};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts"],"sourcesContent":["import { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringFreeScrollReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n} from './types/internals'\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: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\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 (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\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\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\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 carouselFragment = (\n <div\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 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 )\n\n if (freeScroll) {\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n }\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\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\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n","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 useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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"],"names":["useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","useRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","_a","current","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","document","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","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","emitEvent","useListenToCustomEvent","targetEvent","useEffect","createElement","eventHandler","handleEvent","event","detail","addEventListener","removeEventListener","newEvent","CustomEvent","dispatchEvent","useEventsModule","enterFullscreen","exitFullscreen","getIsFullscreen","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","elementRef","request","exit","useFullscreenModule","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","console","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","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","context","useContext"],"mappings":"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"}
|
|
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 useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringFreeScrollReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n} from './types/internals'\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: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\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 (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\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\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\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 carouselFragment = (\n <div\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 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 )\n\n if (freeScroll) {\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n }\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\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\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState } from 'react'\nimport { SlideActionType, TransitionSlideMode } from './types/common'\nimport { UseTransitionCarouselProps } from './types/useTransitionCarousel.types'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\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\nexport function 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}: UseTransitionCarouselProps) {\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\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 }\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 const carouselFragment = (\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 )\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\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"],"names":["useEventsModule","targetEvent","useRef","useEffect","current","document","createElement","useListenToCustomEvent","eventHandler","handleEvent","event","detail","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","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","console","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","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","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";import"react/jsx-runtime";import"@react-spring/web";import"react";import"./useEventsModule-58340c73.js";import"@use-gesture/react";import"./useThumbsModule-ca28667b.js";import"screenfull";
|
|
1
|
+
export{useSpringCarousel,useSpringCarouselContext}from"./useSpringCarousel.js";export{useTransitionCarousel}from"./useTransitionCarousel.js";import"react/jsx-runtime";import"@react-spring/web";import"react";import"./useEventsModule-58340c73.js";import"@use-gesture/react";import"./useThumbsModule-ca28667b.js";import"screenfull";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.d.ts
CHANGED
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,r,n,i,c){"use strict";const u="RSC::Event";function s({thumbsSlideAxis:e="x",withThumbs:i=!1,prepareThumbsData:c,items:u}){const s=n.useRef(null),[o,l]=r.useSpring((()=>({val:0})));function a(){var t;return Math.round(Number(null===(t=s.current)||void 0===t?void 0:t["x"===e?"scrollWidth":"scrollHeight"])-s.current.getBoundingClientRect()["x"===e?"width":"height"])}return{thumbsFragment:i?t.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:s,onWheel:()=>o.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 c?c(e(u)):e(u)}().map((({id:e,renderThumb:r})=>{const n=`thumb-item-${e}`;return t.jsx("div",Object.assign({id:n,className:"thumb-item"},{children:r}),n)}))})):null,handleScroll:function(t){var r,n;const i=s.current?s.current.querySelector(`#thumb-item-${u[t].id}`):null;if(i&&s.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,c=t>a()?a():t;l.start({from:{val:null!==(n=null===(r=s.current)||void 0===r?void 0:r["x"===e?"scrollLeft":"scrollTop"])&&void 0!==n?n:0},to:{val:c},onChange:({value:t})=>{s.current&&(s.current["x"===e?"scrollLeft":"scrollTop"]=Math.abs(t.val))}})}}}}const o=n.createContext(void 0);e.useSpringCarousel=function({items:e,init:o=!0,withThumbs:l,thumbsSlideAxis:a="x",itemsPerSlide:d=1,slideType:f="fixed",gutter:h=0,withLoop:g=!1,startEndGutter:m=0,carouselSlideAxis:v="x",disableGestures:x=!1,draggingSlideTreshold:p,slideWhenThresholdIsReached:b=!1,freeScroll:w,enableFreeScrollDrag:y,initialStartingPosition:T,prepareThumbsData:E,initialActiveItem:R=0}){const j=d>e.length?e.length:d,S=n.useRef(0),C=n.useRef(null!=p?p:0),I=n.useRef("initial"),F=n.useRef("initial"),O=n.useRef(0),[L,$]=r.useSpring((()=>({val:0,pause:!o,onChange({value:e}){w&&N.current?("x"===v?N.current.scrollLeft=Math.abs(e.val):N.current.scrollTop=Math.abs(e.val),re()):W.current&&(W.current.style.transform="x"===v?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),M=n.useRef(R),A=n.useRef(0===R),k=n.useRef(!1),N=n.useRef(null),W=n.useRef(null),q=n.useCallback((()=>g?[...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,g])(),{emitEvent:D,useListenToCustomEvent:P}=function(){const e=n.useRef(null);return n.useEffect((()=>{e.current=document.createElement("div")}),[]),{useListenToCustomEvent:function(t){n.useEffect((()=>{function r(e){t(e.detail)}if(e.current)return e.current.addEventListener(u,r,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(u,r,!1)}}),[])},emitEvent:function(t){if(e.current){const r=new CustomEvent(u,{detail:t});e.current.dispatchEvent(r)}}}}(),{thumbsFragment:B,handleScroll:H}=s({withThumbs:!!l,thumbsSlideAxis:a,prepareThumbsData:E,items:e}),{enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X}=function({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:r}){const i=n.useRef(!1);function u(e){i.current=e}return n.useEffect((()=>{function e(){document.fullscreenElement&&(u(!0),t(!0),r&&r()),document.fullscreenElement||(u(!1),t(!1),r&&r())}if(c.isEnabled)return c.on("change",e),()=>{c.isEnabled&&c.off("change",e)}}),[]),{enterFullscreen:function(t){c.isEnabled&&c.request(t||e.current)},exitFullscreen:function(){c.isEnabled&&c.exit()},getIsFullscreen:function(){return i.current}}}({mainCarouselWrapperRef:N,handleResize:()=>Q(),onFullScreenChange:e=>{D({eventName:"onFullscreenChange",isFullscreen:e})}});function Y(){var e;const t=null===(e=N.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===v?"width":"height"]+h}function J({from:t,to:n,nextActiveItem:i,immediate:c=!1,slideMode:u}){F.current=u,"number"==typeof i&&(w||(M.current=i),D({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:F.current,nextItem:{startReached:A.current,endReached:k.current,index:w?-1:M.current,id:w?"":e[M.current].id}})),O.current=n,$.start({immediate:c,from:{val:t},to:{val:n},config:Object.assign(Object.assign({},r.config.default),{velocity:L.val.velocity}),onRest(t){!c&&t.finished&&D({eventName:"onSlideChange",slideActionType:I.current,slideMode:F.current,currentItem:{startReached:A.current,endReached:k.current,index:w?-1:M.current,id:w?"":e[M.current].id}})}}),l&&!c&&H(M.current)}function U(){var t;return g?Y()*e.length:Math.round(Number(null===(t=W.current)||void 0===t?void 0:t["x"===v?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===v?"width":"height"]-2*m)}function K(){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"===v?"width":"height"]+h}function Q(){const t="x"===v?"left":"top";function r(e){const r=W.current;r&&(g?(r.style.top="0px",r.style.left="0px",r.style[t]=`-${e-m}px`):(r.style.left="0px",r.style.top="0px"))}const n=Math.abs(V());if(n<U()&&k.current&&(k.current=!1),n>U()){const e=-U();return k.current=!0,O.current=e,void $.start({immediate:!0,val:e})}if(r("center"===T?K()*e.length-Y()*Math.round((j-1)/2):"end"===T?K()*e.length-Y()*Math.round(j-1):K()*e.length),!w&&"fixed"===f){const e=-Y()*M.current;O.current=e,$.start({immediate:!0,val:e})}}function V(){return w&&N.current?N.current["x"===v?"scrollLeft":"scrollTop"]:L.val.get()}function Z(e,t){if(w&&"next"===e){const e=O.current+Y();return e>U()?U():e}if(w&&"prev"===e){const e=O.current-Y();return e<0?0:e}return"next"===e?t?-t*Y():O.current-Y():t?-t*Y():O.current+Y()}function _(t="click",r){if(!o||A.current&&!g)return;I.current="prev",k.current=!1;const n=r||M.current-1;if(!g){const e=w?Z("prev",r)-Y()/3<0:Z("prev",r)+Y()/3>0;if(A.current)return;if(e)return A.current=!0,k.current=!1,void J({slideMode:t,from:V(),to:0,nextActiveItem:0})}if(g&&A.current)return A.current=!1,k.current=!0,void J({slideMode:t,from:V()-Y()*e.length,to:-Y()*e.length+Y(),nextActiveItem:e.length-1});0===n&&(A.current=!0),n!==e.length-1&&-1!==n||(k.current=!0),J({slideMode:t,from:V(),to:Z("prev",r),nextActiveItem:n})}function ee(t="click",r){if(!o||k.current&&!g)return;I.current="next",A.current=!1;const n=r||M.current+1;if(!g){const e=Math.abs(Z("next",r))>U()-Y()/3;if(k.current)return;if(e)return A.current=!1,k.current=!0,void J({slideMode:t,from:V(),to:w?U():-U(),nextActiveItem:n})}if(g&&k.current)return k.current=!1,A.current=!0,void J({slideMode:t,from:V()+Y()*e.length,to:0,nextActiveItem:0});0===n&&(A.current=!0),n===e.length-1&&(k.current=!0),J({slideMode:t,from:V(),to:Z("next",r),nextActiveItem:n})}n.useEffect((()=>{if(o){if(R>e.length-1)throw new Error(`initialActiveItem (${R}) is greater than the total quantity available items (${e.length}).`);j>e.length&&console.warn(`itemsPerSlide (${j}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,j,o]),n.useEffect((()=>{S.current=window.innerWidth}),[]),n.useEffect((()=>{Q()}),[T,j,g,m,h,w,f,o]),n.useLayoutEffect((()=>{W.current&&Q()}),[]),n.useEffect((()=>{C.current=p||Math.floor(Y()/2/2)}),[p]),n.useEffect((()=>{function e(){window.innerWidth!==S.current&&(S.current=window.innerWidth,Q())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]);const te=i.useDrag((e=>{const t=e.dragging,n=e.offset["x"===v?0:1],i=e.movement["x"===v?0:1],c=e.direction["x"===v?0:1],u=i>C.current,s=i<-C.current;if(t)return I.current=c>0?"prev":"next",D(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),w?"prev"===I.current&&n>0?(e.cancel(),void $.start({from:{val:V()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void $.start({from:{val:V()},to:{val:-n},config:{velocity:e.velocity,friction:50,tension:1e3}}):($.start({val:n,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(b&&s?(ee("drag"),e.cancel()):b&&u&&(_("drag"),e.cancel())));e.last&&!e.canceled&&w&&("prev"===I.current&&_("drag"),"next"===I.current&&ee("drag")),!e.last||e.canceled||w||(s?!g&&k.current?$.start({val:-U(),config:Object.assign(Object.assign({},r.config.default),{velocity:e.velocity})}):ee("drag"):u?!g&&A.current?$.start({val:0,config:Object.assign(Object.assign({},r.config.default),{velocity:e.velocity})}):_("drag"):$.start({val:O.current,config:Object.assign(Object.assign({},r.config.default),{velocity:e.velocity})}))}),{enabled:o&&!x&&!w||!!w&&!!y,axis:v,from:()=>w&&N.current?[-N.current.scrollLeft,-N.current.scrollTop]:[L.val.get(),L.val.get()]});function re(){N.current&&(O.current=N.current["x"===v?"scrollLeft":"scrollTop"],0===N.current["x"===v?"scrollLeft":"scrollTop"]&&(A.current=!0,k.current=!1),N.current["x"===v?"scrollLeft":"scrollTop"]>0&&N.current["x"===v?"scrollLeft":"scrollTop"]<U()&&(A.current=!1,k.current=!1),N.current["x"===v?"scrollLeft":"scrollTop"]===U()&&(A.current=!1,k.current=!0))}function ne(t,r){let n=0;if(n="string"==typeof t?e.findIndex((e=>e.id===t)):t,n<0||n>=e.length){if(r)throw new Error(r);console.error(`The item doesn't exist; check that the id provided - ${t} - is correct.`),n=-1}return n}const ie=t.jsx("div",Object.assign({ref:N},w?{onWheel(){L.val.stop(),re()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},w?"x"===v?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({ref:W},te(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===v?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*m}px)`;return{width:"x"===v?e:"100%",height:"y"===v?e:"100%"}}())},{children:[w&&m?t.jsx("div",{style:{flexShrink:0,width:m}}):null,q.map(((r,n)=>{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=!!w&&n===e.length-1,"fixed"!==f||w?Object.assign({marginRight:`${i?0:h}px`}):{marginRight:`${i?0:h}px`,flex:`1 0 calc(100% / ${j} - ${h*(j-1)/j}px)`}))},{children:r.renderItem}),`${r.id}-${n}`);var i})),w&&m?t.jsx("div",{style:{flexShrink:0,width:m}}):null]}))}));return w?{useListenToCustomEvent:P,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee()}:{useListenToCustomEvent:P,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee(),slideToItem:function(t){if(!o)return;A.current=!1,k.current=!1;const r=ne(t,"The item you want to slide to doesn't exist; check the provided id.");if(r===M.current)return;const n=ne(e[M.current].id),i=ne(e[r].id);i>n?ee("click",i):_("click",i)},getIsNextItem:function(t){const r=ne(t,"The item doesn't exist; check the provided id."),n=M.current;return g&&n===e.length-1?0===r:r===n+1},getIsPrevItem:function(t){const r=ne(t,"The item doesn't exist; check the provided id."),n=M.current;return g&&0===n?r===e.length-1:r===n-1},getIsActiveItem:e=>ne(e,"The item you want to check doesn't exist; check the provided id.")===M.current}},e.useSpringCarouselContext=function(){const e=n.useContext(o);if(!e)throw new Error("useSpringCarouselContext 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 r.useEffect((()=>{e.current=document.createElement("div")}),[]),{useListenToCustomEvent:function(t){r.useEffect((()=>{function n(e){t(e.detail)}if(e.current)return e.current.addEventListener(c,n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(c,n,!1)}}),[])},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"}};e.useSpringCarousel=function({items:e,init:c=!0,withThumbs:u,thumbsSlideAxis:a="x",itemsPerSlide:d=1,slideType:f="fixed",gutter:g=0,withLoop:h=!1,startEndGutter:m=0,carouselSlideAxis:v="x",disableGestures:p=!1,draggingSlideTreshold:x,slideWhenThresholdIsReached:b=!1,freeScroll:y,enableFreeScrollDrag:w,initialStartingPosition:T,prepareThumbsData:j,initialActiveItem:R=0}){const E=d>e.length?e.length:d,O=r.useRef(0),S=r.useRef(null!=x?x:0),I=r.useRef("initial"),C=r.useRef("initial"),M=r.useRef(0),[F,L]=n.useSpring((()=>({val:0,pause:!c,onChange({value:e}){y&&k.current?("x"===v?k.current.scrollLeft=Math.abs(e.val):k.current.scrollTop=Math.abs(e.val),ne()):W.current&&(W.current.style.transform="x"===v?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),N=r.useRef(R),$=r.useRef(0===R),A=r.useRef(!1),k=r.useRef(null),W=r.useRef(null),q=r.useCallback((()=>h?[...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,h])(),{emitEvent:P,useListenToCustomEvent:D}=o(),{thumbsFragment:B,handleScroll:H}=l({withThumbs:!!u,thumbsSlideAxis:a,prepareThumbsData:j,items:e}),{enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X}=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:k,handleResize:()=>Q(),onFullScreenChange:e=>{P({eventName:"onFullscreenChange",isFullscreen:e})}});function Y(){var e;const t=null===(e=k.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===v?"width":"height"]+g}function J({from:t,to:r,nextActiveItem:i,immediate:s=!1,slideMode:c}){C.current=c,"number"==typeof i&&(y||(N.current=i),P({eventName:"onSlideStartChange",slideActionType:I.current,slideMode:C.current,nextItem:{startReached:$.current,endReached:A.current,index:y?-1:N.current,id:y?"":e[N.current].id}})),M.current=r,L.start({immediate:s,from:{val:t},to:{val:r},config:Object.assign(Object.assign({},n.config.default),{velocity:F.val.velocity}),onRest(t){!s&&t.finished&&P({eventName:"onSlideChange",slideActionType:I.current,slideMode:C.current,currentItem:{startReached:$.current,endReached:A.current,index:y?-1:N.current,id:y?"":e[N.current].id}})}}),u&&!s&&H(N.current)}function U(){var t;return h?Y()*e.length:Math.round(Number(null===(t=W.current)||void 0===t?void 0:t["x"===v?"scrollWidth":"scrollHeight"])-W.current.getBoundingClientRect()["x"===v?"width":"height"]-2*m)}function K(){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"===v?"width":"height"]+g}function Q(){const t="x"===v?"left":"top";function n(e){const n=W.current;n&&(h?(n.style.top="0px",n.style.left="0px",n.style[t]=`-${e-m}px`):(n.style.left="0px",n.style.top="0px"))}const r=Math.abs(V());if(r<U()&&A.current&&(A.current=!1),r>U()){const e=-U();return A.current=!0,M.current=e,void L.start({immediate:!0,val:e})}if(n("center"===T?K()*e.length-Y()*Math.round((E-1)/2):"end"===T?K()*e.length-Y()*Math.round(E-1):K()*e.length),!y&&"fixed"===f){const e=-Y()*N.current;M.current=e,L.start({immediate:!0,val:e})}}function V(){return y&&k.current?k.current["x"===v?"scrollLeft":"scrollTop"]:F.val.get()}function Z(e,t){if(y&&"next"===e){const e=M.current+Y();return e>U()?U():e}if(y&&"prev"===e){const e=M.current-Y();return e<0?0:e}return"next"===e?t?-t*Y():M.current-Y():t?-t*Y():M.current+Y()}function _(t="click",n){if(!c||$.current&&!h)return;I.current="prev",A.current=!1;const r=n||N.current-1;if(!h){const e=y?Z("prev",n)-Y()/3<0:Z("prev",n)+Y()/3>0;if($.current)return;if(e)return $.current=!0,A.current=!1,void J({slideMode:t,from:V(),to:0,nextActiveItem:0})}if(h&&$.current)return $.current=!1,A.current=!0,void J({slideMode:t,from:V()-Y()*e.length,to:-Y()*e.length+Y(),nextActiveItem:e.length-1});0===r&&($.current=!0),r!==e.length-1&&-1!==r||(A.current=!0),J({slideMode:t,from:V(),to:Z("prev",n),nextActiveItem:r})}function ee(t="click",n){if(!c||A.current&&!h)return;I.current="next",$.current=!1;const r=n||N.current+1;if(!h){const e=Math.abs(Z("next",n))>U()-Y()/3;if(A.current)return;if(e)return $.current=!1,A.current=!0,void J({slideMode:t,from:V(),to:y?U():-U(),nextActiveItem:r})}if(h&&A.current)return A.current=!1,$.current=!0,void J({slideMode:t,from:V()+Y()*e.length,to:0,nextActiveItem:0});0===r&&($.current=!0),r===e.length-1&&(A.current=!0),J({slideMode:t,from:V(),to:Z("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}).`);E>e.length&&console.warn(`itemsPerSlide (${E}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,E,c]),r.useEffect((()=>{O.current=window.innerWidth}),[]),r.useEffect((()=>{Q()}),[T,E,h,m,g,y,f,c]),r.useLayoutEffect((()=>{W.current&&Q()}),[]),r.useEffect((()=>{S.current=x||Math.floor(Y()/2/2)}),[x]),r.useEffect((()=>{function e(){window.innerWidth!==O.current&&(O.current=window.innerWidth,Q())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]);const te=i.useDrag((e=>{const t=e.dragging,r=e.offset["x"===v?0:1],i=e.movement["x"===v?0:1],s=e.direction["x"===v?0:1],c=i>S.current,o=i<-S.current;if(t)return I.current=s>0?"prev":"next",P(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:I.current})),y?"prev"===I.current&&r>0?(e.cancel(),void L.start({from:{val:V()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void L.start({from:{val:V()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}}):(L.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),void(b&&o?(ee("drag"),e.cancel()):b&&c&&(_("drag"),e.cancel())));e.last&&!e.canceled&&y&&("prev"===I.current&&_("drag"),"next"===I.current&&ee("drag")),!e.last||e.canceled||y||(o?!h&&A.current?L.start({val:-U(),config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):ee("drag"):c?!h&&$.current?L.start({val:0,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):_("drag"):L.start({val:M.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}))}),{enabled:c&&!p&&!y||!!y&&!!w,axis:v,from:()=>y&&k.current?[-k.current.scrollLeft,-k.current.scrollTop]:[F.val.get(),F.val.get()]});function ne(){k.current&&(M.current=k.current["x"===v?"scrollLeft":"scrollTop"],0===k.current["x"===v?"scrollLeft":"scrollTop"]&&($.current=!0,A.current=!1),k.current["x"===v?"scrollLeft":"scrollTop"]>0&&k.current["x"===v?"scrollLeft":"scrollTop"]<U()&&($.current=!1,A.current=!1),k.current["x"===v?"scrollLeft":"scrollTop"]===U()&&($.current=!1,A.current=!0))}function re(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 ie=t.jsx("div",Object.assign({ref:k},y?{onWheel(){F.val.stop(),ne()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},y?"x"===v?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({ref:W},te(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===v?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*m}px)`;return{width:"x"===v?e:"100%",height:"y"===v?e:"100%"}}())},{children:[y&&m?t.jsx("div",{style:{flexShrink:0,width:m}}):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"!==f||y?Object.assign({marginRight:`${i?0:g}px`}):{marginRight:`${i?0:g}px`,flex:`1 0 calc(100% / ${E} - ${g*(E-1)/E}px)`}))},{children:n.renderItem}),`${n.id}-${r}`);var i})),y&&m?t.jsx("div",{style:{flexShrink:0,width:m}}):null]}))}));return y?{useListenToCustomEvent:D,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee()}:{useListenToCustomEvent:D,carouselFragment:ie,enterFullscreen:z,exitFullscreen:G,getIsFullscreen:X,thumbsFragment:B,slideToPrevItem:()=>_(),slideToNextItem:()=>ee(),slideToItem:function(t){if(!c)return;$.current=!1,A.current=!1;const n=re(t,"The item you want to slide to doesn't exist; check the provided id.");if(n===N.current)return;const r=re(e[N.current].id),i=re(e[n].id);i>r?ee("click",i):_("click",i)},getIsNextItem:function(t){const n=re(t,"The item doesn't exist; check the provided id."),r=N.current;return h&&r===e.length-1?0===n:n===r+1},getIsPrevItem:function(t){const n=re(t,"The item doesn't exist; check the provided id."),r=N.current;return h&&0===r?n===e.length-1:n===r-1},getIsActiveItem:e=>re(e,"The item you want to check doesn't exist; check the provided id.")===N.current}},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:l=n.config.default,exitBeforeEnter:u=!1,trail:d,withLoop:f=!1,activeItem:g,toPrevItemSpringProps:h=a,toNextItemSpringProps:m=a,draggingSlideTreshold:v=50}){const p=r.useRef("next"),x=r.useRef("initial"),b=r.useRef(null),[y,w]=r.useState(null!=g?g:0),{emitEvent:T,useListenToCustomEvent:j}=o();function R({to:e,slideType:t,slideMode:n}){p.current=t,x.current=n,T({eventName:"onSlideStartChange",slideActionType:p.current,slideMode:x.current,nextItem:{index:e,id:c[e].id,startReached:0===e,endReached:e===c.length-1}}),w(e)}function E(t){if(!e)return;const n=0===y;!f&&n||R(f&&n?{to:c.length-1,slideType:"prev",slideMode:t}:{to:y-1,slideType:"prev",slideMode:t})}function O(t){if(!e)return;const n=y===c.length-1;!f&&n||R(f&&n?{to:0,slideType:"next",slideMode:t}:{to:y+1,slideType:"next",slideMode:t})}r.useEffect((()=>{"number"==typeof g&&g!==y&&w(g)}),[g]);const S=n.useTransition(y,Object.assign(Object.assign({config:l,key:null,trail:d,exitBeforeEnter:u},"prev"===p.current?{initial:Object.assign({},h.initial),from:Object.assign({},h.from),enter:Object.assign({},h.enter),leave:Object.assign({},h.leave)}:"next"===p.current?{initial:Object.assign({},m.initial),from:Object.assign({},m.from),enter:Object.assign({},m.enter),leave:Object.assign({},m.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===y&&T({eventName:"onSlideChange",slideActionType:p.current,slideMode:x.current,currentItem:{index:y,id:c[y].id,startReached:0===y,endReached:y===c.length-1}})}})),I=i.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>v,n=t<-v,r=0===y,i=y===c.length-1;if(n){if(!f&&i)return;T({eventName:"onLeftSwipe"}),O("swipe")}else if(e){if(!f&&r)return;T({eventName:"onRightSwipe"}),E("swipe")}}}),{enabled:!s}),C=S(((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}))));return{useListenToCustomEvent:j,carouselFragment:t.jsx("div",Object.assign({ref:b},I(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:C})),slideToPrevItem:()=>E("click"),slideToNextItem:()=>O("click")}}}));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/umd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.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 useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringFreeScrollReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n} from './types/internals'\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: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\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 (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\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\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\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 carouselFragment = (\n <div\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 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 )\n\n if (freeScroll) {\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n }\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\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\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\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","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","useRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","_a","current","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","document","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","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","emitEvent","useListenToCustomEvent","targetEvent","useEffect","createElement","eventHandler","handleEvent","event","detail","addEventListener","removeEventListener","newEvent","CustomEvent","dispatchEvent","useEventsModule","enterFullscreen","exitFullscreen","getIsFullscreen","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","elementRef","request","exit","useFullscreenModule","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","console","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","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","context","useContext"],"mappings":"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"}
|
|
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 useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringFreeScrollReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n} from './types/internals'\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: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\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 (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\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\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\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 carouselFragment = (\n <div\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 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 )\n\n if (freeScroll) {\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n }\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\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\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n","import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState } from 'react'\nimport { SlideActionType, TransitionSlideMode } from './types/common'\nimport { UseTransitionCarouselProps } from './types/useTransitionCarousel.types'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\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\nexport function 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}: UseTransitionCarouselProps) {\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\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 }\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 const carouselFragment = (\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 )\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\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"],"names":["eventLabel","useEventsModule","targetEvent","useRef","useEffect","current","document","createElement","useListenToCustomEvent","eventHandler","handleEvent","event","detail","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","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","console","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","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","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-
|
|
3
|
+
"version": "3.0.0-beta016",
|
|
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",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
62
62
|
"react": "^18.2.0",
|
|
63
63
|
"react-dom": "^18.2.0",
|
|
64
|
+
"react-spring-carousel": "^3.0.0-beta015",
|
|
64
65
|
"rimraf": "^3.0.2",
|
|
65
66
|
"rollup": "^3.1.0",
|
|
66
67
|
"rollup-plugin-babel": "^4.4.0",
|