{"version":3,"file":"Avatar.mjs","sources":["../../../../../../packages/components/avatar/src/Avatar.tsx"],"sourcesContent":["import type { Breakpoint, CustomSlotsType, VueNode } from '@antdv/types';\n\nimport type { CSSProperties } from 'vue';\nimport { responsiveArray } from '@antdv/constants';\nimport { useBreakpoint } from '@antdv/hooks';\nimport { eagerComputed, getPropsSlot } from '@antdv/utils';\nimport { ResizeObserver } from '@antdv/vue-components';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  shallowRef,\n  watch,\n} from 'vue';\nimport useConfigInject from '../../config-provider/src/hooks/useConfigInject';\n\nimport useStyle from '../style';\nimport { useAvatarInjectContext } from './AvatarContext';\nimport { avatarProps } from './props';\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'AAvatar',\n  inheritAttrs: false,\n  props: avatarProps(),\n  slots: Object as CustomSlotsType<{\n    icon: any\n    default: any\n  }>,\n  setup(props, { slots, attrs }) {\n    const isImgExist = shallowRef(true);\n    const isMounted = shallowRef(false);\n    const scale = shallowRef(1);\n\n    const avatarChildrenRef = shallowRef<HTMLElement>(null);\n    const avatarNodeRef = shallowRef<HTMLElement>(null);\n\n    const { prefixCls } = useConfigInject('avatar', props);\n    const [wrapSSR, hashId] = useStyle(prefixCls);\n    const avatarCtx = useAvatarInjectContext();\n    const size = computed(() => {\n      return props.size === 'default' ? avatarCtx.size : props.size;\n    });\n    const screens = useBreakpoint();\n    const responsiveSize = eagerComputed(() => {\n      if (typeof props.size !== 'object')\n        return undefined;\n\n      const currentBreakpoint: Breakpoint = responsiveArray.find(screen => screens.value[screen])!;\n      const currentSize = props.size[currentBreakpoint];\n\n      return currentSize;\n    });\n\n    const responsiveSizeStyle = (hasIcon: boolean) => {\n      if (responsiveSize.value) {\n        return {\n          width: `${responsiveSize.value}px`,\n          height: `${responsiveSize.value}px`,\n          lineHeight: `${responsiveSize.value}px`,\n          fontSize: `${hasIcon ? responsiveSize.value / 2 : 18}px`,\n        };\n      }\n      return {};\n    };\n\n    const setScaleParam = () => {\n      if (!avatarChildrenRef.value || !avatarNodeRef.value)\n        return;\n\n      const childrenWidth = avatarChildrenRef.value.offsetWidth; // offsetWidth avoid affecting be transform scale\n      const nodeWidth = avatarNodeRef.value.offsetWidth;\n      // denominator is 0 is no meaning\n      if (childrenWidth !== 0 && nodeWidth !== 0) {\n        const { gap = 4 } = props;\n        if (gap * 2 < nodeWidth) {\n          scale.value\n            = nodeWidth - gap * 2 < childrenWidth ? (nodeWidth - gap * 2) / childrenWidth : 1;\n        }\n      }\n    };\n\n    const handleImgLoadError = () => {\n      const { loadError } = props;\n      const errorFlag = loadError?.();\n      if (errorFlag !== false)\n        isImgExist.value = false;\n    };\n\n    watch(\n      () => props.src,\n      () => {\n        nextTick(() => {\n          isImgExist.value = true;\n          scale.value = 1;\n        });\n      },\n    );\n\n    watch(\n      () => props.gap,\n      () => {\n        nextTick(() => {\n          setScaleParam();\n        });\n      },\n    );\n\n    onMounted(() => {\n      nextTick(() => {\n        setScaleParam();\n        isMounted.value = true;\n      });\n    });\n\n    return () => {\n      const { shape, src, alt, srcset, draggable, crossOrigin } = props;\n      const mergeShape = avatarCtx.shape ?? shape;\n      const icon = getPropsSlot(slots, props, 'icon');\n      const pre = prefixCls.value;\n      const classString = {\n        [`${attrs.class}`]: !!attrs.class,\n        [pre]: true,\n        [`${pre}-lg`]: size.value === 'large',\n        [`${pre}-sm`]: size.value === 'small',\n        [`${pre}-${mergeShape}`]: true,\n        [`${pre}-image`]: src && isImgExist.value,\n        [`${pre}-icon`]: icon,\n        [hashId.value]: true,\n      };\n\n      const sizeStyle: CSSProperties\n        = typeof size.value === 'number'\n          ? {\n              width: `${size.value}px`,\n              height: `${size.value}px`,\n              lineHeight: `${size.value}px`,\n              fontSize: icon ? `${size.value / 2}px` : '18px',\n            }\n          : {};\n\n      const children: VueNode = slots.default?.();\n      let childrenToRender;\n      if (src && isImgExist.value) {\n        childrenToRender = (\n          <img\n            draggable={draggable}\n            src={src}\n            srcset={srcset}\n            onError={handleImgLoadError}\n            alt={alt}\n            crossorigin={crossOrigin}\n          />\n        );\n      } else if (icon) {\n        childrenToRender = icon;\n      } else if (isMounted.value || scale.value !== 1) {\n        const transformString = `scale(${scale.value}) translateX(-50%)`;\n        const childrenStyle: CSSProperties = {\n          msTransform: transformString,\n          WebkitTransform: transformString,\n          transform: transformString,\n        };\n        const sizeChildrenStyle\n          = typeof size.value === 'number'\n            ? {\n                lineHeight: `${size.value}px`,\n              }\n            : {};\n        childrenToRender = (\n          <ResizeObserver onResize={setScaleParam}>\n            <span\n              class={`${pre}-string`}\n              ref={avatarChildrenRef}\n              style={{ ...sizeChildrenStyle, ...childrenStyle }}\n            >\n              {children}\n            </span>\n          </ResizeObserver>\n        );\n      } else {\n        childrenToRender = (\n          <span class={`${pre}-string`} ref={avatarChildrenRef} style={{ opacity: 0 }}>\n            {children}\n          </span>\n        );\n      }\n      return wrapSSR(\n        <span\n          {...attrs}\n          ref={avatarNodeRef}\n          class={classString}\n          style={[sizeStyle, responsiveSizeStyle(!!icon), attrs.style as CSSProperties]}\n        >\n          {childrenToRender}\n        </span>,\n      );\n    };\n  },\n});\n"],"names":["compatConfig","MODE","name","inheritAttrs","props","avatarProps","slots","Object","setup","attrs","isImgExist","shallowRef","isMounted","scale","avatarChildrenRef","avatarNodeRef","prefixCls","useConfigInject","wrapSSR","hashId","useStyle","avatarCtx","useAvatarInjectContext","size","computed","screens","useBreakpoint","responsiveSize","eagerComputed","undefined","currentBreakpoint","responsiveArray","find","screen","value","currentSize","responsiveSizeStyle","hasIcon","width","height","lineHeight","fontSize","setScaleParam","childrenWidth","offsetWidth","nodeWidth","gap","handleImgLoadError","loadError","errorFlag","watch","src","nextTick","onMounted","shape","alt","srcset","draggable","crossOrigin","mergeShape","icon","getPropsSlot","pre","classString","class","sizeStyle","children","default","childrenToRender","_createVNode","transformString","childrenStyle","msTransform","WebkitTransform","transform","sizeChildrenStyle","ResizeObserver","opacity","style"],"mappings":"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"}