{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "avatar-group-mask", "type": "registry:ui", "title": "Avatar Group Mask", "description": "An animated avatar group that displays overlapping user images with a mask effect and smoothly shifts each avatar forward on hover to highlight it.", "registryDependencies": [ "https://animate-ui.com/r/tooltip" ], "files": [ { "path": "registry/components/avatar-group-mask/index.tsx", "content": "'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n type TooltipProps,\n type TooltipContentProps,\n} from '@/components/animate-ui/components/tooltip';\n\ntype Align = 'start' | 'center' | 'end';\n\ntype AvatarProps = TooltipProps & {\n children: React.ReactNode;\n align?: Align;\n invertOverlap?: boolean;\n};\n\nfunction AvatarContainer({\n children,\n align,\n invertOverlap,\n ...props\n}: AvatarProps) {\n return (\n \n \n span]:transition-[translate] [&>span]:duration-300 [&>span]:ease-in-out',\n '[&:hover_span:first-of-type]:translate-y-[var(--avatar-translate-pct)]',\n )}\n >\n {children}\n \n \n \n );\n}\n\ntype AvatarGroupTooltipProps = TooltipContentProps;\n\nfunction AvatarGroupTooltip(props: AvatarGroupTooltipProps) {\n return ;\n}\n\ntype AvatarGroupProps = Omit, 'translate'> & {\n children: React.ReactElement[];\n invertOverlap?: boolean;\n translate?: number;\n size?: string | number;\n border?: string | number;\n columnSize?: string | number;\n align?: Align;\n tooltipProps?: Omit;\n};\n\nfunction AvatarGroup({\n ref,\n children,\n className,\n invertOverlap = false,\n size = '43px',\n border = '3px',\n columnSize = '37px',\n align = 'end',\n translate = -30,\n tooltipProps = { side: 'top', sideOffset: 12 },\n ...props\n}: AvatarGroupProps) {\n const maskRatio = Math.abs(translate / 100);\n const alignOffset =\n align === 'start' ? 0 : align === 'center' ? maskRatio / 2 : maskRatio;\n const maskBase = alignOffset - maskRatio / 2;\n const maskFactor = 1 - alignOffset + maskRatio / 2;\n\n return (\n \n \n \n {children?.map((child, index) => (\n \n {child}\n \n ))}\n \n \n \n );\n}\n\nexport {\n AvatarGroup,\n AvatarGroupTooltip,\n type AvatarGroupProps,\n type AvatarGroupTooltipProps,\n};\n", "type": "registry:ui", "target": "components/animate-ui/components/avatar-group-mask.tsx" } ] }