Skip to content
API 风格:

Аватар ​

LhAvatar используется для отображения аватара пользователя или сущности; поддерживаются три варианта — изображение, иконка и текст; при ошибке загрузки изображения выполняется автоматический откат.

Базовое использование ​

Аватар-изображение
avatarАватар пользователя

fit управляет режимом кадрирования (нативный object-fit), alt задаёт альтернативный текст.

vue
<script setup lang="ts">
</script>

<template>
  <!-- Аватар-изображение -->
  <LhAvatar src="https://api.dicebear.com/9.x/notionists/svg?seed=mo" />
  <!-- кадрирование через fit + альтернативный текст alt -->
  <LhAvatar
    src="https://api.dicebear.com/9.x/notionists/svg?seed=f"
    fit="cover"
    alt="Аватар пользователя"
  />
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Аватар-изображение -->
  <LhAvatar src="https://api.dicebear.com/9.x/notionists/svg?seed=mo" />
  <!-- кадрирование через fit + альтернативный текст alt -->
  <LhAvatar
    src="https://api.dicebear.com/9.x/notionists/svg?seed=f"
    fit="cover"
    alt="Аватар пользователя"
  />
</template>

Форма и размер ​

Круглый и квадратный, четыре размера
МСБК
vue
<script setup lang="ts">
</script>

<template>
  <div style="display: flex; align-items: center; gap: 12px">
    <LhAvatar
      shape="square"
      size="small"
      text="М"
    />
    <LhAvatar
      shape="square"
      size="medium"
      text="С"
    />
    <LhAvatar
      shape="square"
      size="large"
      text="Б"
    />
    <LhAvatar
      size="large"
      text="К"
    />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <div style="display: flex; align-items: center; gap: 12px">
    <LhAvatar
      shape="square"
      size="small"
      text="М"
    />
    <LhAvatar
      shape="square"
      size="medium"
      text="С"
    />
    <LhAvatar
      shape="square"
      size="large"
      text="Б"
    />
    <LhAvatar
      size="large"
      text="К"
    />
  </div>
</template>

Откат к тексту и иконке ​

Без изображения откат идёт по порядку icon, затем text
ТA
vue
<script setup lang="ts">
</script>

<template>
  <div style="display: flex; align-items: center; gap: 12px">
    <LhAvatar text="Тушь" />
    <LhAvatar icon="user" />
    <LhAvatar text="Alice Chen" />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <div style="display: flex; align-items: center; gap: 12px">
    <LhAvatar text="Тушь" />
    <LhAvatar icon="user" />
    <LhAvatar text="Alice Chen" />
  </div>
</template>

Текстовый аватар автоматически показывает первый символ (для китайского — первый иероглиф, для латиницы — первую заглавную букву).

Ошибка загрузки изображения ​

После ошибки откат к text и событие error
Зап
vue
<template>
  <LhAvatar
    src="/broken-avatar.png"
    text="Зап"
    @error="onError"
  />
</template>

<script setup lang="ts">
function onError(e: Event) {
  console.log('avatar load error', e)
}
</script>
vue
<template>
  <LhAvatar
    src="/broken-avatar.png"
    text="Зап"
    @error="onError"
  />
</template>

<script>
export default {
  methods: {
    onError(e) {
      console.log('avatar load error', e)
    },
  },
}
</script>

API ​

Props ​

СвойствоОписаниеТипПо умолчанию
srcАдрес изображения; если пусто, откат к иконке/текстуstring—
altАльтернативный текстstring—
iconИмя иконки (встроенная иконка LhIcon; показывается, когда src не задан)LhIconName—
textТекстовое содержимое (если src и icon не заданы, показывается первый символ)string—
shapeФорма аватара"circle" | "square"'circle'
sizeРазмер аватара"small" | "medium" | "large" | "mini" | "x-large"'medium'
fitРежим загрузки изображения: fill / contain / cover"fill" | "contain" | "cover" | "none" | "scale-down"'cover'
sxСокращённые свойства компоновки sxLhSxProps—

Events ​

СобытиеОписаниеПараметр обратного вызова
errorСрабатывает при ошибке загрузки изображения(e: Event)

Доступность ​

  • В режиме изображения альтернативный текст предоставляется самим <img alt>; если alt не передан, откат к text, затем к avatar
  • В режиме иконки / текста корневой элемент получает role="img", а переданный alt используется как доступное имя; сама иконка помечается aria-hidden

Типы ​

TypeScript-типы, экспортируемые этим компонентом (извлечены автоматически из packages/components/avatar/src/types.ts и исходников @lh-ui/share/core/*; раскройте нужный пункт, чтобы увидеть полное определение; описания свойств — в таблице Props выше):

LhAvatarProps
ts
export interface LhAvatarProps {
  /** Адрес изображения; если пусто, по очереди откат к иконке, затем к тексту */
  src?: string
  /** Альтернативный текст при ошибке загрузки изображения; используется как alt */
  alt?: string
  /** Имя иконки (показывается, когда src пуст или не загрузился; берётся из встроенных иконок LhIcon) */
  icon?: LhIconName
  /** Содержимое текстового аватара (если src и icon не заданы, показывается первый символ) */
  text?: string
  /** Форма аватара */
  shape?: LhAvatarComponentShape
  /** Размер аватара */
  size?: LhAvatarSize
  /** Режим загрузки изображения: fill / contain / cover */
  fit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'
  /** Сокращённые свойства компоновки sx */
  sx?: LhSxProps
}
LhAvatarSize
ts
export type LhAvatarSize = LhComponentSize
LhAvatarShape
ts
export type LhAvatarShape = LhAvatarComponentShape
LhAvatarComponentShape (из @lh-ui/share/core/avatar)
ts
export type LhAvatarShape = 'circle' | 'square'
LhIconName (из @lh-ui/share/core/icon (svgs.ts))
ts
export type LhIconName = keyof typeof LH_ICON_SVGS_CONST
LhComponentSize (из @lh-ui/share/core/shared)
ts
export type LhComponentSize = (typeof LH_SIZE_CONST)[keyof typeof LH_SIZE_CONST]

Красота традиций — основа кода