{"version":3,"sources":["../../src/components/Avatar.tsx","../../src/components/AvatarGroup.tsx"],"sourcesContent":["import Image from 'next/image'\nimport clsx from 'clsx'\n\nexport const avtarSizeList = ['tiny', 'small', 'medium', 'large'] as const\nexport type AvatarSize = typeof avtarSizeList[number]\nexport const avatarSizeMapping: Record<AvatarSize, number> = {\n  tiny: 24,\n  small: 32,\n  medium: 48,\n  large: 64\n}\n\nexport type AvatarProps = {\n  avatarUrl: string,\n  alt: string,\n  size?: AvatarSize,\n  className?: string,\n}\n\n/**\n * A component for showing a profile picture\n */\nconst Avatar = ({ avatarUrl, alt, size = 'medium', className = '' }: AvatarProps) => {\n  // TODO remove later\n  avatarUrl = 'https://cdn.helpwave.de/boringavatar.svg'\n\n  const avtarSize = {\n    tiny: 24,\n    small: 32,\n    medium: 48,\n    large: 64,\n  }[size]\n\n  const style = {\n    width: avtarSize + 'px',\n    height: avtarSize + 'px',\n    maxWidth: avtarSize + 'px',\n    maxHeight: avtarSize + 'px',\n    minWidth: avtarSize + 'px',\n    minHeight: avtarSize + 'px',\n  }\n\n  return (\n    // TODO transparent or white background later\n    <div className={clsx(`rounded-full bg-primary`, className)} style={style}>\n      <Image\n        className=\"rounded-full border border-gray-200\"\n        style={style}\n        src={avatarUrl}\n        alt={alt}\n        width={avtarSize}\n        height={avtarSize}\n      />\n    </div>\n  )\n}\n\nexport { Avatar }\n","import type { AvatarProps, AvatarSize } from './Avatar'\nimport { Avatar, avatarSizeMapping } from './Avatar'\n\nexport type AvatarGroupProps = {\n  avatars: Omit<AvatarProps, 'size'>[],\n  maxShownProfiles?: number,\n  size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n                              avatars,\n                              maxShownProfiles = 5,\n                              size = 'tiny'\n                            }: AvatarGroupProps) => {\n  const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n  const diameter = avatarSizeMapping[size]\n  const stackingOverlap = 0.5 // given as a percentage\n  const notDisplayedProfiles = avatars.length - maxShownProfiles\n  const avatarGroupWidth = diameter * (stackingOverlap * (displayedProfiles.length - 1) + 1)\n  return (\n    <div className=\"row relative\" style={{ height: diameter + 'px' }}>\n      <div style={{ width: avatarGroupWidth + 'px' }}>\n        {displayedProfiles.map((avatar, index) => (\n          <div\n            key={index}\n            className=\"absolute\"\n            style={{ left: (index * diameter * stackingOverlap) + 'px', zIndex: maxShownProfiles - index }}\n          >\n            <Avatar avatarUrl={avatar.avatarUrl} alt={avatar.alt} size={size}/>\n          </div>\n        ))}\n      </div>\n      {\n        notDisplayedProfiles > 0 && (\n          <div\n            className=\"truncate row items-center\"\n            style={{ fontSize: (diameter / 2) + 'px', marginLeft: (1 + diameter / 16) + 'px' }}\n          >\n            <span>+ {notDisplayedProfiles}</span>\n          </div>\n        )\n      }\n    </div>\n  )\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,OAAO,UAAU;AA4CX;AAxCC,IAAM,oBAAgD;AAAA,EAC3D,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAYA,IAAM,SAAS,CAAC,EAAE,WAAW,KAAK,OAAO,UAAU,YAAY,GAAG,MAAmB;AAEnF,cAAY;AAEZ,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,EAAE,IAAI;AAEN,QAAM,QAAQ;AAAA,IACZ,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,IACpB,UAAU,YAAY;AAAA,IACtB,WAAW,YAAY;AAAA,IACvB,UAAU,YAAY;AAAA,IACtB,WAAW,YAAY;AAAA,EACzB;AAEA;AAAA;AAAA,IAEE,oBAAC,SAAI,WAAW,KAAK,2BAA2B,SAAS,GAAG,OAC1D;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA;AAAA,IACV,GACF;AAAA;AAEJ;;;ACxBY,gBAAAA,MAUA,YAVA;AAnBL,IAAM,cAAc,CAAC;AAAA,EACE;AAAA,EACA,mBAAmB;AAAA,EACnB,OAAO;AACT,MAAwB;AAClD,QAAM,oBAAoB,QAAQ,SAAS,mBAAmB,UAAU,QAAQ,MAAM,GAAG,gBAAgB;AACzG,QAAM,WAAW,kBAAkB,IAAI;AACvC,QAAM,kBAAkB;AACxB,QAAM,uBAAuB,QAAQ,SAAS;AAC9C,QAAM,mBAAmB,YAAY,mBAAmB,kBAAkB,SAAS,KAAK;AACxF,SACE,qBAAC,SAAI,WAAU,gBAAe,OAAO,EAAE,QAAQ,WAAW,KAAK,GAC7D;AAAA,oBAAAA,KAAC,SAAI,OAAO,EAAE,OAAO,mBAAmB,KAAK,GAC1C,4BAAkB,IAAI,CAAC,QAAQ,UAC9B,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QACV,OAAO,EAAE,MAAO,QAAQ,WAAW,kBAAmB,MAAM,QAAQ,mBAAmB,MAAM;AAAA,QAE7F,0BAAAA,KAAC,UAAO,WAAW,OAAO,WAAW,KAAK,OAAO,KAAK,MAAW;AAAA;AAAA,MAJ5D;AAAA,IAKP,CACD,GACH;AAAA,IAEE,uBAAuB,KACrB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,UAAW,WAAW,IAAK,MAAM,YAAa,IAAI,WAAW,KAAM,KAAK;AAAA,QAEjF,+BAAC,UAAK;AAAA;AAAA,UAAG;AAAA,WAAqB;AAAA;AAAA,IAChC;AAAA,KAGN;AAEJ;","names":["jsx"]}