react-spring-carousel 1.9.29-beta31 → 1.9.29-beta35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from './useSpringCarousel';
2
- export * from './useTransitionCarousel';
1
+ import * as useSpringCarousel from './useSpringCarousel';
2
+ import * as useTransitionCarousel from './useTransitionCarousel';
3
+ export { useSpringCarousel, useTransitionCarousel };
package/dist/index.js CHANGED
@@ -1,2 +1,12 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./useSpringCarousel.js"),r=require("./useTransitionCarousel.js");exports.useSpringCarouselContext=e.useSpringCarouselContext,exports.useTransitionCarouselContext=r.useTransitionCarouselContext;
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var useSpringCarousel = require('./useSpringCarousel.js');
6
+ var useTransitionCarousel = require('./useTransitionCarousel.js');
7
+
8
+
9
+
10
+ exports.useSpringCarousel = useSpringCarousel;
11
+ exports.useTransitionCarousel = useTransitionCarousel;
2
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,2 +1,26 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("rxjs");exports.useCustomEventsModule=function(){const r=e.useRef(new t.Subject);return{useListenToCustomEvent:function(t){e.useEffect((()=>{const e=r.current.subscribe(t);return()=>e.unsubscribe()}),[t])},emitObservable:e=>{r.current.next(e)}}};
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var rxjs = require('rxjs');
7
+
8
+ function useCustomEventsModule() {
9
+ const eventsObserverRef = react.useRef(new rxjs.Subject());
10
+ function useListenToCustomEvent(fn) {
11
+ react.useEffect(() => {
12
+ const subscribe = eventsObserverRef.current.subscribe(fn);
13
+ return () => subscribe.unsubscribe();
14
+ }, [fn]);
15
+ }
16
+ const emitObservable = data => {
17
+ eventsObserverRef.current.next(data);
18
+ };
19
+ return {
20
+ useListenToCustomEvent,
21
+ emitObservable,
22
+ };
23
+ }
24
+
25
+ exports.useCustomEventsModule = useCustomEventsModule;
2
26
  //# sourceMappingURL=useCustomEventsModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCustomEventsModule.js","sources":["../../src/modules/useCustomEventsModule.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Subject } from 'rxjs'\nimport { EventsObservableProps, ObservableCallbackFn, EmitObservableFn } from '../types'\n\nexport function useCustomEventsModule() {\n const eventsObserverRef = useRef(new Subject<EventsObservableProps>())\n\n function useListenToCustomEvent(fn: ObservableCallbackFn) {\n useEffect(() => {\n const subscribe = eventsObserverRef.current.subscribe(fn)\n return () => subscribe.unsubscribe()\n }, [fn])\n }\n\n const emitObservable: EmitObservableFn = data => {\n eventsObserverRef.current.next(data)\n }\n\n return {\n useListenToCustomEvent,\n emitObservable,\n }\n}\n"],"names":["eventsObserverRef","useRef","Subject","useListenToCustomEvent","fn","useEffect","subscribe","current","unsubscribe","emitObservable","data","next"],"mappings":"sJAKE,MAAMA,EAAoBC,SAAO,IAAIC,WAarC,MAAO,CACLC,uBAZF,SAAgCC,GAC9BC,aAAU,KACR,MAAMC,EAAYN,EAAkBO,QAAQD,UAAUF,GACtD,MAAO,IAAME,EAAUE,gBACtB,CAACJ,KASJK,eANuCC,IACvCV,EAAkBO,QAAQI,KAAKD"}
