Skip to content

Avatar ​

Отображение фотографий пользователей, инициалов или иконок с индикаторами статуса, бейджами и группировкой.

John DoeJSBO
vue
<script setup lang="ts">
import { VxAvatar } from 'veloxui'
</script>

<template>
  <VxAvatar src="https://example.com/photo.jpg" name="John Doe" />
  <VxAvatar name="Jane Smith" />
  <VxAvatar name="Bob" bg-color="#3b82f6" />
  <VxAvatar />
</template>

Sizes ​

Доступно 5 предустановленных размеров или любое значение в пикселях.

XSSMDFLGXL80
vue
<template>
  <VxAvatar name="Alice" size="xs" />   <!-- 24px -->
  <VxAvatar name="Alice" size="sm" />   <!-- 32px -->
  <VxAvatar name="Alice" />             <!-- 40px default -->
  <VxAvatar name="Alice" size="lg" />   <!-- 48px -->
  <VxAvatar name="Alice" size="xl" />   <!-- 64px -->
  <VxAvatar name="Alice" :size="80" />  <!-- 80px custom -->
</template>

Shapes ​

CircleSquare
vue
<template>
  <VxAvatar src="..." shape="circle" />
  <VxAvatar src="..." shape="square" />
</template>

Initials ​

Инициалы генерируются автоматически из name. Цвета детерминированы по имени.

AJBOCBDPEVFC
vue
<template>
  <VxAvatar name="Alice Johnson" />  <!-- AJ -->
  <VxAvatar name="Bob" />           <!-- BO -->
  <VxAvatar name="Charlie Brown" /> <!-- CB -->
</template>

Custom Colors ​

REGRBLPUDA
vue
<template>
  <VxAvatar name="Alice" bg-color="#ef4444" />
  <VxAvatar name="Alice" bg-color="#18181b" color="#fafafa" />
</template>

Status Indicator ​

OnlineOfflineBusyAway
vue
<template>
  <VxAvatar src="..." status="online" />
  <VxAvatar src="..." status="offline" />
  <VxAvatar src="..." status="busy" />
  <VxAvatar src="..." status="away" />
</template>

Status Ring ​

Используйте status-ring, чтобы показывать статус цветным кольцом вокруг аватара вместо точки.

AUOF
vue
<template>
  <VxAvatar src="..." status="online" status-ring />
  <VxAvatar src="..." status="busy" status-ring />
</template>

Notification Badge ​

Показывайте числовой бейдж или простой индикатор в виде точки.

Alice3Bob99Charlie99+DIEV
vue
<script setup lang="ts">
import { VxAvatar } from 'veloxui'
</script>

<template>
  <!-- Number badge (caps at 99+) -->
  <VxAvatar src="..." :badge="3" />
  <VxAvatar src="..." :badge="150" />  <!-- shows "99+" -->

  <!-- Dot badge -->
  <VxAvatar name="Diana" dot />

  <!-- Custom badge color -->
  <VxAvatar name="Eve" dot badge-color="#3b82f6" />
</template>

Badge Position ​

TR1TL2BR3BL4
vue
<template>
  <VxAvatar :badge="1" badge-position="top-right" />
  <VxAvatar :badge="2" badge-position="top-left" />
  <VxAvatar :badge="3" badge-position="bottom-right" />
  <VxAvatar :badge="4" badge-position="bottom-left" />
</template>

Clickable ​

Сделайте аватар интерактивным с помощью clickable. Рендерится как <button> для доступности, с focus ring и обратной связью при нажатии.

vue
<script setup lang="ts">
import { VxAvatar } from 'veloxui'

function onAvatarClick() {
  alert('Avatar clicked!')
}
</script>

<template>
  <VxAvatar src="..." clickable @click="onAvatarClick" />
</template>

Tooltip ​

Наведите курсор, чтобы увидеть имя в виде нативной подсказки.

JS
vue
<template>
  <VxAvatar src="..." tooltip="John Doe - Admin" />
  <VxAvatar name="Jane" tooltip="Jane Smith - Editor" />
</template>

Lazy Loading ​

Добавьте lazy, чтобы отложить загрузку изображения, пока аватар не окажется рядом с вьюпортом.

vue
<template>
  <VxAvatar src="..." lazy />
</template>

Srcset (Retina) ​

Укажите srcset для адаптивных/retina-изображений.

vue
<template>
  <VxAvatar
    src="photo-1x.jpg"
    srcset="photo-1x.jpg 1x, photo-2x.jpg 2x, photo-3x.jpg 3x"
  />
</template>

Bordered ​

