{"version":3,"file":"Avatar.mjs","names":["Avatar","isDefaultAntAvatar","checkIsDefaultAntAvatar","AntAvatar"],"sources":["../../src/Avatar/Avatar.tsx"],"sourcesContent":["'use client';\n\nimport { getEmoji } from '@lobehub/fluent-emoji';\nimport { Avatar as AntAvatar } from 'antd';\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 Img from '@/Img';\nimport { safeReadableColor } from '@/utils/safeReadableColor';\n\nimport { styles, variants } from './style';\nimport { type AvatarProps } from './type';\nimport {\n  calculateEmojiSize,\n  formatAvatarText,\n  getActualColorForReadable,\n  hasValidBackground,\n  isDefaultAntAvatar as checkIsDefaultAntAvatar,\n} from './utils';\n\nconst Avatar = memo<AvatarProps>(\n  ({\n    bordered,\n    className,\n    avatar,\n    title,\n    animation,\n    borderedColor,\n    size = 48,\n    shape = 'square',\n    background,\n    style,\n    unoptimized,\n    alt,\n    variant = 'borderless',\n    shadow,\n    loading,\n    sliceText = true,\n    emojiScaleWithBackground = true,\n    ref,\n    ...rest\n  }) => {\n    const isStringAvatar = typeof avatar === 'string';\n\n    const isDefaultAntAvatar = useMemo(() => checkIsDefaultAntAvatar(avatar), [avatar]);\n    const [isImgError, setIsImgError] = useState(false);\n\n    const emoji = useMemo(\n      () => avatar && !isDefaultAntAvatar && isStringAvatar && getEmoji(avatar),\n      [avatar, isStringAvatar, isDefaultAntAvatar],\n    );\n\n    const text = String(isDefaultAntAvatar ? title : avatar);\n\n    const imgAlt = alt || title || 'avatar';\n\n    const defaultAvatar = useMemo(\n      () =>\n        typeof avatar === 'string' ? (\n          <Img\n            alt={imgAlt}\n            height={size}\n            loading={'lazy'}\n            src={avatar}\n            unoptimized={unoptimized}\n            width={size}\n            onError={() => setIsImgError(true)}\n          />\n        ) : (\n          avatar\n        ),\n      [avatar, imgAlt, size, unoptimized],\n    );\n\n    const hasBackground = hasValidBackground(background);\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    // Get actual color value for readableColor (CSS variables can't be parsed)\n    const actualColorForReadable = useMemo(\n      () => getActualColorForReadable(background, cssVar.colorBorder),\n      [background],\n    );\n\n    const avatarStyle = useMemo(\n      () => ({\n        backgroundColor:\n          (isDefaultAntAvatar && !isImgError) || emoji\n            ? background\n            : background || cssVar.colorBorder,\n        borderRadius: shape === 'square' && size && size < 24 ? '33%' : undefined,\n        boxShadow: bordered\n          ? `${cssVar.colorBgLayout} 0 0 0 2px, ${borderedColor || cssVar.colorTextTertiary} 0 0 0 4px`\n          : undefined,\n        color: safeReadableColor(actualColorForReadable),\n        cursor: rest?.onClick ? 'pointer' : undefined,\n        fontSize: size * (emoji ? 0.7 : 0.5),\n        ...style,\n      }),\n      [\n        isDefaultAntAvatar,\n        isImgError,\n        background,\n        shape,\n        emoji,\n        size,\n        bordered,\n        borderedColor,\n        actualColorForReadable,\n        rest?.onClick,\n        style,\n      ],\n    );\n\n    const showFallback = !isDefaultAntAvatar || isImgError;\n\n    return (\n      <AntAvatar\n        alt={imgAlt}\n        className={cx(variants({ shadow, variant }), className)}\n        draggable={false}\n        ref={ref}\n        shape={shape}\n        size={size}\n        src={isDefaultAntAvatar && !isImgError ? defaultAvatar : undefined}\n        style={avatarStyle}\n        {...rest}\n      >\n        {loading && (\n          <Center className={styles.loading} height={'100%'} width={'100%'}>\n            <Icon spin icon={Loader2} />\n          </Center>\n        )}\n        {showFallback && customAvatar}\n      </AntAvatar>\n    );\n  },\n);\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n"],"mappings":";;;;;;;;;;;;;;;AAwBA,MAAMA,WAAS,MACZ,EACC,UACA,WACA,QACA,OACA,WACA,eACA,OAAO,IACP,QAAQ,UACR,YACA,OACA,aACA,KACA,UAAU,cACV,QACA,SACA,YAAY,MACZ,2BAA2B,MAC3B,KACA,GAAG,WACC;CACJ,MAAM,iBAAiB,OAAO,WAAW;CAEzC,MAAMC,uBAAqB,cAAcC,mBAAwB,OAAO,EAAE,CAAC,OAAO,CAAC;CACnF,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CAEnD,MAAM,QAAQ,cACN,UAAU,CAACD,wBAAsB,kBAAkB,SAAS,OAAO,EACzE;EAAC;EAAQ;EAAgBA;EAAmB,CAC7C;CAED,MAAM,OAAO,OAAOA,uBAAqB,QAAQ,OAAO;CAExD,MAAM,SAAS,OAAO,SAAS;CAE/B,MAAM,gBAAgB,cAElB,OAAO,WAAW,WAChB,oBAAC,KAAD;EACE,KAAK;EACL,QAAQ;EACR,SAAS;EACT,KAAK;EACQ;EACb,OAAO;EACP,eAAe,cAAc,KAAK;EAClC,CAAA,GAEF,QAEJ;EAAC;EAAQ;EAAQ;EAAM;EAAY,CACpC;CAED,MAAM,gBAAgB,mBAAmB,WAAW;CAEpD,MAAM,eAAe,cAEjB,QACE,oBAAC,aAAD;EACS;EACP,MAAM,mBAAmB,MAAM,eAAe,yBAAyB;EACvE,MAAM,YAAY,SAAS;EACd;EACb,CAAA,GAEF,iBAAiB,QAAQ,OAAO,UAAU,EAE9C;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAGD,MAAM,yBAAyB,cACvB,0BAA0B,YAAY,OAAO,YAAY,EAC/D,CAAC,WAAW,CACb;CAED,MAAM,cAAc,eACX;EACL,iBACGA,wBAAsB,CAAC,cAAe,QACnC,aACA,cAAc,OAAO;EAC3B,cAAc,UAAU,YAAY,QAAQ,OAAO,KAAK,QAAQ,KAAA;EAChE,WAAW,WACP,GAAG,OAAO,cAAc,cAAc,iBAAiB,OAAO,kBAAkB,cAChF,KAAA;EACJ,OAAO,kBAAkB,uBAAuB;EAChD,QAAQ,MAAM,UAAU,YAAY,KAAA;EACpC,UAAU,QAAQ,QAAQ,KAAM;EAChC,GAAG;EACJ,GACD;EACEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM;EACN;EACD,CACF;CAED,MAAM,eAAe,CAACA,wBAAsB;AAE5C,QACE,qBAACE,QAAD;EACE,KAAK;EACL,WAAW,GAAG,SAAS;GAAE;GAAQ;GAAS,CAAC,EAAE,UAAU;EACvD,WAAW;EACN;EACE;EACD;EACN,KAAKF,wBAAsB,CAAC,aAAa,gBAAgB,KAAA;EACzD,OAAO;EACP,GAAI;YATN,CAWG,WACC,oBAAC,QAAD;GAAQ,WAAW,OAAO;GAAS,QAAQ;GAAQ,OAAO;aACxD,oBAAC,MAAD;IAAM,MAAA;IAAK,MAAM;IAAW,CAAA;GACrB,CAAA,EAEV,gBAAgB,aACP;;EAGjB;AAED,SAAO,cAAc"}