react-slideshow-image 4.3.1 → 4.4.0

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":"react-slideshow-image.cjs.production.min.js","sources":["../src/helpers.tsx","../src/props.ts","../src/fadezoom.tsx","../src/fade.tsx","../src/zoom.tsx","../src/slide.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n ButtonClick,\n FadeProps,\n IndicatorPropsType,\n Responsive,\n SlideProps,\n TweenEasingFn,\n ZoomProps,\n} from './types';\nimport { Easing } from '@tweenjs/tween.js';\n\nexport const getStartingIndex = (children: ReactNode, defaultIndex?: number): number => {\n if (defaultIndex && defaultIndex < React.Children.count(children)) {\n return defaultIndex;\n }\n return 0;\n};\n\nexport const getResponsiveSettings = (\n wrapperWidth: number,\n responsive?: Array<Responsive>\n): Responsive | undefined => {\n if (typeof window !== 'undefined' && Array.isArray(responsive)) {\n return responsive.find((each) => each.breakpoint <= wrapperWidth);\n }\n return;\n};\n\nconst EASING_METHODS: { [key: string]: TweenEasingFn } = {\n linear: Easing.Linear.None,\n ease: Easing.Quadratic.InOut,\n 'ease-in': Easing.Quadratic.In,\n 'ease-out': Easing.Quadratic.Out,\n cubic: Easing.Cubic.InOut,\n 'cubic-in': Easing.Cubic.In,\n 'cubic-out': Easing.Cubic.Out,\n};\n\nexport const getEasing = (easeMethod?: string): TweenEasingFn => {\n if (easeMethod) {\n return EASING_METHODS[easeMethod];\n }\n return EASING_METHODS.linear;\n};\n\nexport const showPreviousArrow = (\n { prevArrow, infinite }: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n moveSlides: ButtonClick\n): ReactNode => {\n const isDisabled = currentIndex <= 0 && !infinite;\n const props = {\n 'data-type': 'prev',\n 'aria-label': 'Previous Slide',\n disabled: isDisabled,\n onClick: moveSlides,\n };\n if (prevArrow) {\n return React.cloneElement(prevArrow, {\n className: `${prevArrow.props.className || ''} nav ${isDisabled ? 'disabled' : ''}`,\n ...props,\n });\n }\n const className = `nav default-nav ${isDisabled ? 'disabled' : ''}`;\n return (\n <button type=\"button\" className={className} {...props}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z\" />\n </svg>\n </button>\n );\n};\n\nexport const showNextArrow = (\n properties: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n moveSlides: ButtonClick,\n responsiveSettings?: Responsive\n) => {\n const { nextArrow, infinite, children } = properties;\n let slidesToScroll = 1;\n if (responsiveSettings) {\n slidesToScroll = responsiveSettings?.settings.slidesToScroll;\n } else if ('slidesToScroll' in properties) {\n slidesToScroll = properties.slidesToScroll || 1;\n }\n const isDisabled = currentIndex >= React.Children.count(children) - slidesToScroll && !infinite;\n const props = {\n 'data-type': 'next',\n 'aria-label': 'Next Slide',\n disabled: isDisabled,\n onClick: moveSlides,\n };\n if (nextArrow) {\n return React.cloneElement(nextArrow, {\n className: `${nextArrow.props.className || ''} nav ${isDisabled ? 'disabled' : ''}`,\n ...props,\n });\n }\n const className = `nav default-nav ${isDisabled ? 'disabled' : ''}`;\n return (\n <button type=\"button\" className={className} {...props}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z\" />\n </svg>\n </button>\n );\n};\n\nconst showDefaultIndicator = (\n isCurrentPageActive: boolean,\n key: number,\n indicatorProps: IndicatorPropsType\n) => {\n return (\n <li key={key}>\n <button\n type=\"button\"\n className={`each-slideshow-indicator ${isCurrentPageActive ? 'active' : ''}`}\n {...indicatorProps}\n />\n </li>\n );\n};\n\nconst showCustomIndicator = (\n isCurrentPageActive: boolean,\n key: number,\n indicatorProps: any,\n eachIndicator: any\n) => {\n return React.cloneElement(eachIndicator, {\n className: `${eachIndicator.props.className} ${isCurrentPageActive ? 'active' : ''}`,\n key,\n ...indicatorProps,\n });\n};\n\nexport const showIndicators = (\n props: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n navigate: ButtonClick,\n responsiveSettings?: Responsive\n): ReactNode => {\n const { children, indicators } = props;\n let slidesToScroll = 1;\n if (responsiveSettings) {\n slidesToScroll = responsiveSettings?.settings.slidesToScroll;\n } else if ('slidesToScroll' in props) {\n slidesToScroll = props.slidesToScroll || 1;\n }\n const pages = Math.ceil(React.Children.count(children) / slidesToScroll);\n return (\n <ul className=\"indicators\">\n {Array.from({ length: pages }, (_, key) => {\n const indicatorProps: IndicatorPropsType = {\n 'data-key': key,\n 'aria-label': `Go to slide ${key + 1}`,\n onClick: navigate,\n };\n const isCurrentPageActive =\n Math.floor((currentIndex + slidesToScroll - 1) / slidesToScroll) === key;\n if (typeof indicators === 'function') {\n return showCustomIndicator(\n isCurrentPageActive,\n key,\n indicatorProps,\n indicators(key)\n );\n }\n return showDefaultIndicator(isCurrentPageActive, key, indicatorProps);\n })}\n </ul>\n );\n};\n","export const defaultProps = {\n duration: 5000,\n transitionDuration: 1000,\n defaultIndex: 0,\n infinite: true,\n autoplay: true,\n indicators: false,\n arrows: true,\n pauseOnHover: true,\n easing: 'linear',\n canSwipe: true,\n cssClass: '',\n responsive: [],\n};\n","import React, {\n useState,\n useRef,\n useEffect,\n useMemo,\n useImperativeHandle,\n useCallback,\n} from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Group, Tween } from '@tweenjs/tween.js';\nimport {\n getEasing,\n getStartingIndex,\n showIndicators,\n showNextArrow,\n showPreviousArrow,\n} from './helpers';\nimport { ButtonClick, SlideshowRef, ZoomProps } from './types';\nimport { defaultProps } from './props';\n\nexport const FadeZoom = React.forwardRef<SlideshowRef, ZoomProps>((props, ref) => {\n const [index, setIndex] = useState<number>(\n getStartingIndex(props.children, props.defaultIndex)\n );\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerWrapperRef = useRef<any>(null);\n const tweenGroup = useRef(new Group());\n const timeout = useRef<NodeJS.Timeout>();\n const resizeObserver = useRef<any>();\n const childrenCount = useMemo(() => React.Children.count(props.children), [props.children]);\n\n const applyStyle = useCallback(() => {\n if (innerWrapperRef.current && wrapperRef.current) {\n const wrapperWidth = wrapperRef.current.clientWidth;\n const fullwidth = wrapperWidth * childrenCount;\n innerWrapperRef.current.style.width = `${fullwidth}px`;\n for (let index = 0; index < innerWrapperRef.current.children.length; index++) {\n const eachDiv = innerWrapperRef.current.children[index];\n if (eachDiv) {\n eachDiv.style.width = `${wrapperWidth}px`;\n eachDiv.style.left = `${index * -wrapperWidth}px`;\n eachDiv.style.display = `block`;\n }\n }\n }\n }, [wrapperRef, innerWrapperRef, childrenCount]);\n\n const initResizeObserver = useCallback(() => {\n if (wrapperRef.current) {\n resizeObserver.current = new ResizeObserver((entries) => {\n if (!entries) return;\n applyStyle();\n });\n resizeObserver.current.observe(wrapperRef.current);\n }\n }, [wrapperRef, applyStyle]);\n\n const play = useCallback(() => {\n const { autoplay, children, duration, infinite } = props;\n if (\n autoplay &&\n React.Children.count(children) > 1 &&\n (infinite || index < React.Children.count(children) - 1)\n ) {\n timeout.current = setTimeout(moveNext, duration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props, index]);\n\n useEffect(() => {\n initResizeObserver();\n return () => {\n tweenGroup.current.removeAll();\n clearTimeout(timeout.current);\n removeResizeObserver();\n };\n }, [initResizeObserver, tweenGroup]);\n\n useEffect(() => {\n clearTimeout(timeout.current);\n play();\n }, [index, props.autoplay, play]);\n\n useEffect(() => {\n applyStyle();\n }, [childrenCount, applyStyle]);\n\n useImperativeHandle(ref, () => ({\n goNext: () => {\n moveNext();\n },\n goBack: () => {\n moveBack();\n },\n goTo: (index: number, options?: { skipTransition?: boolean }) => {\n if (options?.skipTransition) {\n setIndex(index);\n } else {\n moveTo(index);\n }\n },\n }));\n\n const removeResizeObserver = () => {\n if (resizeObserver.current && wrapperRef.current) {\n resizeObserver.current.unobserve(wrapperRef.current);\n }\n };\n\n const pauseSlides = () => {\n if (props.pauseOnHover) {\n clearTimeout(timeout.current);\n }\n };\n\n const startSlides = () => {\n const { pauseOnHover, autoplay, duration } = props;\n if (pauseOnHover && autoplay) {\n timeout.current = setTimeout(() => moveNext(), duration);\n }\n };\n\n const moveNext = () => {\n const { children, infinite } = props;\n if (!infinite && index === React.Children.count(children) - 1) {\n return;\n }\n transitionSlide((index + 1) % React.Children.count(children));\n };\n\n const moveBack = () => {\n const { children, infinite } = props;\n if (!infinite && index === 0) {\n return;\n }\n transitionSlide(index === 0 ? React.Children.count(children) - 1 : index - 1);\n };\n\n const preTransition: ButtonClick = (event) => {\n const { currentTarget } = event;\n if (currentTarget.dataset.type === 'prev') {\n moveBack();\n } else {\n moveNext();\n }\n };\n\n const animate = () => {\n requestAnimationFrame(animate);\n tweenGroup.current.update();\n };\n\n const transitionSlide = (newIndex: number) => {\n const existingTweens = tweenGroup.current.getAll();\n if (!existingTweens.length) {\n if (!innerWrapperRef.current?.children[newIndex]) {\n newIndex = 0;\n }\n clearTimeout(timeout.current);\n const value = { opacity: 0, scale: 1 };\n\n animate();\n\n const tween = new Tween(value, tweenGroup.current)\n .to({ opacity: 1, scale: props.scale }, props.transitionDuration)\n .onUpdate((value) => {\n if (!innerWrapperRef.current) {\n return;\n }\n innerWrapperRef.current.children[newIndex].style.opacity = value.opacity;\n innerWrapperRef.current.children[index].style.opacity = 1 - value.opacity;\n innerWrapperRef.current.children[\n index\n ].style.transform = `scale(${value.scale})`;\n });\n tween.easing(getEasing(props.easing));\n tween.onStart(() => {\n if (typeof props.onStartChange === 'function') {\n props.onStartChange(index, newIndex);\n }\n });\n tween.onComplete(() => {\n if (innerWrapperRef.current) {\n setIndex(newIndex);\n innerWrapperRef.current.children[index].style.transform = `scale(1)`;\n }\n if (typeof props.onChange === 'function') {\n props.onChange(index, newIndex);\n }\n });\n tween.start();\n }\n };\n\n const moveTo = (gotoIndex: number) => {\n if (gotoIndex !== index) {\n transitionSlide(gotoIndex);\n }\n };\n\n const navigate: ButtonClick = (event) => {\n const { currentTarget } = event;\n if (!currentTarget.dataset.key) {\n return;\n }\n if (parseInt(currentTarget.dataset.key) !== index) {\n moveTo(parseInt(currentTarget.dataset.key));\n }\n };\n\n return (\n <div dir=\"ltr\" aria-roledescription=\"carousel\">\n <div\n className={`react-slideshow-container ${props.cssClass || ''}`}\n onMouseEnter={pauseSlides}\n onMouseOver={pauseSlides}\n onMouseLeave={startSlides}\n >\n {props.arrows && showPreviousArrow(props, index, preTransition)}\n <div\n className={`react-slideshow-fadezoom-wrapper ${props.cssClass}`}\n ref={wrapperRef}\n >\n <div className=\"react-slideshow-fadezoom-images-wrap\" ref={innerWrapperRef}>\n {(React.Children.map(props.children, (thisArg) => thisArg) || []).map(\n (each, key) => (\n <div\n style={{\n opacity: key === index ? '1' : '0',\n zIndex: key === index ? '1' : '0',\n }}\n data-index={key}\n key={key}\n aria-roledescription=\"slide\"\n aria-hidden={key === index ? 'false' : 'true'}\n >\n {each}\n </div>\n )\n )}\n </div>\n </div>\n {props.arrows && showNextArrow(props, index, preTransition)}\n </div>\n {props.indicators && showIndicators(props, index, navigate)}\n </div>\n );\n});\n\nFadeZoom.defaultProps = defaultProps;\n","import React from 'react';\nimport { FadeZoom } from './fadezoom';\nimport { defaultProps } from './props';\nimport { FadeProps, SlideshowRef } from './types';\n\nexport const Fade = React.forwardRef<SlideshowRef, FadeProps>((props, ref) => {\n return <FadeZoom {...props} scale={1} ref={ref} />;\n});\n\nFade.defaultProps = defaultProps;\n","import React from 'react';\nimport { FadeZoom } from './fadezoom';\nimport { defaultProps } from './props';\nimport { SlideshowRef, ZoomProps } from './types';\n\nexport const Zoom = React.forwardRef<SlideshowRef, ZoomProps>((props, ref) => {\n return <FadeZoom {...props} ref={ref} />;\n});\n\nZoom.defaultProps = defaultProps;\n","import React, {\n useState,\n useRef,\n useEffect,\n useMemo,\n useImperativeHandle,\n useCallback,\n} from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Group, Tween } from '@tweenjs/tween.js';\nimport {\n getEasing,\n getResponsiveSettings,\n getStartingIndex,\n showIndicators,\n showNextArrow,\n showPreviousArrow,\n} from './helpers';\nimport { ButtonClick, SlideshowRef, SlideProps } from './types';\nimport { defaultProps } from './props';\n\nexport const Slide = React.forwardRef<SlideshowRef, SlideProps>((props, ref) => {\n const [index, setIndex] = useState(getStartingIndex(props.children, props.defaultIndex));\n const [wrapperSize, setWrapperSize] = useState<number>(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerWrapperRef = useRef<any>(null);\n const tweenGroup = useRef(new Group());\n const responsiveSettings = useMemo(\n () => getResponsiveSettings(wrapperSize, props.responsive),\n [wrapperSize, props.responsive]\n );\n const slidesToScroll = useMemo(() => {\n if (responsiveSettings) {\n return responsiveSettings.settings.slidesToScroll;\n }\n return props.slidesToScroll || 1;\n }, [responsiveSettings, props.slidesToScroll]);\n const slidesToShow = useMemo(() => {\n if (responsiveSettings) {\n return responsiveSettings.settings.slidesToShow;\n }\n return props.slidesToShow || 1;\n }, [responsiveSettings, props.slidesToShow]);\n const childrenCount = useMemo(() => React.Children.count(props.children), [props.children]);\n const eachChildSize = useMemo(() => wrapperSize / slidesToShow, [wrapperSize, slidesToShow]);\n const timeout = useRef<NodeJS.Timeout>();\n const resizeObserver = useRef<any>();\n let startingSwipePosition: number;\n let dragging: boolean = false;\n let distanceSwiped: number = 0;\n const translateType = props.vertical ? 'translateY' : 'translateX';\n const swipeAttributeType = props.vertical ? 'clientY' : 'clientX';\n const swipePageAttributeType = props.vertical ? 'pageY' : 'pageX';\n\n const applyStyle = useCallback(() => {\n if (innerWrapperRef.current) {\n const fullSize = wrapperSize * innerWrapperRef.current.children.length;\n const attribute = props.vertical ? 'height' : 'width';\n innerWrapperRef.current.style[attribute] = `${fullSize}px`;\n if (props.vertical && wrapperRef.current) {\n wrapperRef.current.style[attribute] = `${wrapperSize}px`;\n }\n for (let index = 0; index < innerWrapperRef.current.children.length; index++) {\n const eachDiv = innerWrapperRef.current.children[index];\n if (eachDiv) {\n if (!props.vertical) {\n eachDiv.style[attribute] = `${eachChildSize}px`;\n }\n eachDiv.style.display = `block`;\n }\n }\n }\n }, [wrapperSize, eachChildSize]);\n\n const initResizeObserver = useCallback(() => {\n if (wrapperRef.current) {\n resizeObserver.current = new ResizeObserver((entries) => {\n if (!entries) return;\n setSize();\n });\n resizeObserver.current.observe(wrapperRef.current);\n }\n }, [wrapperRef]);\n\n const play = useCallback(() => {\n const { autoplay, infinite, duration } = props;\n if (autoplay && (infinite || index < childrenCount - 1)) {\n timeout.current = setTimeout(moveNext, duration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props, childrenCount, index]);\n\n useEffect(() => {\n applyStyle();\n }, [wrapperSize, applyStyle]);\n\n useEffect(() => {\n initResizeObserver();\n return () => {\n tweenGroup.current.removeAll();\n clearTimeout(timeout.current);\n removeResizeObserver();\n };\n }, [wrapperRef, initResizeObserver, tweenGroup]);\n\n useEffect(() => {\n clearTimeout(timeout.current);\n play();\n }, [index, wrapperSize, props.autoplay, play]);\n\n useImperativeHandle(ref, () => ({\n goNext: () => {\n moveNext();\n },\n goBack: () => {\n moveBack();\n },\n goTo: (index: number, options?: { skipTransition?: boolean }) => {\n if (options?.skipTransition) {\n setIndex(index);\n } else {\n moveTo(index);\n }\n },\n }));\n\n const removeResizeObserver = () => {\n if (resizeObserver && wrapperRef.current) {\n resizeObserver.current.unobserve(wrapperRef.current);\n }\n };\n\n const pauseSlides = () => {\n if (props.pauseOnHover) {\n clearTimeout(timeout.current);\n }\n };\n\n const swipe = (event: React.MouseEvent | React.TouchEvent) => {\n if (props.canSwipe && dragging) {\n let position;\n if (window.TouchEvent && event.nativeEvent instanceof TouchEvent) {\n position = event.nativeEvent.touches[0][swipePageAttributeType];\n } else {\n position = (event.nativeEvent as MouseEvent)[swipeAttributeType];\n }\n if (position && startingSwipePosition) {\n let translateValue = eachChildSize * (index + getOffset());\n const distance = position - startingSwipePosition;\n if (!props.infinite && index === childrenCount - slidesToScroll && distance < 0) {\n // if it is the last and infinite is false and you're swiping left\n // then nothing happens\n return;\n }\n if (!props.infinite && index === 0 && distance > 0) {\n // if it is the first and infinite is false and you're swiping right\n // then nothing happens\n return;\n }\n distanceSwiped = distance;\n translateValue -= distanceSwiped;\n innerWrapperRef.current.style.transform = `${translateType}(-${translateValue}px)`;\n }\n }\n };\n\n const moveNext = () => {\n if (!props.infinite && index === childrenCount - slidesToScroll) {\n return;\n }\n const nextIndex = calculateIndex(index + slidesToScroll);\n transitionSlide(nextIndex);\n };\n\n const moveBack = () => {\n if (!props.infinite && index === 0) {\n return;\n }\n let previousIndex = index - slidesToScroll;\n if (previousIndex % slidesToScroll) {\n previousIndex = Math.ceil(previousIndex / slidesToScroll) * slidesToScroll;\n }\n transitionSlide(previousIndex);\n };\n\n const goToSlide: ButtonClick = ({ currentTarget }) => {\n if (!currentTarget.dataset.key) {\n return;\n }\n const datasetKey = parseInt(currentTarget.dataset.key);\n moveTo(datasetKey * slidesToScroll);\n };\n\n const moveTo = (index: number) => {\n transitionSlide(calculateIndex(index));\n };\n\n const calculateIndex = (nextIndex: number): number => {\n if (nextIndex < childrenCount && nextIndex + slidesToScroll > childrenCount) {\n if ((childrenCount - slidesToScroll) % slidesToScroll) {\n return childrenCount - slidesToScroll;\n }\n return nextIndex;\n }\n return nextIndex;\n };\n\n const startSlides = () => {\n if (dragging) {\n endSwipe();\n } else if (props.pauseOnHover && props.autoplay) {\n timeout.current = setTimeout(moveNext, props.duration);\n }\n };\n\n const moveSlides: ButtonClick = ({ currentTarget: { dataset } }) => {\n if (dataset.type === 'next') {\n moveNext();\n } else {\n moveBack();\n }\n };\n\n const renderPreceedingSlides = () => {\n return React.Children.toArray(props.children)\n .slice(-slidesToShow)\n .map((each, index) => (\n <div\n data-index={index - slidesToShow}\n aria-roledescription=\"slide\"\n aria-hidden=\"true\"\n key={index - slidesToShow}\n >\n {each}\n </div>\n ));\n };\n\n const renderTrailingSlides = () => {\n if (!props.infinite && slidesToShow === slidesToScroll) {\n return;\n }\n return React.Children.toArray(props.children)\n .slice(0, slidesToShow)\n .map((each, index) => (\n <div\n data-index={childrenCount + index}\n aria-roledescription=\"slide\"\n aria-hidden=\"true\"\n key={childrenCount + index}\n >\n {each}\n </div>\n ));\n };\n\n const setSize = () => {\n const attribute = props.vertical ? 'clientHeight' : 'clientWidth';\n if (props.vertical) {\n if (innerWrapperRef.current) {\n setWrapperSize(innerWrapperRef.current.children[0][attribute]);\n }\n } else {\n if (wrapperRef.current) {\n setWrapperSize(wrapperRef.current[attribute]);\n }\n }\n };\n\n const startSwipe = (event: React.MouseEvent | React.TouchEvent) => {\n if (props.canSwipe) {\n if (window.TouchEvent && event.nativeEvent instanceof TouchEvent) {\n startingSwipePosition = event.nativeEvent.touches[0][swipePageAttributeType];\n } else {\n startingSwipePosition = (event.nativeEvent as MouseEvent)[swipeAttributeType];\n }\n clearTimeout(timeout.current);\n dragging = true;\n }\n };\n\n const endSwipe = () => {\n if (props.canSwipe) {\n dragging = false;\n if (Math.abs(distanceSwiped) / wrapperSize > 0.2) {\n if (distanceSwiped < 0) {\n moveNext();\n } else {\n moveBack();\n }\n } else {\n if (Math.abs(distanceSwiped) > 0) {\n transitionSlide(index, 300);\n }\n }\n }\n };\n\n const animate = () => {\n requestAnimationFrame(animate);\n tweenGroup.current.update();\n };\n\n const transitionSlide = (toIndex: number, animationDuration?: number) => {\n const transitionDuration = animationDuration || props.transitionDuration;\n const currentIndex = index;\n const existingTweens = tweenGroup.current.getAll();\n if (!wrapperRef.current) {\n return;\n }\n const attribute = props.vertical ? 'clientHeight' : 'clientWidth';\n const childSize = wrapperRef.current[attribute] / slidesToShow;\n if (!existingTweens.length) {\n clearTimeout(timeout.current);\n const value = {\n margin: -childSize * (currentIndex + getOffset()) + distanceSwiped,\n };\n const tween = new Tween(value, tweenGroup.current)\n .to({ margin: -childSize * (toIndex + getOffset()) }, transitionDuration)\n .onUpdate((value) => {\n if (innerWrapperRef.current) {\n innerWrapperRef.current.style.transform = `${translateType}(${value.margin}px)`;\n }\n });\n tween.easing(getEasing(props.easing));\n\n animate();\n\n let newIndex = toIndex;\n if (newIndex < 0) {\n newIndex = childrenCount - slidesToScroll;\n } else if (newIndex >= childrenCount) {\n newIndex = 0;\n }\n\n tween.onStart(() => {\n if (typeof props.onStartChange === 'function') {\n props.onStartChange(index, newIndex);\n }\n });\n\n tween.onComplete(() => {\n distanceSwiped = 0;\n if (typeof props.onChange === 'function') {\n props.onChange(index, newIndex);\n }\n setIndex(newIndex);\n });\n\n tween.start();\n }\n };\n\n const isSlideActive = (key: number) => {\n return key < index + slidesToShow && key >= index;\n };\n\n const getOffset = (): number => {\n if (!props.infinite) {\n return 0;\n }\n return slidesToShow;\n };\n\n const style = {\n transform: `${translateType}(-${(index + getOffset()) * eachChildSize}px)`,\n };\n return (\n <div dir=\"ltr\" aria-roledescription=\"carousel\">\n <div\n className=\"react-slideshow-container\"\n onMouseEnter={pauseSlides}\n onMouseOver={pauseSlides}\n onMouseLeave={startSlides}\n onMouseDown={startSwipe}\n onMouseUp={endSwipe}\n onMouseMove={swipe}\n onTouchStart={startSwipe}\n onTouchEnd={endSwipe}\n onTouchCancel={endSwipe}\n onTouchMove={swipe}\n >\n {props.arrows && showPreviousArrow(props, index, moveSlides)}\n <div\n className={`react-slideshow-wrapper slide ${props.cssClass || ''}`}\n ref={wrapperRef}\n >\n <div\n className={`images-wrap ${props.vertical ? 'vertical' : 'horizontal'}`}\n style={style}\n ref={innerWrapperRef}\n >\n {props.infinite && renderPreceedingSlides()}\n {(React.Children.map(props.children, (thisArg) => thisArg) || []).map(\n (each, key) => {\n const isThisSlideActive = isSlideActive(key);\n return (\n <div\n data-index={key}\n key={key}\n className={isThisSlideActive ? 'active' : ''}\n aria-roledescription=\"slide\"\n aria-hidden={isThisSlideActive ? 'false' : 'true'}\n >\n {each}\n </div>\n );\n }\n )}\n {renderTrailingSlides()}\n </div>\n </div>\n {props.arrows && showNextArrow(props, index, moveSlides, responsiveSettings)}\n </div>\n {!!props.indicators && showIndicators(props, index, goToSlide, responsiveSettings)}\n </div>\n );\n});\n\nSlide.defaultProps = defaultProps;\n"],"names":["getStartingIndex","children","defaultIndex","React","Children","count","EASING_METHODS","linear","Easing","Linear","None","ease","Quadratic","InOut","ease-in","In","ease-out","Out","cubic","Cubic","cubic-in","cubic-out","getEasing","easeMethod","showPreviousArrow","_ref","currentIndex","moveSlides","prevArrow","isDisabled","infinite","props","data-type","aria-label","disabled","onClick","cloneElement","_extends","className","type","width","height","viewBox","d","showNextArrow","properties","responsiveSettings","nextArrow","slidesToScroll","settings","showIndicators","navigate","indicators","pages","Math","ceil","Array","from","length","_","key","indicatorProps","data-key","isCurrentPageActive","floor","eachIndicator","showCustomIndicator","showDefaultIndicator","defaultProps","duration","transitionDuration","autoplay","arrows","pauseOnHover","easing","canSwipe","cssClass","responsive","FadeZoom","forwardRef","ref","_useState","useState","index","setIndex","wrapperRef","useRef","innerWrapperRef","tweenGroup","Group","timeout","resizeObserver","childrenCount","useMemo","applyStyle","useCallback","current","wrapperWidth","clientWidth","style","eachDiv","left","display","initResizeObserver","ResizeObserver","entries","observe","play","setTimeout","moveNext","useEffect","removeAll","clearTimeout","removeResizeObserver","useImperativeHandle","goNext","goBack","moveBack","goTo","options","skipTransition","moveTo","unobserve","pauseSlides","transitionSlide","preTransition","event","currentTarget","dataset","newIndex","getAll","_innerWrapperRef$curr","animate","requestAnimationFrame","update","tween","Tween","opacity","scale","to","onUpdate","value","transform","onStart","onStartChange","onComplete","onChange","start","gotoIndex","dir","onMouseEnter","onMouseOver","onMouseLeave","map","thisArg","each","zIndex","parseInt","Fade","Zoom","Slide","startingSwipePosition","_useState2","wrapperSize","setWrapperSize","window","isArray","find","breakpoint","getResponsiveSettings","slidesToShow","eachChildSize","dragging","distanceSwiped","translateType","vertical","swipeAttributeType","swipePageAttributeType","attribute","setSize","swipe","position","TouchEvent","nativeEvent","touches","translateValue","getOffset","distance","nextIndex","calculateIndex","previousIndex","_ref2","startSwipe","endSwipe","abs","toIndex","animationDuration","existingTweens","childSize","margin","onMouseDown","onMouseUp","onMouseMove","onTouchStart","onTouchEnd","onTouchCancel","onTouchMove","toArray","slice","isThisSlideActive","isSlideActive","renderTrailingSlides","datasetKey"],"mappings":"mdAYO,IAAMA,EAAmB,SAACC,EAAqBC,GAClD,OAAIA,GAAgBA,EAAeC,EAAMC,SAASC,MAAMJ,GAC7CC,EAEJ,GAaLI,EAAmD,CACrDC,OAAQC,SAAOC,OAAOC,KACtBC,KAAMH,SAAOI,UAAUC,MACvBC,UAAWN,SAAOI,UAAUG,GAC5BC,WAAYR,SAAOI,UAAUK,IAC7BC,MAAOV,SAAOW,MAAMN,MACpBO,WAAYZ,SAAOW,MAAMJ,GACzBM,YAAab,SAAOW,MAAMF,KAGjBK,EAAY,SAACC,GACtB,OAAIA,EACOjB,EAAeiB,GAEnBjB,EAAeC,QAGbiB,EAAoB,SAAHC,EAE1BC,EACAC,OAFEC,EAASH,EAATG,UAIIC,EAAaH,GAAgB,IAJdD,EAARK,SAKPC,EAAQ,CACVC,YAAa,OACbC,aAAc,iBACdC,SAAUL,EACVM,QAASR,GAEb,OAAIC,EACOzB,EAAMiC,aAAaR,EAASS,GAC/BC,WAAcV,EAAUG,MAAMO,WAAa,aAAUT,EAAa,WAAa,KAC5EE,IAKP5B,wCAAQoC,KAAK,SAASD,8BAFWT,EAAa,WAAa,KAEXE,GAC5C5B,uBAAKqC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAChCvC,wBAAMwC,EAAE,4EAMXC,EAAgB,SACzBC,EACAnB,EACAC,EACAmB,GAEA,IAAQC,EAAkCF,EAAlCE,UAAWjB,EAAuBe,EAAvBf,SACfkB,EAAiB,EACjBF,EACAE,QAAiBF,SAAAA,EAAoBG,SAASD,eACvC,mBAAoBH,IAC3BG,EAAiBH,EAAWG,gBAAkB,GAElD,IAAMnB,EAAaH,GAAgBvB,EAAMC,SAASC,MAPRwC,EAAb5C,UAOuC+C,IAAmBlB,EACjFC,EAAQ,CACVC,YAAa,OACbC,aAAc,aACdC,SAAUL,EACVM,QAASR,GAEb,OAAIoB,EACO5C,EAAMiC,aAAaW,EAASV,GAC/BC,WAAcS,EAAUhB,MAAMO,WAAa,aAAUT,EAAa,WAAa,KAC5EE,IAKP5B,wCAAQoC,KAAK,SAASD,8BAFWT,EAAa,WAAa,KAEXE,GAC5C5B,uBAAKqC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aAChCvC,wBAAMwC,EAAE,qDAmCXO,EAAiB,SAC1BnB,EACAL,EACAyB,EACAL,GAEA,IAAkBM,EAAerB,EAAfqB,WACdJ,EAAiB,EACjBF,EACAE,QAAiBF,SAAAA,EAAoBG,SAASD,eACvC,mBAAoBjB,IAC3BiB,EAAiBjB,EAAMiB,gBAAkB,GAE7C,IAAMK,EAAQC,KAAKC,KAAKpD,EAAMC,SAASC,MAPN0B,EAAzB9B,UAOiD+C,GACzD,OACI7C,sBAAImC,UAAU,cACTkB,MAAMC,KAAK,CAAEC,OAAQL,IAAS,SAACM,EAAGC,GAC/B,IAAMC,EAAqC,CACvCC,WAAYF,EACZ3B,6BAA6B2B,EAAM,GACnCzB,QAASgB,GAEPY,EACFT,KAAKU,OAAOtC,EAAesB,EAAiB,GAAKA,KAAoBY,EACzE,MAA0B,mBAAfR,EArCC,SACxBW,EACAH,EACAC,EACAI,GAEA,OAAO9D,EAAMiC,aAAa6B,EAAa5B,GACnCC,UAAc2B,EAAclC,MAAMO,eAAayB,EAAsB,SAAW,IAChFH,IAAAA,GACGC,IA6BgBK,CACHH,EACAH,EACAC,EACAT,EAAWQ,IA1DN,SACzBG,EACAH,EACAC,GAEA,OACI1D,sBAAIyD,IAAKA,GACLzD,wCACIoC,KAAK,SACLD,uCAAuCyB,EAAsB,SAAW,KACpEF,KAmDGM,CAAqBJ,EAAqBH,EAAKC,QC3KzDO,EAAe,CAC1BC,SAAU,IACVC,mBAAoB,IACpBpE,aAAc,EACd4B,UAAU,EACVyC,UAAU,EACVnB,YAAY,EACZoB,QAAQ,EACRC,cAAc,EACdC,OAAQ,SACRC,UAAU,EACVC,SAAU,GACVC,WAAY,ICQDC,EAAW3E,EAAM4E,YAAoC,SAAChD,EAAOiD,GACtE,IAAAC,EAA0BC,WACtBlF,EAAiB+B,EAAM9B,SAAU8B,EAAM7B,eADpCiF,EAAKF,KAAEG,EAAQH,KAGhBI,EAAaC,SAAuB,MACpCC,EAAkBD,SAAY,MAC9BE,EAAaF,SAAO,IAAIG,SACxBC,EAAUJ,WACVK,EAAiBL,WACjBM,EAAgBC,WAAQ,WAAA,OAAM1F,EAAMC,SAASC,MAAM0B,EAAM9B,YAAW,CAAC8B,EAAM9B,WAE3E6F,EAAaC,eAAY,WAC3B,GAAIR,EAAgBS,SAAWX,EAAWW,QAAS,CAC/C,IAAMC,EAAeZ,EAAWW,QAAQE,YAExCX,EAAgBS,QAAQG,MAAM3D,MADZyD,EAAeL,OAEjC,IAAK,IAAIT,EAAQ,EAAGA,EAAQI,EAAgBS,QAAQ/F,SAASyD,OAAQyB,IAAS,CAC1E,IAAMiB,EAAUb,EAAgBS,QAAQ/F,SAASkF,GAC7CiB,IACAA,EAAQD,MAAM3D,MAAWyD,OACzBG,EAAQD,MAAME,KAAUlB,GAASc,OACjCG,EAAQD,MAAMG,qBAI3B,CAACjB,EAAYE,EAAiBK,IAE3BW,EAAqBR,eAAY,WAC/BV,EAAWW,UACXL,EAAeK,QAAU,IAAIQ,GAAe,SAACC,GACpCA,GACLX,OAEJH,EAAeK,QAAQU,QAAQrB,EAAWW,YAE/C,CAACX,EAAYS,IAEVa,EAAOZ,eAAY,WACrB,IAAkB9F,EAAiC8B,EAAjC9B,SAAUoE,EAAuBtC,EAAvBsC,SAAUvC,EAAaC,EAAbD,SAAaC,EAA3CwC,UAGJpE,EAAMC,SAASC,MAAMJ,GAAY,IAChC6B,GAAYqD,EAAQhF,EAAMC,SAASC,MAAMJ,GAAY,KAEtDyF,EAAQM,QAAUY,WAAWC,EAAUxC,MAG5C,CAACtC,EAAOoD,IAEX2B,aAAU,WAEN,OADAP,IACO,WACHf,EAAWQ,QAAQe,YACnBC,aAAatB,EAAQM,SACrBiB,OAEL,CAACV,EAAoBf,IAExBsB,aAAU,WACNE,aAAatB,EAAQM,SACrBW,MACD,CAACxB,EAAOpD,EAAMwC,SAAUoC,IAE3BG,aAAU,WACNhB,MACD,CAACF,EAAeE,IAEnBoB,sBAAoBlC,GAAK,WAAA,MAAO,CAC5BmC,OAAQ,WACJN,KAEJO,OAAQ,WACJC,KAEJC,KAAM,SAACnC,EAAeoC,SACdA,GAAAA,EAASC,eACTpC,EAASD,GAETsC,EAAOtC,QAKnB,IAAM8B,EAAuB,WACrBtB,EAAeK,SAAWX,EAAWW,SACrCL,EAAeK,QAAQ0B,UAAUrC,EAAWW,UAI9C2B,EAAc,WACZ5F,EAAM0C,cACNuC,aAAatB,EAAQM,UAWvBa,EAAW,WACb,IAAQ5G,EAAuB8B,EAAvB9B,UAAuB8B,EAAbD,UACDqD,IAAUhF,EAAMC,SAASC,MAAMJ,GAAY,IAG5D2H,GAAiBzC,EAAQ,GAAKhF,EAAMC,SAASC,MAAMJ,KAGjDoH,EAAW,YACkBtF,EAAbD,UACS,IAAVqD,IAGjByC,EAA0B,IAAVzC,EAAchF,EAAMC,SAASC,MAJd0B,EAAvB9B,UAIuD,EAAIkF,EAAQ,IAGzE0C,EAA6B,SAACC,GAEG,SADTA,EAAlBC,cACUC,QAAQzF,KACtB8E,IAEAR,KASFe,EAAkB,SAACK,GAErB,IADuBzC,EAAWQ,QAAQkC,SACtBxE,OAAQ,CAAA,IAAAyE,SACpBA,EAAC5C,EAAgBS,UAAhBmC,EAAyBlI,SAASgI,KACnCA,EAAW,GAEfjB,aAAatB,EAAQM,SAXb,SAAVoC,IACFC,sBAAsBD,GACtB5C,EAAWQ,QAAQsC,SAYfF,GAEA,IAAMG,EAAQ,IAAIC,QAJJ,CAAEC,QAAS,EAAGC,MAAO,GAIJlD,EAAWQ,SACrC2C,GAAG,CAAEF,QAAS,EAAGC,MAAO3G,EAAM2G,OAAS3G,EAAMuC,oBAC7CsE,UAAS,SAACC,GACFtD,EAAgBS,UAGrBT,EAAgBS,QAAQ/F,SAASgI,GAAU9B,MAAMsC,QAAUI,EAAMJ,QACjElD,EAAgBS,QAAQ/F,SAASkF,GAAOgB,MAAMsC,QAAU,EAAII,EAAMJ,QAClElD,EAAgBS,QAAQ/F,SACpBkF,GACFgB,MAAM2C,mBAAqBD,EAAMH,cAE3CH,EAAM7D,OAAOpD,EAAUS,EAAM2C,SAC7B6D,EAAMQ,SAAQ,WACyB,mBAAxBhH,EAAMiH,eACbjH,EAAMiH,cAAc7D,EAAO8C,MAGnCM,EAAMU,YAAW,WACT1D,EAAgBS,UAChBZ,EAAS6C,GACT1C,EAAgBS,QAAQ/F,SAASkF,GAAOgB,MAAM2C,sBAEpB,mBAAnB/G,EAAMmH,UACbnH,EAAMmH,SAAS/D,EAAO8C,MAG9BM,EAAMY,UAIR1B,EAAS,SAAC2B,GACRA,IAAcjE,GACdyC,EAAgBwB,IAcxB,OACIjJ,uBAAKkJ,IAAI,6BAA2B,YAChClJ,uBACImC,wCAAwCP,EAAM6C,UAAY,IAC1D0E,aAAc3B,EACd4B,YAAa5B,EACb6B,aArGQ,WAC6BzH,EAArC0C,cAAqC1C,EAAvBwC,WAElBmB,EAAQM,QAAUY,YAAW,WAAA,OAAMC,MAFM9E,EAAbsC,aAsGvBtC,EAAMyC,QAAUhD,EAAkBO,EAAOoD,EAAO0C,GACjD1H,uBACImC,8CAA+CP,EAAM6C,SACrDI,IAAKK,GAELlF,uBAAKmC,UAAU,uCAAuC0C,IAAKO,IACrDpF,EAAMC,SAASqJ,IAAI1H,EAAM9B,UAAU,SAACyJ,GAAO,OAAKA,MAAY,IAAID,KAC9D,SAACE,EAAM/F,GAAG,OACNzD,uBACIgG,MAAO,CACHsC,QAAS7E,IAAQuB,EAAQ,IAAM,IAC/ByE,OAAQhG,IAAQuB,EAAQ,IAAM,kBAEtBvB,EACZA,IAAKA,yBACgB,sBACRA,IAAQuB,EAAQ,QAAU,QAEtCwE,QAMpB5H,EAAMyC,QAAU5B,EAAcb,EAAOoD,EAAO0C,IAEhD9F,EAAMqB,YAAcF,EAAenB,EAAOoD,GA5CrB,SAAC2C,GAC3B,IAAQC,EAAkBD,EAAlBC,cACHA,EAAcC,QAAQpE,KAGvBiG,SAAS9B,EAAcC,QAAQpE,OAASuB,GACxCsC,EAAOoC,SAAS9B,EAAcC,QAAQpE,aA2ClDkB,EAASV,aAAeA,MCpPX0F,EAAO3J,EAAM4E,YAAoC,SAAChD,EAAOiD,GAClE,OAAO7E,gBAAC2E,mBAAa/C,GAAO2G,MAAO,EAAG1D,IAAKA,QAG/C8E,EAAK1F,aAAeA,MCJP2F,EAAO5J,EAAM4E,YAAoC,SAAChD,EAAOiD,GAClE,OAAO7E,gBAAC2E,mBAAa/C,GAAOiD,IAAKA,QAGrC+E,EAAK3F,aAAeA,MCYP4F,EAAQ7J,EAAM4E,YAAqC,SAAChD,EAAOiD,GACpE,IAyBIiF,EAzBJhF,EAA0BC,WAASlF,EAAiB+B,EAAM9B,SAAU8B,EAAM7B,eAAnEiF,EAAKF,KAAEG,EAAQH,KACtBiF,EAAsChF,WAAiB,GAAhDiF,EAAWD,KAAEE,EAAcF,KAC5B7E,EAAaC,SAAuB,MACpCC,EAAkBD,SAAY,MAC9BE,EAAaF,SAAO,IAAIG,SACxB3C,EAAqB+C,WACvB,WAAA,OLT6B,SACjCI,EACApB,GAEA,GAAsB,oBAAXwF,QAA0B7G,MAAM8G,QAAQzF,GAC/C,OAAOA,EAAW0F,MAAK,SAACZ,GAAI,OAAKA,EAAKa,YAAcvE,KKI9CwE,CAAsBN,EAAapI,EAAM8C,cAC/C,CAACsF,EAAapI,EAAM8C,aAElB7B,EAAiB6C,WAAQ,WAC3B,OAAI/C,EACOA,EAAmBG,SAASD,eAEhCjB,EAAMiB,gBAAkB,IAChC,CAACF,EAAoBf,EAAMiB,iBACxB0H,EAAe7E,WAAQ,WACzB,OAAI/C,EACOA,EAAmBG,SAASyH,aAEhC3I,EAAM2I,cAAgB,IAC9B,CAAC5H,EAAoBf,EAAM2I,eACxB9E,EAAgBC,WAAQ,WAAA,OAAM1F,EAAMC,SAASC,MAAM0B,EAAM9B,YAAW,CAAC8B,EAAM9B,WAC3E0K,EAAgB9E,WAAQ,WAAA,OAAMsE,EAAcO,IAAc,CAACP,EAAaO,IACxEhF,EAAUJ,WACVK,EAAiBL,WAEnBsF,GAAoB,EACpBC,EAAyB,EACvBC,EAAgB/I,EAAMgJ,SAAW,aAAe,aAChDC,EAAqBjJ,EAAMgJ,SAAW,UAAY,UAClDE,EAAyBlJ,EAAMgJ,SAAW,QAAU,QAEpDjF,EAAaC,eAAY,WAC3B,GAAIR,EAAgBS,QAAS,CACzB,IACMkF,EAAYnJ,EAAMgJ,SAAW,SAAW,QAC9CxF,EAAgBS,QAAQG,MAAM+E,GAFbf,EAAc5E,EAAgBS,QAAQ/F,SAASyD,YAG5D3B,EAAMgJ,UAAY1F,EAAWW,UAC7BX,EAAWW,QAAQG,MAAM+E,GAAgBf,QAE7C,IAAK,IAAIhF,EAAQ,EAAGA,EAAQI,EAAgBS,QAAQ/F,SAASyD,OAAQyB,IAAS,CAC1E,IAAMiB,EAAUb,EAAgBS,QAAQ/F,SAASkF,GAC7CiB,IACKrE,EAAMgJ,WACP3E,EAAQD,MAAM+E,GAAgBP,QAElCvE,EAAQD,MAAMG,qBAI3B,CAAC6D,EAAaQ,IAEXpE,EAAqBR,eAAY,WAC/BV,EAAWW,UACXL,EAAeK,QAAU,IAAIQ,GAAe,SAACC,GACpCA,GACL0E,OAEJxF,EAAeK,QAAQU,QAAQrB,EAAWW,YAE/C,CAACX,IAEEsB,EAAOZ,eAAY,WACoBhE,EAAjCwC,WAAiCxC,EAAvBD,UACWqD,EAAQS,EAAgB,KACjDF,EAAQM,QAAUY,WAAWC,EAFQ9E,EAAbsC,aAK7B,CAACtC,EAAO6D,EAAeT,IAE1B2B,aAAU,WACNhB,MACD,CAACqE,EAAarE,IAEjBgB,aAAU,WAEN,OADAP,IACO,WACHf,EAAWQ,QAAQe,YACnBC,aAAatB,EAAQM,SACrBiB,OAEL,CAAC5B,EAAYkB,EAAoBf,IAEpCsB,aAAU,WACNE,aAAatB,EAAQM,SACrBW,MACD,CAACxB,EAAOgF,EAAapI,EAAMwC,SAAUoC,IAExCO,sBAAoBlC,GAAK,WAAA,MAAO,CAC5BmC,OAAQ,WACJN,KAEJO,OAAQ,WACJC,KAEJC,KAAM,SAACnC,EAAeoC,SACdA,GAAAA,EAASC,eACTpC,EAASD,GAETsC,EAAOtC,QAKnB,IAAM8B,EAAuB,WACrBtB,GAAkBN,EAAWW,SAC7BL,EAAeK,QAAQ0B,UAAUrC,EAAWW,UAI9C2B,EAAc,WACZ5F,EAAM0C,cACNuC,aAAatB,EAAQM,UAIvBoF,EAAQ,SAACtD,GAEP,IAAIuD,EADR,GAAItJ,EAAM4C,UAAYiG,IAGdS,EADAhB,OAAOiB,YAAcxD,EAAMyD,uBAAuBD,WACvCxD,EAAMyD,YAAYC,QAAQ,GAAGP,GAE5BnD,EAAMyD,YAA2BP,KAEjCf,EAAuB,CACnC,IAAIwB,EAAiBd,GAAiBxF,EAAQuG,KACxCC,EAAWN,EAAWpB,EAC5B,IAAKlI,EAAMD,UAAYqD,IAAUS,EAAgB5C,GAAkB2I,EAAW,EAG1E,OAEJ,IAAK5J,EAAMD,UAAsB,IAAVqD,GAAewG,EAAW,EAG7C,OAIJpG,EAAgBS,QAAQG,MAAM2C,UAAegC,QAD7CW,GADAZ,EAAiBc,WAOvB9E,EAAW,WACb,GAAK9E,EAAMD,UAAYqD,IAAUS,EAAgB5C,EAAjD,CAGA,IAAM4I,EAAYC,EAAe1G,EAAQnC,GACzC4E,EAAgBgE,KAGdvE,EAAW,WACb,GAAKtF,EAAMD,UAAsB,IAAVqD,EAAvB,CAGA,IAAI2G,EAAgB3G,EAAQnC,EACxB8I,EAAgB9I,IAChB8I,EAAgBxI,KAAKC,KAAKuI,EAAgB9I,GAAkBA,GAEhE4E,EAAgBkE,KAWdrE,EAAS,SAACtC,GACZyC,EAAgBiE,EAAe1G,KAG7B0G,EAAiB,SAACD,GACpB,OAAIA,EAAYhG,GAAiBgG,EAAY5I,EAAiB4C,IACrDA,EAAgB5C,GAAkBA,EAC5B4C,EAAgB5C,EAIxB4I,GAWLjK,EAA0B,SAAhBoK,GACS,SADkCA,EAAxBhE,cAAiBC,QACpCzF,KACRsE,IAEAQ,KAqCF8D,EAAU,WACZ,IAAMD,EAAYnJ,EAAMgJ,SAAW,eAAiB,cAChDhJ,EAAMgJ,SACFxF,EAAgBS,SAChBoE,EAAe7E,EAAgBS,QAAQ/F,SAAS,GAAGiL,IAGnD7F,EAAWW,SACXoE,EAAe/E,EAAWW,QAAQkF,KAKxCc,EAAa,SAAClE,GACZ/F,EAAM4C,WAEFsF,EADAI,OAAOiB,YAAcxD,EAAMyD,uBAAuBD,WAC1BxD,EAAMyD,YAAYC,QAAQ,GAAGP,GAE5BnD,EAAMyD,YAA2BP,GAE9DhE,aAAatB,EAAQM,SACrB4E,GAAW,IAIbqB,EAAW,WACTlK,EAAM4C,WACNiG,GAAW,EACPtH,KAAK4I,IAAIrB,GAAkBV,EAAc,GACrCU,EAAiB,EACjBhE,IAEAQ,IAGA/D,KAAK4I,IAAIrB,GAAkB,GAC3BjD,EAAgBzC,EAAO,OAWjCyC,EAAkB,SAACuE,EAAiBC,GACtC,IAAM9H,EAAqB8H,GAAqBrK,EAAMuC,mBAChD5C,EAAeyD,EACfkH,EAAiB7G,EAAWQ,QAAQkC,SAC1C,GAAK7C,EAAWW,QAAhB,CAGA,IACMsG,EAAYjH,EAAWW,QADXjE,EAAMgJ,SAAW,eAAiB,eACFL,EAClD,IAAK2B,EAAe3I,OAAQ,CACxBsD,aAAatB,EAAQM,SACrB,IAAM6C,EAAQ,CACV0D,QAASD,GAAa5K,EAAegK,KAAeb,GAElDtC,EAAQ,IAAIC,QAAMK,EAAOrD,EAAWQ,SACrC2C,GAAG,CAAE4D,QAASD,GAAaH,EAAUT,MAAgBpH,GACrDsE,UAAS,SAACC,GACHtD,EAAgBS,UAChBT,EAAgBS,QAAQG,MAAM2C,UAAegC,MAAiBjC,EAAM0D,iBAGhFhE,EAAM7D,OAAOpD,EAAUS,EAAM2C,SA1BrB,SAAV0D,IACFC,sBAAsBD,GACtB5C,EAAWQ,QAAQsC,SA0BfF,GAEA,IAAIH,EAAWkE,EACXlE,EAAW,EACXA,EAAWrC,EAAgB5C,EACpBiF,GAAYrC,IACnBqC,EAAW,GAGfM,EAAMQ,SAAQ,WACyB,mBAAxBhH,EAAMiH,eACbjH,EAAMiH,cAAc7D,EAAO8C,MAInCM,EAAMU,YAAW,WACb4B,EAAiB,EACa,mBAAnB9I,EAAMmH,UACbnH,EAAMmH,SAAS/D,EAAO8C,GAE1B7C,EAAS6C,MAGbM,EAAMY,WAQRuC,EAAY,WACd,OAAK3J,EAAMD,SAGJ4I,EAFI,GAKTvE,EAAQ,CACV2C,UAAcgC,QAAmB3F,EAAQuG,KAAef,SAE5D,OACIxK,uBAAKkJ,IAAI,6BAA2B,YAChClJ,uBACImC,UAAU,4BACVgH,aAAc3B,EACd4B,YAAa5B,EACb6B,aAtKQ,WACZoB,EACAqB,IACOlK,EAAM0C,cAAgB1C,EAAMwC,WACnCmB,EAAQM,QAAUY,WAAWC,EAAU9E,EAAMsC,YAmKzCmI,YAAaR,EACbS,UAAWR,EACXS,YAAatB,EACbuB,aAAcX,EACdY,WAAYX,EACZY,cAAeZ,EACfa,YAAa1B,GAEZrJ,EAAMyC,QAAUhD,EAAkBO,EAAOoD,EAAOxD,GACjDxB,uBACImC,4CAA4CP,EAAM6C,UAAY,IAC9DI,IAAKK,GAELlF,uBACImC,0BAA0BP,EAAMgJ,SAAW,WAAa,cACxD5E,MAAOA,EACPnB,IAAKO,GAEJxD,EAAMD,UAxKhB3B,EAAMC,SAAS2M,QAAQhL,EAAM9B,UAC/B+M,OAAOtC,GACPjB,KAAI,SAACE,EAAMxE,GAAK,OACbhF,oCACgBgF,EAAQuF,yBACC,sBACT,OACZ9G,IAAKuB,EAAQuF,GAEZf,OAgKKxJ,EAAMC,SAASqJ,IAAI1H,EAAM9B,UAAU,SAACyJ,GAAO,OAAKA,MAAY,IAAID,KAC9D,SAACE,EAAM/F,GACH,IAAMqJ,EA1CZ,SAACrJ,GACnB,OAAOA,EAAMuB,EAAQuF,GAAgB9G,GAAOuB,EAyCM+H,CAActJ,GACxC,OACIzD,oCACgByD,EACZA,IAAKA,EACLtB,UAAW2K,EAAoB,SAAW,0BACrB,sBACRA,EAAoB,QAAU,QAE1CtD,MAtKR,WACzB,GAAK5H,EAAMD,UAAY4I,IAAiB1H,EAGxC,OAAO7C,EAAMC,SAAS2M,QAAQhL,EAAM9B,UAC/B+M,MAAM,EAAGtC,GACTjB,KAAI,SAACE,EAAMxE,GAAK,OACbhF,oCACgByF,EAAgBT,yBACP,sBACT,OACZvB,IAAKgC,EAAgBT,GAEpBwE,MA8JIwD,KAGRpL,EAAMyC,QAAU5B,EAAcb,EAAOoD,EAAOxD,EAAYmB,MAE1Df,EAAMqB,YAAcF,EAAenB,EAAOoD,GArOtB,SAAhB1D,OAAmBsG,EAAatG,EAAbsG,cAC9B,GAAKA,EAAcC,QAAQpE,IAA3B,CAGA,IAAMwJ,EAAavD,SAAS9B,EAAcC,QAAQpE,KAClD6D,EAAO2F,EAAapK,MAgO+CF,OAK3EkH,EAAM5F,aAAeA"}
1
+ {"version":3,"file":"react-slideshow-image.cjs.production.min.js","sources":["../src/helpers.tsx","../src/fadezoom.tsx","../src/types.ts","../src/fade.tsx","../src/zoom.tsx","../src/slide.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n ButtonClick,\n FadeProps,\n IndicatorPropsType,\n Responsive,\n SlideProps,\n TweenEasingFn,\n ZoomProps,\n} from './types';\nimport { Easing } from '@tweenjs/tween.js';\n\nexport const getStartingIndex = (children: ReactNode, defaultIndex?: number): number => {\n if (defaultIndex && defaultIndex < React.Children.count(children)) {\n return defaultIndex;\n }\n return 0;\n};\n\nexport const getResponsiveSettings = (\n wrapperWidth: number,\n responsive?: Array<Responsive>\n): Responsive | undefined => {\n if (typeof window !== 'undefined' && Array.isArray(responsive)) {\n return responsive.find((each) => each.breakpoint <= wrapperWidth);\n }\n return;\n};\n\nconst EASING_METHODS: { [key: string]: TweenEasingFn } = {\n linear: Easing.Linear.None,\n ease: Easing.Quadratic.InOut,\n 'ease-in': Easing.Quadratic.In,\n 'ease-out': Easing.Quadratic.Out,\n cubic: Easing.Cubic.InOut,\n 'cubic-in': Easing.Cubic.In,\n 'cubic-out': Easing.Cubic.Out,\n};\n\nexport const getEasing = (easeMethod?: string): TweenEasingFn => {\n if (easeMethod) {\n return EASING_METHODS[easeMethod];\n }\n return EASING_METHODS.linear;\n};\n\nexport const showPreviousArrow = (\n { prevArrow, infinite }: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n moveSlides: ButtonClick\n): ReactNode => {\n const isDisabled = currentIndex <= 0 && !infinite;\n const props = {\n 'data-type': 'prev',\n 'aria-label': 'Previous Slide',\n disabled: isDisabled,\n onClick: moveSlides,\n };\n if (prevArrow) {\n return React.cloneElement(prevArrow, {\n className: `${prevArrow.props.className || ''} nav ${isDisabled ? 'disabled' : ''}`,\n ...props,\n });\n }\n const className = `nav default-nav ${isDisabled ? 'disabled' : ''}`;\n return (\n <button type=\"button\" className={className} {...props}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z\" />\n </svg>\n </button>\n );\n};\n\nexport const showNextArrow = (\n properties: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n moveSlides: ButtonClick,\n responsiveSettings?: Responsive\n) => {\n const { nextArrow, infinite, children } = properties;\n let slidesToScroll = 1;\n if (responsiveSettings) {\n slidesToScroll = responsiveSettings?.settings.slidesToScroll;\n } else if ('slidesToScroll' in properties) {\n slidesToScroll = properties.slidesToScroll || 1;\n }\n const isDisabled = currentIndex >= React.Children.count(children) - slidesToScroll && !infinite;\n const props = {\n 'data-type': 'next',\n 'aria-label': 'Next Slide',\n disabled: isDisabled,\n onClick: moveSlides,\n };\n if (nextArrow) {\n return React.cloneElement(nextArrow, {\n className: `${nextArrow.props.className || ''} nav ${isDisabled ? 'disabled' : ''}`,\n ...props,\n });\n }\n const className = `nav default-nav ${isDisabled ? 'disabled' : ''}`;\n return (\n <button type=\"button\" className={className} {...props}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z\" />\n </svg>\n </button>\n );\n};\n\nconst showDefaultIndicator = (\n isCurrentPageActive: boolean,\n key: number,\n indicatorProps: IndicatorPropsType\n) => {\n return (\n <li key={key}>\n <button\n type=\"button\"\n className={`each-slideshow-indicator ${isCurrentPageActive ? 'active' : ''}`}\n {...indicatorProps}\n />\n </li>\n );\n};\n\nconst showCustomIndicator = (\n isCurrentPageActive: boolean,\n key: number,\n indicatorProps: any,\n eachIndicator: any\n) => {\n return React.cloneElement(eachIndicator, {\n className: `${eachIndicator.props.className} ${isCurrentPageActive ? 'active' : ''}`,\n key,\n ...indicatorProps,\n });\n};\n\nexport const showIndicators = (\n props: FadeProps | SlideProps | ZoomProps,\n currentIndex: number,\n navigate: ButtonClick,\n responsiveSettings?: Responsive\n): ReactNode => {\n const { children, indicators } = props;\n let slidesToScroll = 1;\n if (responsiveSettings) {\n slidesToScroll = responsiveSettings?.settings.slidesToScroll;\n } else if ('slidesToScroll' in props) {\n slidesToScroll = props.slidesToScroll || 1;\n }\n const pages = Math.ceil(React.Children.count(children) / slidesToScroll);\n return (\n <ul className=\"indicators\">\n {Array.from({ length: pages }, (_, key) => {\n const indicatorProps: IndicatorPropsType = {\n 'data-key': key,\n 'aria-label': `Go to slide ${key + 1}`,\n onClick: navigate,\n };\n const isCurrentPageActive =\n Math.floor((currentIndex + slidesToScroll - 1) / slidesToScroll) === key;\n if (typeof indicators === 'function') {\n return showCustomIndicator(\n isCurrentPageActive,\n key,\n indicatorProps,\n indicators(key)\n );\n }\n return showDefaultIndicator(isCurrentPageActive, key, indicatorProps);\n })}\n </ul>\n );\n};\n","import React, {\n useState,\n useRef,\n useEffect,\n useMemo,\n useImperativeHandle,\n useCallback,\n} from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Group, Tween } from '@tweenjs/tween.js';\nimport {\n getEasing,\n getStartingIndex,\n showIndicators,\n showNextArrow,\n showPreviousArrow,\n} from './helpers';\nimport { ButtonClick, SlideshowRef, ZoomProps } from './types';\n\nexport const FadeZoom = React.forwardRef<SlideshowRef, ZoomProps>((props, ref) => {\n const {\n duration = 5000,\n transitionDuration = 1000,\n defaultIndex = 0,\n infinite = true,\n autoplay = true,\n indicators = false,\n arrows = true,\n pauseOnHover = true,\n easing = 'linear',\n cssClass = '',\n ...others\n } = props;\n const [index, setIndex] = useState<number>(getStartingIndex(others.children, defaultIndex));\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerWrapperRef = useRef<any>(null);\n const tweenGroup = useRef(new Group());\n const timeout = useRef<NodeJS.Timeout | undefined>(undefined);\n const resizeObserver = useRef<any>(undefined);\n const childrenCount = useMemo(() => React.Children.count(others.children), [others.children]);\n\n const applyStyle = useCallback(() => {\n if (innerWrapperRef.current && wrapperRef.current) {\n const wrapperWidth = wrapperRef.current.clientWidth;\n const fullwidth = wrapperWidth * childrenCount;\n innerWrapperRef.current.style.width = `${fullwidth}px`;\n for (let index = 0; index < innerWrapperRef.current.children.length; index++) {\n const eachDiv = innerWrapperRef.current.children[index];\n if (eachDiv) {\n eachDiv.style.width = `${wrapperWidth}px`;\n eachDiv.style.left = `${index * -wrapperWidth}px`;\n eachDiv.style.display = `block`;\n }\n }\n }\n }, [wrapperRef, innerWrapperRef, childrenCount]);\n\n const initResizeObserver = useCallback(() => {\n if (wrapperRef.current) {\n resizeObserver.current = new ResizeObserver((entries) => {\n if (!entries) return;\n applyStyle();\n });\n resizeObserver.current.observe(wrapperRef.current);\n }\n }, [wrapperRef, applyStyle]);\n\n const play = useCallback(() => {\n if (\n autoplay &&\n React.Children.count(others.children) > 1 &&\n (infinite || index < React.Children.count(others.children) - 1)\n ) {\n timeout.current = setTimeout(moveNext, duration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoplay, duration, infinite, others.children, index]);\n\n useEffect(() => {\n initResizeObserver();\n const tweenGroupRef = tweenGroup.current;\n return () => {\n tweenGroupRef.removeAll();\n clearTimeout(timeout.current);\n removeResizeObserver();\n };\n }, [initResizeObserver, tweenGroup]);\n\n useEffect(() => {\n clearTimeout(timeout.current);\n play();\n }, [index, autoplay, play]);\n\n useEffect(() => {\n applyStyle();\n }, [childrenCount, applyStyle]);\n\n useImperativeHandle(ref, () => ({\n goNext: () => {\n moveNext();\n },\n goBack: () => {\n moveBack();\n },\n goTo: (index: number, options?: { skipTransition?: boolean }) => {\n if (options?.skipTransition) {\n setIndex(index);\n } else {\n moveTo(index);\n }\n },\n }));\n\n const removeResizeObserver = () => {\n if (resizeObserver.current && wrapperRef.current) {\n resizeObserver.current.unobserve(wrapperRef.current);\n }\n };\n\n const pauseSlides = () => {\n if (pauseOnHover) {\n clearTimeout(timeout.current);\n }\n };\n\n const startSlides = () => {\n if (pauseOnHover && autoplay) {\n timeout.current = setTimeout(() => moveNext(), duration);\n }\n };\n\n const moveNext = () => {\n if (!infinite && index === React.Children.count(others.children) - 1) {\n return;\n }\n transitionSlide((index + 1) % React.Children.count(others.children));\n };\n\n const moveBack = () => {\n if (!infinite && index === 0) {\n return;\n }\n transitionSlide(index === 0 ? React.Children.count(others.children) - 1 : index - 1);\n };\n\n const preTransition: ButtonClick = (event) => {\n const { currentTarget } = event;\n if (currentTarget.dataset.type === 'prev') {\n moveBack();\n } else {\n moveNext();\n }\n };\n\n const animate = () => {\n requestAnimationFrame(animate);\n tweenGroup.current.update();\n };\n\n const transitionSlide = (newIndex: number) => {\n const existingTweens = tweenGroup.current.getAll();\n if (!existingTweens.length) {\n if (!innerWrapperRef.current?.children[newIndex]) {\n newIndex = 0;\n }\n clearTimeout(timeout.current);\n const value = { opacity: 0, scale: 1 };\n\n animate();\n\n const tween = new Tween(value, tweenGroup.current)\n .to({ opacity: 1, scale: others.scale }, transitionDuration)\n .onUpdate((value) => {\n if (!innerWrapperRef.current) {\n return;\n }\n innerWrapperRef.current.children[newIndex].style.opacity = value.opacity;\n innerWrapperRef.current.children[index].style.opacity = 1 - value.opacity;\n innerWrapperRef.current.children[\n index\n ].style.transform = `scale(${value.scale})`;\n });\n tween.easing(getEasing(easing));\n tween.onStart(() => {\n if (typeof others.onStartChange === 'function') {\n others.onStartChange(index, newIndex);\n }\n });\n tween.onComplete(() => {\n if (innerWrapperRef.current) {\n setIndex(newIndex);\n innerWrapperRef.current.children[index].style.transform = `scale(1)`;\n }\n if (typeof others.onChange === 'function') {\n others.onChange(index, newIndex);\n }\n });\n tween.start();\n }\n };\n\n const moveTo = (gotoIndex: number) => {\n if (gotoIndex !== index) {\n transitionSlide(gotoIndex);\n }\n };\n\n const navigate: ButtonClick = (event) => {\n const { currentTarget } = event;\n if (!currentTarget.dataset.key) {\n return;\n }\n if (parseInt(currentTarget.dataset.key) !== index) {\n moveTo(parseInt(currentTarget.dataset.key));\n }\n };\n\n return (\n <div dir=\"ltr\" aria-roledescription=\"carousel\">\n <div\n className={`react-slideshow-container ${cssClass || ''}`}\n onMouseEnter={pauseSlides}\n onMouseOver={pauseSlides}\n onMouseLeave={startSlides}\n >\n {arrows && showPreviousArrow({ ...props, infinite }, index, preTransition)}\n <div className={`react-slideshow-fadezoom-wrapper ${cssClass}`} ref={wrapperRef}>\n <div className=\"react-slideshow-fadezoom-images-wrap\" ref={innerWrapperRef}>\n {(React.Children.map(others.children, (thisArg) => thisArg) || []).map(\n (each, key) => (\n <div\n style={{\n opacity: key === index ? '1' : '0',\n zIndex: key === index ? '1' : '0',\n }}\n data-index={key}\n key={key}\n aria-roledescription=\"slide\"\n aria-hidden={key === index ? 'false' : 'true'}\n >\n {each}\n </div>\n )\n )}\n </div>\n </div>\n {arrows && showNextArrow({ ...props, infinite }, index, preTransition)}\n </div>\n {indicators && showIndicators({ ...props, indicators }, index, navigate)}\n </div>\n );\n});\n","import React, { ReactElement, ReactNode } from 'react';\n\nexport interface Responsive {\n breakpoint: number;\n settings: {\n slidesToShow: number;\n slidesToScroll: number;\n };\n}\n\nexport interface BaseProps {\n /** the content of the component */\n children: ReactNode;\n /** The time it takes (milliseconds) before next transition starts\n * @default 5000\n */\n duration?: number;\n /** Determines how long the transition takes\n * @default 1000\n */\n transitionDuration?: number;\n /** Specifies the first slide to display\n * @default 0\n */\n defaultIndex?: number;\n /** For specifying if there should be dots below the slideshow. If function; it will render the returned element\n * @default false\n */\n indicators?: boolean | ((index?: number) => ReactNode);\n /** A custom element to serve as previous arrow */\n prevArrow?: ReactElement<any>;\n /** A custom element to serve as next arrow */\n nextArrow?: ReactElement<any>;\n /** Determines if there should be a navigational arrow for going to the next or previous slide\n * @default true\n */\n arrows?: boolean;\n /** Responsible for determining if the slideshow should start automatically\n * @default true\n */\n autoplay?: boolean;\n /** Specifies if the transition should loop infinitely\n * @default true\n */\n infinite?: boolean;\n /** Determines whether the transition effect applies when the mouse hovers the slider\n * @default true\n */\n pauseOnHover?: boolean;\n /** Determines whether the user can go to next or previous slide by the mouse or by touching\n * @default true\n */\n canSwipe?: boolean;\n /** The timing transition function to use. You can use one of linear, ease, ease-in, ease-out, cubic, cubic-in, cubic-out\n * @default \"linear\"\n */\n easing?: string;\n /** Use this prop to add your custom css to the wrapper containing the sliders. Pass your css className as value for the cssClass prop\n * @default \"\"\n */\n cssClass?: string;\n /** Callback that gets triggered at the start of every transition. The oldIndex and newIndex are passed as arguments */\n onStartChange?: (from: number, to: number) => void;\n /** Callback that gets triggered at the end of every transition. The oldIndex and newIndex are passed as arguments */\n onChange?: (from: number, to: number) => void;\n /** Ref for the slideshow (carousel). This is useful for executing methods like goBack, goNext and goTo on the slideshow */\n ref?: any;\n}\n\nexport interface FadeProps extends BaseProps {}\nexport interface ZoomProps extends BaseProps {\n /** Required when using zoom to specify the scale the current slide should be zoomed to. A number greater than 1 indicates zoom in. A number less than 1, indicates zoom out */\n scale: number;\n}\nexport interface SlideProps extends BaseProps {\n /** Set slidesToShow & slidesToScroll based on screen size. */\n responsive?: Array<Responsive>;\n /** The number of slides to show on each page\n * @default 1\n */\n slidesToShow?: number;\n /** The number of slides to scroll\n * @default 1\n */\n slidesToScroll?: number;\n /** If slide should scroll vertically\n * @default false\n */\n vertical?: boolean;\n}\n\nexport type ButtonClick = (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n\nexport type IndicatorPropsType = {\n 'data-key': number;\n 'aria-label': string;\n onClick: ButtonClick;\n};\n\nexport type TweenEasingFn = (amount: number) => number;\n\nexport const defaultProps = {\n duration: 5000,\n transitionDuration: 1000,\n defaultIndex: 0,\n infinite: true,\n autoplay: true,\n indicators: false,\n arrows: true,\n pauseOnHover: true,\n easing: 'linear',\n canSwipe: true,\n cssClass: '',\n};\n\nexport type SlideshowRef = {\n goNext: () => void;\n goBack: () => void;\n goTo: (index: number, options?: { skipTransition?: boolean }) => void;\n};\n","import React from 'react';\nimport { FadeZoom } from './fadezoom';\nimport { defaultProps, FadeProps, SlideshowRef } from './types';\n\nexport const Fade = React.forwardRef<SlideshowRef, FadeProps>((props, ref) => {\n return <FadeZoom {...defaultProps} {...props} scale={1} ref={ref} />;\n});\n","import React from 'react';\nimport { FadeZoom } from './fadezoom';\nimport { defaultProps, SlideshowRef, ZoomProps } from './types';\n\nexport const Zoom = React.forwardRef<SlideshowRef, ZoomProps>((props, ref) => {\n return <FadeZoom {...defaultProps} {...props} ref={ref} />;\n});\n","import React, {\n useState,\n useRef,\n useEffect,\n useMemo,\n useImperativeHandle,\n useCallback,\n} from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Group, Tween } from '@tweenjs/tween.js';\nimport {\n getEasing,\n getResponsiveSettings,\n getStartingIndex,\n showIndicators,\n showNextArrow,\n showPreviousArrow,\n} from './helpers';\nimport { ButtonClick, SlideshowRef, SlideProps } from './types';\n\nexport const Slide = React.forwardRef<SlideshowRef, SlideProps>((props, ref) => {\n const {\n duration = 5000,\n transitionDuration = 1000,\n defaultIndex = 0,\n infinite = true,\n autoplay = true,\n indicators = false,\n arrows = true,\n pauseOnHover = true,\n easing = 'linear',\n canSwipe = true,\n cssClass = '',\n responsive = [],\n slidesToShow: slidesToShowDefault = 1,\n slidesToScroll: slidesToScrollDefault = 1,\n ...others\n } = props;\n const newTransitionDuration = transitionDuration;\n const [index, setIndex] = useState(getStartingIndex(others.children, defaultIndex));\n const [wrapperSize, setWrapperSize] = useState<number>(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const innerWrapperRef = useRef<any>(null);\n const tweenGroup = useRef(new Group());\n const responsiveSettings = useMemo(\n () => getResponsiveSettings(wrapperSize, responsive),\n [wrapperSize, responsive]\n );\n const slidesToScroll = useMemo(() => {\n if (responsiveSettings) {\n return responsiveSettings.settings.slidesToScroll;\n }\n return slidesToScrollDefault;\n }, [responsiveSettings, slidesToScrollDefault]);\n const slidesToShow = useMemo(() => {\n if (responsiveSettings) {\n return responsiveSettings.settings.slidesToShow;\n }\n return slidesToShowDefault;\n }, [responsiveSettings, slidesToShowDefault]);\n const childrenCount = useMemo(() => React.Children.count(others.children), [others.children]);\n const eachChildSize = useMemo(() => wrapperSize / slidesToShow, [wrapperSize, slidesToShow]);\n const timeout = useRef<NodeJS.Timeout | undefined>(undefined);\n const resizeObserver = useRef<any>(undefined);\n let startingSwipePosition: number;\n let dragging: boolean = false;\n let distanceSwiped: number = 0;\n const translateType = others.vertical ? 'translateY' : 'translateX';\n const swipeAttributeType = others.vertical ? 'clientY' : 'clientX';\n const swipePageAttributeType = others.vertical ? 'pageY' : 'pageX';\n\n const applyStyle = useCallback(() => {\n if (innerWrapperRef.current) {\n const fullSize = wrapperSize * innerWrapperRef.current.children.length;\n const attribute = others.vertical ? 'height' : 'width';\n innerWrapperRef.current.style[attribute] = `${fullSize}px`;\n if (others.vertical && wrapperRef.current) {\n wrapperRef.current.style[attribute] = `${wrapperSize}px`;\n }\n for (let index = 0; index < innerWrapperRef.current.children.length; index++) {\n const eachDiv = innerWrapperRef.current.children[index];\n if (eachDiv) {\n if (!others.vertical) {\n eachDiv.style[attribute] = `${eachChildSize}px`;\n }\n eachDiv.style.display = `block`;\n }\n }\n }\n }, [wrapperSize, eachChildSize, others.vertical]);\n\n const setSize = useCallback(() => {\n const attribute = others.vertical ? 'clientHeight' : 'clientWidth';\n if (others.vertical) {\n if (innerWrapperRef.current) {\n setWrapperSize(innerWrapperRef.current.children[0][attribute]);\n }\n } else {\n if (wrapperRef.current) {\n setWrapperSize(wrapperRef.current[attribute]);\n }\n }\n }, [others.vertical]);\n\n const initResizeObserver = useCallback(() => {\n if (wrapperRef.current) {\n resizeObserver.current = new ResizeObserver((entries) => {\n if (!entries) return;\n setSize();\n });\n resizeObserver.current.observe(wrapperRef.current);\n }\n }, [wrapperRef, setSize]);\n\n const play = useCallback(() => {\n if (autoplay && (infinite || index < childrenCount - 1)) {\n timeout.current = setTimeout(moveNext, duration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoplay, infinite, duration, childrenCount, index]);\n\n useEffect(() => {\n applyStyle();\n }, [wrapperSize, applyStyle]);\n\n useEffect(() => {\n initResizeObserver();\n const tweenGroupRef = tweenGroup.current;\n return () => {\n tweenGroupRef.removeAll();\n clearTimeout(timeout.current);\n removeResizeObserver();\n };\n }, [wrapperRef, initResizeObserver, tweenGroup]);\n\n useEffect(() => {\n clearTimeout(timeout.current);\n play();\n }, [index, wrapperSize, autoplay, play]);\n\n useImperativeHandle(ref, () => ({\n goNext: () => {\n moveNext();\n },\n goBack: () => {\n moveBack();\n },\n goTo: (index: number, options?: { skipTransition?: boolean }) => {\n if (options?.skipTransition) {\n setIndex(index);\n } else {\n moveTo(index);\n }\n },\n }));\n\n const removeResizeObserver = () => {\n if (resizeObserver && wrapperRef.current) {\n resizeObserver.current.unobserve(wrapperRef.current);\n }\n };\n\n const pauseSlides = () => {\n if (pauseOnHover) {\n clearTimeout(timeout.current);\n }\n };\n\n const swipe = (event: React.MouseEvent | React.TouchEvent) => {\n if (canSwipe && dragging) {\n let position;\n if (window.TouchEvent && event.nativeEvent instanceof TouchEvent) {\n position = event.nativeEvent.touches[0][swipePageAttributeType];\n } else {\n position = (event.nativeEvent as MouseEvent)[swipeAttributeType];\n }\n if (position && startingSwipePosition) {\n let translateValue = eachChildSize * (index + getOffset());\n const distance = position - startingSwipePosition;\n if (!infinite && index === childrenCount - slidesToScroll && distance < 0) {\n // if it is the last and infinite is false and you're swiping left\n // then nothing happens\n return;\n }\n if (!infinite && index === 0 && distance > 0) {\n // if it is the first and infinite is false and you're swiping right\n // then nothing happens\n return;\n }\n distanceSwiped = distance;\n translateValue -= distanceSwiped;\n innerWrapperRef.current.style.transform = `${translateType}(-${translateValue}px)`;\n }\n }\n };\n\n const moveNext = () => {\n if (!infinite && index === childrenCount - slidesToScroll) {\n return;\n }\n const nextIndex = calculateIndex(index + slidesToScroll);\n transitionSlide(nextIndex);\n };\n\n const moveBack = () => {\n if (!infinite && index === 0) {\n return;\n }\n let previousIndex = index - slidesToScroll;\n if (previousIndex % slidesToScroll) {\n previousIndex = Math.ceil(previousIndex / slidesToScroll) * slidesToScroll;\n }\n transitionSlide(previousIndex);\n };\n\n const goToSlide: ButtonClick = ({ currentTarget }) => {\n if (!currentTarget.dataset.key) {\n return;\n }\n const datasetKey = parseInt(currentTarget.dataset.key);\n moveTo(datasetKey * slidesToScroll);\n };\n\n const moveTo = (index: number) => {\n transitionSlide(calculateIndex(index));\n };\n\n const calculateIndex = (nextIndex: number): number => {\n if (nextIndex < childrenCount && nextIndex + slidesToScroll > childrenCount) {\n if ((childrenCount - slidesToScroll) % slidesToScroll) {\n return childrenCount - slidesToScroll;\n }\n return nextIndex;\n }\n return nextIndex;\n };\n\n const startSlides = () => {\n if (dragging) {\n endSwipe();\n } else if (pauseOnHover && autoplay) {\n timeout.current = setTimeout(moveNext, duration);\n }\n };\n\n const moveSlides: ButtonClick = ({ currentTarget: { dataset } }) => {\n if (dataset.type === 'next') {\n moveNext();\n } else {\n moveBack();\n }\n };\n\n const renderPreceedingSlides = () => {\n return React.Children.toArray(others.children)\n .slice(-slidesToShow)\n .map((each, index) => (\n <div\n data-index={index - slidesToShow}\n aria-roledescription=\"slide\"\n aria-hidden=\"true\"\n key={index - slidesToShow}\n >\n {each}\n </div>\n ));\n };\n\n const renderTrailingSlides = () => {\n if (!infinite && slidesToShow === slidesToScroll) {\n return;\n }\n return React.Children.toArray(others.children)\n .slice(0, slidesToShow)\n .map((each, index) => (\n <div\n data-index={childrenCount + index}\n aria-roledescription=\"slide\"\n aria-hidden=\"true\"\n key={childrenCount + index}\n >\n {each}\n </div>\n ));\n };\n\n const startSwipe = (event: React.MouseEvent | React.TouchEvent) => {\n if (canSwipe) {\n if (window.TouchEvent && event.nativeEvent instanceof TouchEvent) {\n startingSwipePosition = event.nativeEvent.touches[0][swipePageAttributeType];\n } else {\n startingSwipePosition = (event.nativeEvent as MouseEvent)[swipeAttributeType];\n }\n clearTimeout(timeout.current);\n dragging = true;\n }\n };\n\n const endSwipe = () => {\n if (canSwipe) {\n dragging = false;\n if (Math.abs(distanceSwiped) / wrapperSize > 0.2) {\n if (distanceSwiped < 0) {\n moveNext();\n } else {\n moveBack();\n }\n } else {\n if (Math.abs(distanceSwiped) > 0) {\n transitionSlide(index, 300);\n }\n }\n }\n };\n\n const animate = () => {\n requestAnimationFrame(animate);\n tweenGroup.current.update();\n };\n\n const transitionSlide = (toIndex: number, animationDuration?: number) => {\n const transitionDuration = animationDuration || newTransitionDuration;\n const currentIndex = index;\n const existingTweens = tweenGroup.current.getAll();\n if (!wrapperRef.current) {\n return;\n }\n const attribute = others.vertical ? 'clientHeight' : 'clientWidth';\n const childSize = wrapperRef.current[attribute] / slidesToShow;\n if (!existingTweens.length) {\n clearTimeout(timeout.current);\n const value = {\n margin: -childSize * (currentIndex + getOffset()) + distanceSwiped,\n };\n const tween = new Tween(value, tweenGroup.current)\n .to({ margin: -childSize * (toIndex + getOffset()) }, transitionDuration)\n .onUpdate((value) => {\n if (innerWrapperRef.current) {\n innerWrapperRef.current.style.transform = `${translateType}(${value.margin}px)`;\n }\n });\n tween.easing(getEasing(easing));\n\n animate();\n\n let newIndex = toIndex;\n if (newIndex < 0) {\n newIndex = childrenCount - slidesToScroll;\n } else if (newIndex >= childrenCount) {\n newIndex = 0;\n }\n\n tween.onStart(() => {\n if (typeof others.onStartChange === 'function') {\n others.onStartChange(index, newIndex);\n }\n });\n\n tween.onComplete(() => {\n distanceSwiped = 0;\n if (typeof others.onChange === 'function') {\n others.onChange(index, newIndex);\n }\n setIndex(newIndex);\n });\n\n tween.start();\n }\n };\n\n const isSlideActive = (key: number) => {\n return key < index + slidesToShow && key >= index;\n };\n\n const getOffset = (): number => {\n if (!infinite) {\n return 0;\n }\n return slidesToShow;\n };\n\n const style = {\n transform: `${translateType}(-${(index + getOffset()) * eachChildSize}px)`,\n };\n return (\n <div dir=\"ltr\" aria-roledescription=\"carousel\">\n <div\n className=\"react-slideshow-container\"\n onMouseEnter={pauseSlides}\n onMouseOver={pauseSlides}\n onMouseLeave={startSlides}\n onMouseDown={startSwipe}\n onMouseUp={endSwipe}\n onMouseMove={swipe}\n onTouchStart={startSwipe}\n onTouchEnd={endSwipe}\n onTouchCancel={endSwipe}\n onTouchMove={swipe}\n >\n {arrows && showPreviousArrow({ ...props, infinite }, index, moveSlides)}\n <div className={`react-slideshow-wrapper slide ${cssClass || ''}`} ref={wrapperRef}>\n <div\n className={`images-wrap ${others.vertical ? 'vertical' : 'horizontal'}`}\n style={style}\n ref={innerWrapperRef}\n >\n {infinite && renderPreceedingSlides()}\n {(React.Children.map(others.children, (thisArg) => thisArg) || []).map(\n (each, key) => {\n const isThisSlideActive = isSlideActive(key);\n return (\n <div\n data-index={key}\n key={key}\n className={isThisSlideActive ? 'active' : ''}\n aria-roledescription=\"slide\"\n aria-hidden={isThisSlideActive ? 'false' : 'true'}\n >\n {each}\n </div>\n );\n }\n )}\n {renderTrailingSlides()}\n </div>\n </div>\n {arrows &&\n showNextArrow({ ...props, infinite }, index, moveSlides, responsiveSettings)}\n </div>\n {!!indicators &&\n showIndicators({ ...props, indicators }, index, goToSlide, responsiveSettings)}\n </div>\n );\n});\n"],"names":["getStartingIndex","children","defaultIndex","React","Children","count","EASING_METHODS","linear","Easing","Linear","None","ease","Quadratic","InOut","ease-in","In","ease-out","Out","cubic","Cubic","cubic-in","cubic-out","getEasing","easeMethod","showPreviousArrow","_ref","currentIndex","moveSlides","prevArrow","isDisabled","infinite","props","data-type","aria-label","disabled","onClick","cloneElement","_extends","className","type","width","height","viewBox","d","showNextArrow","properties","responsiveSettings","nextArrow","slidesToScroll","settings","showIndicators","navigate","indicators","pages","Math","ceil","Array","from","length","_","key","indicatorProps","data-key","isCurrentPageActive","floor","eachIndicator","showCustomIndicator","showDefaultIndicator","FadeZoom","forwardRef","ref","_props$duration","duration","_props$transitionDura","transitionDuration","_props$defaultIndex","_props$infinite","_props$autoplay","autoplay","_props$indicators","_props$arrows","arrows","_props$pauseOnHover","pauseOnHover","_props$easing","easing","_props$cssClass","cssClass","others","_objectWithoutPropertiesLoose","_excluded","_useState","useState","index","setIndex","wrapperRef","useRef","innerWrapperRef","tweenGroup","Group","timeout","undefined","resizeObserver","childrenCount","useMemo","applyStyle","useCallback","current","wrapperWidth","clientWidth","style","eachDiv","left","display","initResizeObserver","ResizeObserver","entries","observe","play","setTimeout","moveNext","useEffect","tweenGroupRef","removeAll","clearTimeout","removeResizeObserver","useImperativeHandle","goNext","goBack","moveBack","goTo","options","skipTransition","moveTo","unobserve","pauseSlides","transitionSlide","preTransition","event","currentTarget","dataset","animate","requestAnimationFrame","update","newIndex","getAll","_innerWrapperRef$curr","tween","Tween","opacity","scale","to","onUpdate","value","transform","onStart","onStartChange","onComplete","onChange","start","gotoIndex","dir","onMouseEnter","onMouseOver","onMouseLeave","map","thisArg","each","zIndex","parseInt","defaultProps","canSwipe","Fade","Zoom","Slide","startingSwipePosition","_props$canSwipe","_props$responsive","responsive","_props$slidesToShow","slidesToShow","slidesToShowDefault","_props$slidesToScroll","slidesToScrollDefault","newTransitionDuration","_useState2","wrapperSize","setWrapperSize","window","isArray","find","breakpoint","getResponsiveSettings","eachChildSize","dragging","distanceSwiped","translateType","vertical","swipeAttributeType","swipePageAttributeType","attribute","setSize","swipe","position","TouchEvent","nativeEvent","touches","translateValue","getOffset","distance","nextIndex","calculateIndex","previousIndex","_ref2","startSwipe","endSwipe","abs","toIndex","animationDuration","existingTweens","childSize","margin","onMouseDown","onMouseUp","onMouseMove","onTouchStart","onTouchEnd","onTouchCancel","onTouchMove","toArray","slice","isThisSlideActive","isSlideActive","renderTrailingSlides","datasetKey"],"mappings":"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"}