@smwb/ui-react 2.1.2 → 2.1.3

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":"carousel.js","sources":["../../../../src/components/dataDisplay/carousel/carousel.tsx"],"sourcesContent":["import React, { forwardRef, ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Modal } from \"../../feedBack/modal\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport {\n clamp,\n coordX,\n coordY,\n dragPrevent,\n getSlideIndexForMultipleParts,\n getSlidesToShow,\n getSlideStyle,\n getSlideWidth,\n getStartSlide,\n isMouseEvent,\n isTouchEvent,\n toCssLength,\n toCssNumber,\n} from \"./utils\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { useEventCallback } from \"../../../hooks/useEventCallback\";\n\nexport interface CarouselProps extends React.PropsWithChildren {\n slidesToShow?: number;\n startSlide?: number;\n className?: string;\n showNavigation?: boolean;\n showArrows?: boolean;\n arrowsSize?: number;\n navigationClassName?: string;\n onSlideChange?: (slideIndex: number) => void;\n navigationDotRenderer?: (index: number, isActive: boolean, onClick: (index: number) => void) => ReactNode;\n /** Accessible label for the carousel region. */\n \"aria-label\"?: string;\n /** Advance slides automatically. */\n autoplay?: boolean;\n /** Autoplay interval in ms. */\n autoplayInterval?: number;\n /** Pause autoplay while the pointer is over the carousel. */\n pauseOnHover?: boolean;\n /** Height of each cell/photo. Number is treated as px. Overrides the default 205px. */\n cellHeight?: number | string;\n /** Aspect ratio of each cell/photo (e.g. 0.9 or \"16 / 9\"). Overrides the default 0.9. */\n aspectRatio?: number | string;\n /** Per-side spacing around each slide. Number is treated as px (default 4). */\n gap?: number | string;\n /** Max width of the carousel. Number is treated as px (default 412). */\n maxWidth?: number | string;\n /** Open the clicked slide in a fullscreen lightbox (arrows / swipe / Esc to navigate & close). */\n enableFullscreen?: boolean;\n}\n\ninterface ShiftState {\n animation: boolean | undefined;\n}\n\ntype Axis = \"x\" | \"y\" | null;\n\ninterface Motion {\n isPressed: boolean;\n startX: number;\n startY: number;\n lastX: number;\n lastT: number;\n axis: Axis;\n dragged: boolean;\n}\n\nconst MOTION_INITIAL_STATE: Motion = {\n isPressed: false,\n startX: 0,\n startY: 0,\n lastX: 0,\n lastT: 0,\n axis: null,\n dragged: false,\n};\n\n// Movement (px) below which a pointer interaction is treated as a tap, not a drag.\nconst TAP_THRESHOLD = 8;\n// Flick velocity (px/ms) above which we advance a slide even on a short drag.\nconst FLICK_VELOCITY = 0.4;\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n {\n slidesToShow: slidesToShowProp = 3,\n startSlide: startSlideProp = 0,\n children,\n className,\n showNavigation = true,\n showArrows: showArrowsProp,\n arrowsSize = 30,\n navigationClassName,\n onSlideChange,\n navigationDotRenderer,\n \"aria-label\": ariaLabel = \"Carousel\",\n autoplay = false,\n autoplayInterval = 4000,\n pauseOnHover = true,\n cellHeight,\n aspectRatio,\n gap,\n maxWidth,\n enableFullscreen = false,\n },\n ref\n) {\n const slidesCount = React.Children.count(children);\n const slidesToShow = getSlidesToShow(slidesToShowProp, slidesCount);\n const startSlide = getStartSlide(startSlideProp, slidesCount);\n const showArrows = showArrowsProp && slidesCount > 1;\n const maxShift = Math.max(0, slidesCount - slidesToShow);\n\n const [activeSlideIndex, setActiveSlideIndex] = useState<number>(startSlide);\n const [shiftState, setShiftState] = useState<ShiftState>({\n animation: undefined,\n });\n // Live pointer-follow offset (px) applied on top of the resting %-based indent.\n const [dragPx, setDragPx] = useState<number>(0);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [fullscreenIndex, setFullscreenIndex] = useState<number | null>(null);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const outerRef = useRef<HTMLDivElement>(null);\n const forkedOuterRef = useForkRef<HTMLDivElement>(ref, outerRef);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isHovered, setIsHovered] = useState<boolean>(false);\n\n const motion = useRef<Motion>({ ...MOTION_INITIAL_STATE });\n\n useSafeLayoutEffect(() => {\n setShiftState((prevState) => ({\n ...prevState,\n animation: false,\n }));\n }, [slidesToShow]);\n\n useSafeLayoutEffect(() => {\n setActiveSlideIndex(startSlide);\n onSlideChange?.(startSlide);\n\n if (shiftState.animation !== undefined) {\n setShiftState((prevState) => ({\n ...prevState,\n animation: true,\n }));\n }\n }, [startSlide]);\n\n const setMotion = (value: Partial<Motion>) => {\n Object.assign<Motion, Partial<Motion>>(motion.current, value);\n };\n\n const now = () => (typeof performance !== \"undefined\" ? performance.now() : Date.now());\n\n const goToSlide = (index: number) => {\n const target = clamp(index, 0, maxShift);\n\n setActiveSlideIndex(target);\n setShiftState((prevState) => ({ ...prevState, animation: true }));\n onSlideChange?.(target);\n };\n\n const moveFullscreen = (direction: 1 | -1) => {\n setFullscreenIndex((prev) => (prev === null ? prev : (prev + direction + slidesCount) % slidesCount));\n };\n\n const fullscreenTouchX = useRef<number | null>(null);\n\n const detachListeners = (isMouse: boolean) => {\n if (!trackRef.current) {\n return;\n }\n\n trackRef.current.removeEventListener(isMouse ? \"mousemove\" : \"touchmove\", onMove);\n trackRef.current.removeEventListener(isMouse ? \"mouseup\" : \"touchend\", onEnd);\n\n if (isMouse) {\n trackRef.current.removeEventListener(\"mouseleave\", onEnd);\n }\n };\n\n const onStart = useEventCallback((event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => {\n if (!trackRef.current) {\n return;\n }\n\n const isMouse = isMouseEvent(event);\n\n if (isMouse && event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n\n const clientX = coordX(event);\n const clientY = coordY(event);\n\n setMotion({\n isPressed: true,\n startX: clientX,\n startY: clientY,\n lastX: clientX,\n lastT: now(),\n axis: null,\n dragged: false,\n });\n\n trackRef.current.addEventListener(isMouse ? \"mousemove\" : \"touchmove\", onMove, { passive: false });\n trackRef.current.addEventListener(isMouse ? \"mouseup\" : \"touchend\", onEnd);\n\n if (isMouse) {\n trackRef.current.addEventListener(\"mouseleave\", onEnd);\n }\n });\n\n const onMove = useEventCallback((event: MouseEvent | TouchEvent) => {\n if (!rootRef.current || !motion.current.isPressed) {\n return;\n }\n\n if (isTouchEvent(event) && event.touches.length > 1) {\n return onEnd(event);\n }\n\n const clientX = coordX(event);\n const clientY = coordY(event);\n const shiftX = clientX - motion.current.startX;\n const shiftY = clientY - motion.current.startY;\n\n // Lock the gesture axis once the pointer has moved past the tap threshold.\n if (motion.current.axis === null) {\n if (Math.abs(shiftX) < TAP_THRESHOLD && Math.abs(shiftY) < TAP_THRESHOLD) {\n return;\n }\n\n const axis: Axis = Math.abs(shiftX) >= Math.abs(shiftY) ? \"x\" : \"y\";\n setMotion({ axis, dragged: true });\n\n // Vertical intent → release so the page can scroll.\n if (axis === \"y\") {\n return onEnd(event);\n }\n\n if (slidesCount > 1) {\n setIsDragging(true);\n }\n }\n\n if (motion.current.axis !== \"x\") {\n return;\n }\n\n // Horizontal drag: keep the gesture and follow the finger.\n event.preventDefault();\n event.stopPropagation();\n\n if (slidesCount > 1) {\n const atStart = activeSlideIndex <= 0;\n const atEnd = activeSlideIndex >= maxShift;\n // Add resistance when dragging beyond the first / last slide.\n const offset = (atStart && shiftX > 0) || (atEnd && shiftX < 0) ? shiftX * 0.35 : shiftX;\n setDragPx(offset);\n }\n\n motion.current.lastX = clientX;\n motion.current.lastT = now();\n });\n\n const onEnd = useEventCallback((event: MouseEvent | TouchEvent) => {\n if (!motion.current.isPressed) {\n return;\n }\n\n const isMouse = isMouseEvent(event);\n detachListeners(isMouse);\n\n const { axis, dragged, startX, lastX, lastT } = motion.current;\n setMotion({ isPressed: false });\n setIsDragging(false);\n\n if (axis === \"x\" && dragged && slidesCount > 1 && rootRef.current) {\n const clientX = coordX(event);\n const totalShift = clientX - startX;\n const widthPerSlide = rootRef.current.offsetWidth / slidesToShow;\n const velocity = lastT ? (clientX - lastX) / Math.max(1, now() - lastT) : 0;\n\n let movedSlides = widthPerSlide > 0 ? Math.round(-totalShift / widthPerSlide) : 0;\n\n if (movedSlides === 0 && Math.abs(velocity) > FLICK_VELOCITY) {\n movedSlides = velocity < 0 ? 1 : -1;\n }\n\n goToSlide(activeSlideIndex + movedSlides);\n }\n\n // Animate back to the resting position (snap / snap-back).\n setDragPx(0);\n });\n\n const onSlideClick = (index: number) => () => {\n // Suppress the click that fires at the end of a drag.\n if (motion.current.dragged) {\n return;\n }\n\n if (enableFullscreen) {\n setFullscreenIndex(index);\n }\n };\n\n const onNavigationItemClick = (index: number) => () => goToSlide(index);\n\n const getNextIndex = (direction: 1 | -1) => {\n const isSingleSlide = slidesToShow === 1;\n const totalGroups = isSingleSlide ? slidesCount : Math.ceil(slidesCount / slidesToShow);\n const activeIndex = activeSlideIndex + slidesToShow;\n const isNextSlideDisabled = slidesCount - slidesToShow <= activeSlideIndex;\n\n const currentIndex = getSlideIndexForMultipleParts(activeIndex, slidesToShow, slidesCount, isNextSlideDisabled);\n const nextIndex = (currentIndex + direction + totalGroups) % totalGroups;\n\n return isSingleSlide ? nextIndex : nextIndex * slidesToShow;\n };\n\n const getNavigation = () => {\n if (!showNavigation) {\n return <></>;\n }\n\n const isNextSlideDisabled = slidesCount - slidesToShow <= activeSlideIndex;\n const isSinglePartSlide = slidesToShow === 1;\n const count = isSinglePartSlide ? slidesCount : Math.ceil(slidesCount / slidesToShow);\n const indicators: React.ReactNode[] = [];\n\n for (let index = 0; index < count; index++) {\n let nextIndex = index;\n let currentIndex = activeSlideIndex;\n\n if (!isSinglePartSlide) {\n const isLast = index === count - 1;\n const activeIndex = activeSlideIndex + slidesToShow;\n\n nextIndex = isLast ? slidesCount - slidesToShow : index * slidesToShow;\n currentIndex = getSlideIndexForMultipleParts(activeIndex, slidesToShow, slidesCount, isNextSlideDisabled);\n }\n\n const isActive = currentIndex === index;\n const onClick = onNavigationItemClick(nextIndex);\n\n let indicator: ReactNode = (\n <div key={index} className={cn(\"smwb-carousel__navigation__dot\", isActive && \"current\")} onClick={onClick} />\n );\n\n if (navigationDotRenderer) {\n indicator = navigationDotRenderer(index, isActive, onClick);\n }\n\n indicators.push(indicator);\n }\n\n return <div className={cn(\"smwb-carousel__navigation\", navigationClassName)}>{indicators}</div>;\n };\n\n const getIndent = () => {\n const shiftSlides = activeSlideIndex > maxShift ? maxShift : activeSlideIndex;\n\n return getSlideWidth(slidesToShow) * shiftSlides;\n };\n\n const slideId = useId();\n const slideStyle = getSlideStyle(slidesToShow);\n\n const indent = getIndent();\n\n const layerStyle: React.CSSProperties = {\n transform: `translateX(calc(-${indent}% + ${dragPx}px))`,\n transition:\n isDragging || shiftState.animation === undefined\n ? \"none\"\n : shiftState.animation\n ? \"transform 500ms cubic-bezier(.1, 0, .25, 1)\"\n : \"none\",\n };\n\n const rootStyle: React.CSSProperties = {};\n const cellHeightValue = toCssLength(cellHeight);\n const aspectRatioValue = toCssNumber(aspectRatio);\n const gapValue = toCssLength(gap);\n const maxWidthValue = toCssLength(maxWidth);\n if (cellHeightValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-cell-height\"] = cellHeightValue;\n if (aspectRatioValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-aspect-ratio\"] = aspectRatioValue;\n if (gapValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-gap\"] = gapValue;\n if (maxWidthValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-max-width\"] = maxWidthValue;\n\n React.useEffect(() => {\n if (!Array.isArray(children)) {\n console.error(\"SMWB Material: The `children` prop was passed invalidly. It should contain an array of elements.\");\n }\n }, [children]);\n\n useEffect(() => {\n if (!autoplay || slidesCount <= 1 || (pauseOnHover && isHovered) || fullscreenIndex !== null) {\n return;\n }\n const timer = window.setInterval(() => {\n onNavigationItemClick(getNextIndex(1))();\n }, autoplayInterval);\n\n return () => window.clearInterval(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n autoplay,\n autoplayInterval,\n pauseOnHover,\n isHovered,\n slidesCount,\n activeSlideIndex,\n slidesToShow,\n fullscreenIndex,\n ]);\n\n useEffect(() => {\n if (fullscreenIndex === null || slidesCount <= 1) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n moveFullscreen(-1);\n } else if (event.key === \"ArrowRight\") {\n moveFullscreen(1);\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fullscreenIndex, slidesCount]);\n\n if (!Array.isArray(children)) {\n return <></>;\n }\n\n const childrenArray = children as ReactNode[];\n\n const onFullscreenTouchStart = (event: React.TouchEvent) => {\n fullscreenTouchX.current = event.touches[0]?.clientX ?? null;\n };\n\n const onFullscreenTouchEnd = (event: React.TouchEvent) => {\n if (fullscreenTouchX.current === null || slidesCount <= 1) {\n return;\n }\n const delta = (event.changedTouches[0]?.clientX ?? fullscreenTouchX.current) - fullscreenTouchX.current;\n fullscreenTouchX.current = null;\n if (Math.abs(delta) > 40) {\n moveFullscreen(delta < 0 ? 1 : -1);\n }\n };\n\n return (\n <div\n className={cn(\"smwb-carousel\", className)}\n data-testid=\"carousel\"\n ref={forkedOuterRef}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n style={rootStyle}\n onMouseEnter={pauseOnHover ? () => setIsHovered(true) : undefined}\n onMouseLeave={pauseOnHover ? () => setIsHovered(false) : undefined}\n >\n <div className={cn(\"smwb-carousel__inner\")} ref={rootRef}>\n {showArrows && (\n <Icon\n name=\"chevron_left\"\n size={arrowsSize}\n className={cn(\"smwb-carousel__arrow\", \"smwb-carousel__arrow_prev\")}\n style={{\n top: `calc(50% - ${arrowsSize / 2}px)`,\n left: -arrowsSize / 2,\n }}\n onClick={() => onNavigationItemClick(getNextIndex(-1))()}\n />\n )}\n <div\n ref={trackRef}\n className=\"smwb-carousel__track\"\n onMouseDown={onStart}\n onTouchStart={onStart}\n onDragStart={dragPrevent}\n onDragEnd={dragPrevent}\n >\n <div className=\"smwb-carousel__layer\" style={layerStyle}>\n {React.Children.map(children, (child, index) => (\n <div key={index} id={`${slideId}${index}`} className=\"smwb-carousel__slide\" style={slideStyle}>\n <div\n className={cn(\n \"smwb-carousel__slide-inner\",\n enableFullscreen && \"smwb-carousel__slide-inner_clickable\"\n )}\n onClick={enableFullscreen ? onSlideClick(index) : undefined}\n >\n {child}\n </div>\n </div>\n ))}\n </div>\n </div>\n {showArrows && (\n <Icon\n name=\"chevron_right\"\n size={arrowsSize}\n className={cn(\"smwb-carousel__arrow\", \"smwb-carousel__arrow_next\")}\n style={{\n top: `calc(50% - ${arrowsSize / 2}px)`,\n right: -arrowsSize / 2,\n }}\n onClick={() => onNavigationItemClick(getNextIndex(1))()}\n />\n )}\n </div>\n {getNavigation()}\n {enableFullscreen && (\n <Modal\n open={fullscreenIndex !== null}\n size=\"fullscreen\"\n backdrop=\"darkBlured\"\n className=\"smwb-carousel__fullscreen\"\n onClose={() => setFullscreenIndex(null)}\n aria-label=\"Image viewer\"\n >\n {fullscreenIndex !== null && (\n <div className=\"smwb-carousel__fullscreen-content\">\n {slidesCount > 1 && (\n <Icon\n name=\"chevron_left\"\n size={40}\n className={cn(\"smwb-carousel__fullscreen-arrow\", \"smwb-carousel__fullscreen-arrow_prev\")}\n onClick={() => moveFullscreen(-1)}\n />\n )}\n <div\n className=\"smwb-carousel__fullscreen-stage\"\n onTouchStart={onFullscreenTouchStart}\n onTouchEnd={onFullscreenTouchEnd}\n >\n {childrenArray[fullscreenIndex]}\n </div>\n {slidesCount > 1 && (\n <Icon\n name=\"chevron_right\"\n size={40}\n className={cn(\"smwb-carousel__fullscreen-arrow\", \"smwb-carousel__fullscreen-arrow_next\")}\n onClick={() => moveFullscreen(1)}\n />\n )}\n <Icon\n name=\"close\"\n size={32}\n className=\"smwb-carousel__fullscreen-close\"\n onClick={() => setFullscreenIndex(null)}\n />\n </div>\n )}\n </Modal>\n )}\n </div>\n );\n});\n\nexport default Carousel;\n"],"names":["MOTION_INITIAL_STATE","TAP_THRESHOLD","FLICK_VELOCITY","Carousel","forwardRef","slidesToShowProp","startSlideProp","children","className","showNavigation","showArrowsProp","arrowsSize","navigationClassName","onSlideChange","navigationDotRenderer","ariaLabel","autoplay","autoplayInterval","pauseOnHover","cellHeight","aspectRatio","gap","maxWidth","enableFullscreen","ref","slidesCount","React","slidesToShow","getSlidesToShow","startSlide","getStartSlide","showArrows","maxShift","activeSlideIndex","setActiveSlideIndex","useState","shiftState","setShiftState","dragPx","setDragPx","isDragging","setIsDragging","fullscreenIndex","setFullscreenIndex","rootRef","useRef","outerRef","forkedOuterRef","useForkRef","trackRef","isHovered","setIsHovered","motion","useSafeLayoutEffect","prevState","setMotion","value","now","goToSlide","index","target","clamp","moveFullscreen","direction","prev","fullscreenTouchX","detachListeners","isMouse","onMove","onEnd","onStart","useEventCallback","event","isMouseEvent","clientX","coordX","clientY","coordY","isTouchEvent","shiftX","shiftY","axis","atStart","atEnd","offset","dragged","startX","lastX","lastT","totalShift","widthPerSlide","velocity","movedSlides","onSlideClick","onNavigationItemClick","getNextIndex","isSingleSlide","totalGroups","activeIndex","isNextSlideDisabled","nextIndex","getSlideIndexForMultipleParts","getNavigation","jsx","Fragment","isSinglePartSlide","count","indicators","currentIndex","isLast","isActive","onClick","indicator","cn","getIndent","shiftSlides","getSlideWidth","slideId","useId","slideStyle","getSlideStyle","layerStyle","rootStyle","cellHeightValue","toCssLength","aspectRatioValue","toCssNumber","gapValue","maxWidthValue","useEffect","timer","onKeyDown","childrenArray","onFullscreenTouchStart","_b","_a","onFullscreenTouchEnd","delta","jsxs","Icon","dragPrevent","child","Modal"],"mappings":"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"}
1
+ {"version":3,"file":"carousel.js","sources":["../../../../src/components/dataDisplay/carousel/carousel.tsx"],"sourcesContent":["import React, { forwardRef, ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Modal } from \"../../feedBack/modal\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport {\n clamp,\n coordX,\n coordY,\n dragPrevent,\n getSlideIndexForMultipleParts,\n getSlidesToShow,\n getSlideStyle,\n getSlideWidth,\n getStartSlide,\n isMouseEvent,\n isTouchEvent,\n toCssLength,\n toCssNumber,\n} from \"./utils\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { useEventCallback } from \"../../../hooks/useEventCallback\";\n\nexport interface CarouselProps extends React.PropsWithChildren {\n slidesToShow?: number;\n startSlide?: number;\n className?: string;\n showNavigation?: boolean;\n showArrows?: boolean;\n arrowsSize?: number;\n navigationClassName?: string;\n onSlideChange?: (slideIndex: number) => void;\n navigationDotRenderer?: (index: number, isActive: boolean, onClick: (index: number) => void) => ReactNode;\n /** Accessible label for the carousel region. */\n \"aria-label\"?: string;\n /** Advance slides automatically. */\n autoplay?: boolean;\n /** Autoplay interval in ms. */\n autoplayInterval?: number;\n /** Pause autoplay while the pointer is over the carousel. */\n pauseOnHover?: boolean;\n /** Height of each cell/photo. Number is treated as px. Overrides the default 205px. */\n cellHeight?: number | string;\n /** Aspect ratio of each cell/photo (e.g. 0.9 or \"16 / 9\"). Overrides the default 0.9. */\n aspectRatio?: number | string;\n /** Per-side spacing around each slide. Number is treated as px (default 4). */\n gap?: number | string;\n /** Max width of the carousel. Number is treated as px (default 412). */\n maxWidth?: number | string;\n /** Open the clicked slide in a fullscreen lightbox (arrows / swipe / Esc to navigate & close). */\n enableFullscreen?: boolean;\n}\n\ninterface ShiftState {\n animation: boolean | undefined;\n}\n\ntype Axis = \"x\" | \"y\" | null;\n\ninterface Motion {\n isPressed: boolean;\n startX: number;\n startY: number;\n lastX: number;\n lastT: number;\n axis: Axis;\n dragged: boolean;\n}\n\nconst MOTION_INITIAL_STATE: Motion = {\n isPressed: false,\n startX: 0,\n startY: 0,\n lastX: 0,\n lastT: 0,\n axis: null,\n dragged: false,\n};\n\n// Movement (px) below which a pointer interaction is treated as a tap, not a drag.\nconst TAP_THRESHOLD = 8;\n// Flick velocity (px/ms) above which we advance a slide even on a short drag.\nconst FLICK_VELOCITY = 0.4;\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n {\n slidesToShow: slidesToShowProp = 3,\n startSlide: startSlideProp = 0,\n children,\n className,\n showNavigation = true,\n showArrows: showArrowsProp,\n arrowsSize = 30,\n navigationClassName,\n onSlideChange,\n navigationDotRenderer,\n \"aria-label\": ariaLabel = \"Carousel\",\n autoplay = false,\n autoplayInterval = 4000,\n pauseOnHover = true,\n cellHeight,\n aspectRatio,\n gap,\n maxWidth,\n enableFullscreen = false,\n },\n ref\n) {\n const slidesCount = React.Children.count(children);\n const slidesToShow = getSlidesToShow(slidesToShowProp, slidesCount);\n const startSlide = getStartSlide(startSlideProp, slidesCount);\n const showArrows = showArrowsProp && slidesCount > 1;\n const maxShift = Math.max(0, slidesCount - slidesToShow);\n\n const [activeSlideIndex, setActiveSlideIndex] = useState<number>(startSlide);\n const [shiftState, setShiftState] = useState<ShiftState>({\n animation: undefined,\n });\n // Live pointer-follow offset (px) applied on top of the resting %-based indent.\n const [dragPx, setDragPx] = useState<number>(0);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [fullscreenIndex, setFullscreenIndex] = useState<number | null>(null);\n // Live finger-follow offset (px) for the fullscreen track.\n const [fullscreenDragPx, setFullscreenDragPx] = useState<number>(0);\n const [isFullscreenDragging, setIsFullscreenDragging] = useState<boolean>(false);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const outerRef = useRef<HTMLDivElement>(null);\n const forkedOuterRef = useForkRef<HTMLDivElement>(ref, outerRef);\n const trackRef = useRef<HTMLDivElement>(null);\n const [isHovered, setIsHovered] = useState<boolean>(false);\n\n const motion = useRef<Motion>({ ...MOTION_INITIAL_STATE });\n\n useSafeLayoutEffect(() => {\n setShiftState((prevState) => ({\n ...prevState,\n animation: false,\n }));\n }, [slidesToShow]);\n\n useSafeLayoutEffect(() => {\n setActiveSlideIndex(startSlide);\n onSlideChange?.(startSlide);\n\n if (shiftState.animation !== undefined) {\n setShiftState((prevState) => ({\n ...prevState,\n animation: true,\n }));\n }\n }, [startSlide]);\n\n const setMotion = (value: Partial<Motion>) => {\n Object.assign<Motion, Partial<Motion>>(motion.current, value);\n };\n\n const now = () => (typeof performance !== \"undefined\" ? performance.now() : Date.now());\n\n const goToSlide = (index: number) => {\n const target = clamp(index, 0, maxShift);\n\n setActiveSlideIndex(target);\n setShiftState((prevState) => ({ ...prevState, animation: true }));\n onSlideChange?.(target);\n };\n\n const moveFullscreen = (direction: 1 | -1) => {\n setFullscreenIndex((prev) => (prev === null ? prev : (prev + direction + slidesCount) % slidesCount));\n };\n\n const fullscreenTouchX = useRef<number | null>(null);\n\n const detachListeners = (isMouse: boolean) => {\n if (!trackRef.current) {\n return;\n }\n\n trackRef.current.removeEventListener(isMouse ? \"mousemove\" : \"touchmove\", onMove);\n trackRef.current.removeEventListener(isMouse ? \"mouseup\" : \"touchend\", onEnd);\n\n if (isMouse) {\n trackRef.current.removeEventListener(\"mouseleave\", onEnd);\n }\n };\n\n const onStart = useEventCallback((event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => {\n if (!trackRef.current) {\n return;\n }\n\n const isMouse = isMouseEvent(event);\n\n if (isMouse && event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n\n const clientX = coordX(event);\n const clientY = coordY(event);\n\n setMotion({\n isPressed: true,\n startX: clientX,\n startY: clientY,\n lastX: clientX,\n lastT: now(),\n axis: null,\n dragged: false,\n });\n\n trackRef.current.addEventListener(isMouse ? \"mousemove\" : \"touchmove\", onMove, { passive: false });\n trackRef.current.addEventListener(isMouse ? \"mouseup\" : \"touchend\", onEnd);\n\n if (isMouse) {\n trackRef.current.addEventListener(\"mouseleave\", onEnd);\n }\n });\n\n const onMove = useEventCallback((event: MouseEvent | TouchEvent) => {\n if (!rootRef.current || !motion.current.isPressed) {\n return;\n }\n\n if (isTouchEvent(event) && event.touches.length > 1) {\n return onEnd(event);\n }\n\n const clientX = coordX(event);\n const clientY = coordY(event);\n const shiftX = clientX - motion.current.startX;\n const shiftY = clientY - motion.current.startY;\n\n // Lock the gesture axis once the pointer has moved past the tap threshold.\n if (motion.current.axis === null) {\n if (Math.abs(shiftX) < TAP_THRESHOLD && Math.abs(shiftY) < TAP_THRESHOLD) {\n return;\n }\n\n const axis: Axis = Math.abs(shiftX) >= Math.abs(shiftY) ? \"x\" : \"y\";\n setMotion({ axis, dragged: true });\n\n // Vertical intent → release so the page can scroll.\n if (axis === \"y\") {\n return onEnd(event);\n }\n\n if (slidesCount > 1) {\n setIsDragging(true);\n }\n }\n\n if (motion.current.axis !== \"x\") {\n return;\n }\n\n // Horizontal drag: keep the gesture and follow the finger.\n event.preventDefault();\n event.stopPropagation();\n\n if (slidesCount > 1) {\n const atStart = activeSlideIndex <= 0;\n const atEnd = activeSlideIndex >= maxShift;\n // Add resistance when dragging beyond the first / last slide.\n const offset = (atStart && shiftX > 0) || (atEnd && shiftX < 0) ? shiftX * 0.35 : shiftX;\n setDragPx(offset);\n }\n\n motion.current.lastX = clientX;\n motion.current.lastT = now();\n });\n\n const onEnd = useEventCallback((event: MouseEvent | TouchEvent) => {\n if (!motion.current.isPressed) {\n return;\n }\n\n const isMouse = isMouseEvent(event);\n detachListeners(isMouse);\n\n const { axis, dragged, startX, lastX, lastT } = motion.current;\n setMotion({ isPressed: false });\n setIsDragging(false);\n\n if (axis === \"x\" && dragged && slidesCount > 1 && rootRef.current) {\n const clientX = coordX(event);\n const totalShift = clientX - startX;\n const widthPerSlide = rootRef.current.offsetWidth / slidesToShow;\n const velocity = lastT ? (clientX - lastX) / Math.max(1, now() - lastT) : 0;\n\n let movedSlides = widthPerSlide > 0 ? Math.round(-totalShift / widthPerSlide) : 0;\n\n if (movedSlides === 0 && Math.abs(velocity) > FLICK_VELOCITY) {\n movedSlides = velocity < 0 ? 1 : -1;\n }\n\n goToSlide(activeSlideIndex + movedSlides);\n }\n\n // Animate back to the resting position (snap / snap-back).\n setDragPx(0);\n });\n\n const onSlideClick = (index: number) => () => {\n // Suppress the click that fires at the end of a drag.\n if (motion.current.dragged) {\n return;\n }\n\n if (enableFullscreen) {\n setFullscreenIndex(index);\n }\n };\n\n const onNavigationItemClick = (index: number) => () => goToSlide(index);\n\n const getNextIndex = (direction: 1 | -1) => {\n const isSingleSlide = slidesToShow === 1;\n const totalGroups = isSingleSlide ? slidesCount : Math.ceil(slidesCount / slidesToShow);\n const activeIndex = activeSlideIndex + slidesToShow;\n const isNextSlideDisabled = slidesCount - slidesToShow <= activeSlideIndex;\n\n const currentIndex = getSlideIndexForMultipleParts(activeIndex, slidesToShow, slidesCount, isNextSlideDisabled);\n const nextIndex = (currentIndex + direction + totalGroups) % totalGroups;\n\n return isSingleSlide ? nextIndex : nextIndex * slidesToShow;\n };\n\n const getNavigation = () => {\n if (!showNavigation) {\n return <></>;\n }\n\n const isNextSlideDisabled = slidesCount - slidesToShow <= activeSlideIndex;\n const isSinglePartSlide = slidesToShow === 1;\n const count = isSinglePartSlide ? slidesCount : Math.ceil(slidesCount / slidesToShow);\n const indicators: React.ReactNode[] = [];\n\n for (let index = 0; index < count; index++) {\n let nextIndex = index;\n let currentIndex = activeSlideIndex;\n\n if (!isSinglePartSlide) {\n const isLast = index === count - 1;\n const activeIndex = activeSlideIndex + slidesToShow;\n\n nextIndex = isLast ? slidesCount - slidesToShow : index * slidesToShow;\n currentIndex = getSlideIndexForMultipleParts(activeIndex, slidesToShow, slidesCount, isNextSlideDisabled);\n }\n\n const isActive = currentIndex === index;\n const onClick = onNavigationItemClick(nextIndex);\n\n let indicator: ReactNode = (\n <div key={index} className={cn(\"smwb-carousel__navigation__dot\", isActive && \"current\")} onClick={onClick} />\n );\n\n if (navigationDotRenderer) {\n indicator = navigationDotRenderer(index, isActive, onClick);\n }\n\n indicators.push(indicator);\n }\n\n return <div className={cn(\"smwb-carousel__navigation\", navigationClassName)}>{indicators}</div>;\n };\n\n const getIndent = () => {\n const shiftSlides = activeSlideIndex > maxShift ? maxShift : activeSlideIndex;\n\n return getSlideWidth(slidesToShow) * shiftSlides;\n };\n\n const slideId = useId();\n const slideStyle = getSlideStyle(slidesToShow);\n\n const indent = getIndent();\n\n const layerStyle: React.CSSProperties = {\n transform: `translateX(calc(-${indent}% + ${dragPx}px))`,\n transition:\n isDragging || shiftState.animation === undefined\n ? \"none\"\n : shiftState.animation\n ? \"transform 500ms cubic-bezier(.1, 0, .25, 1)\"\n : \"none\",\n };\n\n const rootStyle: React.CSSProperties = {};\n const cellHeightValue = toCssLength(cellHeight);\n const aspectRatioValue = toCssNumber(aspectRatio);\n const gapValue = toCssLength(gap);\n const maxWidthValue = toCssLength(maxWidth);\n if (cellHeightValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-cell-height\"] = cellHeightValue;\n if (aspectRatioValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-aspect-ratio\"] = aspectRatioValue;\n if (gapValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-gap\"] = gapValue;\n if (maxWidthValue) (rootStyle as Record<string, string>)[\"--smwb-carousel-max-width\"] = maxWidthValue;\n\n React.useEffect(() => {\n if (!Array.isArray(children)) {\n console.error(\"SMWB Material: The `children` prop was passed invalidly. It should contain an array of elements.\");\n }\n }, [children]);\n\n useEffect(() => {\n if (!autoplay || slidesCount <= 1 || (pauseOnHover && isHovered) || fullscreenIndex !== null) {\n return;\n }\n const timer = window.setInterval(() => {\n onNavigationItemClick(getNextIndex(1))();\n }, autoplayInterval);\n\n return () => window.clearInterval(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n autoplay,\n autoplayInterval,\n pauseOnHover,\n isHovered,\n slidesCount,\n activeSlideIndex,\n slidesToShow,\n fullscreenIndex,\n ]);\n\n useEffect(() => {\n if (fullscreenIndex === null || slidesCount <= 1) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n moveFullscreen(-1);\n } else if (event.key === \"ArrowRight\") {\n moveFullscreen(1);\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fullscreenIndex, slidesCount]);\n\n if (!Array.isArray(children)) {\n return <></>;\n }\n\n const childrenArray = children as ReactNode[];\n\n const onFullscreenTouchStart = (event: React.TouchEvent) => {\n fullscreenTouchX.current = event.touches[0]?.clientX ?? null;\n };\n\n const onFullscreenTouchMove = (event: React.TouchEvent) => {\n if (fullscreenTouchX.current === null || slidesCount <= 1) {\n return;\n }\n const delta = (event.touches[0]?.clientX ?? fullscreenTouchX.current) - fullscreenTouchX.current;\n setIsFullscreenDragging(true);\n setFullscreenDragPx(delta);\n };\n\n const onFullscreenTouchEnd = (event: React.TouchEvent) => {\n const startX = fullscreenTouchX.current;\n fullscreenTouchX.current = null;\n setIsFullscreenDragging(false);\n setFullscreenDragPx(0);\n\n if (startX === null || slidesCount <= 1) {\n return;\n }\n const delta = (event.changedTouches[0]?.clientX ?? startX) - startX;\n if (Math.abs(delta) > 40) {\n moveFullscreen(delta < 0 ? 1 : -1);\n }\n };\n\n const fullscreenTrackStyle: React.CSSProperties = {\n transform: `translateX(calc(-${(fullscreenIndex ?? 0) * 100}% + ${fullscreenDragPx}px))`,\n transition: isFullscreenDragging ? \"none\" : \"transform 350ms cubic-bezier(.22, .61, .36, 1)\",\n };\n\n return (\n <div\n className={cn(\"smwb-carousel\", className)}\n data-testid=\"carousel\"\n ref={forkedOuterRef}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n style={rootStyle}\n onMouseEnter={pauseOnHover ? () => setIsHovered(true) : undefined}\n onMouseLeave={pauseOnHover ? () => setIsHovered(false) : undefined}\n >\n <div className={cn(\"smwb-carousel__inner\")} ref={rootRef}>\n {showArrows && (\n <Icon\n name=\"chevron_left\"\n size={arrowsSize}\n className={cn(\"smwb-carousel__arrow\", \"smwb-carousel__arrow_prev\")}\n style={{\n top: `calc(50% - ${arrowsSize / 2}px)`,\n left: -arrowsSize / 2,\n }}\n onClick={() => onNavigationItemClick(getNextIndex(-1))()}\n />\n )}\n <div\n ref={trackRef}\n className=\"smwb-carousel__track\"\n onMouseDown={onStart}\n onTouchStart={onStart}\n onDragStart={dragPrevent}\n onDragEnd={dragPrevent}\n >\n <div className=\"smwb-carousel__layer\" style={layerStyle}>\n {React.Children.map(children, (child, index) => (\n <div key={index} id={`${slideId}${index}`} className=\"smwb-carousel__slide\" style={slideStyle}>\n <div\n className={cn(\n \"smwb-carousel__slide-inner\",\n enableFullscreen && \"smwb-carousel__slide-inner_clickable\"\n )}\n onClick={enableFullscreen ? onSlideClick(index) : undefined}\n >\n {child}\n </div>\n </div>\n ))}\n </div>\n </div>\n {showArrows && (\n <Icon\n name=\"chevron_right\"\n size={arrowsSize}\n className={cn(\"smwb-carousel__arrow\", \"smwb-carousel__arrow_next\")}\n style={{\n top: `calc(50% - ${arrowsSize / 2}px)`,\n right: -arrowsSize / 2,\n }}\n onClick={() => onNavigationItemClick(getNextIndex(1))()}\n />\n )}\n </div>\n {getNavigation()}\n {enableFullscreen && (\n <Modal\n open={fullscreenIndex !== null}\n size=\"fullscreen\"\n backdrop=\"darkBlured\"\n className=\"smwb-carousel__fullscreen\"\n onClose={() => setFullscreenIndex(null)}\n aria-label=\"Image viewer\"\n >\n {fullscreenIndex !== null && (\n <div className=\"smwb-carousel__fullscreen-content\">\n {slidesCount > 1 && (\n <Icon\n name=\"chevron_left\"\n size={40}\n className={cn(\"smwb-carousel__fullscreen-arrow\", \"smwb-carousel__fullscreen-arrow_prev\")}\n onClick={() => moveFullscreen(-1)}\n />\n )}\n <div\n className=\"smwb-carousel__fullscreen-stage\"\n onTouchStart={onFullscreenTouchStart}\n onTouchMove={onFullscreenTouchMove}\n onTouchEnd={onFullscreenTouchEnd}\n >\n <div className=\"smwb-carousel__fullscreen-track\" style={fullscreenTrackStyle}>\n {childrenArray.map((child, index) => (\n <div\n key={index}\n className=\"smwb-carousel__fullscreen-slide\"\n aria-hidden={index !== fullscreenIndex}\n >\n {child}\n </div>\n ))}\n </div>\n </div>\n {slidesCount > 1 && (\n <Icon\n name=\"chevron_right\"\n size={40}\n className={cn(\"smwb-carousel__fullscreen-arrow\", \"smwb-carousel__fullscreen-arrow_next\")}\n onClick={() => moveFullscreen(1)}\n />\n )}\n <Icon\n name=\"close\"\n size={32}\n className=\"smwb-carousel__fullscreen-close\"\n onClick={() => setFullscreenIndex(null)}\n />\n </div>\n )}\n </Modal>\n )}\n </div>\n );\n});\n\nexport default Carousel;\n"],"names":["MOTION_INITIAL_STATE","TAP_THRESHOLD","FLICK_VELOCITY","Carousel","forwardRef","slidesToShowProp","startSlideProp","children","className","showNavigation","showArrowsProp","arrowsSize","navigationClassName","onSlideChange","navigationDotRenderer","ariaLabel","autoplay","autoplayInterval","pauseOnHover","cellHeight","aspectRatio","gap","maxWidth","enableFullscreen","ref","slidesCount","React","slidesToShow","getSlidesToShow","startSlide","getStartSlide","showArrows","maxShift","activeSlideIndex","setActiveSlideIndex","useState","shiftState","setShiftState","dragPx","setDragPx","isDragging","setIsDragging","fullscreenIndex","setFullscreenIndex","fullscreenDragPx","setFullscreenDragPx","isFullscreenDragging","setIsFullscreenDragging","rootRef","useRef","outerRef","forkedOuterRef","useForkRef","trackRef","isHovered","setIsHovered","motion","useSafeLayoutEffect","prevState","setMotion","value","now","goToSlide","index","target","clamp","moveFullscreen","direction","prev","fullscreenTouchX","detachListeners","isMouse","onMove","onEnd","onStart","useEventCallback","event","isMouseEvent","clientX","coordX","clientY","coordY","isTouchEvent","shiftX","shiftY","axis","atStart","atEnd","offset","dragged","startX","lastX","lastT","totalShift","widthPerSlide","velocity","movedSlides","onSlideClick","onNavigationItemClick","getNextIndex","isSingleSlide","totalGroups","activeIndex","isNextSlideDisabled","nextIndex","getSlideIndexForMultipleParts","getNavigation","jsx","Fragment","isSinglePartSlide","count","indicators","currentIndex","isLast","isActive","onClick","indicator","cn","getIndent","shiftSlides","getSlideWidth","slideId","useId","slideStyle","getSlideStyle","layerStyle","rootStyle","cellHeightValue","toCssLength","aspectRatioValue","toCssNumber","gapValue","maxWidthValue","useEffect","timer","onKeyDown","childrenArray","onFullscreenTouchStart","_b","_a","onFullscreenTouchMove","delta","onFullscreenTouchEnd","fullscreenTrackStyle","jsxs","Icon","dragPrevent","child","Modal"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { jsx as a, Fragment as ie, jsxs as j } from "react/jsx-runtime";
2
- import O, { forwardRef as Oe, useState as x, useRef as T, useId as ze, useEffect as ue } from "react";
3
- import m from "clsx";
4
- import { useForkRef as Be } from "../../../hooks/useForkRef.js";
5
- import { dragPrevent as de, getStartSlide as He, getSlidesToShow as Ke, isMouseEvent as fe, coordX as z, coordY as me, getSlideStyle as Ge, isTouchEvent as qe, getSlideWidth as Je, clamp as Qe, toCssLength as B, toCssNumber as Ue, getSlideIndexForMultipleParts as he } from "./utils.js";
6
- import { useSafeLayoutEffect as _e } from "../../../hooks/useSafeLayoutEffect.js";
1
+ import { jsx as a, Fragment as de, jsxs as j } from "react/jsx-runtime";
2
+ import z, { forwardRef as qe, useState as _, useRef as N, useId as Je, useEffect as fe } from "react";
3
+ import h from "clsx";
4
+ import { useForkRef as Qe } from "../../../hooks/useForkRef.js";
5
+ import { dragPrevent as me, getStartSlide as Ue, getSlidesToShow as Ze, isMouseEvent as he, coordX as O, coordY as _e, getSlideStyle as et, isTouchEvent as tt, getSlideWidth as st, clamp as rt, toCssLength as B, toCssNumber as nt, getSlideIndexForMultipleParts as we } from "./utils.js";
6
+ import { useSafeLayoutEffect as ge } from "../../../hooks/useSafeLayoutEffect.js";
7
7
  import { useEventCallback as H } from "../../../hooks/useEventCallback.js";
8
- import { Icon as E } from "../../base/icon/icon.js";
9
- import { Modal as Ze } from "../../feedBack/modal/modal.js";
10
- const et = {
8
+ import { Icon as M } from "../../base/icon/icon.js";
9
+ import { Modal as ot } from "../../feedBack/modal/modal.js";
10
+ const ct = {
11
11
  isPressed: !1,
12
12
  startX: 0,
13
13
  startY: 0,
@@ -15,272 +15,291 @@ const et = {
15
15
  lastT: 0,
16
16
  axis: null,
17
17
  dragged: !1
18
- }, we = 8, tt = 0.4, mt = Oe(function({
19
- slidesToShow: ve = 3,
20
- startSlide: ge = 0,
21
- children: w,
22
- className: be,
23
- showNavigation: xe = !0,
24
- showArrows: pe,
18
+ }, ve = 8, at = 0.4, bt = qe(function({
19
+ slidesToShow: be = 3,
20
+ startSlide: xe = 0,
21
+ children: g,
22
+ className: pe,
23
+ showNavigation: Se = !0,
24
+ showArrows: ye,
25
25
  arrowsSize: v = 30,
26
- navigationClassName: Se,
27
- onSlideChange: g,
26
+ navigationClassName: Ie,
27
+ onSlideChange: b,
28
28
  navigationDotRenderer: K,
29
- "aria-label": Ie = "Carousel",
29
+ "aria-label": Te = "Carousel",
30
30
  autoplay: G = !1,
31
31
  autoplayInterval: q = 4e3,
32
- pauseOnHover: M = !0,
33
- cellHeight: ye,
34
- aspectRatio: Ne,
35
- gap: Te,
32
+ pauseOnHover: k = !0,
33
+ cellHeight: Ne,
34
+ aspectRatio: Me,
35
+ gap: ke,
36
36
  maxWidth: Ee,
37
- enableFullscreen: k = !1
38
- }, Me) {
39
- const s = O.Children.count(w), n = Ke(ve, s), L = He(ge, s), J = pe && s > 1, X = Math.max(0, s - n), [l, Q] = x(L), [Y, $] = x({
37
+ enableFullscreen: E = !1
38
+ }, Xe) {
39
+ const s = z.Children.count(g), o = Ze(be, s), X = Ue(xe, s), J = ye && s > 1, L = Math.max(0, s - o), [l, Q] = _(X), [F, Y] = _({
40
40
  animation: void 0
41
- }), [ke, U] = x(0), [Le, Z] = x(!1), [h, A] = x(null), P = T(null), Xe = T(null), Ae = Be(Me, Xe), f = T(null), [ee, te] = x(!1), i = T({ ...et });
42
- _e(() => {
43
- $((e) => ({
41
+ }), [Le, U] = _(0), [Pe, Z] = _(!1), [u, P] = _(null), [De, ee] = _(0), [Ae, te] = _(!1), D = N(null), Ce = N(null), Re = Qe(Xe, Ce), m = N(null), [se, re] = _(!1), i = N({ ...ct });
42
+ ge(() => {
43
+ Y((e) => ({
44
44
  ...e,
45
45
  animation: !1
46
46
  }));
47
- }, [n]), _e(() => {
48
- Q(L), g == null || g(L), Y.animation !== void 0 && $((e) => ({
47
+ }, [o]), ge(() => {
48
+ Q(X), b == null || b(X), F.animation !== void 0 && Y((e) => ({
49
49
  ...e,
50
50
  animation: !0
51
51
  }));
52
- }, [L]);
53
- const F = (e) => {
52
+ }, [X]);
53
+ const $ = (e) => {
54
54
  Object.assign(i.current, e);
55
- }, V = () => typeof performance != "undefined" ? performance.now() : Date.now(), se = (e) => {
56
- const t = Qe(e, 0, X);
57
- Q(t), $((r) => ({ ...r, animation: !0 })), g == null || g(t);
58
- }, p = (e) => {
59
- A((t) => t === null ? t : (t + e + s) % s);
60
- }, S = T(null), Pe = (e) => {
61
- f.current && (f.current.removeEventListener(e ? "mousemove" : "touchmove", ne), f.current.removeEventListener(e ? "mouseup" : "touchend", b), e && f.current.removeEventListener("mouseleave", b));
62
- }, re = H((e) => {
63
- if (!f.current)
55
+ }, V = () => typeof performance != "undefined" ? performance.now() : Date.now(), ne = (e) => {
56
+ const t = rt(e, 0, L);
57
+ Q(t), Y((r) => ({ ...r, animation: !0 })), b == null || b(t);
58
+ }, S = (e) => {
59
+ P((t) => t === null ? t : (t + e + s) % s);
60
+ }, x = N(null), Fe = (e) => {
61
+ m.current && (m.current.removeEventListener(e ? "mousemove" : "touchmove", ce), m.current.removeEventListener(e ? "mouseup" : "touchend", p), e && m.current.removeEventListener("mouseleave", p));
62
+ }, oe = H((e) => {
63
+ if (!m.current)
64
64
  return;
65
- const t = fe(e);
65
+ const t = he(e);
66
66
  if (t && e.button !== 0)
67
67
  return;
68
68
  e.stopPropagation();
69
- const r = z(e), o = me(e);
70
- F({
69
+ const r = O(e), n = _e(e);
70
+ $({
71
71
  isPressed: !0,
72
72
  startX: r,
73
- startY: o,
73
+ startY: n,
74
74
  lastX: r,
75
75
  lastT: V(),
76
76
  axis: null,
77
77
  dragged: !1
78
- }), f.current.addEventListener(t ? "mousemove" : "touchmove", ne, { passive: !1 }), f.current.addEventListener(t ? "mouseup" : "touchend", b), t && f.current.addEventListener("mouseleave", b);
79
- }), ne = H((e) => {
80
- if (!P.current || !i.current.isPressed)
78
+ }), m.current.addEventListener(t ? "mousemove" : "touchmove", ce, { passive: !1 }), m.current.addEventListener(t ? "mouseup" : "touchend", p), t && m.current.addEventListener("mouseleave", p);
79
+ }), ce = H((e) => {
80
+ if (!D.current || !i.current.isPressed)
81
81
  return;
82
- if (qe(e) && e.touches.length > 1)
83
- return b(e);
84
- const t = z(e), r = me(e), o = t - i.current.startX, c = r - i.current.startY;
82
+ if (tt(e) && e.touches.length > 1)
83
+ return p(e);
84
+ const t = O(e), r = _e(e), n = t - i.current.startX, c = r - i.current.startY;
85
85
  if (i.current.axis === null) {
86
- if (Math.abs(o) < we && Math.abs(c) < we)
86
+ if (Math.abs(n) < ve && Math.abs(c) < ve)
87
87
  return;
88
- const u = Math.abs(o) >= Math.abs(c) ? "x" : "y";
89
- if (F({ axis: u, dragged: !0 }), u === "y")
90
- return b(e);
88
+ const d = Math.abs(n) >= Math.abs(c) ? "x" : "y";
89
+ if ($({ axis: d, dragged: !0 }), d === "y")
90
+ return p(e);
91
91
  s > 1 && Z(!0);
92
92
  }
93
93
  if (i.current.axis === "x") {
94
94
  if (e.preventDefault(), e.stopPropagation(), s > 1) {
95
- const u = l <= 0, d = l >= X, _ = u && o > 0 || d && o < 0 ? o * 0.35 : o;
96
- U(_);
95
+ const d = l <= 0, f = l >= L, w = d && n > 0 || f && n < 0 ? n * 0.35 : n;
96
+ U(w);
97
97
  }
98
98
  i.current.lastX = t, i.current.lastT = V();
99
99
  }
100
- }), b = H((e) => {
100
+ }), p = H((e) => {
101
101
  if (!i.current.isPressed)
102
102
  return;
103
- const t = fe(e);
104
- Pe(t);
105
- const { axis: r, dragged: o, startX: c, lastX: u, lastT: d } = i.current;
106
- if (F({ isPressed: !1 }), Z(!1), r === "x" && o && s > 1 && P.current) {
107
- const _ = z(e), D = _ - c, y = P.current.offsetWidth / n, R = d ? (_ - u) / Math.max(1, V() - d) : 0;
108
- let N = y > 0 ? Math.round(-D / y) : 0;
109
- N === 0 && Math.abs(R) > tt && (N = R < 0 ? 1 : -1), se(l + N);
103
+ const t = he(e);
104
+ Fe(t);
105
+ const { axis: r, dragged: n, startX: c, lastX: d, lastT: f } = i.current;
106
+ if ($({ isPressed: !1 }), Z(!1), r === "x" && n && s > 1 && D.current) {
107
+ const w = O(e), C = w - c, I = D.current.offsetWidth / o, R = f ? (w - d) / Math.max(1, V() - f) : 0;
108
+ let T = I > 0 ? Math.round(-C / I) : 0;
109
+ T === 0 && Math.abs(R) > at && (T = R < 0 ? 1 : -1), ne(l + T);
110
110
  }
111
111
  U(0);
112
- }), Ce = (e) => () => {
113
- i.current.dragged || k && A(e);
114
- }, C = (e) => () => se(e), W = (e) => {
115
- const t = n === 1, r = t ? s : Math.ceil(s / n), o = l + n, c = s - n <= l, d = (he(o, n, s, c) + e + r) % r;
116
- return t ? d : d * n;
117
- }, De = () => {
118
- if (!xe)
119
- return /* @__PURE__ */ a(ie, {});
120
- const e = s - n <= l, t = n === 1, r = t ? s : Math.ceil(s / n), o = [];
112
+ }), Ye = (e) => () => {
113
+ i.current.dragged || E && P(e);
114
+ }, A = (e) => () => ne(e), W = (e) => {
115
+ const t = o === 1, r = t ? s : Math.ceil(s / o), n = l + o, c = s - o <= l, f = (we(n, o, s, c) + e + r) % r;
116
+ return t ? f : f * o;
117
+ }, $e = () => {
118
+ if (!Se)
119
+ return /* @__PURE__ */ a(de, {});
120
+ const e = s - o <= l, t = o === 1, r = t ? s : Math.ceil(s / o), n = [];
121
121
  for (let c = 0; c < r; c++) {
122
- let u = c, d = l;
122
+ let d = c, f = l;
123
123
  if (!t) {
124
- const R = c === r - 1, N = l + n;
125
- u = R ? s - n : c * n, d = he(N, n, s, e);
124
+ const R = c === r - 1, T = l + o;
125
+ d = R ? s - o : c * o, f = we(T, o, s, e);
126
126
  }
127
- const _ = d === c, D = C(u);
128
- let y = /* @__PURE__ */ a("div", { className: m("smwb-carousel__navigation__dot", _ && "current"), onClick: D }, c);
129
- K && (y = K(c, _, D)), o.push(y);
127
+ const w = f === c, C = A(d);
128
+ let I = /* @__PURE__ */ a("div", { className: h("smwb-carousel__navigation__dot", w && "current"), onClick: C }, c);
129
+ K && (I = K(c, w, C)), n.push(I);
130
130
  }
131
- return /* @__PURE__ */ a("div", { className: m("smwb-carousel__navigation", Se), children: o });
132
- }, Re = () => {
133
- const e = l > X ? X : l;
134
- return Je(n) * e;
135
- }, Ye = ze(), $e = Ge(n), Fe = {
136
- transform: `translateX(calc(-${Re()}% + ${ke}px))`,
137
- transition: Le || Y.animation === void 0 ? "none" : Y.animation ? "transform 500ms cubic-bezier(.1, 0, .25, 1)" : "none"
138
- }, I = {}, oe = B(ye), ce = Ue(Ne), ae = B(Te), le = B(Ee);
139
- if (oe && (I["--smwb-carousel-cell-height"] = oe), ce && (I["--smwb-carousel-aspect-ratio"] = ce), ae && (I["--smwb-carousel-gap"] = ae), le && (I["--smwb-carousel-max-width"] = le), O.useEffect(() => {
140
- Array.isArray(w) || console.error("SMWB Material: The `children` prop was passed invalidly. It should contain an array of elements.");
141
- }, [w]), ue(() => {
142
- if (!G || s <= 1 || M && ee || h !== null)
131
+ return /* @__PURE__ */ a("div", { className: h("smwb-carousel__navigation", Ie), children: n });
132
+ }, Ve = () => {
133
+ const e = l > L ? L : l;
134
+ return st(o) * e;
135
+ }, We = Je(), je = et(o), ze = {
136
+ transform: `translateX(calc(-${Ve()}% + ${Le}px))`,
137
+ transition: Pe || F.animation === void 0 ? "none" : F.animation ? "transform 500ms cubic-bezier(.1, 0, .25, 1)" : "none"
138
+ }, y = {}, ae = B(Ne), le = nt(Me), ie = B(ke), ue = B(Ee);
139
+ if (ae && (y["--smwb-carousel-cell-height"] = ae), le && (y["--smwb-carousel-aspect-ratio"] = le), ie && (y["--smwb-carousel-gap"] = ie), ue && (y["--smwb-carousel-max-width"] = ue), z.useEffect(() => {
140
+ Array.isArray(g) || console.error("SMWB Material: The `children` prop was passed invalidly. It should contain an array of elements.");
141
+ }, [g]), fe(() => {
142
+ if (!G || s <= 1 || k && se || u !== null)
143
143
  return;
144
144
  const e = window.setInterval(() => {
145
- C(W(1))();
145
+ A(W(1))();
146
146
  }, q);
147
147
  return () => window.clearInterval(e);
148
148
  }, [
149
149
  G,
150
150
  q,
151
- M,
152
- ee,
151
+ k,
152
+ se,
153
153
  s,
154
154
  l,
155
- n,
156
- h
157
- ]), ue(() => {
158
- if (h === null || s <= 1)
155
+ o,
156
+ u
157
+ ]), fe(() => {
158
+ if (u === null || s <= 1)
159
159
  return;
160
160
  const e = (t) => {
161
- t.key === "ArrowLeft" ? p(-1) : t.key === "ArrowRight" && p(1);
161
+ t.key === "ArrowLeft" ? S(-1) : t.key === "ArrowRight" && S(1);
162
162
  };
163
163
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
164
- }, [h, s]), !Array.isArray(w))
165
- return /* @__PURE__ */ a(ie, {});
166
- const Ve = w, We = (e) => {
164
+ }, [u, s]), !Array.isArray(g))
165
+ return /* @__PURE__ */ a(de, {});
166
+ const Oe = g, Be = (e) => {
167
167
  var t, r;
168
- S.current = (r = (t = e.touches[0]) == null ? void 0 : t.clientX) != null ? r : null;
169
- }, je = (e) => {
170
- var r, o;
171
- if (S.current === null || s <= 1)
168
+ x.current = (r = (t = e.touches[0]) == null ? void 0 : t.clientX) != null ? r : null;
169
+ }, He = (e) => {
170
+ var r, n;
171
+ if (x.current === null || s <= 1)
172
172
  return;
173
- const t = ((o = (r = e.changedTouches[0]) == null ? void 0 : r.clientX) != null ? o : S.current) - S.current;
174
- S.current = null, Math.abs(t) > 40 && p(t < 0 ? 1 : -1);
173
+ const t = ((n = (r = e.touches[0]) == null ? void 0 : r.clientX) != null ? n : x.current) - x.current;
174
+ te(!0), ee(t);
175
+ }, Ke = (e) => {
176
+ var n, c;
177
+ const t = x.current;
178
+ if (x.current = null, te(!1), ee(0), t === null || s <= 1)
179
+ return;
180
+ const r = ((c = (n = e.changedTouches[0]) == null ? void 0 : n.clientX) != null ? c : t) - t;
181
+ Math.abs(r) > 40 && S(r < 0 ? 1 : -1);
182
+ }, Ge = {
183
+ transform: `translateX(calc(-${(u != null ? u : 0) * 100}% + ${De}px))`,
184
+ transition: Ae ? "none" : "transform 350ms cubic-bezier(.22, .61, .36, 1)"
175
185
  };
176
186
  return /* @__PURE__ */ j(
177
187
  "div",
178
188
  {
179
- className: m("smwb-carousel", be),
189
+ className: h("smwb-carousel", pe),
180
190
  "data-testid": "carousel",
181
- ref: Ae,
191
+ ref: Re,
182
192
  role: "region",
183
193
  "aria-roledescription": "carousel",
184
- "aria-label": Ie,
185
- style: I,
186
- onMouseEnter: M ? () => te(!0) : void 0,
187
- onMouseLeave: M ? () => te(!1) : void 0,
194
+ "aria-label": Te,
195
+ style: y,
196
+ onMouseEnter: k ? () => re(!0) : void 0,
197
+ onMouseLeave: k ? () => re(!1) : void 0,
188
198
  children: [
189
- /* @__PURE__ */ j("div", { className: m("smwb-carousel__inner"), ref: P, children: [
199
+ /* @__PURE__ */ j("div", { className: h("smwb-carousel__inner"), ref: D, children: [
190
200
  J && /* @__PURE__ */ a(
191
- E,
201
+ M,
192
202
  {
193
203
  name: "chevron_left",
194
204
  size: v,
195
- className: m("smwb-carousel__arrow", "smwb-carousel__arrow_prev"),
205
+ className: h("smwb-carousel__arrow", "smwb-carousel__arrow_prev"),
196
206
  style: {
197
207
  top: `calc(50% - ${v / 2}px)`,
198
208
  left: -v / 2
199
209
  },
200
- onClick: () => C(W(-1))()
210
+ onClick: () => A(W(-1))()
201
211
  }
202
212
  ),
203
213
  /* @__PURE__ */ a(
204
214
  "div",
205
215
  {
206
- ref: f,
216
+ ref: m,
207
217
  className: "smwb-carousel__track",
208
- onMouseDown: re,
209
- onTouchStart: re,
210
- onDragStart: de,
211
- onDragEnd: de,
212
- children: /* @__PURE__ */ a("div", { className: "smwb-carousel__layer", style: Fe, children: O.Children.map(w, (e, t) => /* @__PURE__ */ a("div", { id: `${Ye}${t}`, className: "smwb-carousel__slide", style: $e, children: /* @__PURE__ */ a(
218
+ onMouseDown: oe,
219
+ onTouchStart: oe,
220
+ onDragStart: me,
221
+ onDragEnd: me,
222
+ children: /* @__PURE__ */ a("div", { className: "smwb-carousel__layer", style: ze, children: z.Children.map(g, (e, t) => /* @__PURE__ */ a("div", { id: `${We}${t}`, className: "smwb-carousel__slide", style: je, children: /* @__PURE__ */ a(
213
223
  "div",
214
224
  {
215
- className: m(
225
+ className: h(
216
226
  "smwb-carousel__slide-inner",
217
- k && "smwb-carousel__slide-inner_clickable"
227
+ E && "smwb-carousel__slide-inner_clickable"
218
228
  ),
219
- onClick: k ? Ce(t) : void 0,
229
+ onClick: E ? Ye(t) : void 0,
220
230
  children: e
221
231
  }
222
232
  ) }, t)) })
223
233
  }
224
234
  ),
225
235
  J && /* @__PURE__ */ a(
226
- E,
236
+ M,
227
237
  {
228
238
  name: "chevron_right",
229
239
  size: v,
230
- className: m("smwb-carousel__arrow", "smwb-carousel__arrow_next"),
240
+ className: h("smwb-carousel__arrow", "smwb-carousel__arrow_next"),
231
241
  style: {
232
242
  top: `calc(50% - ${v / 2}px)`,
233
243
  right: -v / 2
234
244
  },
235
- onClick: () => C(W(1))()
245
+ onClick: () => A(W(1))()
236
246
  }
237
247
  )
238
248
  ] }),
239
- De(),
240
- k && /* @__PURE__ */ a(
241
- Ze,
249
+ $e(),
250
+ E && /* @__PURE__ */ a(
251
+ ot,
242
252
  {
243
- open: h !== null,
253
+ open: u !== null,
244
254
  size: "fullscreen",
245
255
  backdrop: "darkBlured",
246
256
  className: "smwb-carousel__fullscreen",
247
- onClose: () => A(null),
257
+ onClose: () => P(null),
248
258
  "aria-label": "Image viewer",
249
- children: h !== null && /* @__PURE__ */ j("div", { className: "smwb-carousel__fullscreen-content", children: [
259
+ children: u !== null && /* @__PURE__ */ j("div", { className: "smwb-carousel__fullscreen-content", children: [
250
260
  s > 1 && /* @__PURE__ */ a(
251
- E,
261
+ M,
252
262
  {
253
263
  name: "chevron_left",
254
264
  size: 40,
255
- className: m("smwb-carousel__fullscreen-arrow", "smwb-carousel__fullscreen-arrow_prev"),
256
- onClick: () => p(-1)
265
+ className: h("smwb-carousel__fullscreen-arrow", "smwb-carousel__fullscreen-arrow_prev"),
266
+ onClick: () => S(-1)
257
267
  }
258
268
  ),
259
269
  /* @__PURE__ */ a(
260
270
  "div",
261
271
  {
262
272
  className: "smwb-carousel__fullscreen-stage",
263
- onTouchStart: We,
264
- onTouchEnd: je,
265
- children: Ve[h]
273
+ onTouchStart: Be,
274
+ onTouchMove: He,
275
+ onTouchEnd: Ke,
276
+ children: /* @__PURE__ */ a("div", { className: "smwb-carousel__fullscreen-track", style: Ge, children: Oe.map((e, t) => /* @__PURE__ */ a(
277
+ "div",
278
+ {
279
+ className: "smwb-carousel__fullscreen-slide",
280
+ "aria-hidden": t !== u,
281
+ children: e
282
+ },
283
+ t
284
+ )) })
266
285
  }
267
286
  ),
268
287
  s > 1 && /* @__PURE__ */ a(
269
- E,
288
+ M,
270
289
  {
271
290
  name: "chevron_right",
272
291
  size: 40,
273
- className: m("smwb-carousel__fullscreen-arrow", "smwb-carousel__fullscreen-arrow_next"),
274
- onClick: () => p(1)
292
+ className: h("smwb-carousel__fullscreen-arrow", "smwb-carousel__fullscreen-arrow_next"),
293
+ onClick: () => S(1)
275
294
  }
276
295
  ),
277
296
  /* @__PURE__ */ a(
278
- E,
297
+ M,
279
298
  {
280
299
  name: "close",
281
300
  size: 32,
282
301
  className: "smwb-carousel__fullscreen-close",
283
- onClick: () => A(null)
302
+ onClick: () => P(null)
284
303
  }
285
304
  )
286
305
  ] })
@@ -291,6 +310,6 @@ const et = {
291
310
  );
292
311
  });
293
312
  export {
294
- mt as Carousel
313
+ bt as Carousel
295
314
  };
296
315
  //# sourceMappingURL=carousel.js.map