'use client';
import * as React from 'react';
import { cn } from '@workspace/ui/lib/utils';
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
type TooltipProps,
type TooltipContentProps,
} from '@/registry/components/tooltip';
type Align = 'start' | 'center' | 'end';
type AvatarProps = TooltipProps & {
children: React.ReactNode;
align?: Align;
invertOverlap?: boolean;
};
function AvatarContainer({
children,
align,
invertOverlap,
...props
}: AvatarProps) {
return (
span]:transition-[translate] [&>span]:duration-300 [&>span]:ease-in-out',
'[&:hover_span:first-of-type]:translate-y-[var(--avatar-translate-pct)]',
)}
>
{children}
);
}
type AvatarGroupTooltipProps = TooltipContentProps;
function AvatarGroupTooltip(props: AvatarGroupTooltipProps) {
return ;
}
type AvatarGroupProps = Omit, 'translate'> & {
children: React.ReactElement[];
invertOverlap?: boolean;
translate?: number;
size?: string | number;
border?: string | number;
columnSize?: string | number;
align?: Align;
tooltipProps?: Omit;
};
function AvatarGroup({
ref,
children,
className,
invertOverlap = false,
size = '43px',
border = '3px',
columnSize = '37px',
align = 'end',
translate = -30,
tooltipProps = { side: 'top', sideOffset: 12 },
...props
}: AvatarGroupProps) {
const maskRatio = Math.abs(translate / 100);
const alignOffset =
align === 'start' ? 0 : align === 'center' ? maskRatio / 2 : maskRatio;
const maskBase = alignOffset - maskRatio / 2;
const maskFactor = 1 - alignOffset + maskRatio / 2;
return (
{children?.map((child, index) => (
{child}
))}
);
}
export {
AvatarGroup,
AvatarGroupTooltip,
type AvatarGroupProps,
type AvatarGroupTooltipProps,
};