{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "carousel", "title": "Carousel", "description": "A component that displays content in a rotating cycle with navigation controls", "dependencies": [ "@ark-ui/react", "lucide-react", "clsx", "tailwind-merge", "class-variance-authority" ], "files": [ { "path": "src/registry/thornberry/components/carousel.tsx", "content": "import { Carousel as ArkCarousel } from \"@ark-ui/react/carousel\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/registry/thornberry/components/button\";\n\nimport type { ComponentProps } from \"react\";\n\nconst CarouselProvider = ArkCarousel.RootProvider;\nconst CarouselContext = ArkCarousel.Context;\n\nconst CarouselRoot = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n);\n\nconst CarouselItemGroup = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n);\n\nconst CarouselItem = ({\n className,\n index = 0,\n ...rest\n}: ComponentProps) => (\n \n);\n\nconst CarouselNextTrigger = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n \n \n \n \n);\n\nconst CarouselPrevTrigger = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n \n \n \n \n);\n\nconst CarouselIndicatorGroup = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n);\n\nconst CarouselIndicator = ({\n className,\n index,\n ...rest\n}: ComponentProps) => (\n \n);\n\nconst CarouselControl = ({\n className,\n ...rest\n}: ComponentProps) => (\n \n);\n\nexport {\n CarouselRoot,\n CarouselItemGroup,\n CarouselItem,\n CarouselNextTrigger,\n CarouselPrevTrigger,\n CarouselIndicatorGroup,\n CarouselIndicator,\n CarouselControl,\n CarouselProvider,\n CarouselContext,\n};\n", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "content": "import { ark } from \"@ark-ui/react\";\nimport { cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport type { VariantProps } from \"class-variance-authority\";\nimport type { ComponentProps } from \"react\";\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap outline-none focus-visible:outline-none focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 rounded-md font-medium text-sm outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 transition-[color,box-shadow,transform]\",\n {\n variants: {\n variant: {\n solid:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n muted: \"bg-muted text-muted-foreground shadow-xs hover:bg-muted/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-2 hover:underline\",\n destructive:\n \"bg-destructive text-background shadow-xs hover:bg-destructive/90 focus-visible:ring-red-500 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/40\",\n },\n size: {\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n md: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"solid\",\n size: \"md\",\n },\n },\n);\n\nconst Button = ({\n className,\n variant,\n size,\n ...rest\n}: ComponentProps & VariantProps) => (\n \n);\n\nexport { Button, buttonVariants };\n", "type": "registry:ui" }, { "path": "src/lib/utils.ts", "content": "import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nimport type { ClassValue } from \"clsx\";\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs));\n};\n", "type": "registry:lib", "target": "" } ], "type": "registry:ui" }