react-spring-carousel 3.0.0-beta010 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype Events = OnSlideStartChange | OnSlideChange | OnDrag | OnFullscreenChange\n\ntype EventHandler = (props: Events) => void\n\nexport type EmitEvent = (event: Events) => void\nexport type UseListenToCustomEvent = {\n useListenToCustomEvent: (eventHandler: EventHandler) => void\n emitEvent: (event: Events) => void\n}\n\nexport function useEventsModule() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler) {\n useEffect(() => {\n function handleEvent(event: CustomEvent<Events>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [])\n }\n function emitEvent(event: Events) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\nimport { EmitEvent } from './useEventsModule'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n emitEvent: EmitEvent\n handleResize?(): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n emitEvent,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: true,\n })\n\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: false,\n })\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","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","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":["useRef","useEffect","useSpring","_jsx","useCallback","config","useLayoutEffect","useDrag","createContext","useContext"],"mappings":";;;;;;EAIA,MAAM,UAAU,GAAG,YAAY,CAAA;WA2Cf,eAAe,GAAA;EAC7B,IAAA,MAAM,WAAW,GAAGA,YAAM,CAAwB,IAAI,CAAC,CAAA;MAEvDC,eAAS,CAAC,MAAK;UACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;OACpD,EAAE,EAAE,CAAC,CAAA;MAEN,SAAS,sBAAsB,CAAC,YAA0B,EAAA;UACxDA,eAAS,CAAC,MAAK;cACb,SAAS,WAAW,CAAC,KAA0B,EAAA;EAC7C,gBAAA,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;eAC3B;cAED,IAAI,WAAW,CAAC,OAAO,EAAE;;kBAEvB,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAA;EACpE,gBAAA,OAAO,MAAK;;;EAEV,oBAAA,CAAA,EAAA,GAAA,WAAW,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAA;EAC1E,iBAAC,CAAA;EACF,aAAA;WACF,EAAE,EAAE,CAAC,CAAA;OACP;MACD,SAAS,SAAS,CAAC,KAAa,EAAA;UAC9B,IAAI,WAAW,CAAC,OAAO,EAAE;EACvB,YAAA,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE;EAC3C,gBAAA,MAAM,EAAE,KAAK;EACd,aAAA,CAAC,CAAA;EACF,YAAA,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;EAC5C,SAAA;OACF;MAED,OAAO;UACL,sBAAsB;UACtB,SAAS;OACV,CAAA;EACH;;ECzEM,SAAU,mBAAmB,CAAC,EAClC,sBAAsB,EACtB,SAAS,EACT,YAAY,GACK,EAAA;EACjB,IAAA,MAAM,YAAY,GAAGD,YAAM,CAAC,KAAK,CAAC,CAAA;MAElCC,eAAS,CAAC,MAAK;EACb,QAAA,SAAS,sBAAsB,GAAA;cAC7B,IAAI,QAAQ,CAAC,iBAAiB,EAAE;kBAC9B,eAAe,CAAC,IAAI,CAAC,CAAA;EACrB,gBAAA,SAAS,CAAC;EACR,oBAAA,SAAS,EAAE,oBAAoB;EAC/B,oBAAA,YAAY,EAAE,IAAI;EACnB,iBAAA,CAAC,CAAA;kBAEF,YAAY,IAAI,YAAY,EAAE,CAAA;EAC/B,aAAA;EAED,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;kBAC/B,eAAe,CAAC,KAAK,CAAC,CAAA;EACtB,gBAAA,SAAS,CAAC;EACR,oBAAA,SAAS,EAAE,oBAAoB;EAC/B,oBAAA,YAAY,EAAE,KAAK;EACpB,iBAAA,CAAC,CAAA;kBACF,YAAY,IAAI,YAAY,EAAE,CAAA;EAC/B,aAAA;WACF;UAED,IAAI,UAAU,CAAC,SAAS,EAAE;EACxB,YAAA,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAA;EAC/C,YAAA,OAAO,MAAK;kBACV,IAAI,UAAU,CAAC,SAAS,EAAE;EACxB,oBAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAA;EACjD,iBAAA;EACH,aAAC,CAAA;EACF,SAAA;OACF,EAAE,EAAE,CAAC,CAAA;MAEN,SAAS,eAAe,CAAC,aAAsB,EAAA;EAC7C,QAAA,YAAY,CAAC,OAAO,GAAG,aAAa,CAAA;OACrC;EAED,IAAA,SAAS,eAAe,GAAA;UACtB,OAAO,YAAY,CAAC,OAAO,CAAA;OAC5B;MAED,SAAS,eAAe,CAAC,UAAwB,EAAA;UAC/C,IAAI,UAAU,CAAC,SAAS,EAAE;cACxB,UAAU,CAAC,OAAO,EAAE,UAAU,IAAI,sBAAsB,CAAC,OAAO,EAAa,CAAA;EAC9E,SAAA;OACF;EAED,IAAA,SAAS,cAAc,GAAA;EACrB,QAAA,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,CAAA;OAC1C;MAED,OAAO;UACL,eAAe;UACf,cAAc;UACd,eAAe;OAChB,CAAA;EACH;;EC7DA,SAAS,YAAY,CAAC,EAAe,EAAA;EACnC,IAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;EACvC,IAAA,QACE,IAAI,CAAC,GAAG,IAAI,CAAC;UACb,IAAI,CAAC,IAAI,IAAI,CAAC;EACd,QAAA,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;EAC5E,QAAA,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,EAC1E;EACH,CAAC;EAEe,SAAA,eAAe,CAAC,EAC9B,eAAe,GAAG,GAAG,EACrB,UAAU,GAAG,KAAK,EAClB,iBAAiB,EACjB,KAAK,GACC,EAAA;EACN,IAAA,MAAM,UAAU,GAAGD,YAAM,CAAwB,IAAI,CAAC,CAAA;MACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGE,aAAS,CAAC,OAAO;EAC3C,QAAA,GAAG,EAAE,CAAC;EACP,KAAA,CAAC,CAAC,CAAA;EAEH,IAAA,SAAS,mBAAmB,GAAA;;UAC1B,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,CACJ,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,eAAe,KAAK,GAAG,GAAG,aAAa,GAAG,cAAc,CAAC,CAC/E;EACC,YAAA,UAAU,CAAC,OAAQ,CAAC,qBAAqB,EAAE,CACzC,eAAe,KAAK,GAAG,GAAG,OAAO,GAAG,QAAQ,CAC7C,CACJ,CAAA;OACF;MAED,SAAS,YAAY,CAAC,UAAkB,EAAA;;EACtC,QAAA,SAAS,YAAY,GAAA;cACnB,IAAI,UAAU,CAAC,OAAO,EAAE;EACtB,gBAAA,OAAO,UAAU,CAAC,OAAO,CAAC,aAAa,CACrC,CAAA,YAAA,EAAe,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAA,CAAE,CACvB,CAAA;EACjB,aAAA;EACD,YAAA,OAAO,IAAI,CAAA;WACZ;EAED,QAAA,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;EAChC,QAAA,IAAI,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE;EACnC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;EAC5B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAA;EACnC,gBAAA,MAAM,GAAG,GAAG,MAAM,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,CAAA;kBAE3E,SAAS,CAAC,KAAK,CAAC;EACd,oBAAA,IAAI,EAAE;0BACJ,GAAG,EACD,MAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAChB,eAAe,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACrD,mCAAI,CAAC;EACT,qBAAA;EACD,oBAAA,EAAE,EAAE;0BACF,GAAG;EACJ,qBAAA;EACD,oBAAA,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;0BACtB,IAAI,UAAU,CAAC,OAAO,EAAE;EACtB,4BAAA,UAAU,CAAC,OAAO,CAAC,eAAe,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CAAC;EACtE,gCAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;EACtB,yBAAA;uBACF;EACF,iBAAA,CAAC,CAAA;EACH,aAAA;EACF,SAAA;OACF;EAED,IAAA,SAAS,uBAAuB,GAAA;UAC9B,SAAS,gBAAgB,CACvB,MAAqC,EAAA;cAErC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;kBACtB,EAAE,EAAE,CAAC,CAAC,EAAE;kBACR,WAAW,EAAE,CAAC,CAAC,WAAW;EAC3B,aAAA,CAAC,CAAC,CAAA;WACJ;EAED,QAAA,IAAI,iBAAiB,EAAE;EACrB,YAAA,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;EAClD,SAAA;EACD,QAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;OAC/B;EAED,IAAA,MAAM,cAAc,GAAG,UAAU,IAC/BC,cAAA,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EACE,SAAS,EAAC,oCAAoC,EAC9C,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAChC,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EACH,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,eAAe,KAAK,GAAG,GAAG,KAAK,GAAG,QAAQ,EAAA,GACrD,eAAe,KAAK,GAAG;EACzB,cAAE,EAAE,SAAS,EAAE,MAAM,EAAE;EACvB,cAAE;EACE,gBAAA,SAAS,EAAE,MAAM;EACjB,gBAAA,SAAS,EAAE,MAAM;EAClB,aAAA,EAGN,EAAA,EAAA,EAAA,QAAA,EAAA,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAI;EACrD,YAAA,MAAM,OAAO,GAAG,CAAc,WAAA,EAAA,EAAE,EAAE,CAAA;EAClC,YAAA,QACEA,cAAA,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAmB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,YAAY,gBACnD,WAAW,EAAA,CAAA,EADJ,OAAO,CAEX,EACP;EACH,SAAC,CAAC,EACE,CAAA,CAAA,IACJ,IAAI,CAAA;MAER,OAAO;UACL,cAAc;UACd,YAAY;OACb,CAAA;EACH;;ECrGA,SAAS,iBAAiB,CAAC,EACzB,KAAK,EACL,IAAI,GAAG,IAAI,EACX,UAAU,EACV,eAAe,GAAG,GAAG,EACrB,aAAa,GAAG,CAAC,EACjB,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,CAAC,EACV,QAAQ,GAAG,KAAK,EAChB,cAAc,GAAG,CAAC,EAClB,iBAAiB,GAAG,GAAG,EACvB,eAAe,GAAG,KAAK,EACvB,qBAAqB,EAAE,sBAAsB,EAC7C,2BAA2B,GAAG,KAAK,EACnC,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,GAAG,CAAC,GACK,EAAA;EAC1B,IAAA,MAAM,eAAe,GAAGH,YAAM,CAAC,CAAC,CAAC,CAAA;EACjC,IAAA,MAAM,qBAAqB,GAAGA,YAAM,CAAC,sBAAsB,KAAA,IAAA,IAAtB,sBAAsB,KAAA,KAAA,CAAA,GAAtB,sBAAsB,GAAI,CAAC,CAAC,CAAA;EACjE,IAAA,MAAM,eAAe,GAAGA,YAAM,CAAkB,SAAS,CAAC,CAAA;EAC1D,IAAA,MAAM,aAAa,GAAGA,YAAM,CAAY,SAAS,CAAC,CAAA;EAClD,IAAA,MAAM,eAAe,GAAGA,YAAM,CAAC,CAAC,CAAC,CAAA;MACjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGE,aAAS,CAAC,OAAO;EAC3C,QAAA,GAAG,EAAE,CAAC;UACN,KAAK,EAAE,CAAC,IAAI;UACZ,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAA;EAChB,YAAA,IAAI,UAAU,IAAI,sBAAsB,CAAC,OAAO,EAAE;EAChD,gBAAA,kCAAkC,EAAE,CAAA;kBACpC,IAAI,iBAAiB,KAAK,GAAG,EAAE;EAC7B,oBAAA,sBAAsB,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;EAChE,iBAAA;EAAM,qBAAA;EACL,oBAAA,sBAAsB,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;EAC/D,iBAAA;EACF,aAAA;mBAAM,IAAI,uBAAuB,CAAC,OAAO,EAAE;kBAC1C,IAAI,iBAAiB,KAAK,GAAG,EAAE;EAC7B,oBAAA,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,GAAG,CAAA,YAAA,CAAc,CAAA;EACzF,iBAAA;EAAM,qBAAA;EACL,oBAAA,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,gBAAA,EAAmB,KAAK,CAAC,GAAG,CAAA,OAAA,CAAS,CAAA;EACxF,iBAAA;EACF,aAAA;WACF;EACF,KAAA,CAAC,CAAC,CAAA;EACH,IAAA,MAAM,UAAU,GAAGF,YAAM,CAAC,iBAAiB,CAAC,CAAA;MAC5C,MAAM,gBAAgB,GAAGA,YAAM,CAAC,iBAAiB,KAAK,CAAC,CAAC,CAAA;EACxD,IAAA,MAAM,eAAe,GAAGA,YAAM,CAAC,KAAK,CAAC,CAAA;EACrC,IAAA,MAAM,sBAAsB,GAAGA,YAAM,CAAwB,IAAI,CAAC,CAAA;EAClE,IAAA,MAAM,uBAAuB,GAAGA,YAAM,CAAwB,IAAI,CAAC,CAAA;EAEnE,IAAA,MAAM,QAAQ,GAAGI,iBAAW,CAAC,MAAK;EAChC,QAAA,IAAI,QAAQ,EAAE;cACZ,OAAO;EACL,gBAAA,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAI,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,CAAC,CACJ,EAAA,EAAA,EAAE,EAAE,CAAsB,mBAAA,EAAA,CAAC,CAAC,EAAE,CAAA,CAAE,IAChC,CAAC;EACH,gBAAA,GAAG,KAAK;EACR,gBAAA,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAI,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACb,CAAC,CACJ,EAAA,EAAA,EAAE,EAAE,CAAsB,mBAAA,EAAA,CAAC,CAAC,EAAE,CAAA,CAAE,IAChC,CAAC;eACJ,CAAA;EACF,SAAA;EACD,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;EACnB,KAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;EACrB,IAAA,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAA;MAEhC,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,GAAG,eAAe,EAAE,CAAA;EAC/D,IAAA,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC;UACvD,UAAU,EAAE,CAAC,CAAC,UAAU;UACxB,eAAe;UACf,iBAAiB;EACjB,QAAA,KAAK,EAAE,KAA0C;EAClD,KAAA,CAAC,CAAA;MACF,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC;UAC/E,sBAAsB;UACtB,SAAS;EACT,QAAA,YAAY,EAAE,MAAM,6BAA6B,EAAE;EACpD,KAAA,CAAC,CAAA;EAEF,IAAA,SAAS,aAAa,GAAA;EACpB,QAAA,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE;cACxC,OAAO;kBACL,WAAW,EAAE,CAAG,EAAA,MAAM,CAAI,EAAA,CAAA;EAC1B,gBAAA,IAAI,EAAE,CAAA,gBAAA,EAAmB,aAAa,CAAA,GAAA,EACpC,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC,IAAI,aACnC,CAAK,GAAA,CAAA;eACN,CAAA;EACF,SAAA;EACD,QAAA,OAAA,MAAA,CAAA,MAAA,CACK,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA,EAAA,CAAI,EAAE,CAClC,CAAA;OACF;EAED,IAAA,SAAS,aAAa,GAAA;;UACpB,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,sBAAsB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAChE,2BAA2B,CAC5B,CAAA;UAED,IAAI,CAAC,YAAY,EAAE;EACjB,YAAA,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAA;EAC5C,SAAA;UAED,QACE,YAAY,CAAC,qBAAqB,EAAE,CAClC,iBAAiB,KAAK,GAAG,GAAG,OAAO,GAAG,QAAQ,CAC/C,GAAG,MAAM,EACX;OACF;EAUD,IAAA,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,EAAE,EACF,cAAc,EACd,SAAS,GAAG,KAAK,EACjB,SAAS,GACG,EAAA;EACZ,QAAA,aAAa,CAAC,OAAO,GAAG,SAAS,CAAA;EAEjC,QAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;cACtC,IAAI,CAAC,UAAU,EAAE;EACf,gBAAA,UAAU,CAAC,OAAO,GAAG,cAAc,CAAA;EACpC,aAAA;EACD,YAAA,SAAS,CAAC;EACR,gBAAA,SAAS,EAAE,oBAAoB;kBAC/B,eAAe,EAAE,eAAe,CAAC,OAAO;kBACxC,SAAS,EAAE,aAAa,CAAC,OAAO;EAChC,gBAAA,QAAQ,EAAE;sBACR,YAAY,EAAE,gBAAgB,CAAC,OAAO;sBACtC,UAAU,EAAE,eAAe,CAAC,OAAO;EACnC,oBAAA,KAAK,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO;EAC3C,oBAAA,EAAE,EAAE,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;EACnD,iBAAA;EACF,aAAA,CAAC,CAAA;EACH,SAAA;EAED,QAAA,eAAe,CAAC,OAAO,GAAG,EAAE,CAAA;UAC5B,SAAS,CAAC,KAAK,CAAC;cACd,SAAS;EACT,YAAA,IAAI,EAAE;EACJ,gBAAA,GAAG,EAAE,IAAI;EACV,aAAA;EACD,YAAA,EAAE,EAAE;EACF,gBAAA,GAAG,EAAE,EAAE;EACR,aAAA;EACD,YAAA,MAAM,EACD,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAAC,UAAM,CAAC,OAAO,CACjB,EAAA,EAAA,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAC9B,CAAA;EACD,YAAA,MAAM,CAAC,KAAK,EAAA;EACV,gBAAA,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE;EAChC,oBAAA,SAAS,CAAC;EACR,wBAAA,SAAS,EAAE,eAAe;0BAC1B,eAAe,EAAE,eAAe,CAAC,OAAO;0BACxC,SAAS,EAAE,aAAa,CAAC,OAAO;EAChC,wBAAA,WAAW,EAAE;8BACX,YAAY,EAAE,gBAAgB,CAAC,OAAO;8BACtC,UAAU,EAAE,eAAe,CAAC,OAAO;EACnC,4BAAA,KAAK,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO;EAC3C,4BAAA,EAAE,EAAE,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;EACnD,yBAAA;EACF,qBAAA,CAAC,CAAA;EACH,iBAAA;eACF;EACF,SAAA,CAAC,CAAA;EACF,QAAA,IAAI,UAAU,IAAI,CAAC,SAAS,EAAE;EAC5B,YAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;EACjC,SAAA;OACF;EAED,IAAA,SAAS,mBAAmB,GAAA;;EAC1B,QAAA,IAAI,QAAQ,EAAE;EACZ,YAAA,OAAO,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM,CAAA;EACtC,SAAA;UACD,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,CACJ,CAAA,EAAA,GAAA,uBAAuB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAC7B,iBAAiB,KAAK,GAAG,GAAG,aAAa,GAAG,cAAc,CAC3D,CACF;EACC,YAAA,uBAAuB,CAAC,OAAQ,CAAC,qBAAqB,EAAE,CACtD,iBAAiB,KAAK,GAAG,GAAG,OAAO,GAAG,QAAQ,CAC/C,CACJ,CAAA;OACF;EACD,IAAA,SAAS,wBAAwB,GAAA;EAC/B,QAAA,MAAM,YAAY,GAAG,CAAA,YAAA,EAAe,cAAc,GAAG,CAAC,KAAK,CAAA;UAC3D,OAAO;cACL,KAAK,EAAE,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,MAAM;cACxD,MAAM,EAAE,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,MAAM;WAC1D,CAAA;OACF;EAED,IAAA,SAAS,oBAAoB,GAAA;;UAC3B,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,uBAAuB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CACjE,2BAA2B,CAC5B,CAAA;UACD,IAAI,CAAC,YAAY,EAAE;EACjB,YAAA,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAA;EAC5C,SAAA;UACD,QACE,YAAY,CAAC,qBAAqB,EAAE,CAClC,iBAAiB,KAAK,GAAG,GAAG,OAAO,GAAG,QAAQ,CAC/C,GAAG,MAAM,EACX;OACF;EACD,IAAA,SAAS,6BAA6B,GAAA;EACpC,QAAA,MAAM,gBAAgB,GAAG,iBAAiB,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK,CAAA;UAEnE,SAAS,WAAW,CAAC,CAAS,EAAA;EAC5B,YAAA,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAA;EAC3C,YAAA,IAAI,CAAC,GAAG;kBAAE,OAAM;EAEhB,YAAA,IAAI,QAAQ,EAAE;EACZ,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA;EACrB,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;kBACtB,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,GAAG,cAAc,CAAA,EAAA,CAAI,CAAA;EACzD,aAAA;EAAM,iBAAA;EACL,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;EACtB,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA;EACtB,aAAA;WACF;UAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;UAEjD,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,IAAI,eAAe,CAAC,OAAO,EAAE;EACvE,YAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,SAAA;EACD,QAAA,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,EAAE;EAC5C,YAAA,MAAM,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAA;EAClC,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAC9B,YAAA,eAAe,CAAC,OAAO,GAAG,GAAG,CAAA;cAC7B,SAAS,CAAC,KAAK,CAAC;EACd,gBAAA,SAAS,EAAE,IAAI;kBACf,GAAG;EACJ,aAAA,CAAC,CAAA;cACF,OAAM;EACP,SAAA;UAED,IAAI,uBAAuB,KAAK,QAAQ,EAAE;EACxC,YAAA,WAAW,CACT,oBAAoB,EAAE,GAAG,KAAK,CAAC,MAAM;EACnC,gBAAA,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CACxD,CAAA;EACF,SAAA;eAAM,IAAI,uBAAuB,KAAK,KAAK,EAAE;EAC5C,YAAA,WAAW,CACT,oBAAoB,EAAE,GAAG,KAAK,CAAC,MAAM;kBACnC,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAClD,CAAA;EACF,SAAA;EAAM,aAAA;cACL,WAAW,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;EACnD,SAAA;EAED,QAAA,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,OAAO,EAAE;cACxC,MAAM,GAAG,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;EACnD,YAAA,eAAe,CAAC,OAAO,GAAG,GAAG,CAAA;cAC7B,SAAS,CAAC,KAAK,CAAC;EACd,gBAAA,SAAS,EAAE,IAAI;kBACf,GAAG;EACJ,aAAA,CAAC,CAAA;EACH,SAAA;OACF;EAED,IAAA,SAAS,YAAY,GAAA;EACnB,QAAA,IAAI,UAAU,IAAI,sBAAsB,CAAC,OAAO,EAAE;EAChD,YAAA,OAAO,sBAAsB,CAAC,OAAO,CACnC,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,CAAA;EACF,SAAA;EACD,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;OACxB;EACD,IAAA,SAAS,UAAU,CAAC,IAAqB,EAAE,KAAc,EAAA;EACvD,QAAA,IAAI,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE;cACjC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;EACtD,YAAA,IAAI,IAAI,GAAG,mBAAmB,EAAE,EAAE;kBAChC,OAAO,mBAAmB,EAAE,CAAA;EAC7B,aAAA;EACD,YAAA,OAAO,IAAI,CAAA;EACZ,SAAA;EAED,QAAA,IAAI,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE;cACjC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;cACtD,IAAI,IAAI,GAAG,CAAC,EAAE;EACZ,gBAAA,OAAO,CAAC,CAAA;EACT,aAAA;EACD,YAAA,OAAO,IAAI,CAAA;EACZ,SAAA;UAED,IAAI,IAAI,KAAK,MAAM,EAAE;EACnB,YAAA,IAAI,KAAK,EAAE;EACT,gBAAA,OAAO,EAAE,KAAK,GAAG,aAAa,EAAE,CAAC,CAAA;EAClC,aAAA;EACD,YAAA,OAAO,eAAe,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;EACjD,SAAA;EAED,QAAA,IAAI,KAAK,EAAE;EACT,YAAA,OAAO,EAAE,KAAK,GAAG,aAAa,EAAE,CAAC,CAAA;EAClC,SAAA;EACD,QAAA,OAAO,eAAe,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;OACjD;EACD,IAAA,SAAS,eAAe,CACtB,IAAsC,GAAA,OAAO,EAC7C,KAAc,EAAA;UAEd,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;cAAE,OAAM;EAE5D,QAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;EAChC,QAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;UAE/B,MAAM,QAAQ,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,CAAA;UAEhD,IAAI,CAAC,QAAQ,EAAE;EACb,YAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;cAE9E,IAAI,gBAAgB,CAAC,OAAO;kBAAE,OAAM;EACpC,YAAA,IAAI,kBAAkB,EAAE;EACtB,gBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,gBAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;EAE/B,gBAAA,WAAW,CAAC;EACV,oBAAA,SAAS,EAAE,IAAI;sBACf,IAAI,EAAE,YAAY,EAAE;EACpB,oBAAA,EAAE,EAAE,CAAC;EACL,oBAAA,cAAc,EAAE,CAAC;EAClB,iBAAA,CAAC,CAAA;kBACF,OAAM;EACP,aAAA;EACF,SAAA;EACD,QAAA,IAAI,QAAQ,IAAI,gBAAgB,CAAC,OAAO,EAAE;EACxC,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAC9B,YAAA,WAAW,CAAC;EACV,gBAAA,SAAS,EAAE,IAAI;kBACf,IAAI,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM;EACrD,gBAAA,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,EAAE;EACvD,gBAAA,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;EACjC,aAAA,CAAC,CAAA;cACF,OAAM;EACP,SAAA;UACD,IAAI,QAAQ,KAAK,CAAC,EAAE;EAClB,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;EAChC,SAAA;EACD,QAAA,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;EACpD,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,SAAA;EACD,QAAA,WAAW,CAAC;EACV,YAAA,SAAS,EAAE,IAAI;cACf,IAAI,EAAE,YAAY,EAAE;EACpB,YAAA,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;EAC7B,YAAA,cAAc,EAAE,QAAQ;EACzB,SAAA,CAAC,CAAA;OACH;EACD,IAAA,SAAS,eAAe,CACtB,IAAsC,GAAA,OAAO,EAC7C,KAAc,EAAA;UAEd,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;cAAE,OAAM;EAE3D,QAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;EAChC,QAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;UAEhC,MAAM,QAAQ,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,CAAA;UAEhD,IAAI,CAAC,QAAQ,EAAE;cACb,MAAM,kBAAkB,GACtB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,aAAa,EAAE,GAAG,CAAC,CAAA;cAEnF,IAAI,eAAe,CAAC,OAAO;kBAAE,OAAM;EACnC,YAAA,IAAI,kBAAkB,EAAE;EACtB,gBAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,gBAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAE9B,gBAAA,WAAW,CAAC;EACV,oBAAA,SAAS,EAAE,IAAI;sBACf,IAAI,EAAE,YAAY,EAAE;sBACpB,EAAE,EAAE,CAAC,mBAAmB,EAAE;EAC1B,oBAAA,cAAc,EAAE,QAAQ;EACzB,iBAAA,CAAC,CAAA;kBACF,OAAM;EACP,aAAA;EACF,SAAA;EACD,QAAA,IAAI,QAAQ,IAAI,eAAe,CAAC,OAAO,EAAE;EACvC,YAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;EAC/B,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,YAAA,WAAW,CAAC;EACV,gBAAA,SAAS,EAAE,IAAI;kBACf,IAAI,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM;EACrD,gBAAA,EAAE,EAAE,CAAC;EACL,gBAAA,cAAc,EAAE,CAAC;EAClB,aAAA,CAAC,CAAA;cACF,OAAM;EACP,SAAA;UACD,IAAI,QAAQ,KAAK,CAAC,EAAE;EAClB,YAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;EAChC,SAAA;EACD,QAAA,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;EACjC,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,SAAA;EACD,QAAA,WAAW,CAAC;EACV,YAAA,SAAS,EAAE,IAAI;cACf,IAAI,EAAE,YAAY,EAAE;EACpB,YAAA,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;EAC7B,YAAA,cAAc,EAAE,QAAQ;EACzB,SAAA,CAAC,CAAA;OACH;MAEDJ,eAAS,CAAC,MAAK;EACb,QAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAA;OAC5C,EAAE,EAAE,CAAC,CAAA;MACNA,eAAS,CAAC,MAAK;EACb,QAAA,6BAA6B,EAAE,CAAA;EACjC,KAAC,EAAE;UACD,uBAAuB;UACvB,aAAa;UACb,QAAQ;UACR,cAAc;UACd,MAAM;UACN,UAAU;UACV,SAAS;UACT,IAAI;EACL,KAAA,CAAC,CAAA;MACFK,qBAAe,CAAC,MAAK;EACnB;;EAEG;UACH,IAAI,uBAAuB,CAAC,OAAO,EAAE;EACnC,YAAA,6BAA6B,EAAE,CAAA;EAChC,SAAA;;OAEF,EAAE,EAAE,CAAC,CAAA;MACNL,eAAS,CAAC,MAAK;EACb,QAAA,IAAI,sBAAsB,EAAE;EAC1B,YAAA,qBAAqB,CAAC,OAAO,GAAG,sBAAsB,CAAA;EACvD,SAAA;EAAM,aAAA;EACL,YAAA,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;EACpE,SAAA;EACH,KAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAA;MAC5BA,eAAS,CAAC,MAAK;EACb,QAAA,SAAS,YAAY,GAAA;EACnB,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,eAAe,CAAC,OAAO;kBAAE,OAAM;EACzD,YAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAA;EAC3C,YAAA,6BAA6B,EAAE,CAAA;WAChC;EACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;EAC/C,QAAA,OAAO,MAAK;EACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;EACpD,SAAC,CAAA;OACF,EAAE,EAAE,CAAC,CAAA;EAEN,IAAA,MAAM,QAAQ,GAAGM,eAAO,CACtB,KAAK,IAAG;EACN,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAA;EACjC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;EAChE,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;EACzE,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,iBAAiB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;EAEpE,QAAA,MAAM,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAA;UACxE,MAAM,gBAAgB,GAAG,eAAe,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAA;EAEzE,QAAA,IAAI,UAAU,EAAE;cACd,IAAI,SAAS,GAAG,CAAC,EAAE;EACjB,gBAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;EACjC,aAAA;EAAM,iBAAA;EACL,gBAAA,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;EACjC,aAAA;EAED,YAAA,SAAS,CACJ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CACR,EAAA,EAAA,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,eAAe,CAAC,OAAO,IACxC,CAAA;EAEF,YAAA,IAAI,UAAU,EAAE;kBACd,IAAI,eAAe,CAAC,OAAO,KAAK,MAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;sBACtD,KAAK,CAAC,MAAM,EAAE,CAAA;sBACd,SAAS,CAAC,KAAK,CAAC;EACd,wBAAA,IAAI,EAAE;8BACJ,GAAG,EAAE,YAAY,EAAE;EACpB,yBAAA;EACD,wBAAA,EAAE,EAAE;EACF,4BAAA,GAAG,EAAE,CAAC;EACP,yBAAA;EACD,wBAAA,MAAM,EAAE;8BACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;EACxB,4BAAA,QAAQ,EAAE,EAAE;EACZ,4BAAA,OAAO,EAAE,IAAI;EACd,yBAAA;EACF,qBAAA,CAAC,CAAA;sBACF,OAAM;EACP,iBAAA;kBAED,SAAS,CAAC,KAAK,CAAC;EACd,oBAAA,IAAI,EAAE;0BACJ,GAAG,EAAE,YAAY,EAAE;EACpB,qBAAA;EACD,oBAAA,EAAE,EAAE;0BACF,GAAG,EAAE,CAAC,QAAQ;EACf,qBAAA;EACD,oBAAA,MAAM,EAAE;0BACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;EACxB,wBAAA,QAAQ,EAAE,EAAE;EACZ,wBAAA,OAAO,EAAE,IAAI;EACd,qBAAA;EACF,iBAAA,CAAC,CAAA;kBACF,OAAM;EACP,aAAA;cAED,SAAS,CAAC,KAAK,CAAC;EACd,gBAAA,GAAG,EAAE,QAAQ;EACb,gBAAA,MAAM,EAAE;sBACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;EACxB,oBAAA,QAAQ,EAAE,EAAE;EACZ,oBAAA,OAAO,EAAE,IAAI;EACd,iBAAA;EACF,aAAA,CAAC,CAAA;cAEF,IAAI,2BAA2B,IAAI,gBAAgB,EAAE;kBACnD,eAAe,CAAC,MAAM,CAAC,CAAA;kBACvB,KAAK,CAAC,MAAM,EAAE,CAAA;EACf,aAAA;mBAAM,IAAI,2BAA2B,IAAI,gBAAgB,EAAE;kBAC1D,eAAe,CAAC,MAAM,CAAC,CAAA;kBACvB,KAAK,CAAC,MAAM,EAAE,CAAA;EACf,aAAA;cACD,OAAM;EACP,SAAA;UAED,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,EAAE;EAC/C,YAAA,IAAI,eAAe,CAAC,OAAO,KAAK,MAAM,EAAE;kBACtC,eAAe,CAAC,MAAM,CAAC,CAAA;EACxB,aAAA;EACD,YAAA,IAAI,eAAe,CAAC,OAAO,KAAK,MAAM,EAAE;kBACtC,eAAe,CAAC,MAAM,CAAC,CAAA;EACxB,aAAA;EACF,SAAA;UAED,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;EAChD,YAAA,IAAI,gBAAgB,EAAE;EACpB,gBAAA,IAAI,CAAC,QAAQ,IAAI,eAAe,CAAC,OAAO,EAAE;sBACxC,SAAS,CAAC,KAAK,CAAC;0BACd,GAAG,EAAE,CAAC,mBAAmB,EAAE;0BAC3B,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACDF,UAAM,CAAC,OAAO,CAAA,EAAA,EACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACzB,CAAA;EACF,qBAAA,CAAC,CAAA;EACH,iBAAA;EAAM,qBAAA;sBACL,eAAe,CAAC,MAAM,CAAC,CAAA;EACxB,iBAAA;EACF,aAAA;EAAM,iBAAA,IAAI,gBAAgB,EAAE;EAC3B,gBAAA,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,OAAO,EAAE;sBACzC,SAAS,CAAC,KAAK,CAAC;EACd,wBAAA,GAAG,EAAE,CAAC;0BACN,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACDA,UAAM,CAAC,OAAO,CAAA,EAAA,EACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACzB,CAAA;EACF,qBAAA,CAAC,CAAA;EACH,iBAAA;EAAM,qBAAA;sBACL,eAAe,CAAC,MAAM,CAAC,CAAA;EACxB,iBAAA;EACF,aAAA;EAAM,iBAAA;kBACL,SAAS,CAAC,KAAK,CAAC;sBACd,GAAG,EAAE,eAAe,CAAC,OAAO;sBAC5B,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACDA,UAAM,CAAC,OAAO,CAAA,EAAA,EACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACzB,CAAA;EACF,iBAAA,CAAC,CAAA;EACH,aAAA;EACF,SAAA;EACH,KAAC,EACD;UACE,OAAO,EACL,CAAC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU;EACxC,aAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,oBAAoB,CAAC;EAC1C,QAAA,IAAI,EAAE,iBAAiB;UACvB,IAAI,EAAE,MAAK;EACT,YAAA,IAAI,UAAU,IAAI,sBAAsB,CAAC,OAAO,EAAE;kBAChD,OAAO;EACL,oBAAA,CAAC,sBAAsB,CAAC,OAAO,CAAC,UAAU;EAC1C,oBAAA,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS;mBAC1C,CAAA;EACF,aAAA;cACD,IAAI,iBAAiB,KAAK,GAAG,EAAE;EAC7B,gBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;EAC5C,aAAA;EACD,YAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;WAC5C;EACF,KAAA,CACF,CAAA;EAED,IAAA,SAAS,wBAAwB,GAAA;EAC/B,QAAA,IAAI,UAAU,EAAE;cACd,IAAI,iBAAiB,KAAK,GAAG,EAAE;kBAC7B,OAAO;EACL,oBAAA,SAAS,EAAE,MAAM;mBAClB,CAAA;EACF,aAAA;cACD,OAAO;EACL,gBAAA,SAAS,EAAE,MAAM;eAClB,CAAA;EACF,SAAA;EACD,QAAA,OAAO,EAAE,CAAA;OACV;EAED,IAAA,SAAS,kCAAkC,GAAA;UACzC,IAAI,sBAAsB,CAAC,OAAO,EAAE;EAClC,YAAA,eAAe,CAAC,OAAO;EACrB,gBAAA,sBAAsB,CAAC,OAAO,CAC5B,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,CAAA;EACH,YAAA,IACE,sBAAsB,CAAC,OAAO,CAC5B,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,KAAK,CAAC,EACP;EACA,gBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,gBAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,aAAA;EACD,YAAA,IACE,sBAAsB,CAAC,OAAO,CAC5B,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,GAAG,CAAC;EACL,gBAAA,sBAAsB,CAAC,OAAO,CAC5B,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,GAAG,mBAAmB,EAAE,EACzB;EACA,gBAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,gBAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,aAAA;EACD,YAAA,IACE,sBAAsB,CAAC,OAAO,CAC5B,iBAAiB,KAAK,GAAG,GAAG,YAAY,GAAG,WAAW,CACvD,KAAK,mBAAmB,EAAE,EAC3B;EACA,gBAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,gBAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;EAC/B,aAAA;EACF,SAAA;OACF;EACD,IAAA,SAAS,iBAAiB,GAAA;EACxB,QAAA,IAAI,UAAU,EAAE;cACd,OAAO;kBACL,OAAO,GAAA;EACL,oBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;EACjB,oBAAA,kCAAkC,EAAE,CAAA;mBACrC;eACF,CAAA;EACF,SAAA;EACD,QAAA,OAAO,EAAE,CAAA;OACV;MACD,SAAS,aAAa,CAAC,EAAU,EAAA;EAC/B,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;OAC/C;EACD,IAAA,SAAS,iBAAiB,CAAC,EAAmB,EAAE,KAAa,EAAA;UAC3D,IAAI,SAAS,GAAG,CAAC,CAAA;EACjB,QAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;EAC1B,YAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;EACtD,SAAA;EAAM,aAAA;cACL,SAAS,GAAG,EAAE,CAAA;EACf,SAAA;UAED,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;EAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;EACvB,SAAA;EAED,QAAA,OAAO,SAAS,CAAA;OACjB;MACD,SAAS,mBAAmB,CAAC,EAAmB,EAAA;EAC9C,QAAA,IAAI,CAAC,IAAI;cAAE,OAAM;EAEjB,QAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;EAChC,QAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;UAE/B,MAAM,SAAS,GAAG,iBAAiB,CACjC,EAAE,EACF,uGAAuG,CACxG,CAAA;EAED,QAAA,IAAI,SAAS,KAAK,UAAU,CAAC,OAAO,EAAE;cACpC,OAAM;EACP,SAAA;EAED,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;UAC/D,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAA;UAExD,IAAI,aAAa,GAAG,WAAW,EAAE;EAC/B,YAAA,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;EACxC,SAAA;EAAM,aAAA;EACL,YAAA,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;EACxC,SAAA;OACF;MACD,SAAS,aAAa,CAAC,EAAU,EAAA;EAC/B,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAA;EACnC,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAA;UACtC,IAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;cAChD,OAAO,SAAS,KAAK,CAAC,CAAA;EACvB,SAAA;EACD,QAAA,OAAO,SAAS,KAAK,WAAW,GAAG,CAAC,CAAA;OACrC;MACD,SAAS,aAAa,CAAC,EAAU,EAAA;EAC/B,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAA;EACnC,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAA;EACtC,QAAA,IAAI,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE;EACjC,YAAA,OAAO,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;EACtC,SAAA;EACD,QAAA,OAAO,SAAS,KAAK,WAAW,GAAG,CAAC,CAAA;OACrC;EAED,IAAA,MAAM,gBAAgB,IACpBF,cACE,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,GAAG,EAAE,sBAAsB,EAAA,EACvB,iBAAiB,EAAE,IACvB,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EACH,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAA,EACV,wBAAwB,EAA0B,iBAGxDA,cACE,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,GAAG,EAAE,uBAAuB,EAAA,EACxB,QAAQ,EAAE,EAAA,EACd,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EACH,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,iBAAiB,KAAK,GAAG,GAAG,KAAK,GAAG,QAAQ,EAC3D,WAAW,EAAE,MAAM,EAAA,EAChB,wBAAwB,EAAE,CAAA,EAAA,EAAA,EAAA,QAAA,EAG9B,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;EACjC,gBAAA,QACEA,cAEE,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,SAAS,EAAC,0BAA0B,iBACxB,kCAAkC,EAC9C,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EACH,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,GAAG,IACN,aAAa,EAAE,CAGnB,EAAA,EAAA,EAAA,QAAA,EAAA,IAAI,CAAC,UAAU,EAAA,CAAA,EAVX,CAAG,EAAA,IAAI,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAWtB,EACP;EACH,aAAC,CAAC,EAAA,CAAA,CACE,EACF,CAAA,CAAA,CACP,CAAA;MAED,OAAO;UACL,sBAAsB;UACtB,gBAAgB;UAChB,eAAe;UACf,cAAc;UACd,eAAe;UACf,cAAc;EACd,QAAA,WAAW,EAAE,mBAAmB;UAChC,aAAa;UACb,aAAa;EACb,QAAA,eAAe,EAAE,MAAM,eAAe,EAAE;EACxC,QAAA,eAAe,EAAE,MAAM,eAAe,EAAE;EACxC,QAAA,eAAe,EAAE,CAAC,EAAmB,KAAI;EACvC,YAAA,QACE,iBAAiB,CAAC,EAAE,EAAE,0CAA0C,CAAC;kBACjE,UAAU,CAAC,OAAO,EACnB;WACF;OACF,CAAA;EACH,CAAC;EAED,MAAM,OAAO,GACXK,mBAAa,CAEX,SAAS,CAAC,CAAA;EAEd,SAAS,wBAAwB,GAAA;EAC/B,IAAA,MAAM,OAAO,GAAGC,gBAAU,CAAC,OAAO,CAAC,CAAA;MACnC,IAAI,CAAC,OAAO,EAAE;EACZ,QAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;EAC9E,KAAA;EACD,IAAA,OAAO,OAAO,CAAA;EAChB;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useThumbsModule.tsx","../../src/useSpringCarousel.tsx","../../src/modules/useFullscreenModule.ts"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode, TransitionSlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange<T> = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange<T> = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: T extends 'use-spring' ? SlideMode : TransitionSlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype OnLeftSwipe = {\n eventName: 'onLeftSwipe'\n}\n\ntype OnRightSwipe = {\n eventName: 'onRightSwipe'\n}\n\ntype SpringCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnDrag\n | OnFullscreenChange\n\ntype TransitionCarouselEvents<T> =\n | OnSlideStartChange<T>\n | OnSlideChange<T>\n | OnFullscreenChange\n | OnLeftSwipe\n | OnRightSwipe\n\ntype Events<T> = T extends 'use-spring'\n ? SpringCarouselEvents<'use-spring'>\n : TransitionCarouselEvents<'use-transition'>\n\ntype EventHandler<T> = (props: Events<T>) => void\n\nexport type UseListenToCustomEvent<T> = {\n useListenToCustomEvent: (eventHandler: EventHandler<T>) => void\n emitEvent: (event: Events<T>) => void\n}\n\nexport function useEventsModule<T extends 'use-spring' | 'use-transition'>() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler<T>) {\n useEffect(() => {\n function handleEvent(event: CustomEvent<Events<T>>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n }\n function emitEvent(event: Events<T>) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\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","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","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"],"names":["eventLabel","useThumbsModule","thumbsSlideAxis","withThumbs","prepareThumbsData","items","wrapperRef","useRef","spring","setSpring","useSpring","val","getTotalScrollValue","Math","round","Number","_a","current","getBoundingClientRect","thumbsFragment","_jsx","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","document","documentElement","clientHeight","right","innerWidth","clientWidth","isInViewport","offset","offsetLeft","start","from","to","onChange","value","abs","Context","createContext","undefined","init","itemsPerSlide","_itemsPerSlide","slideType","gutter","withLoop","startEndGutter","carouselSlideAxis","disableGestures","draggingSlideTreshold","_draggingSlideTreshold","slideWhenThresholdIsReached","freeScroll","enableFreeScrollDrag","initialStartingPosition","initialActiveItem","length","prevWindowWidth","slideActionType","slideModeType","prevSlidedValue","pause","mainCarouselWrapperRef","scrollLeft","scrollTop","setStartEndItemReachedOnFreeScroll","carouselTrackWrapperRef","transform","firstItemReached","lastItemReached","internalItems","useCallback","getItems","emitEvent","useListenToCustomEvent","targetEvent","useEffect","createElement","eventHandler","handleEvent","event","detail","addEventListener","removeEventListener","newEvent","CustomEvent","dispatchEvent","useEventsModule","enterFullscreen","exitFullscreen","getIsFullscreen","onFullScreenChange","handleResize","isFullscreen","setIsFullscreen","_isFullscreen","handleFullscreenChange","fullscreenElement","screenfull","isEnabled","on","off","elementRef","request","exit","useFullscreenModule","adjustCarouselWrapperPosition","eventName","getSlideValue","carouselItem","Error","slideToItem","nextActiveItem","immediate","slideMode","nextItem","startReached","endReached","index","config","default","velocity","onRest","finished","currentItem","getCarouselItemWidth","positionProperty","setPosition","v","currentFromValue","getFromValue","get","getToValue","type","next","slideToPrevItem","nextItemWillExceed","slideToNextItem","console","warn","useLayoutEffect","floor","bindDrag","useDrag","state","isDragging","dragging","movement","currentMovement","direction","prevItemTreshold","nextItemTreshold","cancel","friction","tension","last","canceled","enabled","axis","findItemIndex","error","itemIndex","findIndex","item","carouselFragment","_jsxs","touchAction","percentValue","getAnimatedWrapperStyles","flexShrink","isLastItem","marginRight","renderItem","newActiveItem","getIsNextItem","_activeItem","getIsPrevItem","getIsActiveItem","context","useContext"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-spring-carousel",
3
- "version": "3.0.0-beta010",
3
+ "version": "3.0.0-beta015",
4
4
  "description": "A new <Carousel /> experience for the web",
5
5
  "homepage": "https://react-spring-carousel.emilianobucci.com",
6
6
  "repository": "https://github.com/Emiliano-Bucci/react-spring-carousel",
@@ -70,16 +70,16 @@
70
70
  "rollup-plugin-terser": "^7.0.2",
71
71
  "rollup-plugin-typescript2": "^0.34.1",
72
72
  "rollup-plugin-visualizer": "^5.8.2",
73
+ "ts-node": "^10.9.1",
73
74
  "typescript": "^4.8.4"
74
75
  },
