{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "carousel",
  "title": "Carousel",
  "description": "A shadcn-style carousel component built with Ark UI primitives.",
  "dependencies": ["@ark-ui/react", "lucide-react", "class-variance-authority"],
  "registryDependencies": ["button"],
  "files": [
    {
      "path": "src/components/ui/carousel.tsx",
      "content": "\"use client\";\n\nimport { Carousel as CarouselPrimitive } from \"@ark-ui/react/carousel\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport {\n  ChevronLeftIcon,\n  ChevronRightIcon,\n  PauseIcon,\n  PlayIcon,\n} from \"lucide-react\";\nimport { Button, type buttonVariants } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Carousel = ({ ...props }: CarouselPrimitive.RootProps) => {\n  return <CarouselPrimitive.Root {...props} />;\n};\n\nexport const CarouselControl = ({\n  className,\n  ...props\n}: CarouselPrimitive.ControlProps) => {\n  return (\n    <CarouselPrimitive.Control\n      className={cn(\"relative\", className)}\n      {...props}\n    />\n  );\n};\n\nexport const CarouselPrevious = ({\n  className,\n  variant = \"outline\",\n  size = \"icon-sm\",\n  anchorButtons = false,\n  ...props\n}: CarouselPrimitive.PrevTriggerProps & {\n  variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n  size?: VariantProps<typeof buttonVariants>[\"size\"];\n  anchorButtons?: boolean;\n}) => {\n  return (\n    <CarouselPrimitive.PrevTrigger {...props} asChild>\n      <Button\n        variant={variant}\n        size={size}\n        className={cn(\n          \"data-[orientation='vertical']:rotate-90\",\n          anchorButtons &&\n            \"absolute touch-manipulation rounded-full before:absolute before:inset-0 before:rounded-full\",\n          anchorButtons &&\n            \"data-[orientation='horizontal']:top-1/2 data-[orientation='horizontal']:-left-12 data-[orientation='horizontal']:-translate-y-1/2\",\n          anchorButtons &&\n            \"data-[orientation='vertical']:-top-12 data-[orientation='vertical']:left-1/2 data-[orientation='vertical']:-translate-x-1/2 \",\n          className,\n        )}\n      >\n        <ChevronLeftIcon />\n        <span className=\"sr-only\">Previous sli de</span>\n      </Button>\n    </CarouselPrimitive.PrevTrigger>\n  );\n};\n\nexport const CarouselNext = ({\n  className,\n  variant = \"outline\",\n  size = \"icon-sm\",\n  anchorButtons = false,\n  ...props\n}: CarouselPrimitive.NextTriggerProps & {\n  variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n  size?: VariantProps<typeof buttonVariants>[\"size\"];\n  anchorButtons?: boolean;\n}) => {\n  return (\n    <CarouselPrimitive.NextTrigger {...props} asChild>\n      <Button\n        data-slot=\"carousel-next\"\n        variant={variant}\n        size={size}\n        className={cn(\n          \"data-[orientation='vertical']:rotate-90\",\n          anchorButtons &&\n            \"absolute touch-manipulation rounded-full before:content-[''] before:absolute before:inset-0 before:rounded-full\",\n          anchorButtons &&\n            \"data-[orientation='horizontal']:top-1/2 data-[orientation='horizontal']:-right-12 data-[orientation='horizontal']:-translate-y-1/2\",\n          anchorButtons &&\n            \"data-[orientation='vertical']:-bottom-12 data-[orientation='vertical']:left-1/2 data-[orientation='vertical']:-translate-x-1/2 \",\n          className,\n        )}\n      >\n        <ChevronRightIcon />\n        <span className=\"sr-only\">Next slide</span>\n      </Button>\n    </CarouselPrimitive.NextTrigger>\n  );\n};\n\nexport const CarouselContent = ({\n  className,\n  ...props\n}: CarouselPrimitive.ItemGroupProps) => {\n  return (\n    <CarouselPrimitive.ItemGroup\n      className={cn(\"w-full h-full\", className)}\n      {...props}\n    />\n  );\n};\n\nexport const CarouselItem = ({\n  children,\n  ...props\n}: CarouselPrimitive.ItemProps) => {\n  return <CarouselPrimitive.Item {...props}>{children}</CarouselPrimitive.Item>;\n};\n\nexport const CarouselIndicatorGroup = ({\n  className,\n  ...props\n}: CarouselPrimitive.IndicatorGroupProps) => {\n  return (\n    <CarouselPrimitive.IndicatorGroup\n      className={cn(\n        \"flex items-center justify-center data-[orientation='vertical']:flex-col gap-2 p-5\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const CarouselIndicatorItem = ({\n  className,\n  ...props\n}: CarouselPrimitive.IndicatorProps) => {\n  return (\n    <CarouselPrimitive.Indicator\n      className={cn(\n        \"cursor-pointer disabled:cursor-default w-2 h-2 rounded-full bg-accent data-current:bg-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-ring\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const CarouselAutoPlayIndicator = CarouselPrimitive.AutoplayIndicator;\n\nexport const CarouselAutoplay = ({\n  className,\n  variant = \"outline\",\n  size = \"icon-sm\",\n  children,\n  ...props\n}: CarouselPrimitive.AutoplayTriggerProps & {\n  variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n  size?: VariantProps<typeof buttonVariants>[\"size\"];\n}) => {\n  return (\n    <CarouselPrimitive.AutoplayTrigger {...props} asChild>\n      <Button\n        variant={variant}\n        size={size}\n        className={cn(className)}\n        {...props}\n      >\n        {children || (\n          <CarouselPrimitive.AutoplayIndicator fallback={<PlayIcon />}>\n            <PauseIcon />\n          </CarouselPrimitive.AutoplayIndicator>\n        )}\n        <span className=\"sr-only\">Autoplay</span>\n      </Button>\n    </CarouselPrimitive.AutoplayTrigger>\n  );\n};\n\nexport const CarouselContext = CarouselPrimitive.Context;\n",
      "type": "registry:ui",
      "target": "src/components/ui/carousel.tsx"
    }
  ],
  "type": "registry:ui"
}
