{"version":3,"file":"AvatarGroup.cjs","sources":["../../../../src/components/data-display/avatar-group/AvatarGroup.tsx"],"sourcesContent":["import {\r\n    Children,\r\n    cloneElement,\r\n    isValidElement,\r\n    memo,\r\n    type FC,\r\n    type ReactElement,\r\n} from 'react'\r\n\r\nimport { Avatar } from '@components/data-display/avatar'\r\nimport { AVATAR_GROUP_SPACING } from '@components/data-display/avatar-group/constants'\r\nimport type { AvatarGroupProps } from '@components/data-display/avatar-group/types/AvatarGroup.props.ts'\r\nimport type { AvatarProps } from '@components/data-display/avatar/types/Avatar.props.ts'\r\nimport { Box } from '@components/layout/box'\r\nimport { Flex } from '@components/layout/flex'\r\nimport { cn } from '@utils/cn.ts'\r\n\r\nconst defaultOverflowLabel = (count: number) => `${count} more`\r\n\r\n/**\r\n * Stacks multiple `Avatar` components horizontally with configurable overlap\r\n * spacing. Renders an overflow avatar when the visible count exceeds `max`.\r\n */\r\nconst AvatarGroup: FC<AvatarGroupProps> = memo(({\r\n    children,\r\n    max,\r\n    spacing = 'md',\r\n    overflowLabel = defaultOverflowLabel,\r\n    className,\r\n    ref,\r\n    ...props\r\n}) => {\r\n    const childArray = Children.toArray(children)\r\n    const visibleCount =\r\n    max !== undefined ? Math.min(childArray.length, max) : childArray.length\r\n    const overflowCount =\r\n    max !== undefined ? Math.max(childArray.length - max, 0) : 0\r\n    const visibleChildren = childArray.slice(0, visibleCount)\r\n    const overlap = AVATAR_GROUP_SPACING[spacing]\r\n\r\n    return (\r\n        <Flex\r\n            ref={ref}\r\n            inline\r\n            alignItems={'center'}\r\n            gap={'none'}\r\n            className={cn(className)}\r\n            {...props}\r\n        >\r\n            {visibleChildren.map((child, index) => {\r\n                const isFirst = index === 0\r\n                const style = isFirst ? undefined : { marginLeft: overlap }\r\n\r\n                if (isValidElement(child) && child.type === Avatar) {\r\n                    const avatarChild = child as ReactElement<AvatarProps>\r\n                    const existingStyle =\r\n            typeof avatarChild.props.style === 'object' &&\r\n            avatarChild.props.style !== null\r\n                ? avatarChild.props.style\r\n                : {}\r\n                    return cloneElement(avatarChild, {\r\n                        style: {\r\n                            ...existingStyle,\r\n                            ...style,\r\n                        },\r\n                    })\r\n                }\r\n\r\n                return (\r\n                    <Box\r\n                        as={'span'}\r\n                        key={index}\r\n                        style={style}\r\n                    >\r\n                        {child}\r\n                    </Box>\r\n                )\r\n            })}\r\n            {overflowCount > 0 && (\r\n                <Avatar\r\n                    initials={`+${overflowCount}`}\r\n                    aria-label={overflowLabel(overflowCount)}\r\n                    role={'img'}\r\n                    style={{ marginLeft: overlap }}\r\n                />\r\n            )}\r\n        </Flex>\r\n    )\r\n})\r\n\r\nAvatarGroup.displayName = 'AvatarGroup'\r\n\r\nexport default AvatarGroup\r\n"],"names":["defaultOverflowLabel","count","AvatarGroup","memo","children","max","spacing","overflowLabel","className","ref","props","childArray","Children","visibleCount","overflowCount","visibleChildren","overlap","AVATAR_GROUP_SPACING","jsxs","Flex","cn","child","index","style","isValidElement","Avatar","avatarChild","existingStyle","cloneElement","jsx","Box"],"mappings":"sqBAiBMA,EAAwBC,GAAkB,GAAGA,CAAK,QAMlDC,EAAoCC,EAAAA,KAAK,CAAC,CAC5C,SAAAC,EACA,IAAAC,EACA,QAAAC,EAAU,KACV,cAAAC,EAAgBP,EAChB,UAAAQ,EACA,IAAAC,EACA,GAAGC,CACP,IAAM,CACF,MAAMC,EAAaC,EAAAA,SAAS,QAAQR,CAAQ,EACtCS,EACNR,IAAQ,OAAY,KAAK,IAAIM,EAAW,OAAQN,CAAG,EAAIM,EAAW,OAC5DG,EACNT,IAAQ,OAAY,KAAK,IAAIM,EAAW,OAASN,EAAK,CAAC,EAAI,EACrDU,EAAkBJ,EAAW,MAAM,EAAGE,CAAY,EAClDG,EAAUC,EAAAA,qBAAqBX,CAAO,EAE5C,OACIY,EAAAA,KAACC,EAAA,CACG,IAAAV,EACA,OAAM,GACN,WAAY,SACZ,IAAK,OACL,UAAWW,EAAAA,GAAGZ,CAAS,EACtB,GAAGE,EAEH,SAAA,CAAAK,EAAgB,IAAI,CAACM,EAAOC,IAAU,CAEnC,MAAMC,EADUD,IAAU,EACF,OAAY,CAAE,WAAYN,CAAA,EAElD,GAAIQ,EAAAA,eAAeH,CAAK,GAAKA,EAAM,OAASI,EAAAA,OAAQ,CAChD,MAAMC,EAAcL,EACdM,EACd,OAAOD,EAAY,MAAM,OAAU,UACnCA,EAAY,MAAM,QAAU,KACtBA,EAAY,MAAM,MAClB,CAAA,EACE,OAAOE,EAAAA,aAAaF,EAAa,CAC7B,MAAO,CACH,GAAGC,EACH,GAAGJ,CAAA,CACP,CACH,CACL,CAEA,OACIM,EAAAA,IAACC,EAAA,CACG,GAAI,OAEJ,MAAAP,EAEC,SAAAF,CAAA,EAHIC,CAAA,CAMjB,CAAC,EACAR,EAAgB,GACbe,EAAAA,IAACJ,EAAAA,OAAA,CACG,SAAU,IAAIX,CAAa,GAC3B,aAAYP,EAAcO,CAAa,EACvC,KAAM,MACN,MAAO,CAAE,WAAYE,CAAA,CAAQ,CAAA,CACjC,CAAA,CAAA,CAIhB,CAAC,EAEDd,EAAY,YAAc"}