react-spring-carousel 3.0.0-beta090.6 → 3.0.0-beta090.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs2.js +1 -1
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.es2.js +127 -124
- package/dist/index.es2.js.map +1 -1
- package/dist/types/types/useSpringCarousel.types.d.ts +2 -0
- package/package.json +14 -11
package/dist/index.es2.js.map
CHANGED
|
@@ -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 slideGroupOfItems = false,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n const carouselItem = slideGroupOfItems\n ? mainCarouselWrapperRef.current\n : mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n let main = carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height']\n\n if (!slideGroupOfItems) {\n main += gutter\n }\n if (slideGroupOfItems) {\n main += gutter - startEndGutter * 2\n }\n\n return main\n }, [carouselSlideAxis, gutter, slideGroupOfItems, startEndGutter])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n const velocity = state.velocity\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n if (withLoop && freeScroll) {\n throw new Error(\"`withLoop` and `freeScroll` can't be used together.\")\n }\n if (freeScroll && slideType === 'fixed') {\n throw new Error(\"`freeScroll` can't be used when `scrollType=fixed`.\")\n }\n if (enableFreeScrollDrag && (slideType !== 'fluid' || !freeScroll)) {\n throw new Error(\n '`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`',\n )\n }\n if (slideGroupOfItems && freeScroll) {\n throw new Error(\"`slideGroupOfItems` and `freeScroll` can't be used together.\")\n }\n\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n startEndGutter,\n gutter,\n init,\n withLoop,\n slideType,\n freeScroll,\n enableFreeScrollDrag,\n slideGroupOfItems,\n ])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","slideGroupOfItems","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","main","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","velocity","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"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"}
|
|
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 slideGroupOfItems = false,\n customSlideValue,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const resizeByPropChange = useRef(false)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n\n /**\n * After the user hits start/end edges of the carousel,\n * we check where the user is going. This is useful\n * to correctly resize the carousel when the carousel is going\n * backward after reaching the last item in fluid slide mode\n */\n const directionAfterReachingEdges = useRef<'forward' | 'backward' | 'initial'>('initial')\n\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(slideType === 'fixed' && initialActiveItem === items.length - 1)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevTotalScrollValue = useRef(0)\n const prevWindowWidth = useRef(0)\n const prevSlidedValue = useRef(0)\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n const windowIsHidden = useRef(false)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map((i) => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map((i) => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const [spring, setSpring] = useSpring(\n () => ({\n val: 0,\n pause: !init,\n onChange: ({ value }) => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }),\n [freeScroll],\n )\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule<'use-spring'>({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as ItemWithThumb<'use-spring'>[],\n renderThumbFnProps: {\n getIsActiveItem,\n getIsPrevItem,\n useListenToCustomEvent,\n getIsNextItem,\n },\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: (val) => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n const getSlideValue = useCallback(() => {\n if (slideType === 'fluid' && typeof customSlideValue === 'number') return customSlideValue\n\n const carouselItem = slideGroupOfItems\n ? mainCarouselWrapperRef.current\n : mainCarouselWrapperRef.current?.querySelector('.use-spring-carousel-item')\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n let main = carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height']\n\n if (!slideGroupOfItems) {\n main += gutter\n }\n if (slideGroupOfItems) {\n main += gutter - startEndGutter * 2\n }\n\n return main\n }, [carouselSlideAxis, gutter, slideGroupOfItems, startEndGutter, customSlideValue, slideType])\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({ from, to, nextActiveItem, immediate = false, slideMode }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n const getTotalScrollValue = useCallback(() => {\n if (!carouselTrackWrapperRef.current) return 0\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }, [carouselSlideAxis, getSlideValue, items.length, startEndGutter, withLoop])\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n const getCarouselItemWidth = useCallback(() => {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector('.use-spring-carousel-item')\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[carouselSlideAxis === 'x' ? 'width' : 'height'] + gutter\n )\n }, [carouselSlideAxis, gutter])\n\n const setPosition = useCallback(\n (v: number) => {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n },\n [carouselSlideAxis, startEndGutter, withLoop],\n )\n\n const adjustCarouselWrapperPosition = useCallback(\n (shouldResetPosition = false) => {\n if (carouselTrackWrapperRef.current && shouldResetPosition) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n carouselTrackWrapperRef.current.style.left = `0`\n carouselTrackWrapperRef.current.style.top = `0`\n }\n\n if (slideType === 'fixed') {\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length - getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n }\n\n if (slideType === 'fluid') {\n setPosition(getCarouselItemWidth() * items.length)\n /**\n * User reached the last item and now is resizing the container that becomes smaller/bigger.\n * Example: on mobile devices the user rotates the device\n */\n if (\n lastItemReached.current &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop\n ) {\n const newVal = -getTotalScrollValue()\n prevSlidedValue.current = newVal\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n return\n }\n\n if (\n Math.abs(prevSlidedValue.current) > 0 &&\n getTotalScrollValue() !== Math.abs(prevSlidedValue.current) &&\n !withLoop &&\n !freeScroll &&\n directionAfterReachingEdges.current === 'backward'\n ) {\n const diff = prevTotalScrollValue.current - getTotalScrollValue()\n const next = prevSlidedValue.current + diff\n\n setSpring.start({\n immediate: true,\n val: next,\n })\n\n return () => {\n prevSlidedValue.current = next\n }\n }\n\n console.log('here')\n return\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\n\n /**\n * Here we make sure to always show the latest item as the\n * latest item visible in the carousel viewport.\n */\n if (Math.abs(nextValue) > getTotalScrollValue() && !withLoop) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val: prevSlidedValue.current,\n })\n } else {\n prevSlidedValue.current = nextValue\n setSpring.start({\n immediate: true,\n val: nextValue,\n })\n }\n\n setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n },\n [\n freeScroll,\n getCarouselItemWidth,\n getSlideValue,\n getTotalScrollValue,\n initialStartingPosition,\n items.length,\n itemsPerSlide,\n setPosition,\n setSpring,\n slideType,\n withLoop,\n ],\n )\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (typeof index === 'number') {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n\n type SlideToPrevNextItem = {\n type: SlideMode\n index?: number\n immediate?: boolean\n }\n function slideToPrevItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (firstItemReached.current && !withLoop)) return\n\n if (lastItemReached.current) {\n directionAfterReachingEdges.current = 'backward'\n }\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n }\n if (withLoop && (firstItemReached.current || nextItem < 0)) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function slideToNextItem({ type, index, immediate }: SlideToPrevNextItem) {\n if (!init || windowIsHidden.current || (lastItemReached.current && !withLoop)) return\n\n if (firstItemReached.current) {\n directionAfterReachingEdges.current = 'forward'\n }\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (freeScroll) {\n setStartEndItemReachedOnFreeScroll()\n }\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n immediate,\n })\n return\n }\n }\n if (withLoop && (lastItemReached.current || nextItem > items.length - 1)) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n immediate,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n immediate,\n })\n }\n function setDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }\n function initializeCarousel() {\n if (carouselTrackWrapperRef.current) {\n prevTotalScrollValue.current = getTotalScrollValue()\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n prevWindowWidth.current = window.innerWidth\n prevSlidedValue.current = 0\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n setDraggingSliderTreshold()\n adjustCarouselWrapperPosition()\n }\n }\n\n const enableDrag =\n (init && !disableGestures && !freeScroll) || (!!freeScroll && !!enableFreeScrollDrag)\n\n const bindDrag = useDrag(\n (state) => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n const tot = getTotalScrollValue()\n\n const velocity = state.velocity\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n state.cancel()\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ type: 'drag' })\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem({ type: 'drag' })\n state.cancel()\n }\n\n const res = tot - Math.abs(movement)\n\n if (res < -(getSlideValue() * 2)) {\n state.cancel()\n }\n\n return\n }\n\n if (state.last && freeScroll && movement > 0) {\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem({ type: 'drag' })\n }\n if (slideActionType.current === 'next') {\n slideToNextItem({ type: 'drag' })\n }\n }\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToNextItem({ type: 'drag' })\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n } else {\n slideToPrevItem({ type: 'drag' })\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n }\n if (state.last && state.canceled) {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: velocity,\n },\n })\n }\n },\n {\n enabled: enableDrag,\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] >\n 0 &&\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] <\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] ===\n getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex((item) => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(`The item doesn't exist; check that the id provided - ${id} - is correct.`)\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({ id, immediate, shouldReset, type }: InternalSlideToItem) {\n if (!init || windowIsHidden.current) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !shouldReset) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n } else {\n slideToPrevItem({\n type: type || shouldReset ? 'initial' : 'click',\n index: newActiveItem,\n immediate,\n })\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n function getIsActiveItem(id: string | number) {\n return (\n findItemIndex(id, \"The item you want to check doesn't exist; check the provided id.\") ===\n activeItem.current\n )\n }\n function getTouchAction() {\n if (disableGestures) {\n return 'unset'\n }\n\n if (carouselSlideAxis === 'x') {\n return 'pan-y'\n }\n return 'pan-x'\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: (animate = true) => {\n slideToPrevItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToNextItem: (animate = true) => {\n slideToNextItem({\n type: 'click',\n immediate: !animate,\n })\n },\n slideToItem: (id: string | number, animate = true) => {\n internalSlideToItem({ id, immediate: !animate })\n },\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n // uwc-debug-below\n useIsomorphicLayoutEffect(() => {\n /**\n * Set initial track position when carousel is initialized\n */\n if (carouselTrackWrapperRef.current && init) {\n resizeByPropChange.current = true\n initializeCarousel()\n }\n }, [init])\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\n resizeByPropChange.current = true\n internalSlideToItem({\n id: initialActiveItem,\n immediate: !animateWhenActiveItemChange,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialActiveItem])\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items.length, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n\n /**\n * When these props change we reset the carousel\n */\n useEffect(() => {\n if (init) {\n if (withLoop && freeScroll) {\n throw new Error(\"`withLoop` and `freeScroll` can't be used together.\")\n }\n if (freeScroll && slideType === 'fixed') {\n throw new Error(\"`freeScroll` can't be used when `scrollType=fixed`.\")\n }\n if (enableFreeScrollDrag && (slideType !== 'fluid' || !freeScroll)) {\n throw new Error(\n '`enableFreeScrollDrag` must be used with `slideType=fluid` and `freeScroll=true`',\n )\n }\n if (slideGroupOfItems && freeScroll) {\n throw new Error(\"`slideGroupOfItems` and `freeScroll` can't be used together.\")\n }\n\n resizeByPropChange.current = true\n initializeCarousel()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n startEndGutter,\n gutter,\n init,\n withLoop,\n slideType,\n freeScroll,\n enableFreeScrollDrag,\n slideGroupOfItems,\n ])\n\n useEffect(() => {\n if (!init) return\n function handleVisibilityChange() {\n if (document.hidden) {\n windowIsHidden.current = true\n } else {\n windowIsHidden.current = false\n }\n }\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [init])\n\n useEffect(() => {\n if (mainCarouselWrapperRef.current) {\n let timer: NodeJS.Timeout\n const observer = new ResizeObserver(() => {\n if (windowIsHidden.current) return\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n const cb = adjustCarouselWrapperPosition()\n window.clearTimeout(timer)\n\n timer = setTimeout(() => {\n prevTotalScrollValue.current = getTotalScrollValue()\n if (typeof cb === 'function') {\n cb()\n }\n }, 100)\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n }\n }, [adjustCarouselWrapperPosition, getTotalScrollValue])\n useEffect(() => {\n if (getControllerRef) {\n getControllerRef({\n slideToNextItem: res.slideToNextItem,\n slideToPrevItem: res.slideToPrevItem,\n slideToItem: res?.slideToItem,\n })\n }\n }, [getControllerRef, res.slideToItem, res.slideToNextItem, res.slideToPrevItem])\n\n const _thumbsFragment = <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: getTouchAction(),\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(\n index ===\n internalItems.findIndex(\n (i) => i.id === internalItems[internalItems.length - 1].id,\n ),\n ),\n }}\n >\n {typeof item.renderItem === 'function'\n ? item.renderItem({\n getIsActiveItem,\n getIsNextItem,\n getIsPrevItem,\n useListenToCustomEvent,\n })\n : item.renderItem}\n </div>\n )\n })}\n {(freeScroll || !withLoop) && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context = createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","useEffect","handleFullscreenChange","setIsFullscreen","screenfull","_isFullscreen","getIsFullscreen","enterFullscreen","elementRef","exitFullscreen","useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","getControllerRef","slideGroupOfItems","customSlideValue","itemsPerSlide","resizeByPropChange","draggingSlideTreshold","slideActionType","slideModeType","directionAfterReachingEdges","activeItem","firstItemReached","lastItemReached","carouselTrackWrapperRef","prevTotalScrollValue","prevWindowWidth","prevSlidedValue","prevWithLoop","prevSlideType","prevFreeScroll","windowIsHidden","internalItems","useCallback","i","spring","setSpring","useSpring","value","setStartEndItemReachedOnFreeScroll","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","getIsActiveItem","getIsPrevItem","getIsNextItem","adjustCarouselWrapperPosition","val","getItemStyles","isLastItem","getSlideValue","carouselItem","_a","main","slideToItem","from","to","nextActiveItem","immediate","slideMode","config","getTotalScrollValue","getAnimatedWrapperStyles","percentValue","getCarouselItemWidth","setPosition","v","positionProperty","ref","shouldResetPosition","newVal","diff","next","nextValue","getFromValue","getToValue","type","index","slideToPrevItem","nextItem","nextItemWillExceed","slideToNextItem","setDraggingSliderTreshold","initializeCarousel","internalSlideToItem","bindDrag","useDrag","state","isDragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","velocity","getWrapperOverflowStyles","getScrollHandlers","findItemIndex","id","error","itemIndex","item","shouldReset","currentItem","newActiveItem","_activeItem","getTouchAction","res","animate","useIsomorphicLayoutEffect","handleVisibilityChange","timer","observer","ResizeObserver","cb","_thumbsFragment","jsx","Context","carouselFragment","jsxs","createContext","useSpringCarouselContext","context","useContext"],"mappings":"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"}
|
|
@@ -45,6 +45,7 @@ export type SpringCarouselWithFixedItems = {
|
|
|
45
45
|
slideGroupOfItems?: boolean | undefined;
|
|
46
46
|
startEndGutter?: number;
|
|
47
47
|
initialActiveItem?: number;
|
|
48
|
+
customSlideValue?: never;
|
|
48
49
|
};
|
|
49
50
|
export type SpringCarouselWithNoFixedItems = {
|
|
50
51
|
slideType?: SlideType[1];
|
|
@@ -52,6 +53,7 @@ export type SpringCarouselWithNoFixedItems = {
|
|
|
52
53
|
slideGroupOfItems?: never;
|
|
53
54
|
startEndGutter?: never;
|
|
54
55
|
initialActiveItem?: never;
|
|
56
|
+
customSlideValue?: number;
|
|
55
57
|
};
|
|
56
58
|
export type SpringCarouselWithLoop = {
|
|
57
59
|
withLoop: true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-spring-carousel",
|
|
3
|
-
"version": "3.0.0-beta090.
|
|
3
|
+
"version": "3.0.0-beta090.7",
|
|
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",
|
|
@@ -45,15 +45,16 @@
|
|
|
45
45
|
],
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@react-spring/web": "^9.7.2",
|
|
48
|
-
"@storybook/addon-essentials": "^7.0.
|
|
49
|
-
"@storybook/addon-interactions": "^7.0.
|
|
50
|
-
"@storybook/addon-links": "^7.0.
|
|
51
|
-
"@storybook/
|
|
52
|
-
"@storybook/
|
|
53
|
-
"@storybook/
|
|
54
|
-
"@storybook/react
|
|
55
|
-
"@storybook/
|
|
56
|
-
"@storybook/
|
|
48
|
+
"@storybook/addon-essentials": "^7.0.7",
|
|
49
|
+
"@storybook/addon-interactions": "^7.0.7",
|
|
50
|
+
"@storybook/addon-links": "^7.0.7",
|
|
51
|
+
"@storybook/addon-mdx-gfm": "^7.0.7",
|
|
52
|
+
"@storybook/blocks": "^7.0.7",
|
|
53
|
+
"@storybook/manager-api": "^7.0.7",
|
|
54
|
+
"@storybook/react": "^7.0.7",
|
|
55
|
+
"@storybook/react-vite": "^7.0.7",
|
|
56
|
+
"@storybook/testing-library": "^0.1.0",
|
|
57
|
+
"@storybook/theming": "^7.0.7",
|
|
57
58
|
"@types/react": "^18.0.28",
|
|
58
59
|
"@types/react-dom": "^18.0.11",
|
|
59
60
|
"@typescript-eslint/eslint-plugin": "^5.59.0",
|
|
@@ -71,8 +72,10 @@
|
|
|
71
72
|
"lint-staged": "^13.2.1",
|
|
72
73
|
"prettier": "^2.8.8",
|
|
73
74
|
"prop-types": "^15.8.1",
|
|
75
|
+
"react": "^18.2.0",
|
|
76
|
+
"react-dom": "^18.2.0",
|
|
74
77
|
"react-hooks": "^1.0.1",
|
|
75
|
-
"storybook": "^7.0.
|
|
78
|
+
"storybook": "^7.0.7",
|
|
76
79
|
"typescript": "^5.0.2",
|
|
77
80
|
"vite": "^4.3.0",
|
|
78
81
|
"vite-plugin-dts": "^2.3.0",
|