{"version":3,"file":"avatar2.mjs","sources":["../../../../../../packages/components/avatar/src/avatar.vue"],"sourcesContent":["<template>\n  <span\n    :class=\"[ns.b(), ns.is('circle', circle)]\"\n    :style=\"avatarStyle\"\n    data-test-name=\"avatar\"\n    :data-test-variant=\"[circle && 'circle'].join('-')\"\n    data-test-state=\"\"\n  >\n    <img\n      v-if=\"(src || srcSet) && !hasLoadError\"\n      :src=\"src\"\n      :alt=\"alt\"\n      :srcset=\"srcSet\"\n      :style=\"fitStyle\"\n      @error=\"handleError\"\n    />\n    <b-icon v-else-if=\"icon\" :class=\"ns.e('icon')\">\n      <component :is=\"icon\" />\n    </b-icon>\n    <span v-else-if=\"name\">{{ shortenName }}</span>\n    <slot v-else>\n      <b-icon :class=\"ns.e('icon')\">\n        <component :is=\"Profile\" />\n      </b-icon>\n    </slot>\n  </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { BIcon } from '@bigin/components/icon'\nimport { useNamespace } from '@bigin/hooks'\nimport { addUnit, isNumber } from '@bigin/utils'\nimport { Profile } from '@bigin/icons-vue'\nimport { avatarEmits, avatarProps } from './avatar'\n\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n  name: 'BAvatar',\n})\n\nconst props = defineProps(avatarProps)\nconst emit = defineEmits(avatarEmits)\n\nconst ns = useNamespace('avatar')\n\nconst hasLoadError = ref(false)\n\nconst _getHashNumberFromString = (str: string) => {\n  let hash = 1\n  let i = 0\n\n  if (!str) return 1\n\n  do {\n    hash = str.charCodeAt(i) + ((hash << 5) - hash)\n    i++\n  } while (i < str.length)\n\n  // Return a number in range [0-7]\n  return Math.abs(hash) % 8\n}\n\nconst shortenName = computed(() => {\n  if (props.name.length > 0) {\n    const nameArr = props.name.split(' ')\n\n    if (nameArr.length > 1) {\n      return nameArr\n        .slice(0, 2)\n        .map((i) => i.charAt(0))\n        .join('')\n        .toUpperCase()\n    }\n\n    return props.name.slice(0, 2).toUpperCase()\n  }\n\n  return ''\n})\n\nconst avatarStyle = computed(() => {\n  const { size } = props\n  const colors = [\n    '#d90429',\n    '#023047',\n    '#219ebc',\n    '#ffbe0b',\n    '#fb5607',\n    '#3a86ff',\n    '#ff006e',\n    '#ffbe0b',\n  ]\n  const gradients = [\n    'linear-gradient(0.9deg, #ff5f6d 0%, #ffc371 100%)',\n    'linear-gradient(155.94deg, #fbda61 15.44%, #ff8a1e 78.58%)',\n    'linear-gradient(153.79deg, #ffd705 16.49%, #68c121 83.51%)',\n    'linear-gradient(153.79deg, #a1ff8b 16.49%, #3f93ff 83.51%)',\n    'linear-gradient(338.56deg, #9358f7 14.1%, #10d7e2 85.9%)',\n    'linear-gradient(153.79deg, #7570ff 16.49%, #cf36ad 83.51%)',\n    'linear-gradient(153.79deg, #ff56da 16.49%, #ff1b1b 83.51%)',\n    'linear-gradient(180deg, #ff5959 0%, #ff7a00 100%)',\n  ]\n  const bgColor = `${\n    colors[_getHashNumberFromString(props.colorId || props.name)]\n  }`\n  const bgGradient = `${\n    gradients[_getHashNumberFromString(props.colorId || props.name)]\n  }`\n  return isNumber(size)\n    ? (ns.cssVarBlock({\n        size: addUnit(size) || '',\n        'bg-color':\n          (props.src || props.srcSet) && !hasLoadError.value\n            ? 'transparent'\n            : props.gradient\n            ? bgGradient\n            : bgColor,\n      }) as CSSProperties)\n    : undefined\n})\n\nconst fitStyle = computed<CSSProperties>(() => ({\n  objectFit: props.fit,\n}))\n\n// need reset hasLoadError to false if src changed\nwatch(\n  () => props.src,\n  () => (hasLoadError.value = false)\n)\n\nfunction handleError(e: Event) {\n  hasLoadError.value = true\n  emit('error', e)\n}\n</script>\n"],"names":[],"mappings":"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"}