react-spring-carousel 3.0.0-beta090.3 → 3.0.0-beta090.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es2.js","sources":["../src/modules/useFullscreenModule.ts","../src/useSpringCarousel.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport screenfull from 'screenfull'\n\nimport { FullscreenModule } from '../types/useFullscreenModule.types'\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n onFullScreenChange,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n onFullScreenChange(true)\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n onFullScreenChange(false)\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { config, useIsomorphicLayoutEffect, useSpring } from '@react-spring/web'\nimport { useDrag } from '@use-gesture/react'\nimport React, { createContext, useCallback, useContext, useEffect, useRef } from 'react'\nimport ResizeObserver from 'resize-observer-polyfill'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n ItemWithThumb,\n SlideActionType,\n SlideMode,\n SlideType,\n UseSpringCarouselComplete,\n UseSpringCarouselWithFixedItems,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithThumbs,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithFixedItems<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoFixedItems<false>): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n getControllerRef,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialStartingPosition, itemsPerSlide, startEndGutter, gutter, init, withLoop, slideType])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.es2.js","sources":["../src/modules/useFullscreenModule.ts","../src/useSpringCarousel.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport screenfull from 'screenfull'\n\nimport { FullscreenModule } from '../types/useFullscreenModule.types'\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n onFullScreenChange,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n onFullScreenChange(true)\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n onFullScreenChange(false)\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { config, useIsomorphicLayoutEffect, useSpring } from '@react-spring/web'\nimport { useDrag } from '@use-gesture/react'\nimport React, { createContext, useCallback, useContext, useEffect, useRef } from 'react'\nimport ResizeObserver from 'resize-observer-polyfill'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n ItemWithThumb,\n SlideActionType,\n SlideMode,\n SlideType,\n UseSpringCarouselComplete,\n UseSpringCarouselWithFixedItems,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithThumbs,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithFixedItems<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoFixedItems<false>): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n getControllerRef,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n if (withLoop && freeScroll) {\n throw new Error(\"`withLoop` and `freeScroll` can't be used together.\")\n }\n if (freeScroll && slideType === 'fixed') {\n throw new Error(\"`freeScroll` can't be used when `scrollType=fixed`.\")\n }\n if (enableFreeScrollDrag && (slideType !== 'fluid' || !freeScroll)) {\n throw new Error(\n '`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`',\n )\n }\n\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n startEndGutter,\n gutter,\n init,\n withLoop,\n slideType,\n freeScroll,\n enableFreeScrollDrag,\n ])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"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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-beta090.3",
3
+ "version": "3.0.0-beta090.4",
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",