1
+ {"version":3,"file":"useCustomEventsModule.js","sources":["../../src/modules/useCustomEventsModule.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Subject } from 'rxjs'\nimport { EventsObservableProps, ObservableCallbackFn, EmitObservableFn } from '../types'\n\nexport function useCustomEventsModule() {\n const eventsObserverRef = useRef(new Subject<EventsObservableProps>())\n\n function useListenToCustomEvent(fn: ObservableCallbackFn) {\n useEffect(() => {\n const subscribe = eventsObserverRef.current.subscribe(fn)\n return () => subscribe.unsubscribe()\n }, [fn])\n }\n\n const emitObservable: EmitObservableFn = data => {\n eventsObserverRef.current.next(data)\n }\n\n return {\n useListenToCustomEvent,\n emitObservable,\n }\n}\n"],"names":["useRef","Subject","useEffect"],"mappings":";;;;;;;SAIgB,qBAAqB;IACnC,MAAM,iBAAiB,GAAGA,YAAM,CAAC,IAAIC,YAAO,EAAyB,CAAC,CAAA;IAEtE,SAAS,sBAAsB,CAAC,EAAwB;QACtDC,eAAS,CAAC;YACR,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACzD,OAAO,MAAM,SAAS,CAAC,WAAW,EAAE,CAAA;SACrC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KACT;IAED,MAAM,cAAc,GAAqB,IAAI;QAC3C,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACrC,CAAA;IAED,OAAO;QACL,sBAAsB;QACtB,cAAc;KACf,CAAA;AACH;;;;"}
@@ -1,2 +1,64 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(require("screenfull"));exports.useFullscreenModule=function({mainCarouselWrapperRef:n,emitObservable:t,handleResize:l}){const r=e.useRef(!1);function c(e){r.current=e}return e.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t({eventName:"onFullscreenChange",isFullscreen:!0}),l&&l()),document.fullscreenElement||(c(!1),t({eventName:"onFullscreenChange",isFullscreen:!1}),l&&l())}if(u.default.isEnabled)return u.default.on("change",e),()=>{u.default.isEnabled&&u.default.off("change",e)}})),{enterFullscreen:function(e){u.default.isEnabled&&u.default.request(e||n.current)},exitFullscreen:function(){u.default.isEnabled&&u.default.exit()},getIsFullscreen:function(){return r.current}}};
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var screenfull = require('screenfull');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var screenfull__default = /*#__PURE__*/_interopDefaultLegacy(screenfull);
11
+
12
+ function useFullscreenModule({ mainCarouselWrapperRef, emitObservable, handleResize, }) {
13
+ const isFullscreen = react.useRef(false);
14
+ react.useEffect(() => {
15
+ function handleFullscreenChange() {
16
+ if (document.fullscreenElement) {
17
+ setIsFullscreen(true);
18
+ emitObservable({
19
+ eventName: 'onFullscreenChange',
20
+ isFullscreen: true,
21
+ });
22
+ handleResize && handleResize();
23
+ }
24
+ if (!document.fullscreenElement) {
25
+ setIsFullscreen(false);
26
+ emitObservable({
27
+ eventName: 'onFullscreenChange',
28
+ isFullscreen: false,
29
+ });
30
+ handleResize && handleResize();
31
+ }
32
+ }
33
+ if (screenfull__default["default"].isEnabled) {
34
+ screenfull__default["default"].on('change', handleFullscreenChange);
35
+ return () => {
36
+ if (screenfull__default["default"].isEnabled) {
37
+ screenfull__default["default"].off('change', handleFullscreenChange);
38
+ }
39
+ };
40
+ }
41
+ });
42
+ function setIsFullscreen(_isFullscreen) {
43
+ isFullscreen.current = _isFullscreen;
44
+ }
45
+ function getIsFullscreen() {
46
+ return isFullscreen.current;
47
+ }
48
+ function enterFullscreen(elementRef) {
49
+ if (screenfull__default["default"].isEnabled) {
50
+ screenfull__default["default"].request((elementRef || mainCarouselWrapperRef.current));
51
+ }
52
+ }
53
+ function exitFullscreen() {
54
+ screenfull__default["default"].isEnabled && screenfull__default["default"].exit();
55
+ }
56
+ return {
57
+ enterFullscreen,
58
+ exitFullscreen,
59
+ getIsFullscreen,
60
+ };
61
+ }
62
+
63
+ exports.useFullscreenModule = useFullscreenModule;
2
64
  //# sourceMappingURL=useFullscreenModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFullscreenModule.js","sources":["../../src/modules/useFullscreenModule.tsx"],"sourcesContent":["import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\nimport { EmitObservableFn } from '../types'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n emitObservable: EmitObservableFn\n handleResize?(): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n emitObservable,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n emitObservable({\n eventName: 'onFullscreenChange',\n isFullscreen: true,\n })\n\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n emitObservable({\n eventName: 'onFullscreenChange',\n isFullscreen: false,\n })\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 })\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":["mainCarouselWrapperRef","emitObservable","handleResize","isFullscreen","useRef","setIsFullscreen","_isFullscreen","current","useEffect","handleFullscreenChange","document","fullscreenElement","eventName","screenfull","isEnabled","on","off","enterFullscreen","elementRef","request","exitFullscreen","exit","getIsFullscreen"],"mappings":"wOAUoCA,uBAClCA,EAAsBC,eACtBA,EAAcC,aACdA,IAEA,MAAMC,EAAeC,UAAO,GAkC5B,SAASC,EAAgBC,GACvBH,EAAaI,QAAUD,EAiBzB,OAlDAE,aAAU,KACR,SAASC,IACHC,SAASC,oBACXN,GAAgB,GAChBJ,EAAe,CACbW,UAAW,qBACXT,cAAc,IAGhBD,GAAgBA,KAGbQ,SAASC,oBACZN,GAAgB,GAChBJ,EAAe,CACbW,UAAW,qBACXT,cAAc,IAEhBD,GAAgBA,KAIpB,GAAIW,UAAWC,UAEb,OADAD,UAAWE,GAAG,SAAUN,GACjB,KACDI,UAAWC,WACbD,UAAWG,IAAI,SAAUP,OAwB1B,CACLQ,gBAXF,SAAyBC,GACnBL,UAAWC,WACbD,UAAWM,QAASD,GAAclB,EAAuBO,UAU3Da,eANF,WACEP,UAAWC,WAAaD,UAAWQ,QAMnCC,gBAjBF,WACE,OAAOnB,EAAaI"}