75
76
  "peerDependencies": {
76
77
  "@react-spring/web": "^9.5.5",
77
- "react": "^18.2.0",
78
- "react-dom": "^18.2.0"
78
+ "react": "^18.0.0",
79
+ "react-dom": "^18.0.0"
79
80
  },
80
81
  "dependencies": {
81
82
  "@use-gesture/react": "^10.2.20",
82
- "react-spring-carousel": "^3.0.0-beta008",
83
83
  "screenfull": "^5.2.0"
84
84
  }
85
85
  }
@@ -1,168 +0,0 @@
1
- import { useRef, useEffect } from 'react';
2
- import screenfull from 'screenfull';
3
- import { jsx } from 'react/jsx-runtime';
4
- import { useSpring } from '@react-spring/web';
5
-
6
- const eventLabel = 'RSC::Event';
7
- function useEventsModule() {
8
- const targetEvent = useRef(null);
9
- useEffect(() => {
10
- targetEvent.current = document.createElement('div');
11
- }, []);
12
- function useListenToCustomEvent(eventHandler) {
13
- useEffect(() => {
14
- function handleEvent(event) {
15
- eventHandler(event.detail);
16
- }
17
- if (targetEvent.current) {
18
- // @ts-ignore
19
- targetEvent.current.addEventListener(eventLabel, handleEvent, false);
20
- return () => {
21
- var _a;
22
- // @ts-ignore
23
- (_a = targetEvent.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(eventLabel, handleEvent, false);
24
- };
25
- }
26
- }, []);
27
- }
28
- function emitEvent(event) {
29
- if (targetEvent.current) {
30
- const newEvent = new CustomEvent(eventLabel, {
31
- detail: event,
32
- });
33
- targetEvent.current.dispatchEvent(newEvent);
34
- }
35
- }
36
- return {
37
- useListenToCustomEvent,
38
- emitEvent,
39
- };
40
- }
41
-
42
- function useFullscreenModule({ mainCarouselWrapperRef, emitEvent, handleResize, }) {
43
- const isFullscreen = useRef(false);
44
- useEffect(() => {
45
- function handleFullscreenChange() {
46
- if (document.fullscreenElement) {
47
- setIsFullscreen(true);
48
- emitEvent({
49
- eventName: 'onFullscreenChange',
50
- isFullscreen: true,
51
- });
52
- handleResize && handleResize();
53
- }
54
- if (!document.fullscreenElement) {
55
- setIsFullscreen(false);
56
- emitEvent({
57
- eventName: 'onFullscreenChange',
58
- isFullscreen: false,
59
- });
60
- handleResize && handleResize();
61
- }
62
- }
63
- if (screenfull.isEnabled) {
64
- screenfull.on('change', handleFullscreenChange);
65
- return () => {
66
- if (screenfull.isEnabled) {
67
- screenfull.off('change', handleFullscreenChange);
68
- }
69
- };
70
- }
71
- }, []);
72
- function setIsFullscreen(_isFullscreen) {
73
- isFullscreen.current = _isFullscreen;
74
- }
75
- function getIsFullscreen() {
76
- return isFullscreen.current;
77
- }
78
- function enterFullscreen(elementRef) {
79
- if (screenfull.isEnabled) {
80
- screenfull.request((elementRef || mainCarouselWrapperRef.current));
81
- }
82
- }
83
- function exitFullscreen() {
84
- screenfull.isEnabled && screenfull.exit();
85
- }
86
- return {
87
- enterFullscreen,
88
- exitFullscreen,
89
- getIsFullscreen,
90
- };
91
- }
92
-
93
- function isInViewport(el) {
94
- const rect = el.getBoundingClientRect();
95
- return (rect.top >= 0 &&
96
- rect.left >= 0 &&
97
- rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
98
- rect.right <= (window.innerWidth || document.documentElement.clientWidth));
99
- }
100
- function useThumbsModule({ thumbsSlideAxis = 'x', withThumbs = false, prepareThumbsData, items, }) {
101
- const wrapperRef = useRef(null);
102
- const [spring, setSpring] = useSpring(() => ({
103
- val: 0,
104
- }));
105
- function getTotalScrollValue() {
106
- var _a;
107
- return Math.round(Number((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight']) -
108
- wrapperRef.current.getBoundingClientRect()[thumbsSlideAxis === 'x' ? 'width' : 'height']);
109
- }
110
- function handleScroll(activeItem) {
111
- var _a, _b;
112
- function getThumbNode() {
113
- if (wrapperRef.current) {
114
- return wrapperRef.current.querySelector(`#thumb-item-${items[activeItem].id}`);
115
- }
116
- return null;
117
- }
118
- const thumbNode = getThumbNode();
119
- if (thumbNode && wrapperRef.current) {
120
- if (!isInViewport(thumbNode)) {
121
- const offset = thumbNode.offsetLeft;
122
- const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset;
123
- setSpring.start({
124
- from: {
125
- val: (_b = (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']) !== null && _b !== void 0 ? _b : 0,
126
- },
127
- to: {
128
- val,
129
- },
130
- onChange: ({ value }) => {
131
- if (wrapperRef.current) {
132
- wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =
133
- Math.abs(value.val);
134
- }
135
- },
136
- });
137
- }
138
- }
139
- }
140
- function handlePrepareThumbsData() {
141
- function getPreparedItems(_items) {
142
- return _items.map(i => ({
143
- id: i.id,
144
- renderThumb: i.renderThumb,
145
- }));
146
- }
147
- if (prepareThumbsData) {
148
- return prepareThumbsData(getPreparedItems(items));
149
- }
150
- return getPreparedItems(items);
151
- }
152
- const thumbsFragment = withThumbs ? (jsx("div", Object.assign({ className: "use-spring-carousel-thumbs-wrapper", ref: wrapperRef, onWheel: () => spring.val.stop(), style: Object.assign({ display: 'flex', flex: '1', position: 'relative', width: '100%', height: '100%', flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column' }, (thumbsSlideAxis === 'x'
153
- ? { overflowX: 'auto' }
154
- : {
155
- overflowY: 'auto',
156
- maxHeight: '100%',
157
- })) }, { children: handlePrepareThumbsData().map(({ id, renderThumb }) => {
158
- const thumbId = `thumb-item-${id}`;
159
- return (jsx("div", Object.assign({ id: thumbId, className: "thumb-item" }, { children: renderThumb }), thumbId));
160
- }) }))) : null;
161
- return {
162
- thumbsFragment,
163
- handleScroll,
164
- };
165
- }
166
-
167
- export { useThumbsModule as a, useFullscreenModule as b, useEventsModule as u };
168
- //# sourceMappingURL=useThumbsModule-3a805d70.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useThumbsModule-3a805d70.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype Events = OnSlideStartChange | OnSlideChange | OnDrag | OnFullscreenChange\n\ntype EventHandler = (props: Events) => void\n\nexport type EmitEvent = (event: Events) => void\nexport type UseListenToCustomEvent = {\n useListenToCustomEvent: (eventHandler: EventHandler) => void\n emitEvent: (event: Events) => void\n}\n\nexport function useEventsModule() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler) {\n useEffect(() => {\n function handleEvent(event: CustomEvent<Events>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [])\n }\n function emitEvent(event: Events) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\nimport { EmitEvent } from './useEventsModule'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n emitEvent: EmitEvent\n handleResize?(): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n emitEvent,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: true,\n })\n\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: false,\n })\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","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":["_jsx"],"mappings":"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"}