{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "ai-unlock-animation-shadcnui", "type": "registry:ui", "title": "AI Unlock Animation", "description": "Premium unlock animation with particles, ripples, and loading states", "dependencies": [ "framer-motion", "react" ], "files": [ { "path": "@uitripled/react-shadcn/src/components/motion-core/ai-unlock-animation.tsx", "content": "\"use client\";\n\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useState } from \"react\";\n\ntype AIUnlockAnimationProps = {\n autoPlay?: boolean;\n};\n\nexport function AIUnlockAnimation({ autoPlay = true }: AIUnlockAnimationProps) {\n const [isUnlocking, setIsUnlocking] = useState(false);\n const [isComplete, setIsComplete] = useState(false);\n\n // Auto-start if autoplay is enabled\n useEffect(() => {\n if (autoPlay) {\n setIsUnlocking(true);\n setIsComplete(false);\n const timer = setTimeout(() => {\n setIsComplete(true);\n }, 3000);\n return () => clearTimeout(timer);\n }\n }, [autoPlay]);\n\n const triggerUnlock = () => {\n setIsUnlocking(true);\n setIsComplete(false);\n setTimeout(() => {\n setIsComplete(true);\n }, 3000);\n };\n\n const resetAnimation = () => {\n setIsUnlocking(false);\n setIsComplete(false);\n };\n\n // Generate minimal particles\n const particles = Array.from({ length: 24 }, (_, i) => ({\n id: i,\n angle: (Math.PI * 2 * i) / 24,\n delay: Math.random() * 0.3,\n duration: 1.2 + Math.random() * 0.5,\n }));\n\n return (\n