{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "magnetic-avatar-group-shadcnui", "type": "registry:component", "title": "Magnetic Avatar Group", "description": "Stacked avatars that spread apart on hover showing tooltips", "registryDependencies": [ "button" ], "dependencies": [ "framer-motion", "react" ], "files": [ { "path": "@uitripled/react-shadcn/src/components/motion-core/magnetic-avatar-group.tsx", "content": "\"use client\";\n\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useState } from \"react\";\n\ntype Avatar = {\n id: string;\n name: string;\n initials: string;\n color: string;\n};\n\ntype MagneticAvatarGroupProps = {\n avatars?: Avatar[];\n maxVisible?: number;\n};\n\nexport function MagneticAvatarGroup({\n avatars = [\n { id: \"1\", name: \"John Doe\", initials: \"JD\", color: \"bg-primary\" },\n { id: \"2\", name: \"Jane Smith\", initials: \"JS\", color: \"bg-primary/80\" },\n { id: \"3\", name: \"Bob Wilson\", initials: \"BW\", color: \"bg-primary/60\" },\n { id: \"4\", name: \"Alice Brown\", initials: \"AB\", color: \"bg-primary/40\" },\n ],\n maxVisible = 4,\n}: MagneticAvatarGroupProps) {\n const [hoveredId, setHoveredId] = useState(null);\n const visibleAvatars = avatars.slice(0, maxVisible);\n\n return (\n
\n {visibleAvatars.map((avatar, index) => {\n const isHovered = hoveredId === avatar.id;\n const spread = isHovered ? 40 : 0;\n\n return (\n
\n setHoveredId(avatar.id)}\n onHoverEnd={() => setHoveredId(null)}\n className={`flex h-10 w-10 cursor-pointer items-center justify-center rounded-full ${avatar.color} text-primary-foreground font-semibold text-xs shadow-md`}\n >\n {avatar.initials}\n \n\n \n {isHovered && (\n \n {avatar.name}\n
\n \n )}\n \n
\n );\n })}\n\n {avatars.length > maxVisible && (\n \n +{avatars.length - maxVisible}\n \n )}\n
\n );\n}\n", "type": "registry:component", "target": "components/uitripled/magnetic-avatar-group-shadcnui.tsx" } ] }