react-spring-carousel 3.0.0-beta047 → 3.0.0-beta049
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":"useSpringCarousel.js","sources":["../../src/useSpringCarousel.tsx"],"sourcesContent":["import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n SlideType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const resizeByPropChange = useRef(false)\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n pause: !init,\n onChange({ value }) {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }))\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map(i => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map(i => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n function getTotalScrollValue() {\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current!.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter,\n )\n }\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n const currentFromValue = Math.abs(getFromValue())\n if (\n currentFromValue < getTotalScrollValue() &&\n slideType === 'fluid' &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\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 setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (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 || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n 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 || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n 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 getDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n return draggingSlideTreshold.current\n }\n\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n resizeByPropChange.current = true\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialStartingPosition, itemsPerSlide, startEndGutter, gutter, init])\n useEffect(() => {\n /**\n * When these props change we reset the carousel\n */\n if (\n withLoop !== prevWithLoop.current ||\n slideType !== prevSlideType.current ||\n freeScroll !== prevFreeScroll.current\n ) {\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [withLoop, slideType, freeScroll])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n /**\n * When itemsPerSlide change we need to update the draggingSlideTreshold.current,\n * since it's default value is based on the calculation of the\n * width of a single item\n */\n getDraggingSliderTreshold()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold, itemsPerSlide, slideType])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n if ('ResizeObserver' in window && mainCarouselWrapperRef.current) {\n const observer = new ResizeObserver(() => {\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n } else {\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n carouselSlideAxis,\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n\n const bindDrag = useDrag(\n state => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > getDraggingSliderTreshold()\n const nextItemTreshold = currentMovement < -getDraggingSliderTreshold()\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 (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem({ 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 && !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\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:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex(item => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({\n id,\n immediate,\n shouldReset,\n type,\n }: InternalSlideToItem) {\n if (!init) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !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(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => {\n slideToPrevItem({\n type: 'click',\n })\n },\n slideToNextItem: () => {\n slideToNextItem({\n type: 'click',\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => {\n slideToPrevItem({\n type: 'click',\n })\n },\n slideToNextItem: () => {\n slideToNextItem({\n type: 'click',\n })\n },\n slideToItem: (id: string | number) => internalSlideToItem({ id }),\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !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(!!freeScroll && index === items.length - 1),\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 && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context =\n createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","resizeByPropChange","useRef","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","spring","setSpring","useSpring","val","pause","onChange","value","mainCarouselWrapperRef","current","scrollLeft","Math","abs","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","style","transform","activeItem","firstItemReached","lastItemReached","prevWithLoop","prevSlideType","prevFreeScroll","internalItems","useCallback","map","i","Object","assign","id","getItems","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","enterFullscreen","exitFullscreen","getIsFullscreen","useFullscreenModule","handleResize","adjustCarouselWrapperPosition","onFullScreenChange","eventName","isFullscreen","getSlideValue","carouselItem","_a","querySelector","Error","getBoundingClientRect","slideToItem","from","to","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","start","config","default","velocity","onRest","finished","currentItem","getTotalScrollValue","round","Number","getCarouselItemWidth","positionProperty","setPosition","v","ref","top","left","getFromValue","nextValue","setTimeout","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","getDraggingSliderTreshold","floor","useEffect","internalSlideToItem","console","warn","window","innerWidth","shouldReset","useLayoutEffect","observer","ResizeObserver","observe","disconnect","addEventListener","removeEventListener","bindDrag","useDrag","state","isDragging","dragging","movement","offset","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","res","_thumbsFragment","_jsx","Context","Provider","children","carouselFragment","className","onWheel","stop","display","position","width","height","overflowX","overflowY","_jsxs","flexDirection","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","flex","isLastItem","marginRight","renderItem","createContext","undefined","useSpringCarouselContext","context","useContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSpringCarousel.js","sources":["../../src/useSpringCarousel.tsx"],"sourcesContent":["import { config, useSpring } from '@react-spring/web'\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\n\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n SlideActionType,\n SlideMode,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n UseSpringFreeScrollReturnType,\n UseSpringReturnType,\n SlideType,\n} from './types'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n animateWhenActiveItemChange = true,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const resizeByPropChange = useRef(false)\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(\n () => ({\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 activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const prevWithLoop = useRef(withLoop)\n const prevSlideType = useRef(slideType)\n const prevFreeScroll = useRef(freeScroll)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map(i => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map(i => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: SlideMode\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n function getTotalScrollValue() {\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current!.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter,\n )\n }\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n\n firstItemReached.current = false\n lastItemReached.current = false\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n const currentFromValue = Math.abs(getFromValue())\n if (\n currentFromValue < getTotalScrollValue() &&\n slideType === 'fluid' &&\n lastItemReached.current &&\n !withLoop\n ) {\n lastItemReached.current = false\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const nextValue = -(getSlideValue() * activeItem.current)\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 setTimeout(() => {\n resizeByPropChange.current = false\n }, 0)\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (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 || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = typeof index === 'number' ? index : activeItem.current - 1\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n 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 || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n 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 getDraggingSliderTreshold() {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n return draggingSlideTreshold.current\n }\n\n useEffect(() => {\n if (activeItem.current !== initialActiveItem) {\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, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n resizeByPropChange.current = true\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialStartingPosition, itemsPerSlide, startEndGutter, gutter, init])\n useEffect(() => {\n /**\n * When these props change we reset the carousel\n */\n if (\n withLoop !== prevWithLoop.current ||\n slideType !== prevSlideType.current ||\n freeScroll !== prevFreeScroll.current\n ) {\n prevWithLoop.current = withLoop\n prevSlideType.current = slideType\n prevFreeScroll.current = freeScroll\n\n if (carouselTrackWrapperRef.current) {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px, 0px,0px)`\n setSpring.start({\n val: 0,\n immediate: true,\n })\n }\n\n internalSlideToItem({ id: 0, immediate: true, shouldReset: true })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [withLoop, slideType, freeScroll])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n /**\n * When itemsPerSlide change we need to update the draggingSlideTreshold.current,\n * since it's default value is based on the calculation of the\n * width of a single item\n */\n getDraggingSliderTreshold()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold, itemsPerSlide, slideType])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n if ('ResizeObserver' in window && mainCarouselWrapperRef.current) {\n const observer = new ResizeObserver(() => {\n if (!resizeByPropChange.current) {\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n })\n observer.observe(mainCarouselWrapperRef.current)\n return () => {\n observer.disconnect()\n }\n } else {\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n carouselSlideAxis,\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n\n const bindDrag = useDrag(\n state => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > getDraggingSliderTreshold()\n const nextItemTreshold = currentMovement < -getDraggingSliderTreshold()\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\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:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex(item => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n type InternalSlideToItem = {\n id: string | number\n immediate?: boolean\n shouldReset?: boolean\n type?: SlideType\n }\n function internalSlideToItem({\n id,\n immediate,\n shouldReset,\n type,\n }: InternalSlideToItem) {\n if (!init) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current && !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(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n }\n\n const res = freeScroll\n ? {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => {\n slideToPrevItem({\n type: 'click',\n })\n },\n slideToNextItem: () => {\n slideToNextItem({\n type: 'click',\n })\n },\n }\n : {\n useListenToCustomEvent,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n slideToPrevItem: () => {\n slideToPrevItem({\n type: 'click',\n })\n },\n slideToNextItem: () => {\n slideToNextItem({\n type: 'click',\n })\n },\n slideToItem: (id: string | number) => internalSlideToItem({ id }),\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem,\n }\n\n const _thumbsFragment = (\n <Context.Provider value={res}>{thumbsFragment}</Context.Provider>\n )\n const carouselFragment = (\n <Context.Provider value={res}>\n <div\n className=\"use-spring-carousel-main-wrapper\"\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n className=\"use-spring-carousel-track-wrapper\"\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {(freeScroll || !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(!!freeScroll && index === items.length - 1),\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 && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n </Context.Provider>\n )\n\n return { ...res, carouselFragment, thumbsFragment: _thumbsFragment }\n}\n\ntype ContextProps<T = undefined> = Omit<\n ReturnType<T extends 'free-scroll' ? true : false>,\n 'carouselFragment' | 'thumbsFragment'\n>\n\nconst Context =\n createContext<ContextProps | ContextProps<'free-scroll'> | undefined>(undefined)\n\nfunction useSpringCarouselContext<T>() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context as ContextProps<T>\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","animateWhenActiveItemChange","resizeByPropChange","useRef","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","spring","setSpring","useSpring","val","pause","onChange","value","mainCarouselWrapperRef","current","scrollLeft","Math","abs","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","style","transform","activeItem","firstItemReached","lastItemReached","prevWithLoop","prevSlideType","prevFreeScroll","internalItems","useCallback","map","i","Object","assign","id","getItems","emitEvent","useListenToCustomEvent","useEventsModule","thumbsFragment","handleScroll","useThumbsModule","enterFullscreen","exitFullscreen","getIsFullscreen","useFullscreenModule","handleResize","adjustCarouselWrapperPosition","onFullScreenChange","eventName","isFullscreen","getSlideValue","carouselItem","_a","querySelector","Error","getBoundingClientRect","slideToItem","from","to","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","start","config","default","velocity","onRest","finished","currentItem","getTotalScrollValue","round","Number","getCarouselItemWidth","positionProperty","setPosition","v","ref","top","left","getFromValue","nextValue","setTimeout","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","getDraggingSliderTreshold","floor","useEffect","internalSlideToItem","console","warn","window","innerWidth","shouldReset","useLayoutEffect","observer","ResizeObserver","observe","disconnect","addEventListener","removeEventListener","bindDrag","useDrag","state","isDragging","dragging","movement","offset","currentMovement","direction","prevItemTreshold","nextItemTreshold","tot","friction","tension","cancel","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","res","_thumbsFragment","_jsx","Context","Provider","children","carouselFragment","className","onWheel","stop","display","position","width","height","overflowX","overflowY","_jsxs","flexDirection","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","flex","isLastItem","marginRight","renderItem","createContext","undefined","useSpringCarouselContext","context","useContext"],"mappings":"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"}
|
package/dist/umd/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react/jsx-runtime"),require("@react-spring/web"),require("react"),require("@use-gesture/react"),require("screenfull")):"function"==typeof define&&define.amd?define(["exports","react/jsx-runtime","@react-spring/web","react","@use-gesture/react","screenfull"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactSpringCarousel={},e.ReactJSXRuntime,e.ReactSpring,e.React,e.UseGestureReact,e.Screenfull)}(this,(function(e,t,n,r,i,s){"use strict";const c="RSC::Event";function o(){const e=r.useRef(null);return{useListenToCustomEvent:function(t){r.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener(c,n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(c,n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent(c,{detail:t});e.current.dispatchEvent(n)}}}}function u({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:n}){const i=r.useRef(!1);function c(e){i.current=e}return r.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),n&&n()),document.fullscreenElement||(c(!1),t(!1),n&&n())}if(s.isEnabled)return s.on("change",e),()=>{s.isEnabled&&s.off("change",e)}}),[]),{enterFullscreen:function(t){s.isEnabled&&s.request(t||e.current)},exitFullscreen:function(){s.isEnabled&&s.exit()},getIsFullscreen:function(){return i.current}}}function l({thumbsSlideAxis:e="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=r.useRef(null),[u,l]=n.useSpring((()=>({val:0})));function a(){var t;return Math.round(Number(null===(t=o.current)||void 0===t?void 0:t["x"===e?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===e?"width":"height"])}return{thumbsFragment:i?t.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>u.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===e?"row":"column"},"x"===e?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:e,renderThumb:n})=>{const r=`thumb-item-${e}`;return t.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(t){var n,r;const i=o.current?o.current.querySelector(`#thumb-item-${c[t].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const t=i.offsetLeft,s=t>a()?a():t;l.start({from:{val:null!==(r=null===(n=o.current)||void 0===n?void 0:n["x"===e?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:s},onChange:({value:t})=>{o.current&&(o.current["x"===e?"scrollLeft":"scrollTop"]=Math.abs(t.val))}})}}}}const a=r.createContext(void 0);const d={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const f=r.createContext(void 0);e.useEventsModule=o,e.useFullscreenModule=u,e.useSpringCarousel=function({items:e,init:s=!0,withThumbs:c,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:m="fixed",gutter:g=0,withLoop:h=!1,startEndGutter:v=0,carouselSlideAxis:p="x",disableGestures:x=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:y=!1,freeScroll:j,enableFreeScrollDrag:w,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:R=0,animateWhenActiveItemChange:E=!0}){const I=r.useRef(!1),S=f>e.length?e.length:f,C=r.useRef(0),M=r.useRef(null!=b?b:0),F=r.useRef("initial"),L=r.useRef("initial"),A=r.useRef(0),[N,$]=n.useSpring((()=>({val:0,pause:!s,onChange({value:e}){j&&q.current?("x"===p?q.current.scrollLeft=Math.abs(e.val):q.current.scrollTop=Math.abs(e.val),le()):D.current&&(D.current.style.transform="x"===p?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}}))),k=r.useRef(R),P=r.useRef(0===R),W=r.useRef(!1),q=r.useRef(null),D=r.useRef(null),B=r.useRef(h),z=r.useRef(m),H=r.useRef(j),G=r.useCallback((()=>h?[...e.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...e,...e.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...e]),[e,h])(),{emitEvent:X,useListenToCustomEvent:Y}=o(),{thumbsFragment:J,handleScroll:U}=l({withThumbs:!!c,thumbsSlideAxis:d,prepareThumbsData:O,items:e}),{enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V}=u({mainCarouselWrapperRef:q,handleResize:()=>ne(),onFullScreenChange:e=>{X({eventName:"onFullscreenChange",isFullscreen:e})}});function Z(){var e;const t=null===(e=q.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+g}function _({from:t,to:r,nextActiveItem:i,immediate:s=!1,slideMode:o}){L.current=o,"number"==typeof i&&(j||(k.current=i),X({eventName:"onSlideStartChange",slideActionType:F.current,slideMode:L.current,nextItem:{startReached:P.current,endReached:W.current,index:j?-1:k.current,id:j?"":e[k.current].id}})),A.current=r,$.start({immediate:s,from:{val:t},to:{val:r},config:Object.assign(Object.assign({},n.config.default),{velocity:N.val.velocity}),onRest(t){!s&&t.finished&&X({eventName:"onSlideChange",slideActionType:F.current,slideMode:L.current,currentItem:{startReached:P.current,endReached:W.current,index:j?-1:k.current,id:j?"":e[k.current].id}})}}),c&&!s&&U(k.current)}function ee(){var t;return h?Z()*e.length:Math.round(Number(null===(t=D.current)||void 0===t?void 0:t["x"===p?"scrollWidth":"scrollHeight"])-D.current.getBoundingClientRect()["x"===p?"width":"height"]-v)}function te(){var e;const t=null===(e=D.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+g}function ne(){const t="x"===p?"left":"top";function n(e){const n=D.current;n&&(h?(n.style.top="0px",n.style.left="0px",n.style[t]=`-${e-v}px`,P.current=!1,W.current=!1):(n.style.left="0px",n.style.top="0px"))}n("center"===T?te()*e.length-Z()*Math.round((S-1)/2):"end"===T?te()*e.length-Z()*Math.round(S-1):te()*e.length);if(Math.abs(re())<ee()&&"fluid"===m&&W.current&&!h&&(W.current=!1),!j&&"fixed"===m){const e=-Z()*k.current;if(Math.abs(e)>ee()&&!h){const e=-ee();W.current=!0,A.current=e,$.start({immediate:!0,val:A.current})}else A.current=e,$.start({immediate:!0,val:e});setTimeout((()=>{I.current=!1}),0)}}function re(){return j&&q.current?q.current["x"===p?"scrollLeft":"scrollTop"]:N.val.get()}function ie(e,t){if(j&&"next"===e){const e=A.current+Z();return e>ee()?ee():e}if(j&&"prev"===e){const e=A.current-Z();return e<0?0:e}return"next"===e?"number"==typeof t?-t*Z():A.current-Z():"number"==typeof t?-t*Z():A.current+Z()}function se({type:t,index:n,immediate:r}){if(!s||P.current&&!h)return;F.current="prev",W.current=!1;const i="number"==typeof n?n:k.current-1;if(!h){const e=j?ie("prev",n)-Z()/3<0:ie("prev",n)+Z()/3>0;if(P.current)return;if(e)return P.current=!0,W.current=!1,void _({slideMode:t,from:re(),to:0,nextActiveItem:0,immediate:r})}if(h&&(P.current||i<0))return P.current=!1,W.current=!0,void _({slideMode:t,from:re()-Z()*e.length,to:-Z()*e.length+Z(),nextActiveItem:e.length-1,immediate:r});0===i&&(P.current=!0),i!==e.length-1&&-1!==i||(W.current=!0),_({slideMode:t,from:re(),to:ie("prev",n),nextActiveItem:i,immediate:r})}function ce({type:t,index:n,immediate:r}){if(!s||W.current&&!h)return;F.current="next",P.current=!1;const i=n||k.current+1;if(!h){const e=Math.abs(ie("next",n))>ee()-Z()/3;if(W.current)return;if(e)return P.current=!1,W.current=!0,void _({slideMode:t,from:re(),to:j?ee():-ee(),nextActiveItem:i,immediate:r})}if(h&&(W.current||i>e.length-1))return W.current=!1,P.current=!0,void _({slideMode:t,from:re()+Z()*e.length,to:0,nextActiveItem:0,immediate:r});0===i&&(P.current=!0),i===e.length-1&&(W.current=!0),_({slideMode:t,from:re(),to:ie("next",n),nextActiveItem:i,immediate:r})}function oe(){return M.current=b||Math.floor(Z()/2/2),M.current}r.useEffect((()=>{k.current!==R&&de({id:R,immediate:!E})}),[R]),r.useEffect((()=>{if(s){if(R>e.length-1)throw new Error(`initialActiveItem (${R}) is greater than the total quantity available items (${e.length}).`);S>e.length&&console.warn(`itemsPerSlide (${S}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,S,s]),r.useEffect((()=>{C.current=window.innerWidth}),[]),r.useEffect((()=>{I.current=!0,ne()}),[T,S,v,g,s]),r.useEffect((()=>{h===B.current&&m===z.current&&j===H.current||(B.current=h,z.current=m,H.current=j,de({id:0,immediate:!0,shouldReset:!0}))}),[h,m,j]),r.useLayoutEffect((()=>{D.current&&ne()}),[]),r.useEffect((()=>{oe()}),[b,S,m]),r.useEffect((()=>{function e(){window.innerWidth!==C.current&&(C.current=window.innerWidth,ne())}if("ResizeObserver"in window&&q.current){const e=new ResizeObserver((()=>{I.current||(C.current=window.innerWidth,ne())}));return e.observe(q.current),()=>{e.disconnect()}}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[p,T,S,h,v,g,j,m,s]);const ue=i.useDrag((e=>{const t=e.dragging,r=e.offset["x"===p?0:1],i=e.movement["x"===p?0:1],s=e.direction["x"===p?0:1],c=i>oe(),o=i<-oe(),u=ee();if(t){if(F.current=s>0?"prev":"next",X(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:F.current})),j)return"prev"===F.current&&r>0?(e.cancel(),void $.start({from:{val:re()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}})):void $.start({from:{val:re()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}});$.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),y&&o?(ce({type:"drag"}),e.cancel()):y&&c&&(se({type:"drag"}),e.cancel());u-Math.abs(r)<-2*Z()&&e.cancel()}else e.last&&!e.canceled&&j&&("prev"===F.current&&se({type:"drag"}),"next"===F.current&&ce({type:"drag"})),!e.last||e.canceled||j||(o?!h&&W.current?$.start({val:-ee(),config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):ce({type:"drag"}):c?!h&&P.current?$.start({val:0,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):se({type:"drag"}):$.start({val:A.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})})),e.last&&e.canceled&&$.start({val:A.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})})}),{enabled:s&&!x&&!j||!!j&&!!w,axis:p,from:()=>j&&q.current?[-q.current.scrollLeft,-q.current.scrollTop]:[N.val.get(),N.val.get()]});function le(){q.current&&(A.current=q.current["x"===p?"scrollLeft":"scrollTop"],0===q.current["x"===p?"scrollLeft":"scrollTop"]&&(P.current=!0,W.current=!1),q.current["x"===p?"scrollLeft":"scrollTop"]>0&&q.current["x"===p?"scrollLeft":"scrollTop"]<ee()&&(P.current=!1,W.current=!1),q.current["x"===p?"scrollLeft":"scrollTop"]===ee()&&(P.current=!1,W.current=!0))}function ae(t,n){let r=0;if(r="string"==typeof t?e.findIndex((e=>e.id===t)):t,r<0||r>=e.length){if(n)throw new Error(n);console.error(`The item doesn't exist; check that the id provided - ${t} - is correct.`),r=-1}return r}function de({id:t,immediate:n,shouldReset:r,type:i}){if(!s)return;P.current=!1,W.current=!1;const c=ae(t,"The item you want to slide to doesn't exist; check the provided id.");if(c===k.current&&!r)return;const o=ae(e[k.current].id),u=ae(e[c].id);u>o?ce({type:i||r?"initial":"click",index:u,immediate:n}):se({type:i||r?"initial":"click",index:u,immediate:n})}function fe(t){const n=ae(t,"The item doesn't exist; check the provided id."),r=k.current;return h&&r===e.length-1?0===n:n===r+1}function me(t){const n=ae(t,"The item doesn't exist; check the provided id."),r=k.current;return h&&0===r?n===e.length-1:n===r-1}function ge(e){return ae(e,"The item you want to check doesn't exist; check the provided id.")===k.current}const he=j?{useListenToCustomEvent:Y,enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V,slideToPrevItem:()=>{se({type:"click"})},slideToNextItem:()=>{ce({type:"click"})}}:{useListenToCustomEvent:Y,enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V,slideToPrevItem:()=>{se({type:"click"})},slideToNextItem:()=>{ce({type:"click"})},slideToItem:e=>de({id:e}),getIsNextItem:fe,getIsPrevItem:me,getIsActiveItem:ge},ve=t.jsx(a.Provider,Object.assign({value:he},{children:J})),pe=t.jsx(a.Provider,Object.assign({value:he},{children:t.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:q},j?{onWheel(){N.val.stop(),le()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},j?"x"===p?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:D},ue(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===p?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===p?e:"100%",height:"y"===p?e:"100%"}}())},{children:[!j&&h||!v?null:t.jsx("div",{style:{flexShrink:0,width:v}}),G.map(((n,r)=>{return t.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(i=!!j&&r===e.length-1,"fixed"!==m||j?Object.assign({marginRight:`${i?0:g}px`}):{marginRight:`${i?0:g}px`,flex:`1 0 calc(100% / ${S} - ${g*(S-1)/S}px)`}))},{children:"function"==typeof n.renderItem?n.renderItem({getIsActiveItem:ge,getIsNextItem:fe,getIsPrevItem:me,useListenToCustomEvent:Y}):n.renderItem}),`${n.id}-${r}`);var i})),j&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}))}));return Object.assign(Object.assign({},he),{carouselFragment:pe,thumbsFragment:ve})},e.useSpringCarouselContext=function(){const e=r.useContext(a);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},e.useThumbsModule=l,e.useTransitionCarousel=function({init:e=!0,disableGestures:s=!1,items:c,springConfig:u=n.config.default,exitBeforeEnter:a=!1,trail:m,withLoop:g=!1,activeItem:h,toPrevItemSpringProps:v=d,toNextItemSpringProps:p=d,draggingSlideTreshold:x=50,thumbsSlideAxis:b="x"}){const y=r.useRef("next"),j=r.useRef("initial"),w=r.useRef(null),[T,O]=r.useState(null!=h?h:0),{emitEvent:R,useListenToCustomEvent:E}=o(),{handleScroll:I,thumbsFragment:S}=l({thumbsSlideAxis:b,items:c});function C({to:e,slideType:t,slideMode:n}){y.current=t,j.current=n,R({eventName:"onSlideStartChange",slideActionType:y.current,slideMode:j.current,nextItem:{index:e,id:c[e].id,startReached:0===e,endReached:e===c.length-1}}),O(e),I(T)}function M(t){if(!e)return;const n=0===T;!g&&n||C(g&&n?{to:c.length-1,slideType:"prev",slideMode:t}:{to:T-1,slideType:"prev",slideMode:t})}function F(t){if(!e)return;const n=T===c.length-1;!g&&n||C(g&&n?{to:0,slideType:"next",slideMode:t}:{to:T+1,slideType:"next",slideMode:t})}r.useEffect((()=>{"number"==typeof h&&h!==T&&O(h)}),[h]);const L=n.useTransition(T,Object.assign(Object.assign({config:u,key:null,trail:m,exitBeforeEnter:a},"prev"===y.current?{initial:Object.assign({},v.initial),from:Object.assign({},v.from),enter:Object.assign({},v.enter),leave:Object.assign({},v.leave)}:"next"===y.current?{initial:Object.assign({},p.initial),from:Object.assign({},p.from),enter:Object.assign({},p.enter),leave:Object.assign({},p.leave)}:{initial:Object.assign({},d.initial),from:Object.assign({},d.from),enter:Object.assign({},d.enter),leave:Object.assign({},d.leave)}),{onRest(e,t,n){e.finished&&n===T&&R({eventName:"onSlideChange",slideActionType:y.current,slideMode:j.current,currentItem:{index:T,id:c[T].id,startReached:0===T,endReached:T===c.length-1}})}})),A=i.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>x,n=t<-x,r=0===T,i=T===c.length-1;if(n){if(!g&&i)return;R({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!g&&r)return;R({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!s}),N=L(((e,r,i,s)=>t.jsx(n.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},e),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:c[r].renderItem})))),$={useListenToCustomEvent:E,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=t.jsx(f.Provider,Object.assign({value:$},{children:S})),P=t.jsx(f.Provider,Object.assign({value:$},{children:t.jsx("div",Object.assign({ref:w},A(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:N}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},e.useTransitionCarouselContext=function(){const e=r.useContext(f);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e}}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react/jsx-runtime"),require("@react-spring/web"),require("react"),require("@use-gesture/react"),require("screenfull")):"function"==typeof define&&define.amd?define(["exports","react/jsx-runtime","@react-spring/web","react","@use-gesture/react","screenfull"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactSpringCarousel={},e.ReactJSXRuntime,e.ReactSpring,e.React,e.UseGestureReact,e.Screenfull)}(this,(function(e,t,n,r,i,s){"use strict";const c="RSC::Event";function o(){const e=r.useRef(null);return{useListenToCustomEvent:function(t){r.useEffect((()=>{function n(e){t(e.detail)}if(e.current||(e.current=document.createElement("div")),e.current)return e.current.addEventListener(c,n,!1),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener(c,n,!1)}}),[t])},emitEvent:function(t){if(e.current){const n=new CustomEvent(c,{detail:t});e.current.dispatchEvent(n)}}}}function l({mainCarouselWrapperRef:e,onFullScreenChange:t,handleResize:n}){const i=r.useRef(!1);function c(e){i.current=e}return r.useEffect((()=>{function e(){document.fullscreenElement&&(c(!0),t(!0),n&&n()),document.fullscreenElement||(c(!1),t(!1),n&&n())}if(s.isEnabled)return s.on("change",e),()=>{s.isEnabled&&s.off("change",e)}}),[]),{enterFullscreen:function(t){s.isEnabled&&s.request(t||e.current)},exitFullscreen:function(){s.isEnabled&&s.exit()},getIsFullscreen:function(){return i.current}}}function u({thumbsSlideAxis:e="x",withThumbs:i=!1,prepareThumbsData:s,items:c}){const o=r.useRef(null),[l,u]=n.useSpring((()=>({val:0})));function a(){var t;return Math.round(Number(null===(t=o.current)||void 0===t?void 0:t["x"===e?"scrollWidth":"scrollHeight"])-o.current.getBoundingClientRect()["x"===e?"width":"height"])}return{thumbsFragment:i?t.jsx("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:o,onWheel:()=>l.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===e?"row":"column"},"x"===e?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return s?s(e(c)):e(c)}().map((({id:e,renderThumb:n})=>{const r=`thumb-item-${e}`;return t.jsx("div",Object.assign({id:r,className:"thumb-item"},{children:n}),r)}))})):null,handleScroll:function(t){var n,r;const i=o.current?o.current.querySelector(`#thumb-item-${c[t].id}`):null;if(i&&o.current&&!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const t=i.offsetLeft,s=t>a()?a():t;u.start({from:{val:null!==(r=null===(n=o.current)||void 0===n?void 0:n["x"===e?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:s},onChange:({value:t})=>{o.current&&(o.current["x"===e?"scrollLeft":"scrollTop"]=Math.abs(t.val))}})}}}}const a=r.createContext(void 0);const d={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};const f=r.createContext(void 0);e.useEventsModule=o,e.useFullscreenModule=l,e.useSpringCarousel=function({items:e,init:s=!0,withThumbs:c,thumbsSlideAxis:d="x",itemsPerSlide:f=1,slideType:m="fixed",gutter:g=0,withLoop:h=!1,startEndGutter:v=0,carouselSlideAxis:p="x",disableGestures:x=!1,draggingSlideTreshold:b,slideWhenThresholdIsReached:y=!1,freeScroll:j,enableFreeScrollDrag:w,initialStartingPosition:T,prepareThumbsData:O,initialActiveItem:R=0,animateWhenActiveItemChange:E=!0}){const I=r.useRef(!1),S=f>e.length?e.length:f,C=r.useRef(0),M=r.useRef(null!=b?b:0),F=r.useRef("initial"),L=r.useRef("initial"),A=r.useRef(0),[N,$]=n.useSpring((()=>({val:0,pause:!s,onChange:({value:e})=>{j&&q.current?("x"===p?q.current.scrollLeft=Math.abs(e.val):q.current.scrollTop=Math.abs(e.val),ue()):D.current&&(D.current.style.transform="x"===p?`translate3d(${e.val}px, 0px,0px)`:`translate3d(0px,${e.val}px,0px)`)}})),[j]),k=r.useRef(R),P=r.useRef(0===R),W=r.useRef(!1),q=r.useRef(null),D=r.useRef(null),B=r.useRef(h),z=r.useRef(m),H=r.useRef(j),G=r.useCallback((()=>h?[...e.map((e=>Object.assign(Object.assign({},e),{id:`prev-repeated-item-${e.id}`}))),...e,...e.map((e=>Object.assign(Object.assign({},e),{id:`next-repeated-item-${e.id}`})))]:[...e]),[e,h])(),{emitEvent:X,useListenToCustomEvent:Y}=o(),{thumbsFragment:J,handleScroll:U}=u({withThumbs:!!c,thumbsSlideAxis:d,prepareThumbsData:O,items:e}),{enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V}=l({mainCarouselWrapperRef:q,handleResize:()=>ne(),onFullScreenChange:e=>{X({eventName:"onFullscreenChange",isFullscreen:e})}});function Z(){var e;const t=null===(e=q.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+g}function _({from:t,to:r,nextActiveItem:i,immediate:s=!1,slideMode:o}){L.current=o,"number"==typeof i&&(j||(k.current=i),X({eventName:"onSlideStartChange",slideActionType:F.current,slideMode:L.current,nextItem:{startReached:P.current,endReached:W.current,index:j?-1:k.current,id:j?"":e[k.current].id}})),A.current=r,$.start({immediate:s,from:{val:t},to:{val:r},config:Object.assign(Object.assign({},n.config.default),{velocity:N.val.velocity}),onRest(t){!s&&t.finished&&X({eventName:"onSlideChange",slideActionType:F.current,slideMode:L.current,currentItem:{startReached:P.current,endReached:W.current,index:j?-1:k.current,id:j?"":e[k.current].id}})}}),c&&!s&&U(k.current)}function ee(){var t;return h?Z()*e.length:Math.round(Number(null===(t=D.current)||void 0===t?void 0:t["x"===p?"scrollWidth":"scrollHeight"])-D.current.getBoundingClientRect()["x"===p?"width":"height"]-v)}function te(){var e;const t=null===(e=D.current)||void 0===e?void 0:e.querySelector(".use-spring-carousel-item");if(!t)throw Error("No carousel items available!");return t.getBoundingClientRect()["x"===p?"width":"height"]+g}function ne(){const t="x"===p?"left":"top";function n(e){const n=D.current;n&&(h?(n.style.top="0px",n.style.left="0px",n.style[t]=`-${e-v}px`,P.current=!1,W.current=!1):(n.style.left="0px",n.style.top="0px"))}n("center"===T?te()*e.length-Z()*Math.round((S-1)/2):"end"===T?te()*e.length-Z()*Math.round(S-1):te()*e.length);if(Math.abs(re())<ee()&&"fluid"===m&&W.current&&!h&&(W.current=!1),!j&&"fixed"===m){const e=-Z()*k.current;if(Math.abs(e)>ee()&&!h){const e=-ee();W.current=!0,A.current=e,$.start({immediate:!0,val:A.current})}else A.current=e,$.start({immediate:!0,val:e});setTimeout((()=>{I.current=!1}),0)}}function re(){return j&&q.current?q.current["x"===p?"scrollLeft":"scrollTop"]:N.val.get()}function ie(e,t){if(j&&"next"===e){const e=A.current+Z();return e>ee()?ee():e}if(j&&"prev"===e){const e=A.current-Z();return e<0?0:e}return"next"===e?"number"==typeof t?-t*Z():A.current-Z():"number"==typeof t?-t*Z():A.current+Z()}function se({type:t,index:n,immediate:r}){if(!s||P.current&&!h)return;F.current="prev",W.current=!1;const i="number"==typeof n?n:k.current-1;if(!h){const e=j?ie("prev",n)-Z()/3<0:ie("prev",n)+Z()/3>0;if(P.current)return;if(e)return P.current=!0,W.current=!1,void _({slideMode:t,from:re(),to:0,nextActiveItem:0,immediate:r})}if(h&&(P.current||i<0))return P.current=!1,W.current=!0,void _({slideMode:t,from:re()-Z()*e.length,to:-Z()*e.length+Z(),nextActiveItem:e.length-1,immediate:r});0===i&&(P.current=!0),i!==e.length-1&&-1!==i||(W.current=!0),_({slideMode:t,from:re(),to:ie("prev",n),nextActiveItem:i,immediate:r})}function ce({type:t,index:n,immediate:r}){if(!s||W.current&&!h)return;F.current="next",P.current=!1;const i=n||k.current+1;if(!h){const e=Math.abs(ie("next",n))>ee()-Z()/3;if(W.current)return;if(e)return P.current=!1,W.current=!0,void _({slideMode:t,from:re(),to:j?ee():-ee(),nextActiveItem:i,immediate:r})}if(h&&(W.current||i>e.length-1))return W.current=!1,P.current=!0,void _({slideMode:t,from:re()+Z()*e.length,to:0,nextActiveItem:0,immediate:r});0===i&&(P.current=!0),i===e.length-1&&(W.current=!0),_({slideMode:t,from:re(),to:ie("next",n),nextActiveItem:i,immediate:r})}function oe(){return M.current=b||Math.floor(Z()/2/2),M.current}r.useEffect((()=>{k.current!==R&&de({id:R,immediate:!E})}),[R]),r.useEffect((()=>{if(s){if(R>e.length-1)throw new Error(`initialActiveItem (${R}) is greater than the total quantity available items (${e.length}).`);S>e.length&&console.warn(`itemsPerSlide (${S}) is greater than the total quantity available items (${e.length}). Fallback to ${e.length})`)}}),[R,e,S,s]),r.useEffect((()=>{C.current=window.innerWidth}),[]),r.useEffect((()=>{I.current=!0,ne()}),[T,S,v,g,s]),r.useEffect((()=>{h===B.current&&m===z.current&&j===H.current||(B.current=h,z.current=m,H.current=j,D.current&&(D.current.style.transform="translate3d(0px, 0px,0px)",$.start({val:0,immediate:!0})),de({id:0,immediate:!0,shouldReset:!0}))}),[h,m,j]),r.useLayoutEffect((()=>{D.current&&ne()}),[]),r.useEffect((()=>{oe()}),[b,S,m]),r.useEffect((()=>{function e(){window.innerWidth!==C.current&&(C.current=window.innerWidth,ne())}if("ResizeObserver"in window&&q.current){const e=new ResizeObserver((()=>{I.current||(C.current=window.innerWidth,ne())}));return e.observe(q.current),()=>{e.disconnect()}}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[p,T,S,h,v,g,j,m,s]);const le=i.useDrag((e=>{const t=e.dragging,r=e.offset["x"===p?0:1],i=e.movement["x"===p?0:1],s=e.direction["x"===p?0:1],c=i>oe(),o=i<-oe(),l=ee();if(t){if(F.current=s>0?"prev":"next",X(Object.assign(Object.assign({},e),{eventName:"onDrag",slideActionType:F.current})),j)return r>0?($.start({from:{val:re()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}}),void e.cancel()):void $.start({from:{val:re()},to:{val:-r},config:{velocity:e.velocity,friction:50,tension:1e3}});$.start({val:r,config:{velocity:e.velocity,friction:50,tension:1e3}}),y&&o?(ce({type:"drag"}),e.cancel()):y&&c&&(se({type:"drag"}),e.cancel());l-Math.abs(r)<-2*Z()&&e.cancel()}else e.last&&j&&r>0?$.start({from:{val:re()},to:{val:0},config:{velocity:e.velocity,friction:50,tension:1e3}}):(e.last&&!e.canceled&&j&&("prev"===F.current&&se({type:"drag"}),"next"===F.current&&ce({type:"drag"})),!e.last||e.canceled||j||(o?!h&&W.current?$.start({val:-ee(),config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):ce({type:"drag"}):c?!h&&P.current?$.start({val:0,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}):se({type:"drag"}):$.start({val:A.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})})),e.last&&e.canceled&&$.start({val:A.current,config:Object.assign(Object.assign({},n.config.default),{velocity:e.velocity})}))}),{enabled:s&&!x&&!j||!!j&&!!w,axis:p,from:()=>j&&q.current?[-q.current.scrollLeft,-q.current.scrollTop]:[N.val.get(),N.val.get()]});function ue(){q.current&&(A.current=q.current["x"===p?"scrollLeft":"scrollTop"],0===q.current["x"===p?"scrollLeft":"scrollTop"]&&(P.current=!0,W.current=!1),q.current["x"===p?"scrollLeft":"scrollTop"]>0&&q.current["x"===p?"scrollLeft":"scrollTop"]<ee()&&(P.current=!1,W.current=!1),q.current["x"===p?"scrollLeft":"scrollTop"]===ee()&&(P.current=!1,W.current=!0))}function ae(t,n){let r=0;if(r="string"==typeof t?e.findIndex((e=>e.id===t)):t,r<0||r>=e.length){if(n)throw new Error(n);console.error(`The item doesn't exist; check that the id provided - ${t} - is correct.`),r=-1}return r}function de({id:t,immediate:n,shouldReset:r,type:i}){if(!s)return;P.current=!1,W.current=!1;const c=ae(t,"The item you want to slide to doesn't exist; check the provided id.");if(c===k.current&&!r)return;const o=ae(e[k.current].id),l=ae(e[c].id);l>o?ce({type:i||r?"initial":"click",index:l,immediate:n}):se({type:i||r?"initial":"click",index:l,immediate:n})}function fe(t){const n=ae(t,"The item doesn't exist; check the provided id."),r=k.current;return h&&r===e.length-1?0===n:n===r+1}function me(t){const n=ae(t,"The item doesn't exist; check the provided id."),r=k.current;return h&&0===r?n===e.length-1:n===r-1}function ge(e){return ae(e,"The item you want to check doesn't exist; check the provided id.")===k.current}const he=j?{useListenToCustomEvent:Y,enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V,slideToPrevItem:()=>{se({type:"click"})},slideToNextItem:()=>{ce({type:"click"})}}:{useListenToCustomEvent:Y,enterFullscreen:K,exitFullscreen:Q,getIsFullscreen:V,slideToPrevItem:()=>{se({type:"click"})},slideToNextItem:()=>{ce({type:"click"})},slideToItem:e=>de({id:e}),getIsNextItem:fe,getIsPrevItem:me,getIsActiveItem:ge},ve=t.jsx(a.Provider,Object.assign({value:he},{children:J})),pe=t.jsx(a.Provider,Object.assign({value:he},{children:t.jsx("div",Object.assign({className:"use-spring-carousel-main-wrapper",ref:q},j?{onWheel(){N.val.stop(),ue()}}:{},{style:Object.assign({display:"flex",position:"relative",width:"100%",height:"100%"},j?"x"===p?{overflowX:"auto"}:{overflowY:"auto"}:{})},{children:t.jsxs("div",Object.assign({className:"use-spring-carousel-track-wrapper",ref:D},le(),{style:Object.assign({position:"relative",display:"flex",flexDirection:"x"===p?"row":"column",touchAction:"none"},function(){const e=`calc(100% - ${2*v}px)`;return{width:"x"===p?e:"100%",height:"y"===p?e:"100%"}}())},{children:[!j&&h||!v?null:t.jsx("div",{style:{flexShrink:0,width:v}}),G.map(((n,r)=>{return t.jsx("div",Object.assign({className:"use-spring-carousel-item","data-testid":"use-spring-carousel-item-wrapper",style:Object.assign({display:"flex",position:"relative",flex:"1"},(i=!!j&&r===e.length-1,"fixed"!==m||j?Object.assign({marginRight:`${i?0:g}px`}):{marginRight:`${i?0:g}px`,flex:`1 0 calc(100% / ${S} - ${g*(S-1)/S}px)`}))},{children:"function"==typeof n.renderItem?n.renderItem({getIsActiveItem:ge,getIsNextItem:fe,getIsPrevItem:me,useListenToCustomEvent:Y}):n.renderItem}),`${n.id}-${r}`);var i})),j&&v?t.jsx("div",{style:{flexShrink:0,width:v}}):null]}))}))}));return Object.assign(Object.assign({},he),{carouselFragment:pe,thumbsFragment:ve})},e.useSpringCarouselContext=function(){const e=r.useContext(a);if(!e)throw new Error("useSpringCarouselContext must be used within the carousel.");return e},e.useThumbsModule=u,e.useTransitionCarousel=function({init:e=!0,disableGestures:s=!1,items:c,springConfig:l=n.config.default,exitBeforeEnter:a=!1,trail:m,withLoop:g=!1,activeItem:h,toPrevItemSpringProps:v=d,toNextItemSpringProps:p=d,draggingSlideTreshold:x=50,thumbsSlideAxis:b="x"}){const y=r.useRef("next"),j=r.useRef("initial"),w=r.useRef(null),[T,O]=r.useState(null!=h?h:0),{emitEvent:R,useListenToCustomEvent:E}=o(),{handleScroll:I,thumbsFragment:S}=u({thumbsSlideAxis:b,items:c});function C({to:e,slideType:t,slideMode:n}){y.current=t,j.current=n,R({eventName:"onSlideStartChange",slideActionType:y.current,slideMode:j.current,nextItem:{index:e,id:c[e].id,startReached:0===e,endReached:e===c.length-1}}),O(e),I(T)}function M(t){if(!e)return;const n=0===T;!g&&n||C(g&&n?{to:c.length-1,slideType:"prev",slideMode:t}:{to:T-1,slideType:"prev",slideMode:t})}function F(t){if(!e)return;const n=T===c.length-1;!g&&n||C(g&&n?{to:0,slideType:"next",slideMode:t}:{to:T+1,slideType:"next",slideMode:t})}r.useEffect((()=>{"number"==typeof h&&h!==T&&O(h)}),[h]);const L=n.useTransition(T,Object.assign(Object.assign({config:l,key:null,trail:m,exitBeforeEnter:a},"prev"===y.current?{initial:Object.assign({},v.initial),from:Object.assign({},v.from),enter:Object.assign({},v.enter),leave:Object.assign({},v.leave)}:"next"===y.current?{initial:Object.assign({},p.initial),from:Object.assign({},p.from),enter:Object.assign({},p.enter),leave:Object.assign({},p.leave)}:{initial:Object.assign({},d.initial),from:Object.assign({},d.from),enter:Object.assign({},d.enter),leave:Object.assign({},d.leave)}),{onRest(e,t,n){e.finished&&n===T&&R({eventName:"onSlideChange",slideActionType:y.current,slideMode:j.current,currentItem:{index:T,id:c[T].id,startReached:0===T,endReached:T===c.length-1}})}})),A=i.useDrag((({last:e,movement:[t]})=>{if(e){const e=t>x,n=t<-x,r=0===T,i=T===c.length-1;if(n){if(!g&&i)return;R({eventName:"onLeftSwipe"}),F("swipe")}else if(e){if(!g&&r)return;R({eventName:"onRightSwipe"}),M("swipe")}}}),{enabled:!s}),N=L(((e,r,i,s)=>t.jsx(n.a.div,Object.assign({id:`use-transition-carousel-item-${s}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},e),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:c[r].renderItem})))),$={useListenToCustomEvent:E,slideToPrevItem:()=>M("click"),slideToNextItem:()=>F("click")},k=t.jsx(f.Provider,Object.assign({value:$},{children:S})),P=t.jsx(f.Provider,Object.assign({value:$},{children:t.jsx("div",Object.assign({ref:w},A(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:N}))}));return Object.assign(Object.assign({},$),{carouselFragment:P,thumbsFragment:k})},e.useTransitionCarouselContext=function(){const e=r.useContext(f);if(!e)throw new Error("useTransitionCarouselContext must be used within the carousel.");return e}}));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|