{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "animated-list",
  "title": "Animated List",
  "description": "A generic list wrapper with Motion entry, exit, and reorder transitions.",
  "dependencies": [
    "motion"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/corr/components/animated-list.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport function AnimatedList<TItem extends { id: string }>({\n  items,\n  renderItem,\n  className,\n}: {\n  items: TItem[]\n  renderItem: (item: TItem) => React.ReactNode\n  className?: string\n}) {\n  const reduceMotion = useReducedMotion()\n\n  return (\n    <motion.div layout className={cn(\"grid gap-2\", className)}>\n      <AnimatePresence initial={false}>\n        {items.map((item) => (\n          <motion.div\n            key={item.id}\n            layout\n            initial={{ opacity: 0, y: reduceMotion ? 0 : 8 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, scale: reduceMotion ? 1 : 0.98 }}\n            transition={{ duration: reduceMotion ? 0 : 0.18 }}\n          >\n            {renderItem(item)}\n          </motion.div>\n        ))}\n      </AnimatePresence>\n    </motion.div>\n  )\n}\n",
      "type": "registry:component"
    }
  ],
  "type": "registry:component"
}