1
+ {"version":3,"file":"useFullscreenModule.js","sources":["../../src/modules/useFullscreenModule.tsx"],"sourcesContent":["import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\nimport { EmitObservableFn } from '../types'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n emitObservable: EmitObservableFn\n handleResize?(): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n emitObservable,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n emitObservable({\n eventName: 'onFullscreenChange',\n isFullscreen: true,\n })\n\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n emitObservable({\n eventName: 'onFullscreenChange',\n isFullscreen: false,\n })\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 })\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":["useRef","useEffect","screenfull"],"mappings":";;;;;;;;;;;SAUgB,mBAAmB,CAAC,EAClC,sBAAsB,EACtB,cAAc,EACd,YAAY,GACK;IACjB,MAAM,YAAY,GAAGA,YAAM,CAAC,KAAK,CAAC,CAAA;IAElCC,eAAS,CAAC;QACR,SAAS,sBAAsB;YAC7B,IAAI,QAAQ,CAAC,iBAAiB,EAAE;gBAC9B,eAAe,CAAC,IAAI,CAAC,CAAA;gBACrB,cAAc,CAAC;oBACb,SAAS,EAAE,oBAAoB;oBAC/B,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAA;gBAEF,YAAY,IAAI,YAAY,EAAE,CAAA;aAC/B;YAED,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBAC/B,eAAe,CAAC,KAAK,CAAC,CAAA;gBACtB,cAAc,CAAC;oBACb,SAAS,EAAE,oBAAoB;oBAC/B,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAA;gBACF,YAAY,IAAI,YAAY,EAAE,CAAA;aAC/B;SACF;QAED,IAAIC,8BAAU,CAAC,SAAS,EAAE;YACxBA,8BAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAA;YAC/C,OAAO;gBACL,IAAIA,8BAAU,CAAC,SAAS,EAAE;oBACxBA,8BAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAA;iBACjD;aACF,CAAA;SACF;KACF,CAAC,CAAA;IAEF,SAAS,eAAe,CAAC,aAAsB;QAC7C,YAAY,CAAC,OAAO,GAAG,aAAa,CAAA;KACrC;IAED,SAAS,eAAe;QACtB,OAAO,YAAY,CAAC,OAAO,CAAA;KAC5B;IAED,SAAS,eAAe,CAAC,UAAwB;QAC/C,IAAIA,8BAAU,CAAC,SAAS,EAAE;YACxBA,8BAAU,CAAC,OAAO,EAAE,UAAU,IAAI,sBAAsB,CAAC,OAAO,EAAa,CAAA;SAC9E;KACF;IAED,SAAS,cAAc;QACrBA,8BAAU,CAAC,SAAS,IAAIA,8BAAU,CAAC,IAAI,EAAE,CAAA;KAC1C;IAED,OAAO;QACL,eAAe;QACf,cAAc;QACd,eAAe;KAChB,CAAA;AACH;;;;"}
@@ -1,2 +1,185 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-spring"),n=require("../utils.js");const o=t.forwardRef((({children:t,...n},o)=>e.jsx(r.animated.div,Object.assign({},n,{ref:o},{children:t}),void 0)));exports.useThumbsModule=function({items:i,withThumbs:s,thumbsSlideAxis:u="x",springConfig:c,prepareThumbsData:l,itemsPerSlide:f,getFluidWrapperScrollValue:a=(()=>0),getSlideValue:m=(()=>0),CustomThumbsWrapperComponent:h}){const p=t.useRef(null),[d,b]=r.useSpring((()=>({x:0,y:0,config:c,onChange:({value:e})=>{p.current&&(p.current["x"===u?"scrollLeft":"scrollTop"]=Math.abs(e[u]))}})));function x(){return p.current["x"===u?"scrollLeft":"scrollTop"]}function g(){return Math.round(Number(p.current?.["x"===u?"scrollWidth":"scrollHeight"])-p.current.getBoundingClientRect()["x"===u?"width":"height"])}function D(){const e=Math.round(a()/m());return g()/e}n.useMount((()=>{if(s&&!p.current)throw new Error("The thumbs wrapper is not defined. If you've passed a Functional component, be sure to wrap your component in forwardRef.")}));const T=h?r.animated(h):o;return{thumbsFragment:s?e.jsx(T,Object.assign({ref:p,className:"use-spring-carousel-thumbs-wrapper",onWheel:()=>{d[u].stop()},style:{display:"flex",flex:1,position:"relative",flexDirection:"x"===u?"row":"column",..."x"===u?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"}}},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return l?l(e(i)):e(i)}().map((({id:t,renderThumb:r})=>{const n=`thumb-${t}`;return e.jsx("div",Object.assign({id:n},{children:r}),n)}))}),void 0):null,handleThumbsScroll:function(e,t){if("fluid"===f){const e=g();if("next"===t){const t=x()+D();b.start({from:{[u]:x()},to:{[u]:t>e?e:t}})}if("prev"===t){const e=x()-D();b.start({from:{[u]:x()},to:{[u]:e<0?0:e}})}}else{const t=p.current.querySelector(`#thumb-${i[e].id}`);if(t){const r=p.current,n="x"===u?"offsetWidth":"offsetHeight",o="x"===u?"scrollLeft":"scrollTop",s=function({thumbNode:e,offsetDirection:t,offsetDimension:r}){return e[t]+e[r]/2}({thumbNode:t,offsetDimension:n,offsetDirection:"x"===u?"offsetLeft":"offsetTop"}),c=function({thumbWrapper:e,offsetDimension:t}){return e[t]/2}({thumbWrapper:r,offsetDimension:n});b.start({from:{[u]:function({thumbWrapper:e,scrollDirection:t}){return e[t]}({thumbWrapper:r,scrollDirection:o})},to:{[u]:function({thumbWrapper:t,thumbOffsetPosition:r,thumbScrollDimension:n,offsetDimension:o}){const s="x"===u?"scrollWidth":"scrollHeight";return e===i.length-1||r-n>t[s]-t[o]?t[s]-t[o]:0===e?0:r-n}({thumbWrapper:r,thumbOffsetPosition:s,thumbScrollDimension:c,offsetDimension:n})},onChange:e=>{"x"===u?p.current.scrollLeft=e.x:p.current.scrollTop=e.y}})}}}}};
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var reactSpring = require('react-spring');
8
+ var utils = require('../utils.js');
9
+
10
+ const InternalWrapper = react.forwardRef(({ children, ...rest }, ref) => {
11
+ return (jsxRuntime.jsx(reactSpring.animated.div, Object.assign({}, rest, { ref: ref }, { children: children }), void 0));
12
+ });
13
+ function useThumbsModule({ items, withThumbs, thumbsSlideAxis = 'x', springConfig, prepareThumbsData, itemsPerSlide, getFluidWrapperScrollValue = () => 0, getSlideValue = () => 0, CustomThumbsWrapperComponent, }) {
14
+ const internalThumbsWrapperRef = react.useRef(null);
15
+ const [thumbListStyles, setThumbListStyles] = reactSpring.useSpring(() => ({
16
+ x: 0,
17
+ y: 0,
18
+ config: springConfig,
19
+ onChange: ({ value }) => {
20
+ if (internalThumbsWrapperRef.current) {
21
+ internalThumbsWrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] = Math.abs(value[thumbsSlideAxis]);
22
+ }
23
+ },
24
+ }));
25
+ utils.useMount(() => {
26
+ if (withThumbs && !internalThumbsWrapperRef.current) {
27
+ throw new Error("The thumbs wrapper is not defined. If you've passed a Functional component, be sure to wrap your component in forwardRef.");
28
+ }
29
+ });
30
+ function getCurrentThumbScrollValue() {
31
+ return internalThumbsWrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'];
32
+ }
33
+ function getThumbsTotalScrollableValue() {
34
+ return Math.round(Number(internalThumbsWrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight']) -
35
+ internalThumbsWrapperRef.current.getBoundingClientRect()[thumbsSlideAxis === 'x' ? 'width' : 'height']);
36
+ }
37
+ function getThumbSlideValue() {
38
+ const thumbSlideTotal = Math.round(getFluidWrapperScrollValue() / getSlideValue());
39
+ const totalScrollableValue = getThumbsTotalScrollableValue();
40
+ return totalScrollableValue / thumbSlideTotal;
41
+ }
42
+ function handleThumbsScroll(activeItem, actionType) {
43
+ if (itemsPerSlide === 'fluid') {
44
+ const totalScrollableValue = getThumbsTotalScrollableValue();
45
+ if (actionType === 'next') {
46
+ const nextValue = getCurrentThumbScrollValue() + getThumbSlideValue();
47
+ setThumbListStyles.start({
48
+ from: {
49
+ [thumbsSlideAxis]: getCurrentThumbScrollValue(),
50
+ },
51
+ to: {
52
+ [thumbsSlideAxis]: nextValue > totalScrollableValue ? totalScrollableValue : nextValue,
53
+ },
54
+ });
55
+ }
56
+ if (actionType === 'prev') {
57
+ const nextValue = getCurrentThumbScrollValue() - getThumbSlideValue();
58
+ setThumbListStyles.start({
59
+ from: {
60
+ [thumbsSlideAxis]: getCurrentThumbScrollValue(),
61
+ },
62
+ to: {
63
+ [thumbsSlideAxis]: nextValue < 0 ? 0 : nextValue,
64
+ },
65
+ });
66
+ }
67
+ }
68
+ else {
69
+ function getOffsetDirection() {
70
+ return thumbsSlideAxis === 'x' ? 'offsetLeft' : 'offsetTop';
71
+ }
72
+ function getOffsetDimension() {
73
+ return thumbsSlideAxis === 'x' ? 'offsetWidth' : 'offsetHeight';
74
+ }
75
+ function getScrollDirecton() {
76
+ return thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop';
77
+ }
78
+ function getThumbNode() {
79
+ return internalThumbsWrapperRef.current.querySelector(`#thumb-${items[activeItem].id}`);
80
+ }
81
+ function getThumbOffsetPosition({ thumbNode, offsetDirection, offsetDimension, }) {
82
+ return thumbNode[offsetDirection] + thumbNode[offsetDimension] / 2;
83
+ }
84
+ function getThumbScrollDimension({ thumbWrapper, offsetDimension, }) {
85
+ return thumbWrapper[offsetDimension] / 2;
86
+ }
87
+ function getScrollFromValue({ thumbWrapper, scrollDirection, }) {
88
+ return thumbWrapper[scrollDirection];
89
+ }
90
+ function getScrollToValue({ thumbWrapper, thumbOffsetPosition, thumbScrollDimension, offsetDimension, }) {
91
+ const scrollDimensionProperty = thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight';
92
+ if (activeItem === items.length - 1 ||
93
+ thumbOffsetPosition - thumbScrollDimension >
94
+ thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension]) {
95
+ return thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension];
96
+ }
97
+ if (activeItem === 0) {
98
+ return 0;
99
+ }
100
+ return thumbOffsetPosition - thumbScrollDimension;
101
+ }
102
+ const thumbNode = getThumbNode();
103
+ if (thumbNode) {
104
+ const thumbWrapper = internalThumbsWrapperRef.current;
105
+ const offsetDirection = getOffsetDirection();
106
+ const offsetDimension = getOffsetDimension();
107
+ const scrollDirection = getScrollDirecton();
108
+ const thumbOffsetPosition = getThumbOffsetPosition({
109
+ thumbNode,
110
+ offsetDimension,
111
+ offsetDirection,
112
+ });
113
+ const thumbScrollDimension = getThumbScrollDimension({
114
+ thumbWrapper,
115
+ offsetDimension,
116
+ });
117
+ setThumbListStyles.start({
118
+ from: {
119
+ [thumbsSlideAxis]: getScrollFromValue({
120
+ thumbWrapper,
121
+ scrollDirection,
122
+ }),
123
+ },
124
+ to: {
125
+ [thumbsSlideAxis]: getScrollToValue({
126
+ thumbWrapper,
127
+ thumbOffsetPosition,
128
+ thumbScrollDimension,
129
+ offsetDimension,
130
+ }),
131
+ },
132
+ onChange: val => {
133
+ if (thumbsSlideAxis === 'x') {
134
+ // @ts-ignore
135
+ internalThumbsWrapperRef.current.scrollLeft = val.x;
136
+ }
137
+ else {
138
+ // @ts-ignore
139
+ internalThumbsWrapperRef.current.scrollTop = val.y;
140
+ }
141
+ },
142
+ });
143
+ }
144
+ }
145
+ }
146
+ function handlePrepareThumbsDate() {
147
+ function getPreparedItems(_items) {
148
+ return _items.map(i => ({
149
+ id: i.id,
150
+ renderThumb: i.renderThumb,
151
+ }));
152
+ }
153
+ if (prepareThumbsData) {
154
+ return prepareThumbsData(getPreparedItems(items));
155
+ }
156
+ return getPreparedItems(items);
157
+ }
158
+ const Wrapper = CustomThumbsWrapperComponent
159
+ ? reactSpring.animated(CustomThumbsWrapperComponent)
160
+ : InternalWrapper;
161
+ const thumbsFragment = withThumbs ? (jsxRuntime.jsx(Wrapper, Object.assign({ ref: internalThumbsWrapperRef, className: "use-spring-carousel-thumbs-wrapper", onWheel: () => {
162
+ thumbListStyles[thumbsSlideAxis].stop();
163
+ }, style: {
164
+ display: 'flex',
165
+ flex: 1,
166
+ position: 'relative',
167
+ flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',
168
+ ...(thumbsSlideAxis === 'x'
169
+ ? { overflowX: 'auto' }
170
+ : {
171
+ overflowY: 'auto',
172
+ maxHeight: '100%',
173
+ }),
174
+ } }, { children: handlePrepareThumbsDate().map(({ id, renderThumb }) => {
175
+ const thumbId = `thumb-${id}`;
176
+ return (jsxRuntime.jsx("div", Object.assign({ id: thumbId }, { children: renderThumb }), thumbId));
177
+ }) }), void 0)) : null;
178
+ return {
179
+ thumbsFragment,
180
+ handleThumbsScroll,
181
+ };
182
+ }
183
+
184
+ exports.useThumbsModule = useThumbsModule;
2
185
  //# sourceMappingURL=useThumbsModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useThumbsModule.js","sources":["../../src/modules/useThumbsModule.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useRef } from 'react'\nimport { useSpring, SpringConfig, animated } from 'react-spring'\nimport { useMount } from 'src/utils'\nimport {\n UseSpringCarouselProps,\n ReactSpringThumbItem,\n PrepareThumbsData,\n UseSpringCarouselItems,\n SlideActionType,\n} from '../types'\n\ntype OffsetDimension = 'offsetWidth' | 'offsetHeight'\ntype OffsetDirection = 'offsetLeft' | 'offsetTop'\ntype ScrollDirection = 'scrollLeft' | 'scrollTop'\n\ntype Props = {\n items: UseSpringCarouselItems['items']\n withThumbs: boolean\n thumbsSlideAxis: UseSpringCarouselProps['thumbsSlideAxis']\n springConfig: SpringConfig\n prepareThumbsData?: PrepareThumbsData\n itemsPerSlide?: UseSpringCarouselProps['itemsPerSlide']\n CustomThumbsWrapperComponent?: UseSpringCarouselProps['CustomThumbsWrapperComponent']\n getFluidWrapperScrollValue?(): number\n getSlideValue?(): number\n}\n\ntype WrapperProps = {\n children: React.ReactNode\n} & HTMLAttributes<HTMLDivElement>\n\nconst InternalWrapper = forwardRef<HTMLDivElement, WrapperProps>(\n ({ children, ...rest }, ref) => {\n return (\n <animated.div {...rest} ref={ref}>\n {children}\n </animated.div>\n )\n },\n)\n\nexport function useThumbsModule({\n items,\n withThumbs,\n thumbsSlideAxis = 'x',\n springConfig,\n prepareThumbsData,\n itemsPerSlide,\n getFluidWrapperScrollValue = () => 0,\n getSlideValue = () => 0,\n CustomThumbsWrapperComponent,\n}: Props) {\n const internalThumbsWrapperRef = useRef<HTMLDivElement | null>(null)\n const [thumbListStyles, setThumbListStyles] = useSpring(() => ({\n x: 0,\n y: 0,\n config: springConfig,\n onChange: ({ value }) => {\n if (internalThumbsWrapperRef.current) {\n internalThumbsWrapperRef.current[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] = Math.abs(value[thumbsSlideAxis])\n }\n },\n }))\n\n useMount(() => {\n if (withThumbs && !internalThumbsWrapperRef.current) {\n throw new Error(\n \"The thumbs wrapper is not defined. If you've passed a Functional component, be sure to wrap your component in forwardRef.\",\n )\n }\n })\n\n function getCurrentThumbScrollValue() {\n return internalThumbsWrapperRef.current![\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n function getThumbsTotalScrollableValue() {\n return Math.round(\n Number(\n internalThumbsWrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n internalThumbsWrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function getThumbSlideValue() {\n const thumbSlideTotal = Math.round(getFluidWrapperScrollValue() / getSlideValue())\n const totalScrollableValue = getThumbsTotalScrollableValue()\n return totalScrollableValue / thumbSlideTotal\n }\n\n function handleThumbsScroll(activeItem: number, actionType?: SlideActionType) {\n if (itemsPerSlide === 'fluid') {\n const totalScrollableValue = getThumbsTotalScrollableValue()\n\n if (actionType === 'next') {\n const nextValue = getCurrentThumbScrollValue() + getThumbSlideValue()\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getCurrentThumbScrollValue(),\n },\n to: {\n [thumbsSlideAxis]:\n nextValue > totalScrollableValue ? totalScrollableValue : nextValue,\n },\n })\n }\n if (actionType === 'prev') {\n const nextValue = getCurrentThumbScrollValue() - getThumbSlideValue()\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getCurrentThumbScrollValue(),\n },\n to: {\n [thumbsSlideAxis]: nextValue < 0 ? 0 : nextValue,\n },\n })\n }\n } else {\n function getOffsetDirection() {\n return thumbsSlideAxis === 'x' ? 'offsetLeft' : 'offsetTop'\n }\n function getOffsetDimension() {\n return thumbsSlideAxis === 'x' ? 'offsetWidth' : 'offsetHeight'\n }\n function getScrollDirecton() {\n return thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n }\n function getThumbNode() {\n return internalThumbsWrapperRef.current!.querySelector(\n `#thumb-${items[activeItem].id}`,\n ) as HTMLElement\n }\n function getThumbOffsetPosition({\n thumbNode,\n offsetDirection,\n offsetDimension,\n }: {\n thumbNode: HTMLElement\n offsetDirection: OffsetDirection\n offsetDimension: OffsetDimension\n }) {\n return thumbNode[offsetDirection] + thumbNode[offsetDimension] / 2\n }\n function getThumbScrollDimension({\n thumbWrapper,\n offsetDimension,\n }: {\n thumbWrapper: HTMLDivElement\n offsetDimension: OffsetDimension\n }) {\n return thumbWrapper[offsetDimension] / 2\n }\n function getScrollFromValue({\n thumbWrapper,\n scrollDirection,\n }: {\n thumbWrapper: HTMLDivElement\n scrollDirection: ScrollDirection\n }) {\n return thumbWrapper[scrollDirection]\n }\n function getScrollToValue({\n thumbWrapper,\n thumbOffsetPosition,\n thumbScrollDimension,\n offsetDimension,\n }: {\n thumbWrapper: HTMLDivElement\n thumbOffsetPosition: number\n thumbScrollDimension: number\n offsetDimension: OffsetDimension\n }) {\n const scrollDimensionProperty =\n thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n\n if (\n activeItem === items.length - 1 ||\n thumbOffsetPosition - thumbScrollDimension >\n thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension]\n ) {\n return thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension]\n }\n if (activeItem === 0) {\n return 0\n }\n\n return thumbOffsetPosition - thumbScrollDimension\n }\n\n const thumbNode = getThumbNode()\n\n if (thumbNode) {\n const thumbWrapper = internalThumbsWrapperRef.current!\n const offsetDirection = getOffsetDirection()\n const offsetDimension = getOffsetDimension()\n const scrollDirection = getScrollDirecton()\n const thumbOffsetPosition = getThumbOffsetPosition({\n thumbNode,\n offsetDimension,\n offsetDirection,\n })\n const thumbScrollDimension = getThumbScrollDimension({\n thumbWrapper,\n offsetDimension,\n })\n\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getScrollFromValue({\n thumbWrapper,\n scrollDirection,\n }),\n },\n to: {\n [thumbsSlideAxis]: getScrollToValue({\n thumbWrapper,\n thumbOffsetPosition,\n thumbScrollDimension,\n offsetDimension,\n }),\n },\n onChange: val => {\n if (thumbsSlideAxis === 'x') {\n // @ts-ignore\n internalThumbsWrapperRef!.current!.scrollLeft = val.x\n } else {\n // @ts-ignore\n internalThumbsWrapperRef!.current!.scrollTop = val.y\n }\n },\n })\n }\n }\n }\n function handlePrepareThumbsDate() {\n function getPreparedItems(\n _items: UseSpringCarouselItems['items'],\n ): ReactSpringThumbItem[] {\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 Wrapper = CustomThumbsWrapperComponent\n ? animated(CustomThumbsWrapperComponent)\n : InternalWrapper\n\n const thumbsFragment = withThumbs ? (\n <Wrapper\n ref={internalThumbsWrapperRef}\n className=\"use-spring-carousel-thumbs-wrapper\"\n onWheel={() => {\n thumbListStyles[thumbsSlideAxis].stop()\n }}\n style={{\n display: 'flex',\n flex: 1,\n position: 'relative',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsDate().map(({ id, renderThumb }) => {\n const thumbId = `thumb-${id}`\n return (\n <div key={thumbId} id={thumbId}>\n {renderThumb}\n </div>\n )\n })}\n </Wrapper>\n ) : null\n\n return {\n thumbsFragment,\n handleThumbsScroll,\n }\n}\n"],"names":["InternalWrapper","forwardRef","children","rest","ref","_jsx","animated","div","items","withThumbs","thumbsSlideAxis","springConfig","prepareThumbsData","itemsPerSlide","getFluidWrapperScrollValue","getSlideValue","CustomThumbsWrapperComponent","internalThumbsWrapperRef","useRef","thumbListStyles","setThumbListStyles","useSpring","x","y","config","onChange","value","current","Math","abs","getCurrentThumbScrollValue","getThumbsTotalScrollableValue","round","Number","getBoundingClientRect","getThumbSlideValue","thumbSlideTotal","useMount","Error","Wrapper","thumbsFragment","className","onWheel","stop","style","display","flex","position","flexDirection","overflowX","overflowY","maxHeight","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsDate","thumbId","handleThumbsScroll","activeItem","actionType","totalScrollableValue","nextValue","start","from","[object Object]","to","thumbNode","querySelector","thumbWrapper","offsetDimension","scrollDirection","thumbOffsetPosition","offsetDirection","getThumbOffsetPosition","thumbScrollDimension","getThumbScrollDimension","getScrollFromValue","scrollDimensionProperty","length","getScrollToValue","val","scrollLeft","scrollTop"],"mappings":"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"}
