{"version":3,"file":"Avatar.mjs","names":[],"sources":["../../../src/base-ui/Avatar/Avatar.tsx"],"sourcesContent":["'use client';\n\nimport { getEmoji } from '@lobehub/fluent-emoji';\nimport { cssVar, cx } from 'antd-style';\nimport { Loader2 } from 'lucide-react';\nimport { memo, useMemo, useState } from 'react';\n\nimport { Center } from '@/Flex';\nimport FluentEmoji from '@/FluentEmoji';\nimport Icon from '@/Icon';\nimport { safeReadableColor } from '@/utils/safeReadableColor';\n\nimport { styles, variants } from './style';\nimport { type AvatarProps } from './type';\nimport {\n  calculateEmojiSize,\n  formatAvatarText,\n  hasValidBackground,\n  isDefaultAntAvatar,\n} from './utils';\n\nconst Avatar = memo<AvatarProps>(\n  ({\n    alt,\n    animation,\n    avatar,\n    background,\n    bordered,\n    borderedColor,\n    className,\n    classNames,\n    crossOrigin,\n    draggable = false,\n    emojiScaleWithBackground = true,\n    loading,\n    ref,\n    shadow,\n    shape = 'square',\n    size = 48,\n    sliceText = true,\n    style,\n    styles: customStyles,\n    title,\n    tooltipProps,\n    unoptimized,\n    variant = 'borderless',\n    ...rest\n  }) => {\n    const isStringAvatar = typeof avatar === 'string';\n\n    const [isImgError, setIsImgError] = useState(false);\n\n    const isUrlOrElement = useMemo(() => isDefaultAntAvatar(avatar), [avatar]);\n\n    const emoji = useMemo(\n      () => (avatar && isStringAvatar && !isUrlOrElement ? getEmoji(avatar) : undefined),\n      [avatar, isStringAvatar, isUrlOrElement],\n    );\n\n    const text = String(isUrlOrElement ? title : avatar);\n\n    const imgAlt = alt || title || 'avatar';\n\n    const hasBackground = hasValidBackground(background);\n    const showImage = isUrlOrElement && isStringAvatar && !isImgError;\n    const showElement = isUrlOrElement && !isStringAvatar && !isImgError;\n\n    const customAvatar = useMemo(\n      () =>\n        emoji ? (\n          <FluentEmoji\n            emoji={emoji}\n            size={calculateEmojiSize(size, hasBackground, emojiScaleWithBackground)}\n            type={animation ? 'anim' : '3d'}\n            unoptimized={unoptimized}\n          />\n        ) : (\n          formatAvatarText(text || title, sliceText)\n        ),\n      [\n        animation,\n        emoji,\n        hasBackground,\n        size,\n        sliceText,\n        text,\n        title,\n        unoptimized,\n        emojiScaleWithBackground,\n      ],\n    );\n\n    return (\n      <div\n        {...rest}\n        className={cx(variants({ shadow, variant }), className, classNames?.root)}\n        ref={ref}\n        style={{\n          backgroundColor:\n            (isUrlOrElement && !isImgError) || emoji\n              ? background\n              : background || cssVar.colorBorder,\n          borderRadius: shape === 'circle' ? '50%' : size < 24 ? '33%' : Math.max(size / 6, 2),\n          boxShadow: bordered\n            ? `${cssVar.colorBgLayout} 0 0 0 2px, ${borderedColor || cssVar.colorTextTertiary} 0 0 0 4px`\n            : undefined,\n          color: safeReadableColor(background || cssVar.colorBorder),\n          cursor: rest?.onClick ? 'pointer' : undefined,\n          fontSize: size * (emoji ? 0.7 : 0.5),\n          height: size,\n          width: size,\n          ...style,\n          ...customStyles?.root,\n        }}\n      >\n        {loading && (\n          <Center\n            className={cx(styles.loading, classNames?.loading)}\n            flex={'none'}\n            height={'100%'}\n            style={customStyles?.loading}\n            width={'100%'}\n          >\n            <Icon spin icon={Loader2} />\n          </Center>\n        )}\n        {typeof avatar === 'string' && showImage && (\n          <img\n            alt={imgAlt}\n            className={cx(styles.img, classNames?.img)}\n            crossOrigin={crossOrigin}\n            draggable={draggable}\n            height={size}\n            loading={'lazy'}\n            src={avatar}\n            style={customStyles?.img}\n            width={size}\n            onError={() => setIsImgError(true)}\n          />\n        )}\n        {!showImage && (\n          <span className={cx(styles.content, classNames?.content)} style={customStyles?.content}>\n            {showElement ? avatar : customAvatar}\n          </span>\n        )}\n      </div>\n    );\n  },\n);\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,SAAS,MACZ,EACC,KACA,WACA,QACA,YACA,UACA,eACA,WACA,YACA,aACA,YAAY,OACZ,2BAA2B,MAC3B,SACA,KACA,QACA,QAAQ,UACR,OAAO,IACP,YAAY,MACZ,OACA,QAAQ,cACR,OACA,cACA,aACA,UAAU,cACV,GAAG,WACC;CACJ,MAAM,iBAAiB,OAAO,WAAW;CAEzC,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,MAAM,iBAAiB,cAAc,mBAAmB,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,QAAQ,cACL,UAAU,kBAAkB,CAAC,iBAAiB,SAAS,MAAM,IAAI,KAAA,GACxE;EAAC;EAAQ;EAAgB;CAAc,CACzC;CAEA,MAAM,OAAO,OAAO,iBAAiB,QAAQ,MAAM;CAEnD,MAAM,SAAS,OAAO,SAAS;CAE/B,MAAM,gBAAgB,mBAAmB,UAAU;CACnD,MAAM,YAAY,kBAAkB,kBAAkB,CAAC;CACvD,MAAM,cAAc,kBAAkB,CAAC,kBAAkB,CAAC;CAE1D,MAAM,eAAe,cAEjB,QACE,oBAAC,aAAD;EACS;EACP,MAAM,mBAAmB,MAAM,eAAe,wBAAwB;EACtE,MAAM,YAAY,SAAS;EACd;CACd,CAAA,IAED,iBAAiB,QAAQ,OAAO,SAAS,GAE7C;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,WAAW,GAAG,SAAS;GAAE;GAAQ;EAAQ,CAAC,GAAG,WAAW,YAAY,IAAI;EACnE;EACL,OAAO;GACL,iBACG,kBAAkB,CAAC,cAAe,QAC/B,aACA,cAAc,OAAO;GAC3B,cAAc,UAAU,WAAW,QAAQ,OAAO,KAAK,QAAQ,KAAK,IAAI,OAAO,GAAG,CAAC;GACnF,WAAW,WACP,GAAG,OAAO,cAAc,cAAc,iBAAiB,OAAO,kBAAkB,cAChF,KAAA;GACJ,OAAO,kBAAkB,cAAc,OAAO,WAAW;GACzD,QAAQ,MAAM,UAAU,YAAY,KAAA;GACpC,UAAU,QAAQ,QAAQ,KAAM;GAChC,QAAQ;GACR,OAAO;GACP,GAAG;GACH,GAAG,cAAc;EACnB;EApBF,UAAA;GAsBG,WACC,oBAAC,QAAD;IACE,WAAW,GAAG,OAAO,SAAS,YAAY,OAAO;IACjD,MAAM;IACN,QAAQ;IACR,OAAO,cAAc;IACrB,OAAO;IAEP,UAAA,oBAAC,MAAD;KAAM,MAAA;KAAK,MAAM;IAAU,CAAA;GACrB,CAAA;GAET,OAAO,WAAW,YAAY,aAC7B,oBAAC,OAAD;IACE,KAAK;IACL,WAAW,GAAG,OAAO,KAAK,YAAY,GAAG;IAC5B;IACF;IACX,QAAQ;IACR,SAAS;IACT,KAAK;IACL,OAAO,cAAc;IACrB,OAAO;IACP,eAAe,cAAc,IAAI;GAClC,CAAA;GAEF,CAAC,aACA,oBAAC,QAAD;IAAM,WAAW,GAAG,OAAO,SAAS,YAAY,OAAO;IAAG,OAAO,cAAc;IAC5E,UAAA,cAAc,SAAS;GACpB,CAAA;EAEL;;AAET,CACF;AAEA,OAAO,cAAc"}