{"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { HTMLAttributes, useState } from 'react';\nimport { cn } from '../../utils/utils';\nimport { UserIcon } from '../UserIcon/UserIcon';\n\nexport interface AvatarProps extends Omit<\n  HTMLAttributes<HTMLDivElement>,\n  'children'\n> {\n  /** Picture URL. When absent — or if it fails to load — the fallback shows. */\n  src?: string | null;\n  /** Alternative text for the picture. Defaults to the person's name. */\n  alt?: string;\n  /** Name of the person, used as the default `alt`. */\n  name?: string;\n  /** Rendered size in pixels. Default `40`. */\n  size?: number;\n}\n\n/**\n * Circular profile picture with a graceful fallback to the generic user\n * placeholder — used wherever a student/teacher is listed and the photo may be\n * missing or broken.\n *\n * @example\n * ```tsx\n * <Avatar src={student.photoUrl} name={student.name} size={48} />\n * ```\n */\nexport const Avatar = ({\n  src,\n  alt,\n  name,\n  size = 40,\n  className = '',\n  ...props\n}: AvatarProps) => {\n  // Tracks which URL failed, so swapping `src` retries automatically.\n  const [failedSrc, setFailedSrc] = useState<string | null>(null);\n  const showImage = Boolean(src) && failedSrc !== src;\n\n  return (\n    <div\n      data-component=\"Avatar\"\n      className={cn(\n        'relative shrink-0 overflow-hidden rounded-full',\n        'flex items-center justify-center',\n        className\n      )}\n      style={{ width: size, height: size }}\n      {...props}\n    >\n      {showImage ? (\n        <img\n          src={src as string}\n          alt={alt ?? name ?? ''}\n          width={size}\n          height={size}\n          className=\"h-full w-full object-cover\"\n          onError={() => setFailedSrc(src ?? null)}\n        />\n      ) : (\n        <UserIcon size={size} />\n      )}\n    </div>\n  );\n};\n\nexport default Avatar;\n"],"mappings":";;;;;;;;AAAA,SAAyB,gBAAgB;AAoDjC;AAxBD,IAAM,SAAS,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,GAAG;AACL,MAAmB;AAEjB,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,YAAY,QAAQ,GAAG,KAAK,cAAc;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,kBAAe;AAAA,MACf,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,MAClC,GAAG;AAAA,MAEH,sBACC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,KAAK,OAAO,QAAQ;AAAA,UACpB,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS,MAAM,aAAa,OAAO,IAAI;AAAA;AAAA,MACzC,IAEA,oBAAC,YAAS,MAAY;AAAA;AAAA,EAE1B;AAEJ;AAEA,IAAO,iBAAQ;","names":[]}