AL
vue
<template>
  <VxAvatar src="..." bordered />
  <VxAvatar src="..." bordered border-color="#3b82f6" />
</template>

Fallback Slot ​

Используйте slot fallback для полностью кастомного запасного контента, когда не указаны изображение и имя.

🤖AI
vue
<template>
  <VxAvatar size="lg" bg-color="#18181b">
    <template #fallback>
      <span style="font-size: 20px;">🤖</span>
    </template>
  </VxAvatar>
</template>

Image Fallback ​

При ошибке загрузки изображения используются инициалы, затем slot fallback, затем стандартная иконка пользователя.

Fallback User
vue
<template>
  <VxAvatar src="https://broken.url" name="Fallback User" />
  <VxAvatar src="https://broken.url" />
</template>

Avatar Group ​

Накладывайте аватары друг на друга. При наведении отдельные аватары выдвигаются.

AliceBobCharlieDianaEV
vue
<script setup lang="ts">
import { VxAvatar, VxAvatarGroup } from 'veloxui'
</script>

<template>
  <VxAvatarGroup size="lg">
    <VxAvatar src="..." name="Alice" />
    <VxAvatar src="..." name="Bob" />
    <VxAvatar src="..." name="Charlie" />
    <VxAvatar name="Eve" />
  </VxAvatarGroup>
</template>

Group with +N Overflow ​

Установите max, чтобы ограничить число видимых аватаров. Оставшиеся отображаются как бейдж «+N».

AliceBobCharlie +4
vue
<template>
  <VxAvatarGroup size="lg" :max="3">
    <VxAvatar src="..." name="Alice" />
    <VxAvatar src="..." name="Bob" />
    <VxAvatar src="..." name="Charlie" />
    <VxAvatar src="..." name="Diana" />
    <VxAvatar src="..." name="Eve" />
    <!-- Shows "+2" overflow badge -->
  </VxAvatarGroup>
</template>

Group Overlap Control ​

Регулируйте степень наложения аватаров через prop overlap (процент от размера аватара).

overlap=15
overlap=25
overlap=40
vue
<template>
  <VxAvatarGroup :overlap="15">...</VxAvatarGroup>  <!-- less overlap -->
  <VxAvatarGroup :overlap="25">...</VxAvatarGroup>  <!-- default -->
  <VxAvatarGroup :overlap="40">...</VxAvatarGroup>  <!-- more overlap -->
</template>

Square Group ​

ABCDI
vue
<template>
  <VxAvatarGroup shape="square" size="lg">
    <VxAvatar src="..." />
    <VxAvatar name="Diana" />
  </VxAvatarGroup>
</template>

Avatar Props ​

PropTypeDefaultDescription
srcstring''URL изображения
srcsetstring''srcset для адаптивных изображений
altstring''Alt-текст изображения
namestring''Имя для инициалов и автоцвета
size'xs' | 'sm' | 'default' | 'lg' | 'xl' | number'default'Размер аватара
shape'circle' | 'square''circle'Форма аватара
colorstring''Цвет текста/иконки
bgColorstring''Цвет фона (переопределяет автоцвет)
iconComponent—Кастомный компонент иконки
borderedbooleanfalseПоказывать рамку
borderColorstring''Произвольный цвет рамки
status'online' | 'offline' | 'busy' | 'away'''Индикатор статуса
statusPosition'top-right' | 'bottom-right' | 'top-left' | 'bottom-left''bottom-right'Позиция точки статуса
statusRingbooleanfalseПоказывать статус кольцом вместо точки
badgestring | number—Число бейджа (ограничено до 99+)
dotbooleanfalseПоказывать точечный бейдж
badgePosition'top-right' | 'bottom-right' | 'top-left' | 'bottom-left''top-right'Позиция бейджа/точки
badgeColorstring'#ef4444'Цвет бейджа/точки
clickablebooleanfalseСделать интерактивным (рендер как button)
tooltipstring''Нативная подсказка при наведении
lazybooleanfalseЛенивая загрузка изображения

AvatarGroup Props ​

PropTypeDefaultDescription
maxnumber0Максимум видимых аватаров (0 = все)
sizeAvatarSize'default'Размер для всех вложенных элементов
shape'circle' | 'square''circle'Форма для всех вложенных элементов
borderedbooleantrueРамка для всех вложенных элементов
overlapnumber25Процент наложения (0-100)

Events ​

EventTypeDescription
error(event)Не удалось загрузить изображение
click(event)Клик по аватару (только при clickable)

Slots ​

SlotDescription
defaultКастомное содержимое оверлея
fallbackКастомный фолбэк, когда нет изображения/имени/иконки