{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "spotlightcard",
  "type": "registry:ui",
  "title": "Spotlight Card",
  "description": "An interactive card with a spotlight hover effect that highlights content and enhances user engagement visually.",
  "author": "Ahdeetai <https://aditya.is-cool.dev>",
  "registryDependencies": ["@scrollxui/card"],
  "dependencies": ["motion", "clsx", "tailwind-merge"],
  "files": [
    {
      "type": "registry:ui",
      "path": "components/ui/spotlightcard.tsx",
      "content": "'use client';\n\nimport React from 'react';\nimport { motion, useMotionTemplate, useMotionValue } from 'motion/react';\nimport { Card, CardContent } from '@/components/ui/card';\n\ninterface SpotlightCardProps extends React.ComponentProps<typeof Card> {\n  spotlightColor?: string;\n  children: React.ReactNode;\n}\n\nexport function SpotlightCard({\n  spotlightColor = '14, 165, 233',\n  children,\n  className,\n  style,\n  ...props\n}: SpotlightCardProps) {\n  const mouseX = useMotionValue(0);\n  const mouseY = useMotionValue(0);\n  const spotlightX = useMotionValue(0);\n  const spotlightY = useMotionValue(0);\n\n  const backgroundImage = useMotionTemplate`radial-gradient(300px circle at ${spotlightX}px ${spotlightY}px, rgba(${spotlightColor}, 0.15), transparent)`;\n\n  const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n    const { left, top } = e.currentTarget.getBoundingClientRect();\n    const x = e.clientX - left;\n    const y = e.clientY - top;\n\n    mouseX.set(x);\n    mouseY.set(y);\n    spotlightX.set(x);\n    spotlightY.set(y);\n  };\n\n  return (\n    <Card\n      className={`group relative overflow-hidden border rounded-lg ${\n        className ?? ''\n      }`}\n      style={\n        {\n          '--spotlight-color': spotlightColor,\n          ...style,\n        } as React.CSSProperties\n      }\n      onMouseMove={handleMouseMove}\n      {...props}\n    >\n      <motion.div\n        className='pointer-events-none absolute -inset-px rounded-xl opacity-0 transition duration-300 group-hover:opacity-100'\n        style={{ backgroundImage }}\n      />\n      <CardContent className='flex flex-col justify-center items-center w-full h-full p-6'>\n        {children}\n      </CardContent>\n    </Card>\n  );\n}\n"
    },
    {
      "type": "registry:ui",
      "path": "components/ui/card.tsx",
      "content": "import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card'\n      className={cn(\n        'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-xs',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-header'\n      className={cn(\n        '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-title'\n      className={cn('leading-none font-semibold', className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-description'\n      className={cn('text-muted-foreground text-sm', className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-action'\n      className={cn(\n        'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-content'\n      className={cn('px-6', className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot='card-footer'\n      className={cn('flex items-center px-6 [.border-t]:pt-6', className)}\n      {...props}\n    />\n  );\n}\n\nexport {\n  Card,\n  CardHeader,\n  CardFooter,\n  CardTitle,\n  CardAction,\n  CardDescription,\n  CardContent,\n};\n"
    },
    {
      "type": "registry:lib",
      "path": "lib/utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}"
    }
  ]
}
