{"version":3,"sources":["../src/Avatar/Avatar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { User } from 'lucide-react';\n\nexport type AvatarSize = 'small' | 'medium' | 'large' | 'extra-large';\n\nexport interface AvatarProps {\n  /**\n   * Size of the avatar\n   */\n  size?: AvatarSize;\n  /**\n   * Image source URL\n   */\n  src?: string;\n  /**\n   * Initials to display (2 characters) when no image is provided\n   */\n  initials?: string;\n  /**\n   * Alt text for the image\n   */\n  alt?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom style\n   */\n  style?: React.CSSProperties;\n  /**\n   * Test ID for testing\n   */\n  'data-testid'?: string;\n}\n\nconst sizeConfig = {\n  small: {\n    size: 20,\n    fontSize: 0, // Too small for initials\n    fontWeight: 400,\n    iconSize: 12,\n    borderRadius: '99px',\n  },\n  medium: {\n    size: 32,\n    fontSize: 13,\n    fontWeight: 400,\n    iconSize: 16,\n    borderRadius: '99px',\n  },\n  large: {\n    size: 48,\n    fontSize: 13,\n    fontWeight: 400,\n    iconSize: 24,\n    borderRadius: '4px',\n  },\n  'extra-large': {\n    size: 96,\n    fontSize: 27,\n    fontWeight: 600,\n    iconSize: 48,\n    borderRadius: '8px',\n  },\n};\n\n/**\n * Avatar component - Arbor Design System\n *\n * Displays a user avatar with support for images, initials, or a placeholder icon.\n * Features hover state with inner shadow effect.\n */\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n  (\n    {\n      size = 'medium',\n      src,\n      initials,\n      alt = 'Avatar',\n      className,\n      style,\n      'data-testid': dataTestId,\n    },\n    ref\n  ) => {\n    const [isHovered, setIsHovered] = React.useState(false);\n    const [imageError, setImageError] = React.useState(false);\n    const config = sizeConfig[size];\n\n    // Only apply hover state for small size\n    const hasHoverState = size === 'small';\n\n    const containerStyles: React.CSSProperties = {\n      width: `${config.size}px`,\n      height: `${config.size}px`,\n      borderRadius: config.borderRadius,\n      border: '1px solid #efefef',\n      overflow: 'hidden',\n      position: 'relative',\n      backgroundColor: '#f8f8f8',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n      cursor: 'default',\n      boxSizing: 'border-box',\n      ...style,\n    };\n\n    const hoverOverlayStyles: React.CSSProperties = {\n      position: 'absolute',\n      inset: 0,\n      pointerEvents: 'none',\n      boxShadow: isHovered && hasHoverState ? 'inset 0px 4px 100px 0px rgba(32, 32, 32, 0.3)' : 'none',\n      borderRadius: config.borderRadius,\n      transition: 'box-shadow 0.2s ease-in-out',\n    };\n\n    const imageStyles: React.CSSProperties = {\n      width: '100%',\n      height: '100%',\n      objectFit: 'cover',\n    };\n\n    const initialsStyles: React.CSSProperties = {\n      fontSize: `${config.fontSize}px`,\n      fontWeight: config.fontWeight,\n      color: '#2f2f2f',\n      lineHeight: 1.5,\n      textAlign: 'center',\n      userSelect: 'none',\n    };\n\n    // Determine what to display\n    const showImage = src && !imageError;\n    const showInitials = !showImage && initials && size !== 'small';\n    const showPlaceholder = !showImage && !showInitials;\n\n    return (\n      <div\n        ref={ref}\n        className={className}\n        style={containerStyles}\n        onMouseEnter={() => setIsHovered(true)}\n        onMouseLeave={() => setIsHovered(false)}\n        data-testid={dataTestId}\n      >\n        {showImage && (\n          <img\n            src={src}\n            alt={alt}\n            style={imageStyles}\n            onError={() => setImageError(true)}\n          />\n        )}\n\n        {showInitials && (\n          <span style={initialsStyles}>\n            {initials.slice(0, 2).toUpperCase()}\n          </span>\n        )}\n\n        {showPlaceholder && (\n          <User size={config.iconSize} color=\"#d1d1d1\" strokeWidth={2} />\n        )}\n\n        <div style={hoverOverlayStyles} />\n      </div>\n    );\n  }\n);\n\nAvatar.displayName = 'Avatar';\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,YAAY;AA2If,SASI,KATJ;AAxGN,IAAM,aAAa;AAAA,EACjB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;AAQO,IAAM,SAAe;AAAA,EAC1B,CACE;AAAA,IACE,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB,GACA,QACG;AACH,UAAM,CAAC,WAAW,YAAY,IAAU,eAAS,KAAK;AACtD,UAAM,CAAC,YAAY,aAAa,IAAU,eAAS,KAAK;AACxD,UAAM,SAAS,WAAW,IAAI;AAG9B,UAAM,gBAAgB,SAAS;AAE/B,UAAM,kBAAuC;AAAA,MAC3C,OAAO,GAAG,OAAO,IAAI;AAAA,MACrB,QAAQ,GAAG,OAAO,IAAI;AAAA,MACtB,cAAc,OAAO;AAAA,MACrB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,GAAG;AAAA,IACL;AAEA,UAAM,qBAA0C;AAAA,MAC9C,UAAU;AAAA,MACV,OAAO;AAAA,MACP,eAAe;AAAA,MACf,WAAW,aAAa,gBAAgB,kDAAkD;AAAA,MAC1F,cAAc,OAAO;AAAA,MACrB,YAAY;AAAA,IACd;AAEA,UAAM,cAAmC;AAAA,MACvC,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IACb;AAEA,UAAM,iBAAsC;AAAA,MAC1C,UAAU,GAAG,OAAO,QAAQ;AAAA,MAC5B,YAAY,OAAO;AAAA,MACnB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,IACd;AAGA,UAAM,YAAY,OAAO,CAAC;AAC1B,UAAM,eAAe,CAAC,aAAa,YAAY,SAAS;AACxD,UAAM,kBAAkB,CAAC,aAAa,CAAC;AAEvC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,cAAc,MAAM,aAAa,IAAI;AAAA,QACrC,cAAc,MAAM,aAAa,KAAK;AAAA,QACtC,eAAa;AAAA,QAEZ;AAAA,uBACC;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,SAAS,MAAM,cAAc,IAAI;AAAA;AAAA,UACnC;AAAA,UAGD,gBACC,oBAAC,UAAK,OAAO,gBACV,mBAAS,MAAM,GAAG,CAAC,EAAE,YAAY,GACpC;AAAA,UAGD,mBACC,oBAAC,QAAK,MAAM,OAAO,UAAU,OAAM,WAAU,aAAa,GAAG;AAAA,UAG/D,oBAAC,SAAI,OAAO,oBAAoB;AAAA;AAAA;AAAA,IAClC;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}