1
+ {"version":3,"file":"useThumbsModule.js","sources":["../../src/modules/useThumbsModule.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useRef } from 'react'\nimport { useSpring, SpringConfig, animated } from 'react-spring'\nimport { useMount } from 'src/utils'\nimport {\n UseSpringCarouselProps,\n ReactSpringThumbItem,\n PrepareThumbsData,\n UseSpringCarouselItems,\n SlideActionType,\n} from '../types'\n\ntype OffsetDimension = 'offsetWidth' | 'offsetHeight'\ntype OffsetDirection = 'offsetLeft' | 'offsetTop'\ntype ScrollDirection = 'scrollLeft' | 'scrollTop'\n\ntype Props = {\n items: UseSpringCarouselItems['items']\n withThumbs: boolean\n thumbsSlideAxis: UseSpringCarouselProps['thumbsSlideAxis']\n springConfig: SpringConfig\n prepareThumbsData?: PrepareThumbsData\n itemsPerSlide?: UseSpringCarouselProps['itemsPerSlide']\n CustomThumbsWrapperComponent?: UseSpringCarouselProps['CustomThumbsWrapperComponent']\n getFluidWrapperScrollValue?(): number\n getSlideValue?(): number\n}\n\ntype WrapperProps = {\n children: React.ReactNode\n} & HTMLAttributes<HTMLDivElement>\n\nconst InternalWrapper = forwardRef<HTMLDivElement, WrapperProps>(\n ({ children, ...rest }, ref) => {\n return (\n <animated.div {...rest} ref={ref}>\n {children}\n </animated.div>\n )\n },\n)\n\nexport function useThumbsModule({\n items,\n withThumbs,\n thumbsSlideAxis = 'x',\n springConfig,\n prepareThumbsData,\n itemsPerSlide,\n getFluidWrapperScrollValue = () => 0,\n getSlideValue = () => 0,\n CustomThumbsWrapperComponent,\n}: Props) {\n const internalThumbsWrapperRef = useRef<HTMLDivElement | null>(null)\n const [thumbListStyles, setThumbListStyles] = useSpring(() => ({\n x: 0,\n y: 0,\n config: springConfig,\n onChange: ({ value }) => {\n if (internalThumbsWrapperRef.current) {\n internalThumbsWrapperRef.current[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] = Math.abs(value[thumbsSlideAxis])\n }\n },\n }))\n\n useMount(() => {\n if (withThumbs && !internalThumbsWrapperRef.current) {\n throw new Error(\n \"The thumbs wrapper is not defined. If you've passed a Functional component, be sure to wrap your component in forwardRef.\",\n )\n }\n })\n\n function getCurrentThumbScrollValue() {\n return internalThumbsWrapperRef.current![\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n function getThumbsTotalScrollableValue() {\n return Math.round(\n Number(\n internalThumbsWrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n internalThumbsWrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function getThumbSlideValue() {\n const thumbSlideTotal = Math.round(getFluidWrapperScrollValue() / getSlideValue())\n const totalScrollableValue = getThumbsTotalScrollableValue()\n return totalScrollableValue / thumbSlideTotal\n }\n\n function handleThumbsScroll(activeItem: number, actionType?: SlideActionType) {\n if (itemsPerSlide === 'fluid') {\n const totalScrollableValue = getThumbsTotalScrollableValue()\n\n if (actionType === 'next') {\n const nextValue = getCurrentThumbScrollValue() + getThumbSlideValue()\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getCurrentThumbScrollValue(),\n },\n to: {\n [thumbsSlideAxis]:\n nextValue > totalScrollableValue ? totalScrollableValue : nextValue,\n },\n })\n }\n if (actionType === 'prev') {\n const nextValue = getCurrentThumbScrollValue() - getThumbSlideValue()\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getCurrentThumbScrollValue(),\n },\n to: {\n [thumbsSlideAxis]: nextValue < 0 ? 0 : nextValue,\n },\n })\n }\n } else {\n function getOffsetDirection() {\n return thumbsSlideAxis === 'x' ? 'offsetLeft' : 'offsetTop'\n }\n function getOffsetDimension() {\n return thumbsSlideAxis === 'x' ? 'offsetWidth' : 'offsetHeight'\n }\n function getScrollDirecton() {\n return thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n }\n function getThumbNode() {\n return internalThumbsWrapperRef.current!.querySelector(\n `#thumb-${items[activeItem].id}`,\n ) as HTMLElement\n }\n function getThumbOffsetPosition({\n thumbNode,\n offsetDirection,\n offsetDimension,\n }: {\n thumbNode: HTMLElement\n offsetDirection: OffsetDirection\n offsetDimension: OffsetDimension\n }) {\n return thumbNode[offsetDirection] + thumbNode[offsetDimension] / 2\n }\n function getThumbScrollDimension({\n thumbWrapper,\n offsetDimension,\n }: {\n thumbWrapper: HTMLDivElement\n offsetDimension: OffsetDimension\n }) {\n return thumbWrapper[offsetDimension] / 2\n }\n function getScrollFromValue({\n thumbWrapper,\n scrollDirection,\n }: {\n thumbWrapper: HTMLDivElement\n scrollDirection: ScrollDirection\n }) {\n return thumbWrapper[scrollDirection]\n }\n function getScrollToValue({\n thumbWrapper,\n thumbOffsetPosition,\n thumbScrollDimension,\n offsetDimension,\n }: {\n thumbWrapper: HTMLDivElement\n thumbOffsetPosition: number\n thumbScrollDimension: number\n offsetDimension: OffsetDimension\n }) {\n const scrollDimensionProperty =\n thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n\n if (\n activeItem === items.length - 1 ||\n thumbOffsetPosition - thumbScrollDimension >\n thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension]\n ) {\n return thumbWrapper[scrollDimensionProperty] - thumbWrapper[offsetDimension]\n }\n if (activeItem === 0) {\n return 0\n }\n\n return thumbOffsetPosition - thumbScrollDimension\n }\n\n const thumbNode = getThumbNode()\n\n if (thumbNode) {\n const thumbWrapper = internalThumbsWrapperRef.current!\n const offsetDirection = getOffsetDirection()\n const offsetDimension = getOffsetDimension()\n const scrollDirection = getScrollDirecton()\n const thumbOffsetPosition = getThumbOffsetPosition({\n thumbNode,\n offsetDimension,\n offsetDirection,\n })\n const thumbScrollDimension = getThumbScrollDimension({\n thumbWrapper,\n offsetDimension,\n })\n\n setThumbListStyles.start({\n from: {\n [thumbsSlideAxis]: getScrollFromValue({\n thumbWrapper,\n scrollDirection,\n }),\n },\n to: {\n [thumbsSlideAxis]: getScrollToValue({\n thumbWrapper,\n thumbOffsetPosition,\n thumbScrollDimension,\n offsetDimension,\n }),\n },\n onChange: val => {\n if (thumbsSlideAxis === 'x') {\n // @ts-ignore\n internalThumbsWrapperRef!.current!.scrollLeft = val.x\n } else {\n // @ts-ignore\n internalThumbsWrapperRef!.current!.scrollTop = val.y\n }\n },\n })\n }\n }\n }\n function handlePrepareThumbsDate() {\n function getPreparedItems(\n _items: UseSpringCarouselItems['items'],\n ): ReactSpringThumbItem[] {\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 Wrapper = CustomThumbsWrapperComponent\n ? animated(CustomThumbsWrapperComponent)\n : InternalWrapper\n\n const thumbsFragment = withThumbs ? (\n <Wrapper\n ref={internalThumbsWrapperRef}\n className=\"use-spring-carousel-thumbs-wrapper\"\n onWheel={() => {\n thumbListStyles[thumbsSlideAxis].stop()\n }}\n style={{\n display: 'flex',\n flex: 1,\n position: 'relative',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsDate().map(({ id, renderThumb }) => {\n const thumbId = `thumb-${id}`\n return (\n <div key={thumbId} id={thumbId}>\n {renderThumb}\n </div>\n )\n })}\n </Wrapper>\n ) : null\n\n return {\n thumbsFragment,\n handleThumbsScroll,\n }\n}\n"],"names":["forwardRef","_jsx","animated","useRef","useSpring","useMount"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { UseSpringCarouselProps, UseSpringDafaultTypeReturnProps, UseSpringFluidTypeReturnProps } from './types';
3
3
  declare type ReturnHook<T> = T extends 'fluid' ? UseSpringFluidTypeReturnProps : UseSpringDafaultTypeReturnProps;
4
- export default function useSpringCarousel<T>({ itemsPerSlide, items, withLoop, draggingSlideTreshold, springConfig, shouldResizeOnWindowResize, withThumbs, enableThumbsWrapperScroll, carouselSlideAxis, thumbsSlideAxis, prepareThumbsData, initialActiveItem, initialStartingPosition, disableGestures, gutter, startEndGutter, touchAction, slideAmount, freeScroll, CustomThumbsWrapperComponent, }: UseSpringCarouselProps): ReturnHook<T> & {
4
+ export declare function useSpringCarousel<T>({ itemsPerSlide, items, withLoop, draggingSlideTreshold, springConfig, shouldResizeOnWindowResize, withThumbs, enableThumbsWrapperScroll, carouselSlideAxis, thumbsSlideAxis, prepareThumbsData, initialActiveItem, initialStartingPosition, disableGestures, gutter, startEndGutter, touchAction, slideAmount, freeScroll, CustomThumbsWrapperComponent, }: UseSpringCarouselProps): ReturnHook<T> & {
5
5
  carouselFragment: JSX.Element;
6
6
  thumbsFragment: JSX.Element;
7
7
  };