{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "icons-fade-in",
  "type": "registry:component",
  "title": "Fade In Icon",
  "description": "Entrance animation with fade effect for icons",
  "dependencies": [
    "motion"
  ],
  "files": [
    {
      "path": "registry/new-york/animations/icons/fade-in.tsx",
      "content": "\"use client\";\nimport * as motion from \"framer-motion/client\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport {\n  fadeInVariants,\n  createDelayedTransition,\n} from \"@/lib/animation-presets\";\ninterface FadeInIconProps extends Omit<HTMLMotionProps<\"div\">, \"animate\"> {\n  children: React.ReactNode;\n  delay?: number;\n  duration?: number;\n}\nexport function FadeInIcon({\n  children,\n  delay = 0,\n  duration = 0.3,\n  ...props\n}: FadeInIconProps) {\n  return (\n    <motion.div\n      variants={fadeInVariants}\n      initial=\"hidden\"\n      animate=\"visible\"\n      transition={createDelayedTransition(delay, duration)}\n      {...props}\n    >\n      {children}\n    </motion.div>\n  );\n}\n",
      "type": "registry:component"
    },
    {
      "path": "lib/animation-presets.ts",
      "content": "import { type Variants, type Transition, type Easing } from \"motion/react\";\n\n/**\n * Comprehensive animation presets for AnimBits\n * These can be imported and used across different animation components\n */\n\n// ============================================\n// ENTRANCE ANIMATIONS\n// ============================================\n\nexport const fadeInVariants: Variants = {\n  hidden: { opacity: 0 },\n  visible: { opacity: 1 },\n};\n\nexport const slideInVariants: Variants = {\n  hidden: { opacity: 0, x: -20 },\n  visible: { opacity: 1, x: 0 },\n};\n\nexport const slideUpVariants: Variants = {\n  hidden: { opacity: 0, y: 20 },\n  visible: { opacity: 1, y: 0 },\n};\n\nexport const slideDownVariants: Variants = {\n  hidden: { opacity: 0, y: -20 },\n  visible: { opacity: 1, y: 0 },\n};\n\nexport const scaleInVariants: Variants = {\n  hidden: { opacity: 0, scale: 0.9 },\n  visible: { opacity: 1, scale: 1 },\n};\n\nexport const blurInVariants: Variants = {\n  hidden: { opacity: 0, filter: \"blur(10px)\" },\n  visible: { opacity: 1, filter: \"blur(0px)\" },\n};\n\n// ============================================\n// CONTINUOUS ANIMATIONS (LOOPING)\n// ============================================\n\nexport const pulseVariants: Variants = {\n  initial: { scale: 1, opacity: 1 },\n  animate: {\n    scale: [1, 1.05, 1],\n    opacity: [1, 0.8, 1],\n  },\n};\n\nexport const bounceContinuousVariants: Variants = {\n  initial: { y: 0 },\n  animate: {\n    y: [0, -10, 0],\n  },\n};\n\nexport const spinVariants: Variants = {\n  initial: { rotate: 0 },\n  animate: {\n    rotate: 360,\n  },\n};\n\nexport const heartbeatVariants: Variants = {\n  initial: { scale: 1 },\n  animate: {\n    scale: [1, 1.15, 1, 1.15, 1, 1, 1, 1],\n  },\n};\n\n// ============================================\n// ONE-SHOT ANIMATIONS (TRIGGERED)\n// ============================================\n\nexport const bounceVariants: Variants = {\n  initial: { scale: 1 },\n  animate: {\n    scale: [1, 1.2, 0.9, 1.1, 1],\n  },\n};\n\nexport const wiggleVariants: Variants = {\n  initial: { rotate: 0 },\n  animate: {\n    rotate: [0, -10, 10, -10, 10, 0],\n  },\n};\n\nexport const shakeVariants: Variants = {\n  initial: { x: 0 },\n  animate: {\n    x: [0, -10, 10, -10, 10, 0],\n  },\n};\n\nexport const popVariants: Variants = {\n  initial: { scale: 0, opacity: 0 },\n  animate: {\n    scale: [0, 1.2, 1],\n    opacity: [0, 1, 1],\n  },\n};\n\nexport const rotateVariants: Variants = {\n  initial: { rotate: 0 },\n  animate: {\n    rotate: 360,\n  },\n};\n\n// ============================================\n// HOVER/INTERACTIVE EFFECTS\n// ============================================\n\nexport const liftVariants: Variants = {\n  initial: { y: 0 },\n  hover: { y: -8 },\n};\n\nexport const glowVariants: Variants = {\n  initial: {\n    boxShadow: \"0 0 0 rgba(0,0,0,0)\",\n  },\n  hover: {\n    boxShadow: \"0 0 20px rgba(59, 130, 246, 0.5)\",\n  },\n};\n\nexport const pressVariants: Variants = {\n  initial: { scale: 1 },\n  tap: { scale: 0.95 },\n};\n\nexport const tiltVariants: Variants = {\n  initial: { rotateX: 0, rotateY: 0 },\n};\n\n// ============================================\n// STAGGER CONFIGURATIONS\n// ============================================\n\nexport const staggerConfig = {\n  visible: {\n    transition: {\n      staggerChildren: 0.1,\n      delayChildren: 0,\n    },\n  },\n};\n\nexport const cascadeConfig = {\n  visible: {\n    transition: {\n      staggerChildren: 0.15,\n      delayChildren: 0.1,\n    },\n  },\n};\n\nexport const staggerFastConfig = {\n  visible: {\n    transition: {\n      staggerChildren: 0.05,\n      delayChildren: 0,\n    },\n  },\n};\n\n// ============================================\n// LIST ITEM VARIANTS\n// ============================================\n\nexport const listItemFadeVariants: Variants = {\n  hidden: { opacity: 0, y: 20 },\n  visible: { opacity: 1, y: 0 },\n};\n\nexport const listItemSlideVariants: Variants = {\n  hidden: { opacity: 0, x: -20 },\n  visible: { opacity: 1, x: 0 },\n};\n\nexport const listItemScaleVariants: Variants = {\n  hidden: { opacity: 0, scale: 0.8 },\n  visible: { opacity: 1, scale: 1 },\n};\n\n// ============================================\n// PAGE TRANSITIONS\n// ============================================\n\nexport const pageFadeVariants: Variants = {\n  initial: { opacity: 0 },\n  animate: { opacity: 1 },\n  exit: { opacity: 0 },\n};\n\nexport const pageSlideVariants: Variants = {\n  initial: { opacity: 0, x: -20 },\n  animate: { opacity: 1, x: 0 },\n  exit: { opacity: 0, x: 20 },\n};\n\nexport const pageScaleVariants: Variants = {\n  initial: { opacity: 0, scale: 0.95 },\n  animate: { opacity: 1, scale: 1 },\n  exit: { opacity: 0, scale: 1.05 },\n};\n\n// ============================================\n// TRANSITION PRESETS\n// ============================================\n\nexport const transitions = {\n  smooth: { duration: 0.3, ease: \"easeInOut\" } as Transition,\n  quick: { duration: 0.15, ease: \"easeOut\" } as Transition,\n  slow: { duration: 0.5, ease: \"easeInOut\" } as Transition,\n  spring: { type: \"spring\", stiffness: 300, damping: 30 } as Transition,\n  bouncy: { type: \"spring\", stiffness: 400, damping: 10 } as Transition,\n  continuous: (duration: number = 1) =>\n    ({\n      duration,\n      ease: \"linear\",\n      repeat: Infinity,\n    }) as Transition,\n} as const;\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\n\nexport const createContinuousTransition = (\n  duration: number = 1,\n  ease: Easing = \"linear\",\n): Transition => ({\n  duration,\n  ease,\n  repeat: Infinity,\n});\n\nexport const createDelayedTransition = (\n  delay: number,\n  duration: number = 0.3,\n): Transition => ({\n  delay,\n  duration,\n  ease: \"easeOut\" as Easing,\n});\n\nexport const createStaggerTransition = (\n  staggerDelay: number = 0.1,\n  delayChildren: number = 0,\n): Transition => ({\n  staggerChildren: staggerDelay,\n  delayChildren,\n});\n",
      "type": "registry:lib"
    }
  ]
}