{"version":3,"sources":["../src/components/Carousel/Carousel.context.ts","../src/components/Carousel/CarouselPanels.tsx","../src/components/Carousel/CarouselSlide.tsx","../src/components/Carousel/CarouselControls.tsx","../src/components/Carousel/CarouselSteps.tsx","../src/components/Carousel/Carousel.tsx"],"names":["createContext","useContext","forwardRef","Children","useRef","useState","useEffect","isValidElement","jsx","cn","jsxs","useControllableState","useCallback","useMemo"],"mappings":"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","file":"chunk-6SO2ZX3J.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CarouselContextValue } from \"./Carousel.types\";\n\nexport const CarouselContext = createContext<CarouselContextValue | null>(null);\nCarouselContext.displayName = \"CarouselContext\";\n\nexport function useCarousel(): CarouselContextValue {\n  const ctx = useContext(CarouselContext);\n  if (!ctx) {\n    throw new Error(\"Carousel compound components must be used within <Carousel>\");\n  }\n  return ctx;\n}\n","import { Children, forwardRef, isValidElement, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselPanelsProps, CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselPanels = forwardRef<HTMLDivElement, CarouselPanelsProps>(\n  ({ children, className, transition = \"none\" }, ref) => {\n    const { activeIndex, registerSlides, registerSlideNames } = useCarousel();\n    const slides = Children.toArray(children);\n    const prevIndexRef = useRef(activeIndex);\n    const [transitionState, setTransitionState] = useState<\"enter\" | \"idle\">(\"idle\");\n\n    // Register slide count\n    useEffect(() => {\n      registerSlides(slides.length);\n    }, [slides.length, registerSlides]);\n\n    // Register slide names from the `name` prop on each Carousel.Slide\n    useEffect(() => {\n      const names = slides.map((slide) => {\n        if (isValidElement<CarouselSlideProps>(slide) && slide.props.name) {\n          return slide.props.name;\n        }\n        return \"\";\n      });\n      registerSlideNames(names);\n    }, [slides.length, registerSlideNames]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    // Handle fade transition when activeIndex changes\n    useEffect(() => {\n      if (transition !== \"fade\") {\n        return;\n      }\n\n      if (prevIndexRef.current !== activeIndex) {\n        setTransitionState(\"enter\");\n        const timer = setTimeout(() => {\n          setTransitionState(\"idle\");\n        }, 300);\n        prevIndexRef.current = activeIndex;\n        return () => clearTimeout(timer);\n      }\n    }, [activeIndex, transition]);\n\n    if (transition === \"fade\") {\n      return (\n        <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n          <div\n            key={activeIndex}\n            className={cn(\n              transitionState === \"enter\" && \"fancy-fade-in\",\n            )}\n            style={{\n              animationDuration: transitionState === \"enter\" ? \"300ms\" : undefined,\n            }}\n          >\n            {slides[activeIndex]}\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div ref={ref} data-react-fancy-carousel-panels=\"\" className={cn(\"relative overflow-hidden\", className)}>\n        {slides[activeIndex]}\n      </div>\n    );\n  },\n);\n\nCarouselPanels.displayName = \"CarouselPanels\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { CarouselSlideProps } from \"./Carousel.types\";\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n  ({ children, className, name: _name }, ref) => {\n    return (\n      <div ref={ref} data-react-fancy-carousel-slide=\"\" className={cn(\"w-full\", className)}>\n        {children}\n      </div>\n    );\n  },\n);\n\nCarouselSlide.displayName = \"CarouselSlide\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselControlsProps } from \"./Carousel.types\";\n\nexport const CarouselControls = forwardRef<HTMLDivElement, CarouselControlsProps>(\n  (\n    {\n      className,\n      prevLabel,\n      nextLabel,\n      finishLabel,\n    },\n    ref,\n  ) => {\n    const { prev, next, activeIndex, totalSlides, variant, loop, onFinish, headless } = useCarousel();\n\n    if (headless) {\n      return null;\n    }\n\n    const isFirst = activeIndex === 0;\n    const isLast = activeIndex === totalSlides - 1;\n\n    if (variant === \"wizard\") {\n      return (\n        <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n          <button\n            type=\"button\"\n            onClick={prev}\n            disabled={isFirst}\n            className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n          >\n            {prevLabel ?? \"Back\"}\n          </button>\n          {isLast ? (\n            <button\n              type=\"button\"\n              onClick={onFinish}\n              className=\"rounded-lg border border-blue-500 bg-blue-500 px-3 py-1 text-sm text-white hover:bg-blue-600\"\n            >\n              {finishLabel ?? \"Finish\"}\n            </button>\n          ) : (\n            <button\n              type=\"button\"\n              onClick={next}\n              className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n            >\n              {nextLabel ?? \"Next\"}\n            </button>\n          )}\n        </div>\n      );\n    }\n\n    // Directional variant (default)\n    const prevDisabled = !loop && isFirst;\n    const nextDisabled = !loop && isLast;\n\n    return (\n      <div ref={ref} data-react-fancy-carousel-controls=\"\" className={cn(\"flex items-center gap-2\", className)}>\n        <button\n          type=\"button\"\n          onClick={prev}\n          disabled={prevDisabled}\n          className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n        >\n          {prevLabel ?? \"\\u2190\"}\n        </button>\n        <button\n          type=\"button\"\n          onClick={next}\n          disabled={nextDisabled}\n          className=\"rounded-lg border px-3 py-1 text-sm disabled:opacity-50 dark:border-zinc-600\"\n        >\n          {nextLabel ?? \"\\u2192\"}\n        </button>\n      </div>\n    );\n  },\n);\n\nCarouselControls.displayName = \"CarouselControls\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useCarousel } from \"./Carousel.context\";\nimport type { CarouselStepsProps } from \"./Carousel.types\";\n\nexport const CarouselSteps = forwardRef<HTMLDivElement, CarouselStepsProps>(\n  ({ className }, ref) => {\n    const { activeIndex, totalSlides, goTo, variant, slideNames, headless } = useCarousel();\n\n    if (headless) {\n      return null;\n    }\n\n    if (variant === \"wizard\") {\n      return (\n        <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-3\", className)}>\n          {Array.from({ length: totalSlides }, (_, i) => {\n            const isActive = i === activeIndex;\n            const isCompleted = i < activeIndex;\n            const name = slideNames[i];\n\n            return (\n              <button\n                key={i}\n                type=\"button\"\n                onClick={() => goTo(i)}\n                className={cn(\n                  \"flex items-center gap-1.5 text-sm font-medium transition-colors\",\n                  isActive && \"text-blue-600 dark:text-blue-400\",\n                  isCompleted && \"text-green-600 dark:text-green-400\",\n                  !isActive && !isCompleted && \"text-zinc-400 dark:text-zinc-500\",\n                )}\n                aria-label={name || `Step ${i + 1}`}\n                aria-current={isActive ? \"step\" : undefined}\n              >\n                <span\n                  className={cn(\n                    \"flex h-6 w-6 items-center justify-center rounded-full text-xs\",\n                    isActive && \"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300\",\n                    isCompleted && \"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300\",\n                    !isActive && !isCompleted && \"bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-500\",\n                  )}\n                >\n                  {isCompleted ? \"\\u2713\" : i + 1}\n                </span>\n                {name && <span>{name}</span>}\n              </button>\n            );\n          })}\n        </div>\n      );\n    }\n\n    // Directional variant: dot indicators (default)\n    return (\n      <div ref={ref} data-react-fancy-carousel-steps=\"\" className={cn(\"flex items-center gap-1.5\", className)}>\n        {Array.from({ length: totalSlides }, (_, i) => (\n          <button\n            key={i}\n            type=\"button\"\n            onClick={() => goTo(i)}\n            className={cn(\n              \"h-2 w-2 rounded-full transition-colors\",\n              i === activeIndex ? \"bg-zinc-800 dark:bg-white\" : \"bg-zinc-300 dark:bg-zinc-600\",\n            )}\n            aria-label={`Go to slide ${i + 1}`}\n          />\n        ))}\n      </div>\n    );\n  },\n);\n\nCarouselSteps.displayName = \"CarouselSteps\";\n","import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { CarouselContext } from \"./Carousel.context\";\nimport { CarouselPanels } from \"./CarouselPanels\";\nimport { CarouselSlide } from \"./CarouselSlide\";\nimport { CarouselControls } from \"./CarouselControls\";\nimport { CarouselSteps } from \"./CarouselSteps\";\nimport type { CarouselProps, CarouselContextValue } from \"./Carousel.types\";\n\nconst CarouselRoot = forwardRef<HTMLDivElement, CarouselProps>(\n  (\n    {\n      children,\n      defaultIndex = 0,\n      activeIndex: controlledIndex,\n      onIndexChange,\n      className,\n      autoPlay = false,\n      interval = 5000,\n      loop = false,\n      variant = \"directional\",\n      headless = false,\n      onFinish,\n    },\n    ref,\n  ) => {\n    const [activeIndex, setActiveIndex] = useControllableState<number>(\n      controlledIndex,\n      defaultIndex,\n      onIndexChange,\n    );\n    const [totalSlides, setTotalSlides] = useState(0);\n    const [slideNames, setSlideNames] = useState<string[]>([]);\n    const [isPaused, setIsPaused] = useState(false);\n    const onFinishRef = useRef(onFinish);\n    onFinishRef.current = onFinish;\n\n    const registerSlides = useCallback((count: number) => {\n      setTotalSlides(count);\n    }, []);\n\n    const registerSlideNames = useCallback((names: string[]) => {\n      setSlideNames(names);\n    }, []);\n\n    const next = useCallback(() => {\n      setActiveIndex((i: number) => {\n        if (i >= totalSlides - 1) {\n          return loop ? 0 : i;\n        }\n        return i + 1;\n      });\n    }, [totalSlides, loop, setActiveIndex]);\n\n    const prev = useCallback(() => {\n      setActiveIndex((i: number) => {\n        if (i <= 0) {\n          return loop ? totalSlides - 1 : i;\n        }\n        return i - 1;\n      });\n    }, [totalSlides, loop, setActiveIndex]);\n\n    const goTo = useCallback(\n      (index: number) => setActiveIndex(index),\n      [setActiveIndex],\n    );\n\n    // AutoPlay\n    useEffect(() => {\n      if (!autoPlay || isPaused || totalSlides <= 1) {\n        return;\n      }\n\n      const id = setInterval(() => {\n        setActiveIndex((i: number) => {\n          if (i >= totalSlides - 1) {\n            return loop ? 0 : i;\n          }\n          return i + 1;\n        });\n      }, interval);\n\n      return () => clearInterval(id);\n    }, [autoPlay, interval, isPaused, totalSlides, loop, setActiveIndex]);\n\n    const ctx = useMemo<CarouselContextValue>(\n      () => ({\n        activeIndex,\n        totalSlides,\n        next,\n        prev,\n        goTo,\n        registerSlides,\n        variant,\n        loop,\n        slideNames,\n        registerSlideNames,\n        onFinish: onFinishRef.current,\n        headless,\n      }),\n      [\n        activeIndex,\n        totalSlides,\n        next,\n        prev,\n        goTo,\n        registerSlides,\n        variant,\n        loop,\n        slideNames,\n        registerSlideNames,\n        headless,\n      ],\n    );\n\n    const handleMouseEnter = useCallback(() => {\n      if (autoPlay) {\n        setIsPaused(true);\n      }\n    }, [autoPlay]);\n\n    const handleMouseLeave = useCallback(() => {\n      if (autoPlay) {\n        setIsPaused(false);\n      }\n    }, [autoPlay]);\n\n    return (\n      <CarouselContext.Provider value={ctx}>\n        <div\n          data-react-fancy-carousel=\"\"\n          ref={ref}\n          className={cn(\"relative\", className)}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n        >\n          {children}\n        </div>\n      </CarouselContext.Provider>\n    );\n  },\n);\n\nCarouselRoot.displayName = \"Carousel\";\n\nexport const Carousel = Object.assign(CarouselRoot, {\n  Panels: CarouselPanels,\n  Slide: CarouselSlide,\n  Controls: CarouselControls,\n  Steps: CarouselSteps,\n});\n"]}