{"version":3,"file":"Carousel-BvSYgBiK.js","sources":["../../../app/javascript/components/types/Carousel.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport { useRef, useState } from \"react\";\n\nimport Dispatcher from \"@/components/types/Dispatcher\";\nimport classNames from \"classnames\";\nimport cn from \"./Carousel.module.css\";\n\nconst LABELS = {\n flexbox: \"Flexbox\",\n backgrounds: \"Backgrounds\",\n colors: \"Colors\",\n \"margin-padding-gap\": \"Margin/Padding/Gap\",\n tables: \"Tables\",\n transforms: \"Transforms\",\n \"transitions-animations\": \"Transitions and Animations\",\n typography: \"Typography\",\n\n \"align-basic\": \"Flexbox\",\n \"container-basic\": \"Flexbox\",\n \"intro-container\": \"Flex Forms\",\n \"intro-basic\": \"Column System\",\n \"alpha-hex\": \"Transparency\",\n \"gap-basic\": \"Gaps\",\n \"gradient-conic\": \"Gradients\",\n \"gradient-linear-multiple\": \"Linear Gradients\",\n \"image-gradient\": \"Background Overlays\",\n \"order-pagination\": \"Pagination\",\n \"grow-basic\": \"Flex Grow\",\n \"justify-basic\": \"Flex Justify\",\n \"other-blend-mode\": \"Blend Modes\",\n \"horizontal-auto\": \"Centering\",\n \"padding-balance\": \"Visual Balance\",\n \"horizontal-flexbox\": \"Flex Centering\",\n \"horizontal-negative\": \"Negative Margins\",\n \"intro-space\": \"Balanced Spacing\",\n \"intro-interchangeable\": \"Choosing between Margin/Padding/Gap\",\n \"vertical-margin-not-last\": \"Pseudo Elements\",\n \"span-col\": \"Tables\",\n \"card-basic\": \"Perspective\",\n \"card-hover\": \"Flip Card\",\n \"rotate-3d\": \"3D Transforms\",\n \"translate-list\": \"Translations\",\n \"property-transform\": \"Transitions\",\n \"direction-basic\": \"Animations\",\n \"playstate-basic\": \"Playstate\",\n \"timing-basic\": \"Animations\",\n \"align-start\": \"Text Align\",\n \"web-typo\": \"Typography\",\n \"dark-palette\": \"Dark Mode\",\n \"primary-secondary\": \"Dark Mode\",\n\n \"size-simple\": \"Typography\",\n \"property-several\": \"Hover Transitions\",\n \"perspective-parent\": \"3D Transforms\",\n \"padding-four\": \"Padding\",\n \"margin-auto\": \"Centering\",\n \"gap-both\": \"Flex Gaps\",\n \"align-all\": \"Flex Alignment\",\n \"grow-more\": \"Flex Grow\",\n \"justify-end\": \"Flex Justify\",\n \"alpha-rgba\": \"Transparency\",\n \"dark-buttons\": \"Dark Mode\",\n \"gradient-radial\": \"Gradients\",\n \"multiple-image\": \"Backgrounds\",\n \"intro-form\": \"Responsive Form\",\n \"other-origin\": \"2D Transforms\",\n};\n\nfunction Carousel({ kind, componentIds, byId }) {\n const carouselRef = useRef();\n const [currentIndex, setCurrentIndex] = useState(0);\n const [offset, setOffset] = useState(0);\n\n const handleTabClick = (e, index) => {\n e.preventDefault();\n setCurrentIndex(index);\n\n const offset = e.target.offsetLeft;\n const half = e.target.offsetWidth / 2;\n const midpoint = carouselRef.current.offsetWidth / 2;\n\n if (offset + half > midpoint) {\n setOffset(offset + half - midpoint);\n } else {\n setOffset(0);\n }\n };\n\n const carouselCN = classNames({\n [cn.carousel]: true,\n [cn[`is-${kind}`]]: true,\n [cn[`is-${currentIndex + 1}`]]: true,\n });\n\n const tabsStyle = {\n transform: `translateX(-${offset}px)`,\n };\n\n const carouselStyle = {\n \"--index\": currentIndex,\n };\n\n return (\n