{"version":3,"file":"Avatar.cjs","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  getRadius,\n  getSize,\n  polymorphicFactory,\n  PolymorphicFactory,\n  RaikouColor,\n  RaikouGradient,\n  RaikouRadius,\n  RaikouSize,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { AvatarGroup } from './AvatarGroup/AvatarGroup';\nimport { useAvatarGroupContext } from './AvatarGroup/AvatarGroup.context';\nimport { AvatarPlaceholderIcon } from './AvatarPlaceholderIcon';\nimport { getInitialsColor } from './get-initials-color/get-initials-color';\nimport { getInitials } from './get-initials/get-initials';\nimport { AvatarImageStyle, AvatarPlaceholderStyle, AvatarRootStyle } from './Avatar.css';\n\nexport type AvatarStylesNames = 'root' | 'placeholder' | 'image';\nexport type AvatarVariant =\n  | 'filled'\n  | 'light'\n  | 'gradient'\n  | 'outline'\n  | 'transparent'\n  | 'default'\n  | 'white';\n\nexport type AvatarCssVariables = {\n  root: '--avatar-size' | '--avatar-radius' | '--avatar-bg' | '--avatar-color' | '--avatar-bd';\n};\n\nexport interface AvatarProps extends BoxProps, StylesApiProps<AvatarFactory> {\n  /** Width and height of the avatar, numbers are converted to rem, `'md'` by default */\n  size?: RaikouSize | (string & {}) | number;\n\n  /** Key of `theme.radius` or any valid CSS value to set border-radius, `'100%'` by default */\n  radius?: RaikouRadius;\n\n  /** Key of `theme.colors` or any valid CSS color, default value is `'gray'`  */\n  color?: RaikouColor | 'initials';\n\n  /** Gradient configuration used when `variant=\"gradient\"`, default value is `theme.defaultGradient` */\n  gradient?: RaikouGradient;\n\n  /** Image url, if the image cannot be loaded or `src={null}`, then placeholder is displayed instead */\n  src?: string | null;\n\n  /** Image `alt` attribute, also used as `title` attribute for placeholder */\n  alt?: string;\n\n  /** `img` tag attributes */\n  imageProps?: React.ComponentPropsWithoutRef<'img'>;\n\n  /** Avatar placeholder, displayed when `src={null}` or when the image cannot be loaded */\n  children?: React.ReactNode;\n\n  /** Determines whether text color with filled variant should depend on `background-color`. If luminosity of the `color` prop is less than `theme.luminosityThreshold`, then `theme.white` will be used for text color, otherwise `theme.black`. Overrides `theme.autoContrast`. */\n  autoContrast?: boolean;\n\n  /** Name of the user. When `src` is not set, used to display initials and to generate color when `color=\"initials\"` is set. */\n  name?: string;\n\n  /** An array of colors that can be used for autogenerated initials. By default, all default Raikou colors can be used except gray and dark. */\n  allowedInitialsColors?: RaikouColor[];\n}\n\nexport type AvatarFactory = PolymorphicFactory<{\n  props: AvatarProps;\n  defaultRef: HTMLDivElement;\n  defaultComponent: 'div';\n  stylesNames: AvatarStylesNames;\n  vars: AvatarCssVariables;\n  variant: AvatarVariant;\n  staticComponents: {\n    Group: typeof AvatarGroup;\n  };\n}>;\n\nconst defaultProps: Partial<AvatarProps> = {};\n\nconst varsResolver = createVarsResolver<AvatarFactory>(\n  (\n    theme,\n    { size, radius, variant, gradient, color, autoContrast, name, allowedInitialsColors }\n  ) => {\n    const _color =\n      color === 'initials' && typeof name === 'string'\n        ? getInitialsColor(name, allowedInitialsColors)\n        : color;\n\n    const colors = theme.variantColorResolver({\n      color: _color || 'gray',\n      theme,\n      gradient,\n      variant: variant || 'light',\n      autoContrast,\n    });\n\n    return {\n      root: {\n        '--avatar-size': getSize(size, 'avatar-size'),\n        '--avatar-radius': radius === undefined ? undefined : getRadius(radius),\n        '--avatar-bg': _color || variant ? colors.background : undefined,\n        '--avatar-color': _color || variant ? colors.color : undefined,\n        '--avatar-bd': _color || variant ? colors.border : undefined,\n      },\n    };\n  }\n);\n\nexport const Avatar = polymorphicFactory<AvatarFactory>((_props, ref) => {\n  const props = useProps('Avatar', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    src,\n    alt,\n    radius,\n    color,\n    gradient,\n    imageProps,\n    children,\n    autoContrast,\n    mod,\n    name,\n    allowedInitialsColors,\n    ...others\n  } = props;\n  const ctx = useAvatarGroupContext();\n  const [error, setError] = useState(!src);\n\n  const getStyles = useStyles<AvatarFactory>({\n    name: 'Avatar',\n    props,\n    classes: {\n      root: AvatarRootStyle,\n      placeholder: AvatarPlaceholderStyle,\n      image: AvatarImageStyle,\n    },\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  useEffect(() => setError(!src), [src]);\n\n  return (\n    <Box\n      {...getStyles('root')}\n      mod={[{ 'within-group': ctx.withinGroup }, mod]}\n      ref={ref}\n      {...others}\n    >\n      {error ? (\n        <span {...getStyles('placeholder')} title={alt}>\n          {children || (typeof name === 'string' && getInitials(name)) || <AvatarPlaceholderIcon />}\n        </span>\n      ) : (\n        <img\n          {...imageProps}\n          {...getStyles('image')}\n          src={src!}\n          alt={alt}\n          onError={(event) => {\n            setError(true);\n            imageProps?.onError?.(event);\n          }}\n        />\n      )}\n    </Box>\n  );\n});\n\nAvatar.displayName = '@raikou/core/Avatar';\nAvatar.Group = AvatarGroup;\n"],"names":["createVarsResolver","getInitialsColor","getSize","getRadius","polymorphicFactory","useProps","useAvatarGroupContext","useState","useStyles","AvatarRootStyle","AvatarPlaceholderStyle","AvatarImageStyle","useEffect","jsx","Box","getInitials","AvatarPlaceholderIcon","AvatarGroup"],"mappings":"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"}