"use client" import * as React from "react" import { ArrowLeft, ArrowRight } from "lucide-react" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import Autoplay from "embla-carousel-autoplay" import useEmblaCarousel from "embla-carousel-react" interface CarouselApi { slideNodes(): HTMLElement[] on(event: string, listener: (...args: any[]) => void): void scrollPrev(): void scrollNext(): void reInit(): void } const CarouselContext = React.createContext(null) interface CarouselProps { opts?: { align?: "start" | "center" | "end" loop?: boolean } plugins?: any[] setApi?: (api: CarouselApi) => void [key: string]: any } const Carousel = React.forwardRef( ({ opts, plugins = [Autoplay()], setApi, className, children, ...props }, ref) => { const [api, setApiInternal] = React.useState(null) const [emblaRef] = useEmblaCarousel(opts, plugins) React.useEffect(() => { if (!api) { return } setApi?.(api) }, [api, setApi]) return (
{children}
) } ) Carousel.displayName = "Carousel" interface CarouselContentProps { children: React.ReactNode className?: string } const CarouselContent = React.forwardRef( ({ children, className }, ref) => (
{children}
) ) CarouselContent.displayName = "CarouselContent" interface CarouselItemProps { children: React.ReactNode className?: string } const CarouselItem = React.forwardRef( ({ children, className }, ref) => (
{children}
) ) CarouselItem.displayName = "CarouselItem" const CarouselPrevious = React.forwardRef< HTMLButtonElement, React.ButtonHTMLAttributes >(({ className, ...props }, ref) => ( )) CarouselPrevious.displayName = "CarouselPrevious" const CarouselNext = React.forwardRef< HTMLButtonElement, React.ButtonHTMLAttributes >(({ className, ...props }, ref) => ( )) CarouselNext.displayName = "CarouselNext" export { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext }