{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "buttons-slide-in",
  "type": "registry:component",
  "title": "Slide In Button",
  "description": "Button with slide-in entrance animation",
  "dependencies": [
    "motion"
  ],
  "files": [
    {
      "path": "registry/new-york/animations/buttons/slide-in.tsx",
      "content": "\"use client\";\nimport { motion, type HTMLMotionProps } from \"motion/react\";\nimport {\n  slideInVariants,\n  createDelayedTransition,\n} from \"@/lib/animation-presets\";\ninterface SlideInButtonProps\n  extends Omit<HTMLMotionProps<\"button\">, \"animate\"> {\n  children: React.ReactNode;\n  delay?: number;\n  duration?: number;\n  direction?: \"left\" | \"right\" | \"up\" | \"down\";\n}\nexport function SlideInButton({\n  children,\n  delay = 0,\n  duration = 0.3,\n  direction = \"left\",\n  ...props\n}: SlideInButtonProps) {\n  const customVariants = {\n    hidden: {\n      opacity: 0,\n      x: direction === \"left\" ? -20 : direction === \"right\" ? 20 : 0,\n      y: direction === \"up\" ? -20 : direction === \"down\" ? 20 : 0,\n    },\n    visible: {\n      opacity: 1,\n      x: 0,\n      y: 0,\n    },\n  };\n  return (\n    <motion.button\n      variants={customVariants}\n      initial=\"hidden\"\n      animate=\"visible\"\n      transition={createDelayedTransition(delay, duration)}\n      {...props}\n    >\n      {children}\n    </motion.button>\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"
    }
  ]
}