react-spring-carousel 3.0.0-beta009 → 3.0.0-beta015
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +1 -778
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +1 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index2.js +1 -5
- package/dist/esm/index2.js.map +1 -1
- package/dist/esm/useEventsModule-58340c73.js +2 -0
- package/dist/esm/useEventsModule-58340c73.js.map +1 -0
- package/dist/esm/useSpringCarousel.js +1 -615
- package/dist/esm/useSpringCarousel.js.map +1 -1
- package/dist/esm/useThumbsModule-ca28667b.js +2 -0
- package/dist/esm/useThumbsModule-ca28667b.js.map +1 -0
- package/dist/esm/useTransitionCarousel.js +2 -0
- package/dist/esm/useTransitionCarousel.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/mockedItems.d.ts +2 -7
- package/dist/types/modules/useEventsModule.d.ts +21 -14
- package/dist/types/modules/useFullscreenModule.d.ts +2 -3
- package/dist/types/types/common.d.ts +1 -0
- package/dist/types/types/internals.d.ts +29 -18
- package/dist/types/types/useTransitionCarousel.types.d.ts +24 -0
- package/dist/types/useSpringCarousel.d.ts +15 -5
- package/dist/types/useTransitionCarousel.d.ts +36 -0
- package/dist/umd/index.js +1 -778
- package/dist/umd/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/esm/useThumbsModule-3a805d70.js +0 -168
- package/dist/esm/useThumbsModule-3a805d70.js.map +0 -1
|
@@ -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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselComplete,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithFixedItems,\n UseSpringCarouselWithNoFixedItems,\n SpringCarouselWithThumbs,\n} from './types/internals'\n\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs): UseSpringReturnType\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs): UseSpringReturnType\nfunction useSpringCarousel(props: UseSpringCarouselWithFixedItems): UseSpringReturnType\nfunction useSpringCarousel(props: UseSpringCarouselWithNoFixedItems): UseSpringReturnType\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n}: UseSpringCarouselComplete) {\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 setStartEndItemReachedOnFreeScroll()\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }))\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map(i => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map(i => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const { emitEvent, useListenToCustomEvent } = useEventsModule()\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 emitEvent,\n handleResize: () => adjustCarouselWrapperPosition(),\n })\n\n function getItemStyles() {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${gutter}px` },\n }\n }\n\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n\n function getTotalScrollValue() {\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current!.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\n\n if (!withLoop) {\n const nextItemWillExceed = getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: -getTotalScrollValue(),\n nextActiveItem: nextItem,\n })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n })\n }\n\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }, [])\n\n const bindDrag = useDrag(\n state => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\n }\n\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToNextItem('drag')\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToPrevItem('drag')\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n }\n },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n 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 function findItemIndex(id: string) {\n return items.findIndex(item => item.id === id)\n }\n function findItemIndexById(id: string | number, error: string) {\n let itemIndex = 0\n if (typeof id === 'string') {\n itemIndex = items.findIndex(_item => _item.id === id)\n } else {\n itemIndex = id\n }\n\n if (itemIndex < 0 || itemIndex >= items.length) {\n throw new Error(error)\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndexById(\n id,\n \"The item you want to slide to doesn't exist; please check che item id or the index you're passing to.\",\n )\n\n if (itemIndex === activeItem.current) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\n }\n }\n function getIsNextItem(id: string) {\n const itemIndex = findItemIndex(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) {\n const itemIndex = findItemIndex(id)\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n\n const carouselFragment = (\n <div\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {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 }}\n >\n {item.renderItem}\n </div>\n )\n })}\n </div>\n </div>\n )\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n getIsActiveItem: (id: string | number) => {\n return (\n findItemIndexById(id, \"The item you want to check doesn't exist\") ===\n activeItem.current\n )\n },\n }\n}\n\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["_jsx"],"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 { SlideActionType, SlideMode } from './types/common'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\nimport { useFullscreenModule } from './modules/useFullscreenModule'\nimport { useThumbsModule } from './modules/useThumbsModule'\nimport {\n UseSpringReturnType,\n UseSpringCarouselComplete,\n SpringCarouselWithThumbs,\n UseSpringCarouselWithFreeScroll,\n UseSpringFreeScrollReturnType,\n UseSpringCarouselWithThumbs,\n UseSpringCarouselWithNoThumbs,\n UseSpringCarouselWithNoFixedItems,\n UseSpringCarouselWithFixedItems,\n} from './types/internals'\n\ntype ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType\n\n/**\n * With free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>\n/**\n * No free scroll\n */\nfunction useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithFixedItems<false>,\n): ReturnType<false>\nfunction useSpringCarousel(\n props: UseSpringCarouselWithNoFixedItems<false>,\n): ReturnType<false>\n\nfunction useSpringCarousel({\n items,\n init = true,\n withThumbs,\n thumbsSlideAxis = 'x',\n itemsPerSlide: _itemsPerSlide = 1,\n slideType = 'fixed',\n gutter = 0,\n withLoop = false,\n startEndGutter = 0,\n carouselSlideAxis = 'x',\n disableGestures = false,\n draggingSlideTreshold: _draggingSlideTreshold,\n slideWhenThresholdIsReached = false,\n freeScroll,\n enableFreeScrollDrag,\n initialStartingPosition,\n prepareThumbsData,\n initialActiveItem = 0,\n}: UseSpringCarouselComplete): ReturnType<typeof freeScroll> {\n const itemsPerSlide = _itemsPerSlide > items.length ? items.length : _itemsPerSlide\n const prevWindowWidth = useRef(0)\n const draggingSlideTreshold = useRef(_draggingSlideTreshold ?? 0)\n const slideActionType = useRef<SlideActionType>('initial')\n const slideModeType = useRef<SlideMode>('initial')\n const prevSlidedValue = useRef(0)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n pause: !init,\n onChange({ value }) {\n if (freeScroll && mainCarouselWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n mainCarouselWrapperRef.current.scrollLeft = Math.abs(value.val)\n } else {\n mainCarouselWrapperRef.current.scrollTop = Math.abs(value.val)\n }\n setStartEndItemReachedOnFreeScroll()\n } else if (carouselTrackWrapperRef.current) {\n if (carouselSlideAxis === 'x') {\n carouselTrackWrapperRef.current.style.transform = `translate3d(${value.val}px, 0px,0px)`\n } else {\n carouselTrackWrapperRef.current.style.transform = `translate3d(0px,${value.val}px,0px)`\n }\n }\n },\n }))\n const activeItem = useRef(initialActiveItem)\n const firstItemReached = useRef(initialActiveItem === 0)\n const lastItemReached = useRef(false)\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const carouselTrackWrapperRef = useRef<HTMLDivElement | null>(null)\n\n const getItems = useCallback(() => {\n if (withLoop) {\n return [\n ...items.map(i => ({\n ...i,\n id: `prev-repeated-item-${i.id}`,\n })),\n ...items,\n ...items.map(i => ({\n ...i,\n id: `next-repeated-item-${i.id}`,\n })),\n ]\n }\n return [...items]\n }, [items, withLoop])\n const internalItems = getItems()\n\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-spring'>()\n const { thumbsFragment, handleScroll } = useThumbsModule({\n withThumbs: !!withThumbs,\n thumbsSlideAxis,\n prepareThumbsData,\n items: items as SpringCarouselWithThumbs['items'],\n })\n const { enterFullscreen, exitFullscreen, getIsFullscreen } = useFullscreenModule({\n mainCarouselWrapperRef,\n handleResize: () => adjustCarouselWrapperPosition(),\n onFullScreenChange: val => {\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: val,\n })\n },\n })\n\n function getItemStyles(isLastItem: boolean) {\n if (slideType === 'fixed' && !freeScroll) {\n return {\n marginRight: `${isLastItem ? 0 : gutter}px`,\n flex: `1 0 calc(100% / ${itemsPerSlide} - ${\n (gutter * (itemsPerSlide - 1)) / itemsPerSlide\n }px)`,\n }\n }\n return {\n ...{ marginRight: `${isLastItem ? 0 : gutter}px` },\n }\n }\n\n function getSlideValue() {\n const carouselItem = mainCarouselWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n\n type SlideToItem = {\n from: number\n to: number\n nextActiveItem?: number\n immediate?: boolean\n slideMode: 'click' | 'drag'\n }\n\n function slideToItem({\n from,\n to,\n nextActiveItem,\n immediate = false,\n slideMode,\n }: SlideToItem) {\n slideModeType.current = slideMode\n\n if (typeof nextActiveItem === 'number') {\n if (!freeScroll) {\n activeItem.current = nextActiveItem\n }\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n\n prevSlidedValue.current = to\n setSpring.start({\n immediate,\n from: {\n val: from,\n },\n to: {\n val: to,\n },\n config: {\n ...config.default,\n velocity: spring.val.velocity,\n },\n onRest(value) {\n if (!immediate && value.finished) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n startReached: firstItemReached.current,\n endReached: lastItemReached.current,\n index: freeScroll ? -1 : activeItem.current,\n id: freeScroll ? '' : items[activeItem.current].id,\n },\n })\n }\n },\n })\n if (withThumbs && !immediate) {\n handleScroll(activeItem.current)\n }\n }\n\n function getTotalScrollValue() {\n if (withLoop) {\n return getSlideValue() * items.length\n }\n return Math.round(\n Number(\n carouselTrackWrapperRef.current?.[\n carouselSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'\n ],\n ) -\n carouselTrackWrapperRef.current!.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] -\n startEndGutter * 2,\n )\n }\n function getAnimatedWrapperStyles() {\n const percentValue = `calc(100% - ${startEndGutter * 2}px)`\n return {\n width: carouselSlideAxis === 'x' ? percentValue : '100%',\n height: carouselSlideAxis === 'y' ? percentValue : '100%',\n }\n }\n\n function getCarouselItemWidth() {\n const carouselItem = carouselTrackWrapperRef.current?.querySelector(\n '.use-spring-carousel-item',\n )\n if (!carouselItem) {\n throw Error('No carousel items available!')\n }\n return (\n carouselItem.getBoundingClientRect()[\n carouselSlideAxis === 'x' ? 'width' : 'height'\n ] + gutter\n )\n }\n function adjustCarouselWrapperPosition() {\n const positionProperty = carouselSlideAxis === 'x' ? 'left' : 'top'\n\n function setPosition(v: number) {\n const ref = carouselTrackWrapperRef.current\n if (!ref) return\n\n if (withLoop) {\n ref.style.top = '0px'\n ref.style.left = '0px'\n ref.style[positionProperty] = `-${v - startEndGutter}px`\n } else {\n ref.style.left = '0px'\n ref.style.top = '0px'\n }\n }\n\n const currentFromValue = Math.abs(getFromValue())\n\n if (currentFromValue < getTotalScrollValue() && lastItemReached.current) {\n lastItemReached.current = false\n }\n if (currentFromValue > getTotalScrollValue()) {\n const val = -getTotalScrollValue()\n lastItemReached.current = true\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n return\n }\n\n if (initialStartingPosition === 'center') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round((itemsPerSlide - 1) / 2),\n )\n } else if (initialStartingPosition === 'end') {\n setPosition(\n getCarouselItemWidth() * items.length -\n getSlideValue() * Math.round(itemsPerSlide - 1),\n )\n } else {\n setPosition(getCarouselItemWidth() * items.length)\n }\n\n if (!freeScroll && slideType === 'fixed') {\n const val = -(getSlideValue() * activeItem.current)\n prevSlidedValue.current = val\n setSpring.start({\n immediate: true,\n val,\n })\n }\n }\n\n function getFromValue() {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n }\n return spring.val.get()\n }\n function getToValue(type: 'next' | 'prev', index?: number) {\n if (freeScroll && type === 'next') {\n const next = prevSlidedValue.current + getSlideValue()\n if (next > getTotalScrollValue()) {\n return getTotalScrollValue()\n }\n return next\n }\n\n if (freeScroll && type === 'prev') {\n const next = prevSlidedValue.current - getSlideValue()\n if (next < 0) {\n return 0\n }\n return next\n }\n\n if (type === 'next') {\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current - getSlideValue()\n }\n\n if (index) {\n return -(index * getSlideValue())\n }\n return prevSlidedValue.current + getSlideValue()\n }\n function slideToPrevItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (firstItemReached.current && !withLoop)) return\n\n slideActionType.current = 'prev'\n lastItemReached.current = false\n\n const nextItem = index || activeItem.current - 1\n\n if (!withLoop) {\n const nextItemWillExceed = freeScroll\n ? getToValue('prev', index) - getSlideValue() / 3 < 0\n : getToValue('prev', index) + getSlideValue() / 3 > 0\n\n if (firstItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = true\n lastItemReached.current = false\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: 0,\n nextActiveItem: 0,\n })\n return\n }\n }\n if (withLoop && firstItemReached.current) {\n firstItemReached.current = false\n lastItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() - getSlideValue() * items.length,\n to: -(getSlideValue() * items.length) + getSlideValue(),\n nextActiveItem: items.length - 1,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1 || nextItem === -1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('prev', index),\n nextActiveItem: nextItem,\n })\n }\n function slideToNextItem(\n type: Exclude<SlideMode, 'initial'> = 'click',\n index?: number,\n ) {\n if (!init || (lastItemReached.current && !withLoop)) return\n\n slideActionType.current = 'next'\n firstItemReached.current = false\n\n const nextItem = index || activeItem.current + 1\n\n if (!withLoop) {\n const nextItemWillExceed =\n Math.abs(getToValue('next', index)) > getTotalScrollValue() - getSlideValue() / 3\n\n if (lastItemReached.current) return\n if (nextItemWillExceed) {\n firstItemReached.current = false\n lastItemReached.current = true\n\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: freeScroll ? getTotalScrollValue() : -getTotalScrollValue(),\n nextActiveItem: nextItem,\n })\n return\n }\n }\n if (withLoop && lastItemReached.current) {\n lastItemReached.current = false\n firstItemReached.current = true\n slideToItem({\n slideMode: type,\n from: getFromValue() + getSlideValue() * items.length,\n to: 0,\n nextActiveItem: 0,\n })\n return\n }\n if (nextItem === 0) {\n firstItemReached.current = true\n }\n if (nextItem === items.length - 1) {\n lastItemReached.current = true\n }\n slideToItem({\n slideMode: type,\n from: getFromValue(),\n to: getToValue('next', index),\n nextActiveItem: nextItem,\n })\n }\n\n useEffect(() => {\n if (init) {\n if (initialActiveItem > items.length - 1) {\n throw new Error(\n `initialActiveItem (${initialActiveItem}) is greater than the total quantity available items (${items.length}).`,\n )\n }\n if (itemsPerSlide > items.length) {\n console.warn(\n `itemsPerSlide (${itemsPerSlide}) is greater than the total quantity available items (${items.length}). Fallback to ${items.length})`,\n )\n }\n }\n }, [initialActiveItem, items, itemsPerSlide, init])\n useEffect(() => {\n prevWindowWidth.current = window.innerWidth\n }, [])\n useEffect(() => {\n adjustCarouselWrapperPosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n initialStartingPosition,\n itemsPerSlide,\n withLoop,\n startEndGutter,\n gutter,\n freeScroll,\n slideType,\n init,\n ])\n useLayoutEffect(() => {\n /**\n * Set initial track position\n */\n if (carouselTrackWrapperRef.current) {\n adjustCarouselWrapperPosition()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n useEffect(() => {\n if (_draggingSlideTreshold) {\n draggingSlideTreshold.current = _draggingSlideTreshold\n } else {\n draggingSlideTreshold.current = Math.floor(getSlideValue() / 2 / 2)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_draggingSlideTreshold])\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth === prevWindowWidth.current) return\n prevWindowWidth.current = window.innerWidth\n adjustCarouselWrapperPosition()\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const bindDrag = useDrag(\n state => {\n const isDragging = state.dragging\n const movement = state.offset[carouselSlideAxis === 'x' ? 0 : 1]\n const currentMovement = state.movement[carouselSlideAxis === 'x' ? 0 : 1]\n const direction = state.direction[carouselSlideAxis === 'x' ? 0 : 1]\n\n const prevItemTreshold = currentMovement > draggingSlideTreshold.current\n const nextItemTreshold = currentMovement < -draggingSlideTreshold.current\n\n if (isDragging) {\n if (direction > 0) {\n slideActionType.current = 'prev'\n } else {\n slideActionType.current = 'next'\n }\n\n emitEvent({\n ...state,\n eventName: 'onDrag',\n slideActionType: slideActionType.current,\n })\n\n if (freeScroll) {\n if (slideActionType.current === 'prev' && movement > 0) {\n state.cancel()\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: 0,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n from: {\n val: getFromValue(),\n },\n to: {\n val: -movement,\n },\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n return\n }\n\n setSpring.start({\n val: movement,\n config: {\n velocity: state.velocity,\n friction: 50,\n tension: 1000,\n },\n })\n\n if (slideWhenThresholdIsReached && nextItemTreshold) {\n slideToNextItem('drag')\n state.cancel()\n } else if (slideWhenThresholdIsReached && prevItemTreshold) {\n slideToPrevItem('drag')\n state.cancel()\n }\n return\n }\n\n if (state.last && !state.canceled && freeScroll) {\n if (slideActionType.current === 'prev') {\n slideToPrevItem('drag')\n }\n if (slideActionType.current === 'next') {\n slideToNextItem('drag')\n }\n }\n\n if (state.last && !state.canceled && !freeScroll) {\n if (nextItemTreshold) {\n if (!withLoop && lastItemReached.current) {\n setSpring.start({\n val: -getTotalScrollValue(),\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToNextItem('drag')\n }\n } else if (prevItemTreshold) {\n if (!withLoop && firstItemReached.current) {\n setSpring.start({\n val: 0,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n } else {\n slideToPrevItem('drag')\n }\n } else {\n setSpring.start({\n val: prevSlidedValue.current,\n config: {\n ...config.default,\n velocity: state.velocity,\n },\n })\n }\n }\n },\n {\n enabled:\n (init && !disableGestures && !freeScroll) ||\n (!!freeScroll && !!enableFreeScrollDrag),\n axis: carouselSlideAxis,\n from: () => {\n if (freeScroll && mainCarouselWrapperRef.current) {\n return [\n -mainCarouselWrapperRef.current.scrollLeft,\n -mainCarouselWrapperRef.current.scrollTop,\n ]\n }\n if (carouselSlideAxis === 'x') {\n return [spring.val.get(), spring.val.get()]\n }\n return [spring.val.get(), spring.val.get()]\n },\n },\n )\n\n function getWrapperOverflowStyles() {\n if (freeScroll) {\n if (carouselSlideAxis === 'x') {\n return {\n overflowX: 'auto',\n }\n }\n return {\n overflowY: 'auto',\n }\n }\n return {}\n }\n\n function setStartEndItemReachedOnFreeScroll() {\n if (mainCarouselWrapperRef.current) {\n prevSlidedValue.current =\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ]\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === 0\n ) {\n firstItemReached.current = true\n lastItemReached.current = false\n }\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] > 0 &&\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] < getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = false\n }\n\n if (\n mainCarouselWrapperRef.current[\n carouselSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] === getTotalScrollValue()\n ) {\n firstItemReached.current = false\n lastItemReached.current = true\n }\n }\n }\n function getScrollHandlers() {\n if (freeScroll) {\n return {\n onWheel() {\n spring.val.stop()\n setStartEndItemReachedOnFreeScroll()\n },\n }\n }\n return {}\n }\n\n function findItemIndex(id: string | number, error?: string) {\n let itemIndex = 0\n\n if (typeof id === 'string') {\n itemIndex = items.findIndex(item => item.id === id)\n } else {\n itemIndex = id\n }\n if (itemIndex < 0 || itemIndex >= items.length) {\n if (error) {\n throw new Error(error)\n }\n console.error(\n `The item doesn't exist; check that the id provided - ${id} - is correct.`,\n )\n itemIndex = -1\n }\n\n return itemIndex\n }\n function internalSlideToItem(id: string | number) {\n if (!init) return\n\n firstItemReached.current = false\n lastItemReached.current = false\n\n const itemIndex = findItemIndex(\n id,\n \"The item you want to slide to doesn't exist; check the provided id.\",\n )\n\n if (itemIndex === activeItem.current) {\n return\n }\n\n const currentItem = findItemIndex(items[activeItem.current].id)\n const newActiveItem = findItemIndex(items[itemIndex].id)\n\n if (newActiveItem > currentItem) {\n slideToNextItem('click', newActiveItem)\n } else {\n slideToPrevItem('click', newActiveItem)\n }\n }\n function getIsNextItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === items.length - 1) {\n return itemIndex === 0\n }\n return itemIndex === _activeItem + 1\n }\n function getIsPrevItem(id: string | number) {\n const itemIndex = findItemIndex(id, \"The item doesn't exist; check the provided id.\")\n const _activeItem = activeItem.current\n if (withLoop && _activeItem === 0) {\n return itemIndex === items.length - 1\n }\n return itemIndex === _activeItem - 1\n }\n\n const carouselFragment = (\n <div\n ref={mainCarouselWrapperRef}\n {...getScrollHandlers()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n ...(getWrapperOverflowStyles() as React.CSSProperties),\n }}\n >\n <div\n ref={carouselTrackWrapperRef}\n {...bindDrag()}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: carouselSlideAxis === 'x' ? 'row' : 'column',\n touchAction: 'none',\n ...getAnimatedWrapperStyles(),\n }}\n >\n {freeScroll && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n {internalItems.map((item, index) => {\n return (\n <div\n key={`${item.id}-${index}`}\n className=\"use-spring-carousel-item\"\n data-testid=\"use-spring-carousel-item-wrapper\"\n style={{\n display: 'flex',\n position: 'relative',\n flex: '1',\n ...getItemStyles(!!freeScroll && index === items.length - 1),\n }}\n >\n {item.renderItem}\n </div>\n )\n })}\n {freeScroll && startEndGutter ? (\n <div\n style={{\n flexShrink: 0,\n width: startEndGutter,\n }}\n />\n ) : null}\n </div>\n </div>\n )\n\n if (freeScroll) {\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n }\n }\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n thumbsFragment,\n slideToPrevItem: () => slideToPrevItem(),\n slideToNextItem: () => slideToNextItem(),\n slideToItem: internalSlideToItem,\n getIsNextItem,\n getIsPrevItem,\n getIsActiveItem: (id: string | number) => {\n return (\n findItemIndex(\n id,\n \"The item you want to check doesn't exist; check the provided id.\",\n ) === activeItem.current\n )\n },\n }\n}\n\nconst Context =\n createContext<\n Omit<UseSpringReturnType, 'carouselFragment' | 'thumbsFragment'> | undefined\n >(undefined)\n\nfunction useSpringCarouselContext() {\n const context = useContext(Context)\n if (!context) {\n throw new Error('useSpringCarouselContext must be used within the carousel.')\n }\n return context\n}\n\nexport { useSpringCarousel, useSpringCarouselContext }\n"],"names":["useSpringCarousel","items","init","withThumbs","thumbsSlideAxis","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","prepareThumbsData","initialActiveItem","length","prevWindowWidth","useRef","slideActionType","slideModeType","prevSlidedValue","spring","setSpring","useSpring","val","pause","onChange","value","mainCarouselWrapperRef","current","scrollLeft","Math","abs","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","style","transform","activeItem","firstItemReached","lastItemReached","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","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","useEffect","console","warn","window","innerWidth","useLayoutEffect","floor","addEventListener","removeEventListener","bindDrag","useDrag","state","isDragging","dragging","movement","offset","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","carouselFragment","_jsx","onWheel","stop","display","position","width","height","overflowX","overflowY","_jsxs","flexDirection","touchAction","percentValue","getAnimatedWrapperStyles","children","flexShrink","className","flex","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","Context","createContext","undefined","useSpringCarouselContext","context","useContext"],"mappings":"8YA+CA,SAASA,GAAkBC,MACzBA,EAAKC,KACLA,GAAO,EAAIC,WACXA,EAAUC,gBACVA,EAAkB,IAClBC,cAAeC,EAAiB,EAACC,UACjCA,EAAY,QAAOC,OACnBA,EAAS,EAACC,SACVA,GAAW,EAAKC,eAChBA,EAAiB,EAACC,kBAClBA,EAAoB,IAAGC,gBACvBA,GAAkB,EAClBC,sBAAuBC,EAAsBC,4BAC7CA,GAA8B,EAAKC,WACnCA,EAAUC,qBACVA,EAAoBC,wBACpBA,EAAuBC,kBACvBA,EAAiBC,kBACjBA,EAAoB,IAEpB,MAAMf,EAAgBC,EAAiBL,EAAMoB,OAASpB,EAAMoB,OAASf,EAC/DgB,EAAkBC,EAAO,GACzBV,EAAwBU,EAAOT,QAAAA,EAA0B,GACzDU,EAAkBD,EAAwB,WAC1CE,EAAgBF,EAAkB,WAClCG,EAAkBH,EAAO,IACxBI,EAAQC,GAAaC,GAAU,KAAO,CAC3CC,IAAK,EACLC,OAAQ7B,EACR8B,UAASC,MAAEA,IACLjB,GAAckB,EAAuBC,SACb,MAAtBxB,EACFuB,EAAuBC,QAAQC,WAAaC,KAAKC,IAAIL,EAAMH,KAE3DI,EAAuBC,QAAQI,UAAYF,KAAKC,IAAIL,EAAMH,KAE5DU,MACSC,EAAwBN,UAE/BM,EAAwBN,QAAQO,MAAMC,UADd,MAAtBhC,EACgD,eAAesB,EAAMH,kBAErB,mBAAmBG,EAAMH,aAGhF,MAEGc,EAAarB,EAAOH,GACpByB,EAAmBtB,EAA6B,IAAtBH,GAC1B0B,EAAkBvB,GAAO,GACzBW,EAAyBX,EAA8B,MACvDkB,EAA0BlB,EAA8B,MAkBxDwB,EAhBWC,GAAY,IACvBvC,EACK,IACFR,EAAMgD,KAAIC,GAAKC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACbF,GACH,CAAAG,GAAI,sBAAsBH,EAAEG,YAE3BpD,KACAA,EAAMgD,KAAIC,GAAKC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACbF,GACH,CAAAG,GAAI,sBAAsBH,EAAEG,UAI3B,IAAIpD,IACV,CAACA,EAAOQ,GACW6C,IAEhBC,UAAEA,EAASC,uBAAEA,GAA2BC,KACxCC,eAAEA,EAAcC,aAAEA,GAAiBC,EAAgB,CACvDzD,aAAcA,EACdC,kBACAe,oBACAlB,MAAOA,KAEH4D,gBAAEA,EAAeC,eAAEA,EAAcC,gBAAEA,GAAoBC,EAAoB,CAC/E9B,yBACA+B,aAAc,IAAMC,KACpBC,mBAAoBrC,IAClByB,EAAU,CACRa,UAAW,qBACXC,aAAcvC,GACd,IAkBN,SAASwC,UACP,MAAMC,EAA6C,QAA9BC,EAAAtC,EAAuBC,eAAO,IAAAqC,OAAA,EAAAA,EAAEC,cACnD,6BAGF,IAAKF,EACH,MAAMG,MAAM,gCAGd,OACEH,EAAaI,wBACW,MAAtBhE,EAA4B,QAAU,UACpCH,CAEP,CAUD,SAASoE,GAAYC,KACnBA,EAAIC,GACJA,EAAEC,eACFA,EAAcC,UACdA,GAAY,EAAKC,UACjBA,IAEAxD,EAAcU,QAAU8C,EAEM,iBAAnBF,IACJ/D,IACH4B,EAAWT,QAAU4C,GAEvBxB,EAAU,CACRa,UAAW,qBACX5C,gBAAiBA,EAAgBW,QACjC8C,UAAWxD,EAAcU,QACzB+C,SAAU,CACRC,aAActC,EAAiBV,QAC/BiD,WAAYtC,EAAgBX,QAC5BkD,MAAOrE,GAAc,EAAI4B,EAAWT,QACpCkB,GAAIrC,EAAa,GAAKf,EAAM2C,EAAWT,SAASkB,OAKtD3B,EAAgBS,QAAU2C,EAC1BlD,EAAU0D,MAAM,CACdN,YACAH,KAAM,CACJ/C,IAAK+C,GAEPC,GAAI,CACFhD,IAAKgD,GAEPS,OACKpC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAmC,EAAOC,SACV,CAAAC,SAAU9D,EAAOG,IAAI2D,WAEvBC,OAAOzD,IACA+C,GAAa/C,EAAM0D,UACtBpC,EAAU,CACRa,UAAW,gBACX5C,gBAAiBA,EAAgBW,QACjC8C,UAAWxD,EAAcU,QACzByD,YAAa,CACXT,aAActC,EAAiBV,QAC/BiD,WAAYtC,EAAgBX,QAC5BkD,MAAOrE,GAAc,EAAI4B,EAAWT,QACpCkB,GAAIrC,EAAa,GAAKf,EAAM2C,EAAWT,SAASkB,KAIvD,IAEClD,IAAe6E,GACjBrB,EAAaf,EAAWT,QAE3B,CAED,SAAS0D,UACP,OAAIpF,EACK6D,IAAkBrE,EAAMoB,OAE1BgB,KAAKyD,MACVC,OACiC,QAA/BvB,EAAA/B,EAAwBN,eAAO,IAAAqC,OAAA,EAAAA,EACP,MAAtB7D,EAA4B,cAAgB,iBAG9C8B,EAAwBN,QAASwC,wBACT,MAAtBhE,EAA4B,QAAU,UAEvB,EAAjBD,EAEL,CASD,SAASsF,WACP,MAAMzB,EAA8C,QAA/BC,EAAA/B,EAAwBN,eAAO,IAAAqC,OAAA,EAAAA,EAAEC,cACpD,6BAEF,IAAKF,EACH,MAAMG,MAAM,gCAEd,OACEH,EAAaI,wBACW,MAAtBhE,EAA4B,QAAU,UACpCH,CAEP,CACD,SAAS0D,KACP,MAAM+B,EAAyC,MAAtBtF,EAA4B,OAAS,MAE9D,SAASuF,EAAYC,GACnB,MAAMC,EAAM3D,EAAwBN,QAC/BiE,IAED3F,GACF2F,EAAI1D,MAAM2D,IAAM,MAChBD,EAAI1D,MAAM4D,KAAO,MACjBF,EAAI1D,MAAMuD,GAAoB,IAAIE,EAAIzF,QAEtC0F,EAAI1D,MAAM4D,KAAO,MACjBF,EAAI1D,MAAM2D,IAAM,OAEnB,CAED,MAAME,EAAmBlE,KAAKC,IAAIkE,MAKlC,GAHID,EAAmBV,KAAyB/C,EAAgBX,UAC9DW,EAAgBX,SAAU,GAExBoE,EAAmBV,IAAuB,CAC5C,MAAM/D,GAAO+D,IAOb,OANA/C,EAAgBX,SAAU,EAC1BT,EAAgBS,QAAUL,OAC1BF,EAAU0D,MAAM,CACdN,WAAW,EACXlD,OAGH,CAgBD,GAbEoE,EAD8B,WAA5BhF,EAEA8E,KAAyB/F,EAAMoB,OAC7BiD,IAAkBjC,KAAKyD,OAAOzF,EAAgB,GAAK,GAElB,QAA5Ba,EAEP8E,KAAyB/F,EAAMoB,OAC7BiD,IAAkBjC,KAAKyD,MAAMzF,EAAgB,GAGrC2F,KAAyB/F,EAAMoB,SAGxCL,GAA4B,UAAdT,EAAuB,CACxC,MAAMuB,GAAQwC,IAAkB1B,EAAWT,QAC3CT,EAAgBS,QAAUL,EAC1BF,EAAU0D,MAAM,CACdN,WAAW,EACXlD,OAEH,CACF,CAED,SAAS0E,KACP,OAAIxF,GAAckB,EAAuBC,QAChCD,EAAuBC,QACN,MAAtBxB,EAA4B,aAAe,aAGxCgB,EAAOG,IAAI2E,KACnB,CACD,SAASC,GAAWC,EAAuBtB,GACzC,GAAIrE,GAAuB,SAAT2F,EAAiB,CACjC,MAAMC,EAAOlF,EAAgBS,QAAUmC,IACvC,OAAIsC,EAAOf,IACFA,IAEFe,CACR,CAED,GAAI5F,GAAuB,SAAT2F,EAAiB,CACjC,MAAMC,EAAOlF,EAAgBS,QAAUmC,IACvC,OAAIsC,EAAO,EACF,EAEFA,CACR,CAED,MAAa,SAATD,EACEtB,GACOA,EAAQf,IAEZ5C,EAAgBS,QAAUmC,IAG/Be,GACOA,EAAQf,IAEZ5C,EAAgBS,QAAUmC,GAClC,CACD,SAASuC,GACPF,EAAsC,QACtCtB,GAEA,IAAKnF,GAAS2C,EAAiBV,UAAY1B,EAAW,OAEtDe,EAAgBW,QAAU,OAC1BW,EAAgBX,SAAU,EAE1B,MAAM+C,EAAWG,GAASzC,EAAWT,QAAU,EAE/C,IAAK1B,EAAU,CACb,MAAMqG,EAAqB9F,EACvB0F,GAAW,OAAQrB,GAASf,IAAkB,EAAI,EAClDoC,GAAW,OAAQrB,GAASf,IAAkB,EAAI,EAEtD,GAAIzB,EAAiBV,QAAS,OAC9B,GAAI2E,EAUF,OATAjE,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,OAE1ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KACN1B,GAAI,EACJC,eAAgB,GAIrB,CACD,GAAItE,GAAYoC,EAAiBV,QAS/B,OARAU,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,OAC1ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KAAiBlC,IAAkBrE,EAAMoB,OAC/CyD,IAAMR,IAAkBrE,EAAMoB,OAAUiD,IACxCS,eAAgB9E,EAAMoB,OAAS,IAIlB,IAAb6D,IACFrC,EAAiBV,SAAU,GAEzB+C,IAAajF,EAAMoB,OAAS,IAAmB,IAAd6D,IACnCpC,EAAgBX,SAAU,GAE5ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KACN1B,GAAI4B,GAAW,OAAQrB,GACvBN,eAAgBG,GAEnB,CACD,SAAS6B,GACPJ,EAAsC,QACtCtB,GAEA,IAAKnF,GAAS4C,EAAgBX,UAAY1B,EAAW,OAErDe,EAAgBW,QAAU,OAC1BU,EAAiBV,SAAU,EAE3B,MAAM+C,EAAWG,GAASzC,EAAWT,QAAU,EAE/C,IAAK1B,EAAU,CACb,MAAMqG,EACJzE,KAAKC,IAAIoE,GAAW,OAAQrB,IAAUQ,IAAwBvB,IAAkB,EAElF,GAAIxB,EAAgBX,QAAS,OAC7B,GAAI2E,EAUF,OATAjE,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,OAE1ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KACN1B,GAAI9D,EAAa6E,KAAyBA,IAC1Cd,eAAgBG,GAIrB,CACD,GAAIzE,GAAYqC,EAAgBX,QAS9B,OARAW,EAAgBX,SAAU,EAC1BU,EAAiBV,SAAU,OAC3ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KAAiBlC,IAAkBrE,EAAMoB,OAC/CyD,GAAI,EACJC,eAAgB,IAIH,IAAbG,IACFrC,EAAiBV,SAAU,GAEzB+C,IAAajF,EAAMoB,OAAS,IAC9ByB,EAAgBX,SAAU,GAE5ByC,EAAY,CACVK,UAAW0B,EACX9B,KAAM2B,KACN1B,GAAI4B,GAAW,OAAQrB,GACvBN,eAAgBG,GAEnB,CAED8B,GAAU,KACR,GAAI9G,EAAM,CACR,GAAIkB,EAAoBnB,EAAMoB,OAAS,EACrC,MAAM,IAAIqD,MACR,sBAAsBtD,0DAA0EnB,EAAMoB,YAGtGhB,EAAgBJ,EAAMoB,QACxB4F,QAAQC,KACN,kBAAkB7G,0DAAsEJ,EAAMoB,wBAAwBpB,EAAMoB,UAGjI,IACA,CAACD,EAAmBnB,EAAOI,EAAeH,IAC7C8G,GAAU,KACR1F,EAAgBa,QAAUgF,OAAOC,UAAU,GAC1C,IACHJ,GAAU,KACR9C,IAA+B,GAE9B,CACDhD,EACAb,EACAI,EACAC,EACAF,EACAQ,EACAT,EACAL,IAEFmH,GAAgB,KAIV5E,EAAwBN,SAC1B+B,IACD,GAEA,IACH8C,GAAU,KAENnG,EAAsBsB,QADpBrB,GAG8BuB,KAAKiF,MAAMhD,IAAkB,EAAI,EAClE,GAEA,CAACxD,IACJkG,GAAU,KACR,SAAS/C,IACHkD,OAAOC,aAAe9F,EAAgBa,UAC1Cb,EAAgBa,QAAUgF,OAAOC,WACjClD,KACD,CAED,OADAiD,OAAOI,iBAAiB,SAAUtD,GAC3B,KACLkD,OAAOK,oBAAoB,SAAUvD,EAAa,CACnD,GAEA,IAEH,MAAMwD,GAAWC,GACfC,IACE,MAAMC,EAAaD,EAAME,SACnBC,EAAWH,EAAMI,OAA6B,MAAtBpH,EAA4B,EAAI,GACxDqH,EAAkBL,EAAMG,SAA+B,MAAtBnH,EAA4B,EAAI,GACjEsH,EAAYN,EAAMM,UAAgC,MAAtBtH,EAA4B,EAAI,GAE5DuH,EAAmBF,EAAkBnH,EAAsBsB,QAC3DgG,EAAmBH,GAAmBnH,EAAsBsB,QAElE,GAAIyF,EAaF,OAXEpG,EAAgBW,QADd8F,EAAY,EACY,OAEA,OAG5B1E,EACKJ,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAuE,GACH,CAAAvD,UAAW,SACX5C,gBAAiBA,EAAgBW,WAG/BnB,EAC8B,SAA5BQ,EAAgBW,SAAsB2F,EAAW,GACnDH,EAAMS,cACNxG,EAAU0D,MAAM,CACdT,KAAM,CACJ/C,IAAK0E,MAEP1B,GAAI,CACFhD,IAAK,GAEPyD,OAAQ,CACNE,SAAUkC,EAAMlC,SAChB4C,SAAU,GACVC,QAAS,aAMf1G,EAAU0D,MAAM,CACdT,KAAM,CACJ/C,IAAK0E,MAEP1B,GAAI,CACFhD,KAAMgG,GAERvC,OAAQ,CACNE,SAAUkC,EAAMlC,SAChB4C,SAAU,GACVC,QAAS,QAMf1G,EAAU0D,MAAM,CACdxD,IAAKgG,EACLvC,OAAQ,CACNE,SAAUkC,EAAMlC,SAChB4C,SAAU,GACVC,QAAS,YAITvH,GAA+BoH,GACjCpB,GAAgB,QAChBY,EAAMS,UACGrH,GAA+BmH,IACxCrB,GAAgB,QAChBc,EAAMS,YAKNT,EAAMY,OAASZ,EAAMa,UAAYxH,IACH,SAA5BQ,EAAgBW,SAClB0E,GAAgB,QAEc,SAA5BrF,EAAgBW,SAClB4E,GAAgB,UAIhBY,EAAMY,MAASZ,EAAMa,UAAaxH,IAChCmH,GACG1H,GAAYqC,EAAgBX,QAC/BP,EAAU0D,MAAM,CACdxD,KAAM+D,IACNN,OAAMpC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACDmC,EAAOC,SAAO,CACjBC,SAAUkC,EAAMlC,aAIpBsB,GAAgB,QAETmB,GACJzH,GAAYoC,EAAiBV,QAChCP,EAAU0D,MAAM,CACdxD,IAAK,EACLyD,OAAMpC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACDmC,EAAOC,SAAO,CACjBC,SAAUkC,EAAMlC,aAIpBoB,GAAgB,QAGlBjF,EAAU0D,MAAM,CACdxD,IAAKJ,EAAgBS,QACrBoD,OAAMpC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACDmC,EAAOC,SAAO,CACjBC,SAAUkC,EAAMlC,aAIvB,GAEH,CACEgD,QACGvI,IAASU,IAAoBI,KAC3BA,KAAgBC,EACrByH,KAAM/H,EACNkE,KAAM,IACA7D,GAAckB,EAAuBC,QAChC,EACJD,EAAuBC,QAAQC,YAC/BF,EAAuBC,QAAQI,WAI3B,CAACZ,EAAOG,IAAI2E,MAAO9E,EAAOG,IAAI2E,SAqB7C,SAASjE,KACHN,EAAuBC,UACzBT,EAAgBS,QACdD,EAAuBC,QACC,MAAtBxB,EAA4B,aAAe,aAKvC,IAFNuB,EAAuBC,QACC,MAAtBxB,EAA4B,aAAe,eAG7CkC,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,GAG1BD,EAAuBC,QACC,MAAtBxB,EAA4B,aAAe,aACzC,GACJuB,EAAuBC,QACC,MAAtBxB,EAA4B,aAAe,aACzCkF,MAEJhD,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,GAI1BD,EAAuBC,QACC,MAAtBxB,EAA4B,aAAe,eACvCkF,MAENhD,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,GAG/B,CAaD,SAASwG,GAActF,EAAqBuF,GAC1C,IAAIC,EAAY,EAOhB,GAJEA,EADgB,iBAAPxF,EACGpD,EAAM6I,WAAUC,GAAQA,EAAK1F,KAAOA,IAEpCA,EAEVwF,EAAY,GAAKA,GAAa5I,EAAMoB,OAAQ,CAC9C,GAAIuH,EACF,MAAM,IAAIlE,MAAMkE,GAElB3B,QAAQ2B,MACN,wDAAwDvF,mBAE1DwF,GAAa,CACd,CAED,OAAOA,CACR,CA0CD,MAAMG,GACJC,EACE,MAAA9F,OAAAC,OAAA,CAAAgD,IAAKlE,GA1EHlB,EACK,CACLkI,UACEvH,EAAOG,IAAIqH,OACX3G,IACD,GAGE,IAoELE,MAAKS,OAAAC,OAAA,CACHgG,QAAS,OACTC,SAAU,WACVC,MAAO,OACPC,OAAQ,QAlIRvI,EACwB,MAAtBL,EACK,CACL6I,UAAW,QAGR,CACLC,UAAW,QAGR,eA4HLC,EACE,MAAAvG,OAAAC,OAAA,CAAAgD,IAAK3D,GACDgF,KAAU,CACd/E,MAAKS,OAAAC,OAAA,CACHiG,SAAU,WACVD,QAAS,OACTO,cAAqC,MAAtBhJ,EAA4B,MAAQ,SACnDiJ,YAAa,QAvjBrB,WACE,MAAMC,EAAe,eAAgC,EAAjBnJ,OACpC,MAAO,CACL4I,MAA6B,MAAtB3I,EAA4BkJ,EAAe,OAClDN,OAA8B,MAAtB5I,EAA4BkJ,EAAe,OAEtD,CAkjBUC,KAA0B,CAAAC,SAAA,CAG9B/I,GAAcN,EACbuI,EAAA,MAAA,CACEvG,MAAO,CACLsH,WAAY,EACZV,MAAO5I,KAGT,KACHqC,EAAcE,KAAI,CAAC8F,EAAM1D,KACxB,OACE4D,uBAEEgB,UAAU,2BACE,cAAA,mCACZvH,MACES,OAAAC,OAAA,CAAAgG,QAAS,OACTC,SAAU,WACVa,KAAM,MA9rBGC,IA+rBUnJ,GAAcqE,IAAUpF,EAAMoB,OAAS,EA9rBpD,UAAdd,GAA0BS,EAQ9BmC,OAAAC,OACK,CAAEgH,YAAa,GAAGD,EAAa,EAAI3J,QAR/B,CACL4J,YAAa,GAAGD,EAAa,EAAI3J,MACjC0J,KAAM,mBAAmB7J,OACtBG,GAAUH,EAAgB,GAAMA,WA6rB5B,CAAA0J,SAAAhB,EAAKsB,aAVD,GAAGtB,EAAK1F,MAAMgC,KAxrB/B,IAAuB8E,CAosBd,IAEFnJ,GAAcN,EACbuI,EACE,MAAA,CAAAvG,MAAO,CACLsH,WAAY,EACZV,MAAO5I,KAGT,YAKV,OAAIM,EACK,CACLwC,yBACAwF,oBACAnF,kBACAC,iBACAC,kBACAL,iBACAmD,gBAAiB,IAAMA,KACvBE,gBAAiB,IAAMA,MAIpB,CACLvD,yBACAwF,oBACAnF,kBACAC,iBACAC,kBACAL,iBACAmD,gBAAiB,IAAMA,KACvBE,gBAAiB,IAAMA,KACvBnC,YA3HF,SAA6BvB,GAC3B,IAAKnD,EAAM,OAEX2C,EAAiBV,SAAU,EAC3BW,EAAgBX,SAAU,EAE1B,MAAM0G,EAAYF,GAChBtF,EACA,uEAGF,GAAIwF,IAAcjG,EAAWT,QAC3B,OAGF,MAAMyD,EAAc+C,GAAc1I,EAAM2C,EAAWT,SAASkB,IACtDiH,EAAgB3B,GAAc1I,EAAM4I,GAAWxF,IAEjDiH,EAAgB1E,EAClBmB,GAAgB,QAASuD,GAEzBzD,GAAgB,QAASyD,EAE5B,EAqGCC,cApGF,SAAuBlH,GACrB,MAAMwF,EAAYF,GAActF,EAAI,kDAC9BmH,EAAc5H,EAAWT,QAC/B,OAAI1B,GAAY+J,IAAgBvK,EAAMoB,OAAS,EACxB,IAAdwH,EAEFA,IAAc2B,EAAc,CACpC,EA8FCC,cA7FF,SAAuBpH,GACrB,MAAMwF,EAAYF,GAActF,EAAI,kDAC9BmH,EAAc5H,EAAWT,QAC/B,OAAI1B,GAA4B,IAAhB+J,EACP3B,IAAc5I,EAAMoB,OAAS,EAE/BwH,IAAc2B,EAAc,CACpC,EAuFCE,gBAAkBrH,GAEdsF,GACEtF,EACA,sEACIT,EAAWT,QAIzB,CAEA,MAAMwI,EACJC,OAEEC,GAEJ,SAASC,IACP,MAAMC,EAAUC,EAAWL,GAC3B,IAAKI,EACH,MAAM,IAAIrG,MAAM,8DAElB,OAAOqG,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useRef as e,useEffect as n}from"react";import t from"screenfull";import{jsx as r}from"react/jsx-runtime";import{useSpring as i}from"@react-spring/web";function l({mainCarouselWrapperRef:r,onFullScreenChange:i,handleResize:l}){const o=e(!1);function u(e){o.current=e}return n((()=>{function e(){document.fullscreenElement&&(u(!0),i(!0),l&&l()),document.fullscreenElement||(u(!1),i(!1),l&&l())}if(t.isEnabled)return t.on("change",e),()=>{t.isEnabled&&t.off("change",e)}}),[]),{enterFullscreen:function(e){t.isEnabled&&t.request(e||r.current)},exitFullscreen:function(){t.isEnabled&&t.exit()},getIsFullscreen:function(){return o.current}}}function o({thumbsSlideAxis:n="x",withThumbs:t=!1,prepareThumbsData:l,items:o}){const u=e(null),[c,s]=i((()=>({val:0})));function a(){var e;return Math.round(Number(null===(e=u.current)||void 0===e?void 0:e["x"===n?"scrollWidth":"scrollHeight"])-u.current.getBoundingClientRect()["x"===n?"width":"height"])}return{thumbsFragment:t?r("div",Object.assign({className:"use-spring-carousel-thumbs-wrapper",ref:u,onWheel:()=>c.val.stop(),style:Object.assign({display:"flex",flex:"1",position:"relative",width:"100%",height:"100%",flexDirection:"x"===n?"row":"column"},"x"===n?{overflowX:"auto"}:{overflowY:"auto",maxHeight:"100%"})},{children:function(){function e(e){return e.map((e=>({id:e.id,renderThumb:e.renderThumb})))}return l?l(e(o)):e(o)}().map((({id:e,renderThumb:n})=>{const t=`thumb-item-${e}`;return r("div",Object.assign({id:t,className:"thumb-item"},{children:n}),t)}))})):null,handleScroll:function(e){var t,r;const i=u.current?u.current.querySelector(`#thumb-item-${o[e].id}`):null;if(i&&u.current&&!function(e){const n=e.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&n.right<=(window.innerWidth||document.documentElement.clientWidth)}(i)){const e=i.offsetLeft,l=e>a()?a():e;s.start({from:{val:null!==(r=null===(t=u.current)||void 0===t?void 0:t["x"===n?"scrollLeft":"scrollTop"])&&void 0!==r?r:0},to:{val:l},onChange:({value:e})=>{u.current&&(u.current["x"===n?"scrollLeft":"scrollTop"]=Math.abs(e.val))}})}}}}export{l as a,o as u};
|
|
2
|
+
//# sourceMappingURL=useThumbsModule-ca28667b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbsModule-ca28667b.js","sources":["../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx"],"sourcesContent":["import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n handleResize?(): void\n onFullScreenChange(isFullscreen: boolean): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n onFullScreenChange,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n onFullScreenChange(true)\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n onFullScreenChange(false)\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n"],"names":["useFullscreenModule","mainCarouselWrapperRef","onFullScreenChange","handleResize","isFullscreen","useRef","setIsFullscreen","_isFullscreen","current","useEffect","handleFullscreenChange","document","fullscreenElement","screenfull","isEnabled","on","off","enterFullscreen","elementRef","request","exitFullscreen","exit","getIsFullscreen","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","_a","getBoundingClientRect","thumbsFragment","_jsx","Object","assign","className","ref","onWheel","stop","style","display","flex","position","width","height","flexDirection","overflowX","overflowY","maxHeight","children","getPreparedItems","_items","map","i","id","renderThumb","handlePrepareThumbsData","thumbId","handleScroll","activeItem","thumbNode","querySelector","el","rect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{useTransition as t,a as i,config as n}from"@react-spring/web";import{useRef as s,useState as r,useEffect as o}from"react";import{u as a}from"./useEventsModule-58340c73.js";import{useDrag as l}from"@use-gesture/react";const c={initial:{opacity:1,position:"relative"},from:{opacity:0,position:"relative"},enter:{position:"relative",opacity:1},leave:{opacity:1,position:"absolute"}};function d({init:d=!0,disableGestures:m=!1,items:u,springConfig:g=n.default,exitBeforeEnter:p=!1,trail:f,withLoop:v=!1,activeItem:h,toPrevItemSpringProps:b=c,toNextItemSpringProps:j=c,draggingSlideTreshold:O=50}){const y=s("next"),x=s("initial"),T=s(null),[w,I]=r(null!=h?h:0),{emitEvent:M,useListenToCustomEvent:S}=a();function N({to:e,slideType:t,slideMode:i}){y.current=t,x.current=i,M({eventName:"onSlideStartChange",slideActionType:y.current,slideMode:x.current,nextItem:{index:e,id:u[e].id,startReached:0===e,endReached:e===u.length-1}}),I(e)}function E(e){if(!d)return;const t=0===w;!v&&t||N(v&&t?{to:u.length-1,slideType:"prev",slideMode:e}:{to:w-1,slideType:"prev",slideMode:e})}function R(e){if(!d)return;const t=w===u.length-1;!v&&t||N(v&&t?{to:0,slideType:"next",slideMode:e}:{to:w+1,slideType:"next",slideMode:e})}o((()=>{"number"==typeof h&&h!==w&&I(h)}),[h]);const C=t(w,Object.assign(Object.assign({config:g,key:null,trail:f,exitBeforeEnter:p},"prev"===y.current?{initial:Object.assign({},b.initial),from:Object.assign({},b.from),enter:Object.assign({},b.enter),leave:Object.assign({},b.leave)}:"next"===y.current?{initial:Object.assign({},j.initial),from:Object.assign({},j.from),enter:Object.assign({},j.enter),leave:Object.assign({},j.leave)}:{initial:Object.assign({},c.initial),from:Object.assign({},c.from),enter:Object.assign({},c.enter),leave:Object.assign({},c.leave)}),{onRest(e,t,i){e.finished&&i===w&&M({eventName:"onSlideChange",slideActionType:y.current,slideMode:x.current,currentItem:{index:w,id:u[w].id,startReached:0===w,endReached:w===u.length-1}})}})),L=l((({last:e,movement:[t]})=>{if(e){const e=t>O,i=t<-O,n=0===w,s=w===u.length-1;if(i){if(!v&&s)return;M({eventName:"onLeftSwipe"}),R("swipe")}else if(e){if(!v&&n)return;M({eventName:"onRightSwipe"}),E("swipe")}}}),{enabled:!m}),P=C(((t,n,s,r)=>e(i.div,Object.assign({id:`use-transition-carousel-item-${r}`,className:"use-transition-carousel-item",style:Object.assign(Object.assign({},t),{flex:"1 0 100%",width:"100%",height:"100%"})},{children:u[n].renderItem}))));return{useListenToCustomEvent:S,carouselFragment:e("div",Object.assign({ref:T},L(),{style:{display:"flex",position:"relative",width:"100%",height:"100%",overflow:"hidden"}},{children:P})),slideToPrevItem:()=>E("click"),slideToNextItem:()=>R("click")}}export{d as useTransitionCarousel};
|
|
2
|
+
//# sourceMappingURL=useTransitionCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTransitionCarousel.js","sources":["../../src/useTransitionCarousel.tsx"],"sourcesContent":["import { a, config, useTransition } from '@react-spring/web'\nimport { useEffect, useRef, useState } from 'react'\nimport { SlideActionType, TransitionSlideMode } from './types/common'\nimport { UseTransitionCarouselProps } from './types/useTransitionCarousel.types'\nimport { useEventsModule } from './modules/useEventsModule'\nimport { useDrag } from '@use-gesture/react'\n\nconst defaultAnimationProps = {\n initial: {\n opacity: 1,\n position: 'relative',\n },\n from: {\n opacity: 0,\n position: 'relative',\n },\n enter: {\n position: 'relative',\n opacity: 1,\n },\n leave: {\n opacity: 1,\n position: 'absolute',\n },\n}\n\nexport function useTransitionCarousel({\n init = true,\n disableGestures = false,\n items,\n springConfig = config.default,\n exitBeforeEnter = false,\n trail,\n withLoop = false,\n activeItem: externalActiveItem,\n toPrevItemSpringProps = defaultAnimationProps,\n toNextItemSpringProps = defaultAnimationProps,\n draggingSlideTreshold = 50,\n}: UseTransitionCarouselProps) {\n const slideActionType = useRef<SlideActionType>('next')\n const slideModeType = useRef<TransitionSlideMode>('initial')\n const mainCarouselWrapperRef = useRef<HTMLDivElement | null>(null)\n const [activeItem, setActiveItem] = useState(externalActiveItem ?? 0)\n const { emitEvent, useListenToCustomEvent } = useEventsModule<'use-transition'>()\n\n function getConfig() {\n if (slideActionType.current === 'prev') {\n return {\n initial: {\n ...toPrevItemSpringProps.initial,\n },\n from: {\n ...toPrevItemSpringProps.from,\n },\n enter: {\n ...toPrevItemSpringProps.enter,\n },\n leave: {\n ...toPrevItemSpringProps.leave,\n },\n }\n }\n if (slideActionType.current === 'next') {\n return {\n initial: {\n ...toNextItemSpringProps.initial,\n },\n from: {\n ...toNextItemSpringProps.from,\n },\n enter: {\n ...toNextItemSpringProps.enter,\n },\n leave: {\n ...toNextItemSpringProps.leave,\n },\n }\n }\n return {\n initial: {\n ...defaultAnimationProps.initial,\n },\n from: {\n ...defaultAnimationProps.from,\n },\n enter: {\n ...defaultAnimationProps.enter,\n },\n leave: {\n ...defaultAnimationProps.leave,\n },\n }\n }\n\n useEffect(() => {\n if (typeof externalActiveItem === 'number' && externalActiveItem !== activeItem) {\n setActiveItem(externalActiveItem)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalActiveItem])\n\n type SlideToItem = {\n to: number\n slideType: SlideActionType\n slideMode: TransitionSlideMode\n }\n\n function slideToItem({ to, slideType, slideMode }: SlideToItem) {\n slideActionType.current = slideType\n slideModeType.current = slideMode\n emitEvent({\n eventName: 'onSlideStartChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n nextItem: {\n index: to,\n id: items[to].id,\n startReached: to === 0,\n endReached: to === items.length - 1,\n },\n })\n setActiveItem(to)\n }\n\n function slideToPrevItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isFirstItem = activeItem === 0\n\n if (!withLoop && isFirstItem) return\n\n if (withLoop && isFirstItem) {\n slideToItem({\n to: items.length - 1,\n slideType: 'prev',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem - 1,\n slideType: 'prev',\n slideMode,\n })\n }\n }\n function slideToNextItem(slideMode: TransitionSlideMode) {\n if (!init) return\n const isLastItem = activeItem === items.length - 1\n\n if (!withLoop && isLastItem) return\n\n if (withLoop && isLastItem) {\n slideToItem({\n to: 0,\n slideType: 'next',\n slideMode,\n })\n } else {\n slideToItem({\n to: activeItem + 1,\n slideType: 'next',\n slideMode,\n })\n }\n }\n\n const transitions = useTransition(activeItem, {\n config: springConfig,\n key: null,\n trail,\n exitBeforeEnter,\n ...getConfig(),\n onRest(value, _, index) {\n if (value.finished && index === activeItem) {\n emitEvent({\n eventName: 'onSlideChange',\n slideActionType: slideActionType.current,\n slideMode: slideModeType.current,\n currentItem: {\n index: activeItem,\n id: items[activeItem].id,\n startReached: activeItem === 0,\n endReached: activeItem === items.length - 1,\n },\n })\n }\n },\n })\n\n const bindSwipe = useDrag(\n ({ last, movement: [mx] }) => {\n if (last) {\n const prevItemTreshold = mx > draggingSlideTreshold\n const nextItemTreshold = mx < -draggingSlideTreshold\n const isFirstItem = activeItem === 0\n const isLastItem = activeItem === items.length - 1\n\n if (nextItemTreshold) {\n if (!withLoop && isLastItem) return\n\n emitEvent({\n eventName: 'onLeftSwipe',\n })\n slideToNextItem('swipe')\n } else if (prevItemTreshold) {\n if (!withLoop && isFirstItem) return\n\n emitEvent({\n eventName: 'onRightSwipe',\n })\n slideToPrevItem('swipe')\n }\n }\n },\n {\n enabled: !disableGestures,\n },\n )\n\n const itemsFragment = transitions((styles, item, _, indx) => {\n return (\n <a.div\n id={`use-transition-carousel-item-${indx}`}\n className=\"use-transition-carousel-item\"\n style={{\n ...styles,\n flex: '1 0 100%',\n width: '100%',\n height: '100%',\n }}\n >\n {items[item].renderItem}\n </a.div>\n )\n })\n const carouselFragment = (\n <div\n ref={mainCarouselWrapperRef}\n {...bindSwipe()}\n style={{\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n {itemsFragment}\n </div>\n )\n\n return {\n useListenToCustomEvent,\n carouselFragment,\n slideToPrevItem: () => slideToPrevItem('click'),\n slideToNextItem: () => slideToNextItem('click'),\n }\n}\n"],"names":["defaultAnimationProps","initial","opacity","position","from","enter","leave","useTransitionCarousel","init","disableGestures","items","springConfig","config","default","exitBeforeEnter","trail","withLoop","activeItem","externalActiveItem","toPrevItemSpringProps","toNextItemSpringProps","draggingSlideTreshold","slideActionType","useRef","slideModeType","mainCarouselWrapperRef","setActiveItem","useState","emitEvent","useListenToCustomEvent","useEventsModule","slideToItem","to","slideType","slideMode","current","eventName","nextItem","index","id","startReached","endReached","length","slideToPrevItem","isFirstItem","slideToNextItem","isLastItem","useEffect","transitions","useTransition","Object","assign","key","onRest","value","_","finished","currentItem","bindSwipe","useDrag","last","movement","mx","prevItemTreshold","nextItemTreshold","enabled","itemsFragment","styles","item","indx","_jsx","a","div","className","style","flex","width","height","children","renderItem","carouselFragment","ref","display","overflow"],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
export declare const mockedItems:
|
|
2
|
+
export declare const mockedItems: {
|
|
3
3
|
id: string;
|
|
4
|
-
renderThumb: JSX.Element;
|
|
5
4
|
renderItem: JSX.Element;
|
|
6
|
-
}
|
|
7
|
-
id: string;
|
|
8
|
-
renderItem: JSX.Element;
|
|
9
|
-
renderThumb?: undefined;
|
|
10
|
-
})[];
|
|
5
|
+
}[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { FullGestureState } from '@use-gesture/react';
|
|
2
|
-
import { SlideActionType, SlideMode } from '../types/common';
|
|
3
|
-
declare type OnSlideStartChange = {
|
|
2
|
+
import { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common';
|
|
3
|
+
declare type OnSlideStartChange<T> = {
|
|
4
4
|
eventName: 'onSlideStartChange';
|
|
5
5
|
slideActionType: SlideActionType;
|
|
6
|
-
slideMode: SlideMode;
|
|
6
|
+
slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode;
|
|
7
7
|
nextItem: {
|
|
8
8
|
index: number;
|
|
9
9
|
id: string;
|
|
@@ -11,10 +11,10 @@ declare type OnSlideStartChange = {
|
|
|
11
11
|
endReached: boolean;
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
-
declare type OnSlideChange = {
|
|
14
|
+
declare type OnSlideChange<T> = {
|
|
15
15
|
eventName: 'onSlideChange';
|
|
16
16
|
slideActionType: SlideActionType;
|
|
17
|
-
slideMode: SlideMode;
|
|
17
|
+
slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode;
|
|
18
18
|
currentItem: {
|
|
19
19
|
index: number;
|
|
20
20
|
id: string;
|
|
@@ -30,15 +30,22 @@ declare type OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {
|
|
|
30
30
|
eventName: 'onDrag';
|
|
31
31
|
slideActionType: SlideActionType;
|
|
32
32
|
};
|
|
33
|
-
declare type
|
|
34
|
-
|
|
35
|
-
export declare type EmitEvent = (event: Events) => void;
|
|
36
|
-
export declare type UseListenToCustomEvent = {
|
|
37
|
-
useListenToCustomEvent: (eventHandler: EventHandler) => void;
|
|
38
|
-
emitEvent: (event: Events) => void;
|
|
33
|
+
declare type OnLeftSwipe = {
|
|
34
|
+
eventName: 'onLeftSwipe';
|
|
39
35
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
declare type OnRightSwipe = {
|
|
37
|
+
eventName: 'onRightSwipe';
|
|
38
|
+
};
|
|
39
|
+
declare type SpringCarouselEvents<T> = OnSlideStartChange<T> | OnSlideChange<T> | OnDrag | OnFullscreenChange;
|
|
40
|
+
declare type TransitionCarouselEvents<T> = OnSlideStartChange<T> | OnSlideChange<T> | OnFullscreenChange | OnLeftSwipe | OnRightSwipe;
|
|
41
|
+
declare type Events<T> = T extends 'use-spring' ? SpringCarouselEvents<'use-spring'> : TransitionCarouselEvents<'use-transition'>;
|
|
42
|
+
declare type EventHandler<T> = (props: Events<T>) => void;
|
|
43
|
+
export declare type UseListenToCustomEvent<T> = {
|
|
44
|
+
useListenToCustomEvent: (eventHandler: EventHandler<T>) => void;
|
|
45
|
+
emitEvent: (event: Events<T>) => void;
|
|
46
|
+
};
|
|
47
|
+
export declare function useEventsModule<T extends 'use-spring' | 'use-transition'>(): {
|
|
48
|
+
useListenToCustomEvent: (eventHandler: EventHandler<T>) => void;
|
|
49
|
+
emitEvent: (event: Events<T>) => void;
|
|
43
50
|
};
|
|
44
51
|
export {};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { MutableRefObject } from 'react';
|
|
2
|
-
import { EmitEvent } from './useEventsModule';
|
|
3
2
|
declare type FullscreenModule = {
|
|
4
3
|
mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>;
|
|
5
|
-
emitEvent: EmitEvent;
|
|
6
4
|
handleResize?(): void;
|
|
5
|
+
onFullScreenChange(isFullscreen: boolean): void;
|
|
7
6
|
};
|
|
8
|
-
export declare function useFullscreenModule({ mainCarouselWrapperRef,
|
|
7
|
+
export declare function useFullscreenModule({ mainCarouselWrapperRef, onFullScreenChange, handleResize, }: FullscreenModule): {
|
|
9
8
|
enterFullscreen: (elementRef?: HTMLElement) => void;
|
|
10
9
|
exitFullscreen: () => void;
|
|
11
10
|
getIsFullscreen: () => boolean;
|
|
@@ -4,16 +4,26 @@ import { UseListenToCustomEvent } from '../modules/useEventsModule';
|
|
|
4
4
|
export declare type UseSpringReturnType = {
|
|
5
5
|
carouselFragment: ReactNode;
|
|
6
6
|
thumbsFragment: ReactNode;
|
|
7
|
-
useListenToCustomEvent: UseListenToCustomEvent['useListenToCustomEvent'];
|
|
7
|
+
useListenToCustomEvent: UseListenToCustomEvent<'use-spring'>['useListenToCustomEvent'];
|
|
8
8
|
getIsFullscreen(): boolean;
|
|
9
|
-
getIsPrevItem(id: string): boolean;
|
|
10
|
-
getIsNextItem(id: string): boolean;
|
|
11
9
|
enterFullscreen(ref?: HTMLElement): void;
|
|
12
10
|
exitFullscreen(): void;
|
|
13
11
|
slideToNextItem(): void;
|
|
14
12
|
slideToPrevItem(): void;
|
|
15
13
|
slideToItem(item: string | number): void;
|
|
16
14
|
getIsActiveItem(id: string): boolean;
|
|
15
|
+
getIsNextItem(id: string | number): boolean;
|
|
16
|
+
getIsPrevItem(id: string | number): boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare type UseSpringFreeScrollReturnType = {
|
|
19
|
+
carouselFragment: ReactNode;
|
|
20
|
+
thumbsFragment: ReactNode;
|
|
21
|
+
useListenToCustomEvent: UseListenToCustomEvent<'use-spring'>['useListenToCustomEvent'];
|
|
22
|
+
getIsFullscreen(): boolean;
|
|
23
|
+
enterFullscreen(ref?: HTMLElement): void;
|
|
24
|
+
exitFullscreen(): void;
|
|
25
|
+
slideToNextItem(): void;
|
|
26
|
+
slideToPrevItem(): void;
|
|
17
27
|
};
|
|
18
28
|
export declare type PrepareThumbsData = (items: Omit<ItemWithThumb, 'renderItem'>[]) => Omit<ItemWithThumb, 'renderItem'>[];
|
|
19
29
|
export declare type SpringCarouselWithThumbs = {
|
|
@@ -37,10 +47,10 @@ export declare type SpringCarouselWithFixedItems = {
|
|
|
37
47
|
};
|
|
38
48
|
export declare type SpringCarouselWithNoFixedItems = {
|
|
39
49
|
slideType?: 'fluid';
|
|
50
|
+
itemsPerSlide?: never;
|
|
40
51
|
startEndGutter?: never;
|
|
41
52
|
initialStartingPosition?: never;
|
|
42
53
|
initialActiveItem?: never;
|
|
43
|
-
itemsPerSlide?: never;
|
|
44
54
|
};
|
|
45
55
|
export declare type SpringCarouselWithLoop = {
|
|
46
56
|
withLoop?: true;
|
|
@@ -49,16 +59,20 @@ export declare type SpringCarouselWithNoLoop = {
|
|
|
49
59
|
withLoop?: false;
|
|
50
60
|
};
|
|
51
61
|
export declare type SpringCarouselFreeScroll = {
|
|
52
|
-
freeScroll
|
|
62
|
+
freeScroll: true;
|
|
53
63
|
withLoop?: never;
|
|
54
64
|
slideType?: never;
|
|
55
65
|
enableFreeScrollDrag?: true;
|
|
66
|
+
initialActiveItem?: never;
|
|
67
|
+
itemsPerSlide?: never;
|
|
56
68
|
};
|
|
57
69
|
export declare type SpringCarouselNoFreeScroll = {
|
|
58
|
-
freeScroll?: never;
|
|
70
|
+
freeScroll?: never | false | undefined;
|
|
59
71
|
withLoop?: boolean;
|
|
60
72
|
slideType?: 'fixed' | 'fluid';
|
|
61
73
|
enableFreeScrollDrag?: never;
|
|
74
|
+
initialActiveItem?: number;
|
|
75
|
+
itemsPerSlide?: number;
|
|
62
76
|
};
|
|
63
77
|
export declare type BaseProps = {
|
|
64
78
|
init?: boolean;
|
|
@@ -67,16 +81,13 @@ export declare type BaseProps = {
|
|
|
67
81
|
draggingSlideTreshold?: number;
|
|
68
82
|
slideWhenThresholdIsReached?: boolean;
|
|
69
83
|
disableGestures?: boolean;
|
|
70
|
-
};
|
|
71
|
-
export declare type UseSpringCarouselWithThumbs = BaseProps & SpringCarouselWithThumbs & (SpringCarouselWithFixedItems | SpringCarouselWithNoFixedItems) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop) & (SpringCarouselFreeScroll | SpringCarouselNoFreeScroll);
|
|
72
|
-
export declare type UseSpringCarouselWithNoThumbs = BaseProps & SpringCarouselWithNoThumbs & (SpringCarouselWithFixedItems | SpringCarouselWithNoFixedItems) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop) & (SpringCarouselFreeScroll | SpringCarouselNoFreeScroll);
|
|
73
|
-
export declare type UseSpringCarouselWithFixedItems = BaseProps & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs) & SpringCarouselWithFixedItems & (SpringCarouselWithLoop | SpringCarouselWithNoLoop) & (SpringCarouselFreeScroll | SpringCarouselNoFreeScroll);
|
|
74
|
-
export declare type UseSpringCarouselWithNoFixedItems = BaseProps & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs) & SpringCarouselWithNoFixedItems & (SpringCarouselWithLoop | SpringCarouselWithNoLoop) & (SpringCarouselFreeScroll | SpringCarouselNoFreeScroll);
|
|
75
|
-
export declare type UseSpringCarouselComplete = BaseProps & {
|
|
76
|
-
thumbsSlideAxis?: 'x' | 'y';
|
|
77
|
-
itemsPerSlide?: number;
|
|
78
84
|
startEndGutter?: number;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
};
|
|
86
|
+
declare type ScrollType<T> = T extends true ? SpringCarouselFreeScroll : SpringCarouselNoFreeScroll;
|
|
87
|
+
export declare type UseSpringCarouselWithThumbs<T> = BaseProps & SpringCarouselWithThumbs & ScrollType<T> & (SpringCarouselWithFixedItems | SpringCarouselWithNoFixedItems) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop);
|
|
88
|
+
export declare type UseSpringCarouselWithNoThumbs<T> = BaseProps & SpringCarouselWithNoThumbs & ScrollType<T> & (SpringCarouselWithFixedItems | SpringCarouselWithNoFixedItems) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop);
|
|
89
|
+
export declare type UseSpringCarouselWithFixedItems<T> = BaseProps & SpringCarouselWithFixedItems & ScrollType<T> & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop);
|
|
90
|
+
export declare type UseSpringCarouselWithNoFixedItems<T> = BaseProps & SpringCarouselWithNoFixedItems & ScrollType<T> & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop);
|
|
91
|
+
export declare type UseSpringCarouselWithFreeScroll = BaseProps & SpringCarouselFreeScroll & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs);
|
|
92
|
+
export declare type UseSpringCarouselComplete = BaseProps & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs) & (SpringCarouselWithFixedItems | SpringCarouselWithNoFixedItems) & (SpringCarouselWithLoop | SpringCarouselWithNoLoop) & (SpringCarouselFreeScroll | SpringCarouselNoFreeScroll);
|
|
93
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SpringConfig, TransitionFrom, TransitionTo } from '@react-spring/web';
|
|
2
|
+
import { SpringCarouselWithThumbs, SpringCarouselWithNoThumbs } from './internals';
|
|
3
|
+
import { ItemWithNoThumb, ItemWithThumb } from '../types';
|
|
4
|
+
declare type Item = ItemWithThumb | ItemWithNoThumb;
|
|
5
|
+
export declare type SpringAnimationProps = {
|
|
6
|
+
initial: TransitionFrom<Item>;
|
|
7
|
+
from: TransitionFrom<Item>;
|
|
8
|
+
enter: TransitionTo<Item>;
|
|
9
|
+
leave: TransitionTo<Item>;
|
|
10
|
+
};
|
|
11
|
+
declare type BaseProps = {
|
|
12
|
+
init?: boolean;
|
|
13
|
+
disableGestures?: boolean;
|
|
14
|
+
springConfig?: Omit<SpringConfig, 'velocity'>;
|
|
15
|
+
toPrevItemSpringProps?: SpringAnimationProps;
|
|
16
|
+
toNextItemSpringProps?: SpringAnimationProps;
|
|
17
|
+
exitBeforeEnter?: boolean;
|
|
18
|
+
trail?: number;
|
|
19
|
+
withLoop?: boolean;
|
|
20
|
+
activeItem?: number;
|
|
21
|
+
draggingSlideTreshold?: number;
|
|
22
|
+
};
|
|
23
|
+
export declare type UseTransitionCarouselProps = BaseProps & (SpringCarouselWithThumbs | SpringCarouselWithNoThumbs);
|
|
24
|
+
export {};
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
import { UseSpringReturnType, UseSpringCarouselWithThumbs, UseSpringCarouselWithNoThumbs,
|
|
2
|
-
declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { UseSpringReturnType, UseSpringCarouselWithFreeScroll, UseSpringFreeScrollReturnType, UseSpringCarouselWithThumbs, UseSpringCarouselWithNoThumbs, UseSpringCarouselWithNoFixedItems, UseSpringCarouselWithFixedItems } from './types/internals';
|
|
2
|
+
declare type ReturnType<T> = T extends true ? UseSpringFreeScrollReturnType : UseSpringReturnType;
|
|
3
|
+
/**
|
|
4
|
+
* With free scroll
|
|
5
|
+
*/
|
|
6
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithFreeScroll): ReturnType<true>;
|
|
7
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithThumbs<true>): ReturnType<true>;
|
|
8
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithNoThumbs<true>): ReturnType<true>;
|
|
9
|
+
/**
|
|
10
|
+
* No free scroll
|
|
11
|
+
*/
|
|
12
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithThumbs<false>): ReturnType<false>;
|
|
13
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithNoThumbs<false>): ReturnType<false>;
|
|
14
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithFixedItems<false>): ReturnType<false>;
|
|
15
|
+
declare function useSpringCarousel(props: UseSpringCarouselWithNoFixedItems<false>): ReturnType<false>;
|
|
6
16
|
declare function useSpringCarouselContext(): Omit<UseSpringReturnType, "thumbsFragment" | "carouselFragment">;
|
|
7
17
|
export { useSpringCarousel, useSpringCarouselContext };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SlideActionType, TransitionSlideMode } from './types/common';
|
|
3
|
+
import { UseTransitionCarouselProps } from './types/useTransitionCarousel.types';
|
|
4
|
+
export declare function useTransitionCarousel({ init, disableGestures, items, springConfig, exitBeforeEnter, trail, withLoop, activeItem: externalActiveItem, toPrevItemSpringProps, toNextItemSpringProps, draggingSlideTreshold, }: UseTransitionCarouselProps): {
|
|
5
|
+
useListenToCustomEvent: (eventHandler: (props: {
|
|
6
|
+
eventName: "onFullscreenChange";
|
|
7
|
+
isFullscreen: boolean;
|
|
8
|
+
} | {
|
|
9
|
+
eventName: "onLeftSwipe";
|
|
10
|
+
} | {
|
|
11
|
+
eventName: "onRightSwipe";
|
|
12
|
+
} | {
|
|
13
|
+
eventName: "onSlideStartChange";
|
|
14
|
+
slideActionType: SlideActionType;
|
|
15
|
+
slideMode: TransitionSlideMode;
|
|
16
|
+
nextItem: {
|
|
17
|
+
index: number;
|
|
18
|
+
id: string;
|
|
19
|
+
startReached: boolean;
|
|
20
|
+
endReached: boolean;
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
eventName: "onSlideChange";
|
|
24
|
+
slideActionType: SlideActionType;
|
|
25
|
+
slideMode: TransitionSlideMode;
|
|
26
|
+
currentItem: {
|
|
27
|
+
index: number;
|
|
28
|
+
id: string;
|
|
29
|
+
startReached: boolean;
|
|
30
|
+
endReached: boolean;
|
|
31
|
+
};
|
|
32
|
+
}) => void) => void;
|
|
33
|
+
carouselFragment: JSX.Element;
|
|
34
|
+
slideToPrevItem: () => void;
|
|
35
|
+
slideToNextItem: () => void;
|
|
36
|
+
};
|