@smwb/ui-react 2.0.1 → 2.1.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.
- package/README.md +5 -5
- package/dist/assets/styles/less/components/carousel/carousel.entry.css +1 -1
- package/dist/components/dataDisplay/carousel/carousel.d.ts +10 -0
- package/dist/components/dataDisplay/carousel/carousel.js +249 -131
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/carousel/utils.d.ts +5 -0
- package/dist/components/dataDisplay/carousel/utils.js +32 -18
- package/dist/components/dataDisplay/carousel/utils.js.map +1 -1
- package/dist/components/inputs/selectField/selectField.js +85 -84
- package/dist/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/components/layout/screenDivider/screenDivider.js +47 -56
- package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/carousel.js +249 -131
- package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/utils.js +32 -18
- package/dist/headless/components/dataDisplay/carousel/utils.js.map +1 -1
- package/dist/headless/components/inputs/selectField/selectField.js +102 -101
- package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/headless/components/layout/screenDivider/screenDivider.js +47 -56
- package/dist/headless/components/layout/screenDivider/screenDivider.js.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/package.json +2 -2
|
@@ -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 { useForkRef } from \"../../../hooks/useForkRef\";\nimport {\n coordX,\n coordY,\n dragPrevent,\n getSlideIndexForMultipleParts,\n getSlidesToShow,\n getSlideStyle,\n getSlideWidth,\n getStartSlide,\n isMouseEvent,\n isTouchEvent,\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}\n\ninterface ShiftState {\n animation: boolean | undefined;\n}\n\ninterface Motion {\n isPressed: boolean;\n startX: number;\n startY: number;\n}\n\nconst MOTION_INITIAL_STATE: Motion = {\n isPressed: false,\n startX: 0,\n startY: 0,\n};\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 },\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\n const [activeSlideIndex, setActiveSlideIndex] = useState<number>(startSlide);\n const [shiftState, setShiftState] = useState<ShiftState>({\n animation: undefined,\n });\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 onStart = useEventCallback((event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => {\n if (slidesCount <= 1) {\n return;\n }\n\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 });\n\n trackRef.current.addEventListener(isMouse ? \"mousemove\" : \"touchmove\", onMove);\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) {\n return;\n }\n\n const { isPressed, startX, startY } = motion.current;\n\n if (!isPressed) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\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 - startX;\n const shiftY = clientY - startY;\n const shiftXAbs = Math.abs(shiftX);\n const shiftYAbs = Math.abs(shiftY);\n\n if (shiftXAbs < shiftYAbs) {\n return;\n }\n\n const viewWidth = rootRef.current.offsetWidth;\n const widthPerSlide = viewWidth / slidesToShow;\n const threshold = slidesToShow === 1 ? 1.95 : 1.4;\n\n if (shiftXAbs % widthPerSlide > widthPerSlide / threshold) {\n const direction = shiftX < 0 ? 1 : -1;\n const shiftSlidesMax = slidesCount - slidesToShow;\n const targetIndex = activeSlideIndex + direction;\n\n if (targetIndex < 0 || targetIndex > shiftSlidesMax) {\n return;\n }\n\n setActiveSlideIndex(targetIndex);\n setShiftState((prevState) => ({ ...prevState, animation: true }));\n setMotion({ startX: clientX, startY: clientY });\n onSlideChange?.(targetIndex);\n }\n });\n\n const onEnd = useEventCallback((event: MouseEvent | TouchEvent) => {\n if (!trackRef.current) {\n return;\n }\n\n if (!motion.current.isPressed) {\n return;\n }\n\n setMotion({ isPressed: false });\n\n const isMouse = isMouseEvent(event);\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 onNavigationItemClick = (index: number) => () => {\n setActiveSlideIndex(index);\n setShiftState((prevState) => ({ ...prevState, animation: true }));\n onSlideChange?.(index);\n };\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 shiftSlidesMax = slidesCount - slidesToShow;\n const shiftSlides = activeSlideIndex > shiftSlidesMax ? shiftSlidesMax : 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 = {\n transform: `translateX(-${indent}%)`,\n transition: shiftState.animation ? `transform 500ms cubic-bezier(.1, 0, .25, 1)` : \"none\",\n };\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)) {\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 }, [autoplay, autoplayInterval, pauseOnHover, isHovered, slidesCount, activeSlideIndex, slidesToShow]);\n\n if (!Array.isArray(children)) {\n return <></>;\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 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 className=\"smwb-carousel__slide-inner\">{child}</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 </div>\n );\n});\n\nexport default Carousel;\n"],"names":["MOTION_INITIAL_STATE","Carousel","forwardRef","slidesToShowProp","startSlideProp","children","className","showNavigation","showArrowsProp","arrowsSize","navigationClassName","onSlideChange","navigationDotRenderer","ariaLabel","autoplay","autoplayInterval","pauseOnHover","ref","slidesCount","React","slidesToShow","getSlidesToShow","startSlide","getStartSlide","showArrows","activeSlideIndex","setActiveSlideIndex","useState","shiftState","setShiftState","rootRef","useRef","outerRef","forkedOuterRef","useForkRef","trackRef","isHovered","setIsHovered","motion","useSafeLayoutEffect","prevState","setMotion","value","onStart","useEventCallback","event","isMouse","isMouseEvent","clientX","coordX","clientY","coordY","onMove","onEnd","isPressed","startX","startY","isTouchEvent","shiftX","shiftY","shiftXAbs","shiftYAbs","widthPerSlide","threshold","direction","shiftSlidesMax","targetIndex","onNavigationItemClick","index","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","useEffect","timer","jsxs","Icon","dragPrevent","child"],"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\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":";;;;;;;;;AAqEA,MAAMA,KAA+B;AAAA,EACnC,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX,GAGMC,KAAgB,GAEhBC,KAAiB,KAEVC,KAAWC,GAA0C,SAChE;AAAA,EACE,cAAcC,KAAmB;AAAA,EACjC,YAAYC,KAAiB;AAAA,EAC7B,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC,KAAiB;AAAA,EACjB,YAAYC;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,qBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,cAAcC,KAAY;AAAA,EAC1B,UAAAC,IAAW;AAAA,EACX,kBAAAC,IAAmB;AAAA,EACnB,cAAAC,IAAe;AAAA,EACf,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC,IAAmB;AACrB,GACAC,IACA;AACA,QAAMC,IAAcC,EAAM,SAAS,MAAMnB,CAAQ,GAC3CoB,IAAeC,GAAgBvB,IAAkBoB,CAAW,GAC5DI,IAAaC,GAAcxB,IAAgBmB,CAAW,GACtDM,IAAarB,MAAkBe,IAAc,GAC7CO,IAAW,KAAK,IAAI,GAAGP,IAAcE,CAAY,GAEjD,CAACM,GAAkBC,CAAmB,IAAIC,EAAiBN,CAAU,GACrE,CAACO,GAAYC,CAAa,IAAIF,EAAqB;AAAA,IACvD,WAAW;AAAA,EAAA,CACZ,GAEK,CAACG,IAAQC,CAAS,IAAIJ,EAAiB,CAAC,GACxC,CAACK,IAAYC,CAAa,IAAIN,EAAkB,EAAK,GACrD,CAACO,GAAiBC,CAAkB,IAAIR,EAAwB,IAAI,GAEpES,IAAUC,EAAuB,IAAI,GACrCC,KAAWD,EAAuB,IAAI,GACtCE,KAAiBC,GAA2BxB,IAAKsB,EAAQ,GACzDG,IAAWJ,EAAuB,IAAI,GACtC,CAACK,IAAWC,EAAY,IAAIhB,EAAkB,EAAK,GAEnDiB,IAASP,EAAe,EAAE,GAAG7C,IAAsB;AAEzD,EAAAqD,GAAoB,MAAM;AACxB,IAAAhB,EAAc,CAACiB,OAAe;AAAA,MAC5B,GAAGA;AAAA,MACH,WAAW;AAAA,IAAA,EACX;AAAA,EACJ,GAAG,CAAC3B,CAAY,CAAC,GAEjB0B,GAAoB,MAAM;AACxB,IAAAnB,EAAoBL,CAAU,GAC9BhB,KAAA,QAAAA,EAAgBgB,IAEZO,EAAW,cAAc,UAC3BC,EAAc,CAACiB,OAAe;AAAA,MAC5B,GAAGA;AAAA,MACH,WAAW;AAAA,IAAA,EACX;AAAA,EAEN,GAAG,CAACzB,CAAU,CAAC;AAEf,QAAM0B,IAAY,CAACC,MAA2B;AAC5C,WAAO,OAAgCJ,EAAO,SAASI,CAAK;AAAA,EAC9D,GAEMC,IAAM,MAAO,OAAO,eAAgB,cAAc,YAAY,IAAA,IAAQ,KAAK,IAAA,GAE3EC,KAAY,CAACC,MAAkB;AACnC,UAAMC,IAASC,GAAMF,GAAO,GAAG3B,CAAQ;AAEvC,IAAAE,EAAoB0B,CAAM,GAC1BvB,EAAc,CAACiB,OAAe,EAAE,GAAGA,GAAW,WAAW,KAAO,GAChEzC,KAAA,QAAAA,EAAgB+C;AAAA,EAClB,GAEME,IAAiB,CAACC,MAAsB;AAC5C,IAAApB,EAAmB,CAACqB,MAAUA,MAAS,OAAOA,KAAQA,IAAOD,IAAYtC,KAAeA,CAAY;AAAA,EACtG,GAEMwC,IAAmBpB,EAAsB,IAAI,GAE7CqB,KAAkB,CAACC,MAAqB;AAC5C,IAAKlB,EAAS,YAIdA,EAAS,QAAQ,oBAAoBkB,IAAU,cAAc,aAAaC,EAAM,GAChFnB,EAAS,QAAQ,oBAAoBkB,IAAU,YAAY,YAAYE,CAAK,GAExEF,KACFlB,EAAS,QAAQ,oBAAoB,cAAcoB,CAAK;AAAA,EAE5D,GAEMC,KAAUC,EAAiB,CAACC,MAA+E;AAC/G,QAAI,CAACvB,EAAS;AACZ;AAGF,UAAMkB,IAAUM,GAAaD,CAAK;AAElC,QAAIL,KAAWK,EAAM,WAAW;AAC9B;AAGF,IAAAA,EAAM,gBAAA;AAEN,UAAME,IAAUC,EAAOH,CAAK,GACtBI,IAAUC,GAAOL,CAAK;AAE5B,IAAAjB,EAAU;AAAA,MACR,WAAW;AAAA,MACX,QAAQmB;AAAA,MACR,QAAQE;AAAA,MACR,OAAOF;AAAA,MACP,OAAOjB,EAAA;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV,GAEDR,EAAS,QAAQ,iBAAiBkB,IAAU,cAAc,aAAaC,IAAQ,EAAE,SAAS,IAAO,GACjGnB,EAAS,QAAQ,iBAAiBkB,IAAU,YAAY,YAAYE,CAAK,GAErEF,KACFlB,EAAS,QAAQ,iBAAiB,cAAcoB,CAAK;AAAA,EAEzD,CAAC,GAEKD,KAASG,EAAiB,CAACC,MAAmC;AAClE,QAAI,CAAC5B,EAAQ,WAAW,CAACQ,EAAO,QAAQ;AACtC;AAGF,QAAI0B,GAAaN,CAAK,KAAKA,EAAM,QAAQ,SAAS;AAChD,aAAOH,EAAMG,CAAK;AAGpB,UAAME,IAAUC,EAAOH,CAAK,GACtBI,IAAUC,GAAOL,CAAK,GACtBO,IAASL,IAAUtB,EAAO,QAAQ,QAClC4B,IAASJ,IAAUxB,EAAO,QAAQ;AAGxC,QAAIA,EAAO,QAAQ,SAAS,MAAM;AAChC,UAAI,KAAK,IAAI2B,CAAM,IAAI9E,MAAiB,KAAK,IAAI+E,CAAM,IAAI/E;AACzD;AAGF,YAAMgF,IAAa,KAAK,IAAIF,CAAM,KAAK,KAAK,IAAIC,CAAM,IAAI,MAAM;AAIhE,UAHAzB,EAAU,EAAE,MAAA0B,GAAM,SAAS,GAAA,CAAM,GAG7BA,MAAS;AACX,eAAOZ,EAAMG,CAAK;AAGpB,MAAI/C,IAAc,KAChBgB,EAAc,EAAI;AAAA,IAEtB;AAEA,QAAIW,EAAO,QAAQ,SAAS,KAQ5B;AAAA,UAHAoB,EAAM,eAAA,GACNA,EAAM,gBAAA,GAEF/C,IAAc,GAAG;AACnB,cAAMyD,IAAUjD,KAAoB,GAC9BkD,IAAQlD,KAAoBD,GAE5BoD,IAAUF,KAAWH,IAAS,KAAOI,KAASJ,IAAS,IAAKA,IAAS,OAAOA;AAClF,QAAAxC,EAAU6C,CAAM;AAAA,MAClB;AAEA,MAAAhC,EAAO,QAAQ,QAAQsB,GACvBtB,EAAO,QAAQ,QAAQK,EAAA;AAAA;AAAA,EACzB,CAAC,GAEKY,IAAQE,EAAiB,CAACC,MAAmC;AACjE,QAAI,CAACpB,EAAO,QAAQ;AAClB;AAGF,UAAMe,IAAUM,GAAaD,CAAK;AAClC,IAAAN,GAAgBC,CAAO;AAEvB,UAAM,EAAE,MAAAc,GAAM,SAAAI,GAAS,QAAAC,GAAQ,OAAAC,GAAO,OAAAC,EAAA,IAAUpC,EAAO;AAIvD,QAHAG,EAAU,EAAE,WAAW,IAAO,GAC9Bd,EAAc,EAAK,GAEfwC,MAAS,OAAOI,KAAW5D,IAAc,KAAKmB,EAAQ,SAAS;AACjE,YAAM8B,IAAUC,EAAOH,CAAK,GACtBiB,IAAaf,IAAUY,GACvBI,IAAgB9C,EAAQ,QAAQ,cAAcjB,GAC9CgE,IAAWH,KAASd,IAAUa,KAAS,KAAK,IAAI,GAAG9B,MAAQ+B,CAAK,IAAI;AAE1E,UAAII,IAAcF,IAAgB,IAAI,KAAK,MAAM,CAACD,IAAaC,CAAa,IAAI;AAEhF,MAAIE,MAAgB,KAAK,KAAK,IAAID,CAAQ,IAAIzF,OAC5C0F,IAAcD,IAAW,IAAI,IAAI,KAGnCjC,GAAUzB,IAAmB2D,CAAW;AAAA,IAC1C;AAGA,IAAArD,EAAU,CAAC;AAAA,EACb,CAAC,GAEKsD,KAAe,CAAClC,MAAkB,MAAM;AAE5C,IAAIP,EAAO,QAAQ,WAIf7B,KACFoB,EAAmBgB,CAAK;AAAA,EAE5B,GAEMmC,IAAwB,CAACnC,MAAkB,MAAMD,GAAUC,CAAK,GAEhEoC,IAAe,CAAChC,MAAsB;AAC1C,UAAMiC,IAAgBrE,MAAiB,GACjCsE,IAAcD,IAAgBvE,IAAc,KAAK,KAAKA,IAAcE,CAAY,GAChFuE,IAAcjE,IAAmBN,GACjCwE,IAAsB1E,IAAcE,KAAgBM,GAGpDmE,KADeC,GAA8BH,GAAavE,GAAcF,GAAa0E,CAAmB,IAC5EpC,IAAYkC,KAAeA;AAE7D,WAAOD,IAAgBI,IAAYA,IAAYzE;AAAA,EACjD,GAEM2E,KAAgB,MAAM;AAC1B,QAAI,CAAC7F;AACH,aAAO,gBAAA8F,EAAAC,IAAA,EAAE;AAGX,UAAML,IAAsB1E,IAAcE,KAAgBM,GACpDwE,IAAoB9E,MAAiB,GACrC+E,IAAQD,IAAoBhF,IAAc,KAAK,KAAKA,IAAcE,CAAY,GAC9EgF,IAAgC,CAAA;AAEtC,aAAShD,IAAQ,GAAGA,IAAQ+C,GAAO/C,KAAS;AAC1C,UAAIyC,IAAYzC,GACZiD,IAAe3E;AAEnB,UAAI,CAACwE,GAAmB;AACtB,cAAMI,IAASlD,MAAU+C,IAAQ,GAC3BR,IAAcjE,IAAmBN;AAEvC,QAAAyE,IAAYS,IAASpF,IAAcE,IAAegC,IAAQhC,GAC1DiF,IAAeP,GAA8BH,GAAavE,GAAcF,GAAa0E,CAAmB;AAAA,MAC1G;AAEA,YAAMW,IAAWF,MAAiBjD,GAC5BoD,IAAUjB,EAAsBM,CAAS;AAE/C,UAAIY,IACF,gBAAAT,EAAC,OAAA,EAAgB,WAAWU,EAAG,kCAAkCH,KAAY,SAAS,GAAG,SAAAC,EAAA,GAA/EpD,CAAiG;AAG7G,MAAI7C,MACFkG,IAAYlG,EAAsB6C,GAAOmD,GAAUC,CAAO,IAG5DJ,EAAW,KAAKK,CAAS;AAAA,IAC3B;AAEA,6BAAQ,OAAA,EAAI,WAAWC,EAAG,6BAA6BrG,EAAmB,GAAI,UAAA+F,GAAW;AAAA,EAC3F,GAEMO,KAAY,MAAM;AACtB,UAAMC,IAAclF,IAAmBD,IAAWA,IAAWC;AAE7D,WAAOmF,GAAczF,CAAY,IAAIwF;AAAA,EACvC,GAEME,KAAUC,GAAA,GACVC,KAAaC,GAAc7F,CAAY,GAIvC8F,KAAkC;AAAA,IACtC,WAAW,oBAHEP,GAAA,CAGwB,OAAO5E,EAAM;AAAA,IAClD,YACEE,MAAcJ,EAAW,cAAc,SACnC,SACAA,EAAW,YACT,gDACA;AAAA,EAAA,GAGJsF,IAAiC,CAAA,GACjCC,KAAkBC,EAAYzG,EAAU,GACxC0G,KAAmBC,GAAY1G,EAAW,GAC1C2G,KAAWH,EAAYvG,EAAG,GAC1B2G,KAAgBJ,EAAYtG,EAAQ;AAkD1C,MAjDIqG,OAAkBD,EAAqC,6BAA6B,IAAIC,KACxFE,OAAmBH,EAAqC,8BAA8B,IAAIG,KAC1FE,OAAWL,EAAqC,qBAAqB,IAAIK,KACzEC,OAAgBN,EAAqC,2BAA2B,IAAIM,KAExFtG,EAAM,UAAU,MAAM;AACpB,IAAK,MAAM,QAAQnB,CAAQ,KACzB,QAAQ,MAAM,kGAAkG;AAAA,EAEpH,GAAG,CAACA,CAAQ,CAAC,GAEb0H,GAAU,MAAM;AACd,QAAI,CAACjH,KAAYS,KAAe,KAAMP,KAAgBgC,MAAcR,MAAoB;AACtF;AAEF,UAAMwF,IAAQ,OAAO,YAAY,MAAM;AACrC,MAAApC,EAAsBC,EAAa,CAAC,CAAC,EAAA;AAAA,IACvC,GAAG9E,CAAgB;AAEnB,WAAO,MAAM,OAAO,cAAciH,CAAK;AAAA,EAEzC,GAAG;AAAA,IACDlH;AAAA,IACAC;AAAA,IACAC;AAAA,IACAgC;AAAA,IACAzB;AAAA,IACAQ;AAAA,IACAN;AAAA,IACAe;AAAA,EAAA,CACD,GAEDuF,GAAU,MAAM;AACd,QAAIvF,MAAoB,QAAQjB,KAAe;AAC7C;AAEF,UAAM0G,IAAY,CAAC3D,MAAyB;AAC1C,MAAIA,EAAM,QAAQ,cAChBV,EAAe,EAAE,IACRU,EAAM,QAAQ,gBACvBV,EAAe,CAAC;AAAA,IAEpB;AACA,oBAAS,iBAAiB,WAAWqE,CAAS,GAEvC,MAAM,SAAS,oBAAoB,WAAWA,CAAS;AAAA,EAEhE,GAAG,CAACzF,GAAiBjB,CAAW,CAAC,GAE7B,CAAC,MAAM,QAAQlB,CAAQ;AACzB,WAAO,gBAAAgG,EAAAC,IAAA,EAAE;AAGX,QAAM4B,KAAgB7H,GAEhB8H,KAAyB,CAAC7D,MAA4B;;AAC1D,IAAAP,EAAiB,WAAUqE,KAAAC,IAAA/D,EAAM,QAAQ,CAAC,MAAf,gBAAA+D,EAAkB,YAAlB,OAAAD,IAA6B;AAAA,EAC1D,GAEME,KAAuB,CAAChE,MAA4B;;AACxD,QAAIP,EAAiB,YAAY,QAAQxC,KAAe;AACtD;AAEF,UAAMgH,MAASH,KAAAC,IAAA/D,EAAM,eAAe,CAAC,MAAtB,gBAAA+D,EAAyB,YAAzB,OAAAD,IAAoCrE,EAAiB,WAAWA,EAAiB;AAChG,IAAAA,EAAiB,UAAU,MACvB,KAAK,IAAIwE,CAAK,IAAI,MACpB3E,EAAe2E,IAAQ,IAAI,IAAI,EAAE;AAAA,EAErC;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWzB,EAAG,iBAAiBzG,EAAS;AAAA,MACxC,eAAY;AAAA,MACZ,KAAKuC;AAAA,MACL,MAAK;AAAA,MACL,wBAAqB;AAAA,MACrB,cAAYhC;AAAA,MACZ,OAAO2G;AAAA,MACP,cAAcxG,IAAe,MAAMiC,GAAa,EAAI,IAAI;AAAA,MACxD,cAAcjC,IAAe,MAAMiC,GAAa,EAAK,IAAI;AAAA,MAEzD,UAAA;AAAA,QAAA,gBAAAuF,EAAC,SAAI,WAAWzB,EAAG,sBAAsB,GAAG,KAAKrE,GAC9C,UAAA;AAAA,UAAAb,KACC,gBAAAwE;AAAA,YAACoC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAMhI;AAAA,cACN,WAAWsG,EAAG,wBAAwB,2BAA2B;AAAA,cACjE,OAAO;AAAA,gBACL,KAAK,cAActG,IAAa,CAAC;AAAA,gBACjC,MAAM,CAACA,IAAa;AAAA,cAAA;AAAA,cAEtB,SAAS,MAAMmF,EAAsBC,EAAa,EAAE,CAAC,EAAA;AAAA,YAAE;AAAA,UAAA;AAAA,UAG3D,gBAAAQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKtD;AAAA,cACL,WAAU;AAAA,cACV,aAAaqB;AAAA,cACb,cAAcA;AAAA,cACd,aAAasE;AAAA,cACb,WAAWA;AAAA,cAEX,UAAA,gBAAArC,EAAC,OAAA,EAAI,WAAU,wBAAuB,OAAOkB,IAC1C,UAAA/F,EAAM,SAAS,IAAInB,GAAU,CAACsI,GAAOlF,MACpC,gBAAA4C,EAAC,OAAA,EAAgB,IAAI,GAAGc,EAAO,GAAG1D,CAAK,IAAI,WAAU,wBAAuB,OAAO4D,IACjF,UAAA,gBAAAhB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWU;AAAA,oBACT;AAAA,oBACA1F,KAAoB;AAAA,kBAAA;AAAA,kBAEtB,SAASA,IAAmBsE,GAAalC,CAAK,IAAI;AAAA,kBAEjD,UAAAkF;AAAA,gBAAA;AAAA,cAAA,EACH,GATQlF,CAUV,CACD,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,UAED5B,KACC,gBAAAwE;AAAA,YAACoC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAMhI;AAAA,cACN,WAAWsG,EAAG,wBAAwB,2BAA2B;AAAA,cACjE,OAAO;AAAA,gBACL,KAAK,cAActG,IAAa,CAAC;AAAA,gBACjC,OAAO,CAACA,IAAa;AAAA,cAAA;AAAA,cAEvB,SAAS,MAAMmF,EAAsBC,EAAa,CAAC,CAAC,EAAA;AAAA,YAAE;AAAA,UAAA;AAAA,QACxD,GAEJ;AAAA,QACCO,GAAA;AAAA,QACA/E,KACC,gBAAAgF;AAAA,UAACuC;AAAA,UAAA;AAAA,YACC,MAAMpG,MAAoB;AAAA,YAC1B,MAAK;AAAA,YACL,UAAS;AAAA,YACT,WAAU;AAAA,YACV,SAAS,MAAMC,EAAmB,IAAI;AAAA,YACtC,cAAW;AAAA,YAEV,UAAAD,MAAoB,QACnB,gBAAAgG,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,cAAAjH,IAAc,KACb,gBAAA8E;AAAA,gBAACoC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAM;AAAA,kBACN,WAAW1B,EAAG,mCAAmC,sCAAsC;AAAA,kBACvF,SAAS,MAAMnD,EAAe,EAAE;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGpC,gBAAAyC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,cAAc8B;AAAA,kBACd,YAAYG;AAAA,kBAEX,aAAc9F,CAAe;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE/BjB,IAAc,KACb,gBAAA8E;AAAA,gBAACoC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAM;AAAA,kBACN,WAAW1B,EAAG,mCAAmC,sCAAsC;AAAA,kBACvF,SAAS,MAAMnD,EAAe,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGnC,gBAAAyC;AAAA,gBAACoC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAM;AAAA,kBACN,WAAU;AAAA,kBACV,SAAS,MAAMhG,EAAmB,IAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YACxC,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|
|
@@ -2,38 +2,49 @@ function o(t, n) {
|
|
|
2
2
|
const r = Math.floor(t / n);
|
|
3
3
|
return t % n === 0 ? r - 1 : r;
|
|
4
4
|
}
|
|
5
|
-
function
|
|
5
|
+
function a(t, n, r, f) {
|
|
6
6
|
const u = o(r, n);
|
|
7
|
-
return t === r + n ? 0 :
|
|
7
|
+
return t === r + n ? 0 : f || t < n && t !== 0 ? u : t === 0 ? r % n === 0 ? u : u - 1 : n > 0 ? Math.floor(t / n) - 1 : 0;
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function i(t) {
|
|
10
10
|
return !(t instanceof Event);
|
|
11
11
|
}
|
|
12
12
|
function c(t) {
|
|
13
|
-
return
|
|
14
|
-
}
|
|
15
|
-
function f(t) {
|
|
16
|
-
return window.TouchEvent && (e(t) && t.nativeEvent instanceof TouchEvent || t instanceof TouchEvent);
|
|
13
|
+
return i(t) && t.nativeEvent instanceof MouseEvent || t instanceof MouseEvent;
|
|
17
14
|
}
|
|
18
|
-
function
|
|
19
|
-
return
|
|
15
|
+
function e(t) {
|
|
16
|
+
return window.TouchEvent && (i(t) && t.nativeEvent instanceof TouchEvent || t instanceof TouchEvent);
|
|
20
17
|
}
|
|
21
18
|
function h(t) {
|
|
22
|
-
return c(t) ? t.
|
|
19
|
+
return c(t) ? t.clientX : e(t) ? t.changedTouches[0].clientX : 0;
|
|
20
|
+
}
|
|
21
|
+
function E(t) {
|
|
22
|
+
return c(t) ? t.clientY : e(t) ? t.changedTouches[0].clientY : 0;
|
|
23
23
|
}
|
|
24
24
|
function M(t) {
|
|
25
25
|
const n = t.target;
|
|
26
26
|
(n.tagName === "A" || n.tagName === "IMG") && t.preventDefault();
|
|
27
27
|
}
|
|
28
28
|
function m(t) {
|
|
29
|
-
return { width: `${
|
|
29
|
+
return { width: `${g(t)}%` };
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function g(t) {
|
|
32
32
|
return 100 / t;
|
|
33
33
|
}
|
|
34
34
|
function p(t, n) {
|
|
35
35
|
return t <= 0 || n === 0 ? 1 : t > n ? n : t;
|
|
36
36
|
}
|
|
37
|
+
function d(t, n, r) {
|
|
38
|
+
return Math.min(Math.max(t, n), r);
|
|
39
|
+
}
|
|
40
|
+
function L(t) {
|
|
41
|
+
if (t != null)
|
|
42
|
+
return typeof t == "number" ? `${t}px` : t;
|
|
43
|
+
}
|
|
44
|
+
function N(t) {
|
|
45
|
+
if (t != null)
|
|
46
|
+
return String(t);
|
|
47
|
+
}
|
|
37
48
|
function X(t, n) {
|
|
38
49
|
if (t <= 0 || n === 0)
|
|
39
50
|
return 0;
|
|
@@ -41,17 +52,20 @@ function X(t, n) {
|
|
|
41
52
|
return t > r ? r : t;
|
|
42
53
|
}
|
|
43
54
|
export {
|
|
44
|
-
|
|
45
|
-
h as
|
|
55
|
+
d as clamp,
|
|
56
|
+
h as coordX,
|
|
57
|
+
E as coordY,
|
|
46
58
|
M as dragPrevent,
|
|
47
59
|
o as getActiveSlideDotsLength,
|
|
48
|
-
|
|
60
|
+
a as getSlideIndexForMultipleParts,
|
|
49
61
|
m as getSlideStyle,
|
|
50
|
-
|
|
62
|
+
g as getSlideWidth,
|
|
51
63
|
p as getSlidesToShow,
|
|
52
64
|
X as getStartSlide,
|
|
53
65
|
c as isMouseEvent,
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
i as isReactEvent,
|
|
67
|
+
e as isTouchEvent,
|
|
68
|
+
L as toCssLength,
|
|
69
|
+
N as toCssNumber
|
|
56
70
|
};
|
|
57
71
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/components/dataDisplay/carousel/utils.ts"],"sourcesContent":["import React from \"react\";\n\nexport function getActiveSlideDotsLength(slidesCount: number, slidesToShow: number): number {\n const dots = Math.floor(slidesCount / slidesToShow);\n\n return slidesCount % slidesToShow === 0 ? dots - 1 : dots;\n}\n\nexport function getSlideIndexForMultipleParts(\n activeIndex: number,\n slidesToShow: number,\n slidesCount: number,\n isNextSlideDisabled: boolean\n): number {\n const dotsLength = getActiveSlideDotsLength(slidesCount, slidesToShow);\n\n if (activeIndex === slidesCount + slidesToShow) {\n return 0;\n }\n\n if (isNextSlideDisabled || (activeIndex < slidesToShow && activeIndex !== 0)) {\n return dotsLength;\n }\n\n if (activeIndex === 0) {\n return slidesCount % slidesToShow === 0 ? dotsLength : dotsLength - 1;\n }\n\n return slidesToShow > 0 ? Math.floor(activeIndex / slidesToShow) - 1 : 0;\n}\n\nexport function isReactEvent(event: React.SyntheticEvent | Event): event is React.SyntheticEvent {\n return !(event instanceof Event);\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent\n): event is React.MouseEvent | MouseEvent {\n return (isReactEvent(event) && event.nativeEvent instanceof MouseEvent) || event instanceof MouseEvent;\n}\n\nexport function isTouchEvent(\n event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent\n): event is React.TouchEvent | TouchEvent {\n return (\n window.TouchEvent &&\n ((isReactEvent(event) && event.nativeEvent instanceof TouchEvent) || event instanceof TouchEvent)\n );\n}\n\nexport function coordX(event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent): number {\n if (isMouseEvent(event)) {\n return event.clientX;\n }\n\n if (isTouchEvent(event)) {\n return event.changedTouches[0].clientX;\n }\n\n return 0;\n}\n\nexport function coordY(event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent): number {\n if (isMouseEvent(event)) {\n return event.clientY;\n }\n\n if (isTouchEvent(event)) {\n return event.changedTouches[0].clientY;\n }\n\n return 0;\n}\n\nexport function dragPrevent(event: React.SyntheticEvent) {\n const target = event.target as HTMLElement;\n\n if (target.tagName === \"A\" || target.tagName === \"IMG\") {\n event.preventDefault();\n }\n}\n\nexport function getSlideStyle(slidesToShow: number): React.CSSProperties {\n const width = `${getSlideWidth(slidesToShow)}%`;\n\n return { width };\n}\n\nexport function getSlideWidth(slidesToShow: number): number {\n return 100 / slidesToShow;\n}\n\nexport function getSlidesToShow(slidesToShow: number, slidesCount: number): number {\n if (slidesToShow <= 0 || slidesCount === 0) {\n return 1;\n }\n\n if (slidesToShow > slidesCount) {\n return slidesCount;\n }\n\n return slidesToShow;\n}\n\nexport function getStartSlide(startSlide: number, slidesCount: number): number {\n if (startSlide <= 0 || slidesCount === 0) {\n return 0;\n }\n\n const maxIndex = slidesCount - 1;\n\n if (startSlide > maxIndex) {\n return maxIndex;\n }\n\n return startSlide;\n}\n"],"names":["getActiveSlideDotsLength","slidesCount","slidesToShow","dots","getSlideIndexForMultipleParts","activeIndex","isNextSlideDisabled","dotsLength","isReactEvent","event","isMouseEvent","isTouchEvent","coordX","coordY","dragPrevent","target","getSlideStyle","getSlideWidth","getSlidesToShow","getStartSlide","startSlide","maxIndex"],"mappings":"AAEO,SAASA,EAAyBC,GAAqBC,GAA8B;AAC1F,QAAMC,IAAO,KAAK,MAAMF,IAAcC,CAAY;AAElD,SAAOD,IAAcC,MAAiB,IAAIC,IAAO,IAAIA;AACvD;AAEO,SAASC,EACdC,GACAH,GACAD,GACAK,GACQ;AACR,QAAMC,IAAaP,EAAyBC,GAAaC,CAAY;AAErE,SAAIG,MAAgBJ,IAAcC,IACzB,IAGLI,KAAwBD,IAAcH,KAAgBG,MAAgB,IACjEE,IAGLF,MAAgB,IACXJ,IAAcC,MAAiB,IAAIK,IAAaA,IAAa,IAG/DL,IAAe,IAAI,KAAK,MAAMG,IAAcH,CAAY,IAAI,IAAI;AACzE;AAEO,SAASM,EAAaC,GAAoE;AAC/F,SAAO,EAAEA,aAAiB;AAC5B;AAEO,SAASC,EACdD,GACwC;AACxC,SAAQD,EAAaC,CAAK,KAAKA,EAAM,uBAAuB,cAAeA,aAAiB;AAC9F;AAEO,SAASE,EACdF,GACwC;AACxC,SACE,OAAO,eACLD,EAAaC,CAAK,KAAKA,EAAM,uBAAuB,cAAeA,aAAiB;AAE1F;AAEO,SAASG,EAAOH,GAA8E;AACnG,SAAIC,EAAaD,CAAK,IACbA,EAAM,UAGXE,EAAaF,CAAK,IACbA,EAAM,eAAe,CAAC,EAAE,UAG1B;AACT;AAEO,SAASI,EAAOJ,GAA8E;AACnG,SAAIC,EAAaD,CAAK,IACbA,EAAM,UAGXE,EAAaF,CAAK,IACbA,EAAM,eAAe,CAAC,EAAE,UAG1B;AACT;AAEO,SAASK,EAAYL,GAA6B;AACvD,QAAMM,IAASN,EAAM;AAErB,GAAIM,EAAO,YAAY,OAAOA,EAAO,YAAY,UAC/CN,EAAM,eAAA;AAEV;AAEO,SAASO,EAAcd,GAA2C;AAGvE,SAAO,EAAE,OAFK,GAAGe,EAAcf,CAAY,CAAC,IAEnC;AACX;AAEO,SAASe,EAAcf,GAA8B;AAC1D,SAAO,MAAMA;AACf;AAEO,SAASgB,EAAgBhB,GAAsBD,GAA6B;AACjF,SAAIC,KAAgB,KAAKD,MAAgB,IAChC,IAGLC,IAAeD,IACVA,IAGFC;AACT;AAEO,SAASiB,EAAcC,
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../src/components/dataDisplay/carousel/utils.ts"],"sourcesContent":["import React from \"react\";\n\nexport function getActiveSlideDotsLength(slidesCount: number, slidesToShow: number): number {\n const dots = Math.floor(slidesCount / slidesToShow);\n\n return slidesCount % slidesToShow === 0 ? dots - 1 : dots;\n}\n\nexport function getSlideIndexForMultipleParts(\n activeIndex: number,\n slidesToShow: number,\n slidesCount: number,\n isNextSlideDisabled: boolean\n): number {\n const dotsLength = getActiveSlideDotsLength(slidesCount, slidesToShow);\n\n if (activeIndex === slidesCount + slidesToShow) {\n return 0;\n }\n\n if (isNextSlideDisabled || (activeIndex < slidesToShow && activeIndex !== 0)) {\n return dotsLength;\n }\n\n if (activeIndex === 0) {\n return slidesCount % slidesToShow === 0 ? dotsLength : dotsLength - 1;\n }\n\n return slidesToShow > 0 ? Math.floor(activeIndex / slidesToShow) - 1 : 0;\n}\n\nexport function isReactEvent(event: React.SyntheticEvent | Event): event is React.SyntheticEvent {\n return !(event instanceof Event);\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent\n): event is React.MouseEvent | MouseEvent {\n return (isReactEvent(event) && event.nativeEvent instanceof MouseEvent) || event instanceof MouseEvent;\n}\n\nexport function isTouchEvent(\n event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent\n): event is React.TouchEvent | TouchEvent {\n return (\n window.TouchEvent &&\n ((isReactEvent(event) && event.nativeEvent instanceof TouchEvent) || event instanceof TouchEvent)\n );\n}\n\nexport function coordX(event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent): number {\n if (isMouseEvent(event)) {\n return event.clientX;\n }\n\n if (isTouchEvent(event)) {\n return event.changedTouches[0].clientX;\n }\n\n return 0;\n}\n\nexport function coordY(event: React.MouseEvent | React.TouchEvent | MouseEvent | TouchEvent): number {\n if (isMouseEvent(event)) {\n return event.clientY;\n }\n\n if (isTouchEvent(event)) {\n return event.changedTouches[0].clientY;\n }\n\n return 0;\n}\n\nexport function dragPrevent(event: React.SyntheticEvent) {\n const target = event.target as HTMLElement;\n\n if (target.tagName === \"A\" || target.tagName === \"IMG\") {\n event.preventDefault();\n }\n}\n\nexport function getSlideStyle(slidesToShow: number): React.CSSProperties {\n const width = `${getSlideWidth(slidesToShow)}%`;\n\n return { width };\n}\n\nexport function getSlideWidth(slidesToShow: number): number {\n return 100 / slidesToShow;\n}\n\nexport function getSlidesToShow(slidesToShow: number, slidesCount: number): number {\n if (slidesToShow <= 0 || slidesCount === 0) {\n return 1;\n }\n\n if (slidesToShow > slidesCount) {\n return slidesCount;\n }\n\n return slidesToShow;\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/** Number -> \"<n>px\", string -> as-is, nullish -> undefined. */\nexport function toCssLength(value?: number | string): string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\n/** Number/string -> string, nullish -> undefined (for unit-less CSS values like aspect-ratio). */\nexport function toCssNumber(value?: number | string): string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return String(value);\n}\n\nexport function getStartSlide(startSlide: number, slidesCount: number): number {\n if (startSlide <= 0 || slidesCount === 0) {\n return 0;\n }\n\n const maxIndex = slidesCount - 1;\n\n if (startSlide > maxIndex) {\n return maxIndex;\n }\n\n return startSlide;\n}\n"],"names":["getActiveSlideDotsLength","slidesCount","slidesToShow","dots","getSlideIndexForMultipleParts","activeIndex","isNextSlideDisabled","dotsLength","isReactEvent","event","isMouseEvent","isTouchEvent","coordX","coordY","dragPrevent","target","getSlideStyle","getSlideWidth","getSlidesToShow","clamp","value","min","max","toCssLength","toCssNumber","getStartSlide","startSlide","maxIndex"],"mappings":"AAEO,SAASA,EAAyBC,GAAqBC,GAA8B;AAC1F,QAAMC,IAAO,KAAK,MAAMF,IAAcC,CAAY;AAElD,SAAOD,IAAcC,MAAiB,IAAIC,IAAO,IAAIA;AACvD;AAEO,SAASC,EACdC,GACAH,GACAD,GACAK,GACQ;AACR,QAAMC,IAAaP,EAAyBC,GAAaC,CAAY;AAErE,SAAIG,MAAgBJ,IAAcC,IACzB,IAGLI,KAAwBD,IAAcH,KAAgBG,MAAgB,IACjEE,IAGLF,MAAgB,IACXJ,IAAcC,MAAiB,IAAIK,IAAaA,IAAa,IAG/DL,IAAe,IAAI,KAAK,MAAMG,IAAcH,CAAY,IAAI,IAAI;AACzE;AAEO,SAASM,EAAaC,GAAoE;AAC/F,SAAO,EAAEA,aAAiB;AAC5B;AAEO,SAASC,EACdD,GACwC;AACxC,SAAQD,EAAaC,CAAK,KAAKA,EAAM,uBAAuB,cAAeA,aAAiB;AAC9F;AAEO,SAASE,EACdF,GACwC;AACxC,SACE,OAAO,eACLD,EAAaC,CAAK,KAAKA,EAAM,uBAAuB,cAAeA,aAAiB;AAE1F;AAEO,SAASG,EAAOH,GAA8E;AACnG,SAAIC,EAAaD,CAAK,IACbA,EAAM,UAGXE,EAAaF,CAAK,IACbA,EAAM,eAAe,CAAC,EAAE,UAG1B;AACT;AAEO,SAASI,EAAOJ,GAA8E;AACnG,SAAIC,EAAaD,CAAK,IACbA,EAAM,UAGXE,EAAaF,CAAK,IACbA,EAAM,eAAe,CAAC,EAAE,UAG1B;AACT;AAEO,SAASK,EAAYL,GAA6B;AACvD,QAAMM,IAASN,EAAM;AAErB,GAAIM,EAAO,YAAY,OAAOA,EAAO,YAAY,UAC/CN,EAAM,eAAA;AAEV;AAEO,SAASO,EAAcd,GAA2C;AAGvE,SAAO,EAAE,OAFK,GAAGe,EAAcf,CAAY,CAAC,IAEnC;AACX;AAEO,SAASe,EAAcf,GAA8B;AAC1D,SAAO,MAAMA;AACf;AAEO,SAASgB,EAAgBhB,GAAsBD,GAA6B;AACjF,SAAIC,KAAgB,KAAKD,MAAgB,IAChC,IAGLC,IAAeD,IACVA,IAGFC;AACT;AAEO,SAASiB,EAAMC,GAAeC,GAAaC,GAAqB;AACrE,SAAO,KAAK,IAAI,KAAK,IAAIF,GAAOC,CAAG,GAAGC,CAAG;AAC3C;AAGO,SAASC,EAAYH,GAA6C;AACvE,MAA2BA,KAAU;AAIrC,WAAO,OAAOA,KAAU,WAAW,GAAGA,CAAK,OAAOA;AACpD;AAGO,SAASI,EAAYJ,GAA6C;AACvE,MAA2BA,KAAU;AAIrC,WAAO,OAAOA,CAAK;AACrB;AAEO,SAASK,EAAcC,GAAoBzB,GAA6B;AAC7E,MAAIyB,KAAc,KAAKzB,MAAgB;AACrC,WAAO;AAGT,QAAM0B,IAAW1B,IAAc;AAE/B,SAAIyB,IAAaC,IACRA,IAGFD;AACT;"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { forwardRef as Ne, useState as D, useRef as S, useMemo as Fe, useEffect as
|
|
3
|
-
import
|
|
1
|
+
import { jsx as a, jsxs as b, Fragment as Ce } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Ne, useState as D, useRef as S, useMemo as Fe, useEffect as U } from "react";
|
|
3
|
+
import V from "clsx";
|
|
4
4
|
import { useSafeLayoutEffect as Me } from "../../../hooks/useSafeLayoutEffect.js";
|
|
5
5
|
import { useForkRef as Re } from "../../../hooks/useForkRef.js";
|
|
6
6
|
import { DropdownMenu as Ve } from "./dropdownMenu.js";
|
|
7
7
|
import { Chip as Ee } from "../../dataDisplay/chip/chip.js";
|
|
8
|
-
import { Icon as
|
|
8
|
+
import { Icon as q } from "../../base/icon/icon.js";
|
|
9
9
|
import { TextFieldWrapper as Le } from "../textField/textFieldWrapper.js";
|
|
10
|
-
const ke = (
|
|
11
|
-
function
|
|
12
|
-
|
|
10
|
+
const ke = (i) => /* @__PURE__ */ a(q, { name: "arrow_drop_down", ...i }), Pe = (i) => /* @__PURE__ */ a(q, { name: "close", size: 20, ...i });
|
|
11
|
+
function $(i) {
|
|
12
|
+
i.preventDefault(), i.stopPropagation();
|
|
13
13
|
}
|
|
14
|
-
const $e = Ne(function(
|
|
14
|
+
const $e = Ne(function(E, G) {
|
|
15
15
|
const {
|
|
16
|
-
className:
|
|
17
|
-
value:
|
|
18
|
-
defaultValue:
|
|
16
|
+
className: L,
|
|
17
|
+
value: _,
|
|
18
|
+
defaultValue: k,
|
|
19
19
|
onChange: C,
|
|
20
|
-
disabled:
|
|
20
|
+
disabled: f,
|
|
21
21
|
readOnly: N,
|
|
22
22
|
name: J,
|
|
23
23
|
multiple: P,
|
|
@@ -25,136 +25,137 @@ const $e = Ne(function(L, q) {
|
|
|
25
25
|
menuMiddleware: X,
|
|
26
26
|
menuNoItemsMessage: Y,
|
|
27
27
|
menuContainer: Z,
|
|
28
|
-
search:
|
|
28
|
+
search: c,
|
|
29
29
|
chips: ee,
|
|
30
30
|
isFocused: K,
|
|
31
31
|
error: O,
|
|
32
|
-
items:
|
|
32
|
+
items: r,
|
|
33
33
|
label: W,
|
|
34
34
|
variant: j = "outlined",
|
|
35
35
|
fullWidth: se,
|
|
36
|
-
helperText:
|
|
37
|
-
onSearch:
|
|
36
|
+
helperText: le,
|
|
37
|
+
onSearch: v,
|
|
38
38
|
resetSearch: y,
|
|
39
|
-
isLoading:
|
|
39
|
+
isLoading: te,
|
|
40
40
|
inline: z,
|
|
41
41
|
endAdornment: ne,
|
|
42
42
|
hideSelectArrowIcon: oe,
|
|
43
|
-
optionRenderer:
|
|
44
|
-
clearable:
|
|
43
|
+
optionRenderer: ae,
|
|
44
|
+
clearable: re,
|
|
45
45
|
creatable: ie,
|
|
46
46
|
onCreate: F,
|
|
47
47
|
virtualized: ce,
|
|
48
|
-
itemHeight:
|
|
49
|
-
"aria-label":
|
|
48
|
+
itemHeight: ue,
|
|
49
|
+
"aria-label": de,
|
|
50
50
|
id: fe,
|
|
51
51
|
...me
|
|
52
|
-
} =
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
} = E, [o, u] = D(!1), [pe, we] = D(k), [m, p] = D(() => {
|
|
53
|
+
const e = _ != null ? _ : k;
|
|
54
|
+
if (Array.isArray(e))
|
|
55
|
+
return r.filter((t) => e.includes(t.value));
|
|
56
|
+
const s = e == null ? void 0 : r.find((t) => t.value === e);
|
|
57
|
+
return s ? [s] : [];
|
|
58
|
+
}), [n, x] = D(""), { current: he } = S(_ != null), h = S(null), be = Re(G, h), A = S(null), H = S(null), l = he ? _ : pe, g = Fe(() => K || o, [K, o]), _e = (e) => {
|
|
58
59
|
var s;
|
|
59
|
-
e.button === 0 && (e.preventDefault(), (s =
|
|
60
|
-
},
|
|
60
|
+
e.button === 0 && (e.preventDefault(), (s = h.current) == null || s.focus(), u(!o));
|
|
61
|
+
}, ve = () => {
|
|
61
62
|
var e;
|
|
62
|
-
u(!1), (e =
|
|
63
|
+
u(!1), (e = h.current) == null || e.focus();
|
|
63
64
|
}, ye = () => {
|
|
64
65
|
var e;
|
|
65
|
-
|
|
66
|
-
},
|
|
66
|
+
c === !0 && ((e = H.current) == null || e.focus());
|
|
67
|
+
}, xe = (e) => {
|
|
67
68
|
N || [" ", "ArrowUp", "ArrowDown", "Enter"].includes(e.key) && (e.preventDefault(), u(!o));
|
|
68
69
|
};
|
|
69
|
-
|
|
70
|
-
(!g ||
|
|
71
|
-
}, [g,
|
|
72
|
-
(
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
70
|
+
U(() => {
|
|
71
|
+
(!g || c === "menu" && !o) && (x(""), y == null || y());
|
|
72
|
+
}, [g, c, o, y]), U(() => {
|
|
73
|
+
if (Array.isArray(l))
|
|
74
|
+
p(r.filter((e) => l.includes(e.value)));
|
|
75
|
+
else if (l == null || l === "")
|
|
76
|
+
p([]);
|
|
76
77
|
else {
|
|
77
|
-
const e =
|
|
78
|
-
|
|
78
|
+
const e = r.find((s) => s.value === l);
|
|
79
|
+
p(e ? [e] : []);
|
|
79
80
|
}
|
|
80
|
-
}, [
|
|
81
|
-
|
|
82
|
-
}, [
|
|
81
|
+
}, [l, r]), Me(() => {
|
|
82
|
+
A.current && (A.current.scrollLeft = A.current.scrollWidth);
|
|
83
|
+
}, [l]);
|
|
83
84
|
const M = (e, s) => {
|
|
84
|
-
C == null || C(e, { ...
|
|
85
|
-
},
|
|
86
|
-
var
|
|
87
|
-
let
|
|
85
|
+
C == null || C(e, { ...E, value: s, name: J || void 0 }), we(s);
|
|
86
|
+
}, Ae = (e, s) => {
|
|
87
|
+
var w;
|
|
88
|
+
let t, d;
|
|
88
89
|
if (P) {
|
|
89
|
-
const B = Array.isArray(
|
|
90
|
-
|
|
90
|
+
const B = Array.isArray(l) ? l : [l].filter(Boolean);
|
|
91
|
+
t = B.slice(), d = m.slice();
|
|
91
92
|
const R = B.findIndex((Se) => Se === s.value);
|
|
92
|
-
R === -1 ? (
|
|
93
|
+
R === -1 ? (t.push(s.value), d.push(s)) : (t.splice(R, 1), d.splice(R, 1));
|
|
93
94
|
} else
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
t = l === s.value ? "" : s.value, d = [s];
|
|
96
|
+
n && x(""), P || (u(!1), (w = h.current) == null || w.focus()), p(d), M(e, t);
|
|
96
97
|
}, T = (e) => {
|
|
97
|
-
|
|
98
|
+
x(e.target.value), v == null || v(e), o || u(!0);
|
|
98
99
|
}, ge = (e) => (s) => {
|
|
99
|
-
if (Array.isArray(
|
|
100
|
-
const
|
|
101
|
-
M(s,
|
|
102
|
-
const
|
|
103
|
-
|
|
100
|
+
if (Array.isArray(l)) {
|
|
101
|
+
const t = l.filter((w) => e !== w);
|
|
102
|
+
M(s, t);
|
|
103
|
+
const d = m.filter((w) => w.value !== e);
|
|
104
|
+
p(d);
|
|
104
105
|
}
|
|
105
106
|
}, Ie = (e) => {
|
|
106
|
-
M(e, []),
|
|
107
|
+
M(e, []), p([]);
|
|
107
108
|
};
|
|
108
109
|
let I;
|
|
109
|
-
const De =
|
|
110
|
+
const De = V("smwb-select-field", L, {
|
|
110
111
|
"smwb-select-field--filled": j === "filled" && W,
|
|
111
|
-
"smwb-select-field--disabled":
|
|
112
|
-
"smwb-select-field--search":
|
|
112
|
+
"smwb-select-field--disabled": f,
|
|
113
|
+
"smwb-select-field--search": c,
|
|
113
114
|
"smwb-select-field--inline": z
|
|
114
115
|
});
|
|
115
|
-
return ee ? I =
|
|
116
|
-
/* @__PURE__ */
|
|
116
|
+
return ee ? I = m.map(({ key: e, value: s, text: t }) => /* @__PURE__ */ a(Ee, { label: t, onDelete: ge(s), onDeleteMouseDown: $ }, e || s)) : I = m.map((e) => e.text).join(", "), /* @__PURE__ */ b(Ce, { children: [
|
|
117
|
+
/* @__PURE__ */ a(
|
|
117
118
|
Le,
|
|
118
119
|
{
|
|
119
120
|
label: W,
|
|
120
|
-
helperText:
|
|
121
|
+
helperText: le,
|
|
121
122
|
variant: j,
|
|
122
|
-
disabled:
|
|
123
|
-
className:
|
|
123
|
+
disabled: f,
|
|
124
|
+
className: L,
|
|
124
125
|
error: O,
|
|
125
126
|
fullWidth: se,
|
|
126
|
-
isFilledState: !!
|
|
127
|
+
isFilledState: !!m.length || !!n,
|
|
127
128
|
isFocused: g,
|
|
128
129
|
inline: z,
|
|
129
130
|
...me,
|
|
130
|
-
children: /* @__PURE__ */
|
|
131
|
+
children: /* @__PURE__ */ b(
|
|
131
132
|
"span",
|
|
132
133
|
{
|
|
133
134
|
ref: be,
|
|
134
135
|
id: fe,
|
|
135
136
|
className: De,
|
|
136
|
-
tabIndex:
|
|
137
|
+
tabIndex: f ? void 0 : 0,
|
|
137
138
|
role: "button",
|
|
138
139
|
"aria-haspopup": "listbox",
|
|
139
140
|
"aria-expanded": o,
|
|
140
|
-
"aria-disabled":
|
|
141
|
-
"aria-label":
|
|
142
|
-
onMouseDown:
|
|
141
|
+
"aria-disabled": f || void 0,
|
|
142
|
+
"aria-label": de,
|
|
143
|
+
onMouseDown: f || N ? void 0 : _e,
|
|
143
144
|
onFocus: ye,
|
|
144
|
-
onKeyDown:
|
|
145
|
+
onKeyDown: xe,
|
|
145
146
|
"data-testid": "select-field",
|
|
146
147
|
children: [
|
|
147
|
-
/* @__PURE__ */
|
|
148
|
-
I && /* @__PURE__ */
|
|
149
|
-
|
|
150
|
-
/* @__PURE__ */
|
|
151
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ b("span", { className: "smwb-select-field__search-wrapper", ref: A, children: [
|
|
149
|
+
I && /* @__PURE__ */ a("span", { className: "smwb-select-field__values", children: I }),
|
|
150
|
+
c && typeof c == "boolean" && !N && /* @__PURE__ */ b("span", { className: "smwb-select-field__search", children: [
|
|
151
|
+
/* @__PURE__ */ a("span", { className: "smwb-select-field__search-text", children: n }),
|
|
152
|
+
/* @__PURE__ */ a(
|
|
152
153
|
"input",
|
|
153
154
|
{
|
|
154
155
|
className: "smwb-select-field__search-input",
|
|
155
156
|
ref: H,
|
|
156
157
|
type: "text",
|
|
157
|
-
value:
|
|
158
|
+
value: n,
|
|
158
159
|
onChange: T,
|
|
159
160
|
onMouseDown: (e) => {
|
|
160
161
|
e.stopPropagation(), u(!0);
|
|
@@ -167,22 +168,22 @@ const $e = Ne(function(L, q) {
|
|
|
167
168
|
)
|
|
168
169
|
] })
|
|
169
170
|
] }),
|
|
170
|
-
/* @__PURE__ */
|
|
171
|
-
(Array.isArray(
|
|
171
|
+
/* @__PURE__ */ b("span", { className: "smwb-select-field__actions", children: [
|
|
172
|
+
(Array.isArray(l) && l.length > 0 || re && m.length > 0) && !f && /* @__PURE__ */ a(
|
|
172
173
|
Pe,
|
|
173
174
|
{
|
|
174
175
|
onClick: Ie,
|
|
175
|
-
onMouseDown:
|
|
176
|
-
className:
|
|
176
|
+
onMouseDown: $,
|
|
177
|
+
className: V("smwb-select-field__icon", "smwb-select-field__icon--close"),
|
|
177
178
|
"aria-label": "Clear selection",
|
|
178
179
|
role: "button"
|
|
179
180
|
}
|
|
180
181
|
),
|
|
181
182
|
ne,
|
|
182
|
-
!oe && /* @__PURE__ */
|
|
183
|
+
!oe && /* @__PURE__ */ a(
|
|
183
184
|
ke,
|
|
184
185
|
{
|
|
185
|
-
className:
|
|
186
|
+
className: V("smwb-select-field__icon", "smwb-select-field__icon--arrow", {
|
|
186
187
|
"smwb-select-field__icon--opened": o,
|
|
187
188
|
"smwb-select-field__icon--focused": g,
|
|
188
189
|
"smwb-select-field__icon--error": O
|
|
@@ -195,30 +196,30 @@ const $e = Ne(function(L, q) {
|
|
|
195
196
|
)
|
|
196
197
|
}
|
|
197
198
|
),
|
|
198
|
-
/* @__PURE__ */
|
|
199
|
+
/* @__PURE__ */ a(
|
|
199
200
|
Ve,
|
|
200
201
|
{
|
|
201
|
-
anchorElementRef:
|
|
202
|
+
anchorElementRef: h,
|
|
202
203
|
menuMaxHeight: Q,
|
|
203
204
|
menuMiddleware: X,
|
|
204
|
-
search:
|
|
205
|
+
search: c === "menu",
|
|
205
206
|
onSearchInputChange: T,
|
|
206
|
-
optionRenderer:
|
|
207
|
-
items:
|
|
208
|
-
searchValue:
|
|
207
|
+
optionRenderer: ae,
|
|
208
|
+
items: v ? r : n ? r.filter((e) => e.text.search(new RegExp(n, "i")) !== -1) : r,
|
|
209
|
+
searchValue: n,
|
|
209
210
|
isOpen: o,
|
|
210
|
-
onClose:
|
|
211
|
-
onItemClick:
|
|
212
|
-
value:
|
|
213
|
-
isLoading:
|
|
211
|
+
onClose: ve,
|
|
212
|
+
onItemClick: Ae,
|
|
213
|
+
value: l,
|
|
214
|
+
isLoading: te,
|
|
214
215
|
menuNoItemsMessage: Y,
|
|
215
216
|
container: Z,
|
|
216
217
|
virtualized: ce,
|
|
217
|
-
itemHeight:
|
|
218
|
-
createOption: ie &&
|
|
219
|
-
text: `Создать "${
|
|
218
|
+
itemHeight: ue,
|
|
219
|
+
createOption: ie && n && !r.some((e) => e.text.toLowerCase() === String(n).toLowerCase()) ? {
|
|
220
|
+
text: `Создать "${n}"`,
|
|
220
221
|
onCreate: (e) => {
|
|
221
|
-
F == null || F(String(
|
|
222
|
+
F == null || F(String(n), e), x(""), u(!1);
|
|
222
223
|
}
|
|
223
224
|
} : void 0
|
|
224
225
|
}
|