{"version":3,"file":"viz-carousel-C6nv-LG4.cjs","names":["__iconNode","createLucideIcon","createLucideIcon"],"sources":["../node_modules/lucide-react/dist/esm/icons/pause.js","../node_modules/lucide-react/dist/esm/icons/play.js","../src/components/ui/viz-carousel.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n  [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\",\n      key: \"10ikf1\"\n    }\n  ]\n];\nconst Play = createLucideIcon(\"play\", __iconNode);\n\nexport { __iconNode, Play as default };\n//# sourceMappingURL=play.js.map\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronLeft, ChevronRight, PauseIcon, PlayIcon } from 'lucide-react';\nimport {\n  type CSSProperties,\n  forwardRef,\n  type HTMLAttributes,\n  type ReactNode,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { cn } from '@/lib/utils';\nimport { P } from './typography';\n\nconst cardVariants = cva('flex box-border justify-between', {\n  variants: {\n    vizWidth: {\n      xs: 'w-3/4 flex-col pr-0 @2xl:pr-2 rtl:pr-0 @2xl:rtl:pl-2 rtl:pl-0 gap-4 min-w-60 grow pb-8 @2xl:pb-4',\n      sm: 'w-2/3 flex-col pr-0 @2xl:pr-2 rtl:pr-0 @2xl:rtl:pl-2 rtl:pl-0 gap-4 min-w-60 grow pb-8 @2xl:pb-4',\n      base: 'w-1/2 flex-col pr-0 @2xl:pr-2 rtl:pr-0 @2xl:rtl:pl-2 rtl:pl-0 gap-4 min-w-60 grow pb-8 @2xl:pb-4',\n      lg: 'w-1/3 flex-col pr-0 @2xl:pr-2 rtl:pr-0 @2xl:rtl:pl-2 rtl:pl-0 gap-4 min-w-60 grow pb-8 @2xl:pb-4',\n      xl: 'w-1/4 flex-col pr-0 @2xl:pr-2 rtl:pr-0 @2xl:rtl:pl-2 rtl:pl-0 gap-4 min-w-60 grow pb-8 @2xl:pb-4',\n      full: 'w-full shrink-0 items-start gap-x-8 gap-y-4 mb-4 flex-wrap @2xl:flex-nowrap',\n    },\n  },\n  defaultVariants: { vizWidth: 'base' },\n});\n\nconst vizContainerVariants = cva('flex box-border grow shrink-0', {\n  variants: {\n    vizWidth: {\n      xs: 'w-1/4 pl-0 @2xl:pl-2 rtl:pr-0 rtl:pl-0 @2xl:rtl:pr-2 min-w-60 pb-0 @2xl:pb-4',\n      sm: 'w-1/3 pl-0 @2xl:pl-2 rtl:pr-0 rtl:pl-0 @2xl:rtl:pr-2 min-w-60 pb-0 @2xl:pb-4',\n      base: 'w-1/2 pl-0 @2xl:pl-2 rtl:pr-0 rtl:pl-0 @2xl:rtl:pr-2 min-w-60 pb-0 @2xl:pb-4',\n      lg: 'w-2/3 pl-0 @2xl:pl-2 rtl:pr-0 rtl:pl-0 @2xl:rtl:pr-2 min-w-60 pb-0 @2xl:pb-4',\n      xl: 'w-3/4 pl-0 @2xl:pl-2 rtl:pr-0 rtl:pl-0 @2xl:rtl:pr-2 min-w-60 pb-0 @2xl:pb-4',\n      full: 'w-full',\n    },\n  },\n  defaultVariants: { vizWidth: 'base' },\n});\n\ninterface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {\n  slides: {\n    content: ReactNode;\n    viz: ReactNode;\n  }[];\n  slideNo?: boolean;\n  autoScroll?: boolean | number;\n  classNames?: {\n    content?: string;\n    viz?: string;\n    arrowButton?: string;\n    arrows?: string;\n    playPauseButton?: string;\n    playPauseIcon?: string;\n    progressBar?: string;\n    progressBarBg?: string;\n  };\n  styles?: {\n    content?: CSSProperties;\n    viz?: CSSProperties;\n    arrowButton?: CSSProperties;\n    arrows?: CSSProperties;\n    playPauseButton?: CSSProperties;\n    playPauseIcon?: CSSProperties;\n    progressBar?: CSSProperties;\n    progressBarBg?: CSSProperties;\n  };\n}\n\nconst VizCarousel = forwardRef<HTMLDivElement, CardProps>(\n  (\n    {\n      className,\n      vizWidth,\n      slides,\n      styles,\n      classNames,\n      slideNo = true,\n      autoScroll = false,\n      ...props\n    },\n    ref,\n  ) => {\n    const WrapperRef = useRef<HTMLDivElement>(null);\n    const slideRefs = useRef<(HTMLDivElement | null)[]>([]);\n    const intervalRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    const [paused, setPaused] = useState(false);\n    const [mouseOver, setMouseOver] = useState(false);\n    const [slide, setSlide] = useState(1);\n    const [progress, setProgress] = useState(0);\n    const progressInterval = 50;\n    useEffect(() => {\n      const observer = new IntersectionObserver(\n        (entries) => {\n          const visible = entries\n            .filter((entry) => entry.isIntersecting)\n            .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n\n          if (visible.length > 0) {\n            // biome-ignore lint/complexity/useIndexOf: It give other linting error\n            const index = slideRefs.current.findIndex((ref) => ref === visible[0].target);\n            if (index !== -1) setSlide(index + 1);\n          }\n        },\n        {\n          root: WrapperRef.current,\n          threshold: 1,\n        },\n      );\n\n      slideRefs.current.forEach((ref) => {\n        if (ref) observer.observe(ref);\n      });\n\n      return () => {\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        slideRefs.current.forEach((ref) => {\n          if (ref) observer.unobserve(ref);\n        });\n      };\n    }, []);\n\n    useEffect(() => {\n      if (!autoScroll) return;\n      const interval = typeof autoScroll === 'number' ? autoScroll : 5000;\n      let currentProgress = progress;\n      if (intervalRef.current) {\n        clearInterval(intervalRef.current);\n      }\n      if (!paused && !mouseOver) {\n        intervalRef.current = setInterval(() => {\n          currentProgress += (progressInterval / interval) * 100;\n\n          if (currentProgress >= 100) {\n            currentProgress = 0;\n            setProgress(0);\n            if (!WrapperRef.current) return;\n            const parentWithDir = WrapperRef.current.closest('[dir]');\n            const isRTL = parentWithDir?.getAttribute('dir') === 'rtl';\n            const scrollBy = isRTL ? -280 : 280;\n\n            if (slide === slides.length) {\n              WrapperRef.current.scrollTo({\n                left: isRTL ? WrapperRef.current.scrollWidth : 0,\n                behavior: 'smooth',\n              });\n              setSlide(1);\n            } else {\n              WrapperRef.current.scrollBy({\n                left: scrollBy,\n                behavior: 'smooth',\n              });\n              setSlide((prev) => prev + 1);\n            }\n          } else {\n            setProgress(currentProgress);\n          }\n        }, progressInterval);\n      }\n      return () => {\n        if (intervalRef.current) {\n          clearInterval(intervalRef.current);\n        }\n      };\n    }, [autoScroll, mouseOver, paused, slide, slides.length, progress]);\n\n    return (\n      // biome-ignore lint/a11y/noStaticElementInteractions: Div here for carousel element\n      <div\n        ref={ref}\n        onMouseEnter={() => setMouseOver(true)}\n        onMouseLeave={() => setMouseOver(false)}\n        className='@container w-full'\n      >\n        {autoScroll ? (\n          <div\n            className={cn(\n              'mb-4 h-4 w-full overflow-hidden rounded-full bg-surface-sm',\n              classNames?.progressBarBg,\n            )}\n            style={styles?.progressBarBg}\n          >\n            <div\n              className={cn(\n                'h-full bg-accent-yellow transition-all duration-100 ease-linear',\n                classNames?.progressBar,\n              )}\n              style={{ ...styles?.progressBar, width: `${progress}%` }}\n            />\n          </div>\n        ) : null}\n        <div\n          ref={WrapperRef}\n          className={cn(\n            'undp-scrollbar mr-auto mb-0 ml-auto flex w-full snap-x snap-mandatory scroll-p-0 scroll-pl-0 gap-6 overflow-x-auto pb-4',\n            className,\n          )}\n          {...props}\n        >\n          {slides.map((d, i) => (\n            <div\n              // biome-ignore lint/suspicious/noArrayIndexKey: order doesn't matter here\n              key={`slide_no_${i}`}\n              ref={(el) => {\n                slideRefs.current[i] = el;\n              }}\n              className={`box-border flex w-full shrink-0 snap-start flex-wrap ${vizWidth === 'full' ? 'flex-col items-start' : 'flex-row items-stretch'}`}\n            >\n              <div\n                style={styles?.content}\n                className={cn(cardVariants({ vizWidth }), classNames?.content)}\n              >\n                <div className='min-w-60 grow sm:grow-0'>{d.content}</div>\n                <div className={`flex ${slideNo ? 'gap-2' : 'gap-3'} shrink-0 items-center`}>\n                  <button\n                    style={styles?.arrowButton}\n                    type='button'\n                    className={cn(\n                      `flex @3xl:h-12 h-9 @3xl:w-12 w-9 items-center justify-center rounded-full border-0 bg-foreground pr-1 rtl:rotate-180`,\n                      slide === 1\n                        ? 'cursor-not-allowed opacity-disabled'\n                        : 'cursor-pointer hover:bg-forground-soft',\n                      classNames?.arrowButton,\n                    )}\n                    onClick={() => {\n                      if (WrapperRef.current && slide !== 1) {\n                        const parentWithDir = WrapperRef.current.closest('[dir]');\n                        const scrollBy = parentWithDir?.getAttribute('dir') === 'rtl' ? 280 : -280;\n                        setSlide(slide - 1);\n                        WrapperRef.current.scrollBy(scrollBy, 0);\n                      }\n                    }}\n                  >\n                    <ChevronLeft\n                      style={styles?.arrows}\n                      className={cn('h-6 w-6 text-content-reverse', classNames?.arrows)}\n                    />\n                  </button>\n                  {slideNo ? (\n                    <P marginBottom='none' className='shrink-0 px-2!'>\n                      {slide} / {slides.length}\n                    </P>\n                  ) : null}\n                  <button\n                    className={cn(\n                      `flex @3xl:h-12 h-9 @3xl:w-12 w-9 items-center justify-center rounded-full border-0 bg-foreground pl-1 rtl:rotate-180`,\n                      slide === slides.length\n                        ? 'cursor-not-allowed opacity-disabled'\n                        : 'cursor-pointer hover:bg-forground-soft',\n                      classNames?.arrowButton,\n                    )}\n                    type='button'\n                    style={styles?.arrowButton}\n                    onClick={() => {\n                      if (WrapperRef.current && slide !== slides.length) {\n                        const parentWithDir = WrapperRef.current.closest('[dir]');\n                        const scrollBy = parentWithDir?.getAttribute('dir') === 'rtl' ? -280 : 280;\n                        setSlide(slide + 1);\n                        WrapperRef.current.scrollBy(scrollBy, 0);\n                      }\n                    }}\n                  >\n                    <ChevronRight\n                      style={styles?.arrows}\n                      className={cn('h-6 w-6 text-content-reverse', classNames?.arrows)}\n                    />\n                  </button>\n                  {autoScroll ? (\n                    <button\n                      type='button'\n                      style={styles?.playPauseButton}\n                      className={cn(\n                        'flex @3xl:h-12 h-9 @3xl:w-12 w-9 cursor-pointer items-center justify-center rounded-full border-2 border-stroke-2xl bg-transparent hover:bg-surface-hover',\n                        classNames?.playPauseButton,\n                      )}\n                      onClick={() => {\n                        setPaused(!paused);\n                      }}\n                    >\n                      {paused ? (\n                        <PlayIcon\n                          style={styles?.playPauseIcon}\n                          strokeWidth={2}\n                          className={cn('h-6 w-6 text-content-primary', classNames?.playPauseIcon)}\n                        />\n                      ) : (\n                        <PauseIcon\n                          strokeWidth={2}\n                          style={styles?.playPauseIcon}\n                          className={cn('h-6 w-6 text-content-primary', classNames?.playPauseIcon)}\n                        />\n                      )}\n                    </button>\n                  ) : null}\n                </div>\n              </div>\n              <div\n                style={styles?.viz}\n                className={cn(vizContainerVariants({ vizWidth }), classNames?.viz)}\n              >\n                {d.viz}\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  },\n);\nVizCarousel.displayName = 'VizCarousel';\n\nexport { VizCarousel };\n"],"x_google_ignoreList":[0,1],"mappings":"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"}