{"version":3,"file":"Carousel.cjs","sources":["../../../../src/lib/Carousel/Carousel.tsx"],"sourcesContent":["import type {FC, ReactNode} from 'react';\nimport {Children, useMemo} from 'react';\nimport classNames from 'classnames';\nimport {useLocalTheme} from 'css-vars-hook';\n\nimport {useAutoRotate} from '@/lib/Carousel/useAutoRotate.ts';\nimport {IconArrowLeft, IconArrowRight} from '@/internal/Icons';\n\nimport {useResponsiveWidth} from './useResponsiveWidth.ts';\nimport {useCarouselRotation} from './useCarouselRotation.ts';\nimport {Cell} from './Cell.tsx';\nimport {Dots} from './Dots.tsx';\nimport classes from './Carousel.module.css';\n\nexport type Props = {\n    /** Carousel with in pixels */\n    width: number;\n    /** Carousel height in pixels */\n    height: number;\n    children?: ReactNode;\n    /** Initially visible cell index */\n    defaultVisible?: number;\n    /** Show navigation dots */\n    showDots?: boolean;\n    /** Enable arrow navigation */\n    showArrows?: boolean;\n    /** Callback when a user clicks navigation arrows */\n    onRotate?: (index: number) => void;\n    /** Enable to see display backstage */\n    exposedMode?: boolean;\n    /** Provide a time interval in seconds to auto rotate Carousel */\n    autoRotate?: number;\n};\n\nexport const Carousel: FC<Props> = ({\n    children,\n    width,\n    height,\n    defaultVisible = 0,\n    showDots = true,\n    showArrows = true,\n    onRotate = () => {},\n    exposedMode = false,\n    autoRotate,\n}) => {\n    const cellsAmount = Children.toArray(children).length;\n\n    const {visibleCellIndex, rotateRight, rotateLeft, rotations, handleRotate} =\n        useCarouselRotation({\n            defaultVisible,\n            cellsAmount,\n            onRotate,\n        });\n\n    const {LocalRoot, ref} = useLocalTheme<HTMLDivElement>();\n\n    const responsiveWidth = useResponsiveWidth({width, ref});\n\n    const theme = useMemo(\n        () => ({\n            'aspect-ratio': width / height,\n            width: width,\n            'responsive-width': responsiveWidth,\n            'cells-amount': cellsAmount,\n            rotations: rotations,\n        }),\n        [width, height, responsiveWidth, cellsAmount, rotations]\n    );\n\n    const cells = useMemo(\n        () =>\n            Children.toArray(children).map((element, index) => {\n                return (\n                    <Cell index={index} key={index}>\n                        {element}\n                    </Cell>\n                );\n            }),\n        [children]\n    );\n\n    useAutoRotate({\n        rotateFn: handleRotate,\n        interval: autoRotate && autoRotate * 1000,\n        ref,\n    });\n\n    return (\n        <LocalRoot theme={theme} className={classes.carousel}>\n            <div\n                className={classNames(classes.scene, {\n                    [classes.normal]: !exposedMode,\n                    [classes.exposed]: exposedMode,\n                })}>\n                {showArrows && (\n                    <button\n                        className={classNames(classes.navigation, classes.left)}\n                        onClick={rotateLeft}>\n                        <IconArrowLeft className={classes.icon} />\n                    </button>\n                )}\n                <div className={classes.viewport}>{cells}</div>\n                {showArrows && (\n                    <button\n                        className={classNames(classes.navigation, classes.right)}\n                        onClick={rotateRight}>\n                        <IconArrowRight className={classes.icon} />\n                    </button>\n                )}\n            </div>\n            {showDots && <Dots amount={cellsAmount} active={visibleCellIndex} />}\n        </LocalRoot>\n    );\n};\n"],"names":["Carousel","children","width","height","defaultVisible","showDots","showArrows","onRotate","exposedMode","autoRotate","cellsAmount","Children","visibleCellIndex","rotateRight","rotateLeft","rotations","handleRotate","useCarouselRotation","LocalRoot","ref","useLocalTheme","responsiveWidth","useResponsiveWidth","theme","useMemo","cells","element","index","jsx","Cell","useAutoRotate","jsxs","classes","classNames","IconArrowLeft","IconArrowRight","Dots"],"mappings":"sfAkCaA,EAAsB,CAAC,CAChC,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,eAAAC,EAAiB,EACjB,SAAAC,EAAW,GACX,WAAAC,EAAa,GACb,SAAAC,EAAW,IAAM,CAAC,EAClB,YAAAC,EAAc,GACd,WAAAC,CACJ,IAAM,CACF,MAAMC,EAAcC,EAAAA,SAAS,QAAQV,CAAQ,EAAE,OAEzC,CAAC,iBAAAW,EAAkB,YAAAC,EAAa,WAAAC,EAAY,UAAAC,EAAW,aAAAC,CAAA,EACzDC,sBAAoB,CAChB,eAAAb,EACA,YAAAM,EACA,SAAAH,CAAA,CACH,EAEC,CAAC,UAAAW,EAAW,IAAAC,CAAA,EAAOC,gBAAA,EAEnBC,EAAkBC,EAAAA,mBAAmB,CAAC,MAAApB,EAAO,IAAAiB,EAAI,EAEjDI,EAAQC,EAAAA,QACV,KAAO,CACH,eAAgBtB,EAAQC,EACxB,MAAAD,EACA,mBAAoBmB,EACpB,eAAgBX,EAChB,UAAAK,CAAA,GAEJ,CAACb,EAAOC,EAAQkB,EAAiBX,EAAaK,CAAS,CAAA,EAGrDU,EAAQD,EAAAA,QACV,IACIb,EAAAA,SAAS,QAAQV,CAAQ,EAAE,IAAI,CAACyB,EAASC,IAEjCC,EAAAA,IAACC,EAAAA,KAAA,CAAK,MAAAF,EACD,SAAAD,CAAA,EADoBC,CAEzB,CAEP,EACL,CAAC1B,CAAQ,CAAA,EAGb6B,OAAAA,gBAAc,CACV,SAAUd,EACV,SAAUP,GAAcA,EAAa,IACrC,IAAAU,CAAA,CACH,EAGGY,EAAAA,KAACb,EAAA,CAAU,MAAAK,EAAc,UAAWS,EAAAA,QAAQ,SACxC,SAAA,CAAAD,EAAAA,KAAC,MAAA,CACG,UAAWE,EAAWD,EAAAA,QAAQ,MAAO,CACjC,CAACA,EAAAA,QAAQ,MAAM,EAAG,CAACxB,EACnB,CAACwB,EAAAA,QAAQ,OAAO,EAAGxB,CAAA,CACtB,EACA,SAAA,CAAAF,GACGsB,EAAAA,IAAC,SAAA,CACG,UAAWK,EAAWD,EAAAA,QAAQ,WAAYA,EAAAA,QAAQ,IAAI,EACtD,QAASlB,EACT,SAAAc,EAAAA,IAACM,EAAAA,cAAA,CAAc,UAAWF,EAAAA,QAAQ,IAAA,CAAM,CAAA,CAAA,EAGhDJ,EAAAA,IAAC,MAAA,CAAI,UAAWI,EAAAA,QAAQ,SAAW,SAAAP,EAAM,EACxCnB,GACGsB,EAAAA,IAAC,SAAA,CACG,UAAWK,EAAWD,EAAAA,QAAQ,WAAYA,EAAAA,QAAQ,KAAK,EACvD,QAASnB,EACT,SAAAe,EAAAA,IAACO,EAAAA,eAAA,CAAe,UAAWH,EAAAA,QAAQ,IAAA,CAAM,CAAA,CAAA,CAC7C,CAAA,CAAA,EAGP3B,GAAYuB,EAAAA,IAACQ,OAAA,CAAK,OAAQ1B,EAAa,OAAQE,CAAA,CAAkB,CAAA,EACtE,CAER"}