Skip to content

AVATAR

The Avatar component is a versatile and commonly used element in user interfaces, designed to represent users or entities visually. It can display images, initials, or icons, and can be customized in various ways, including size, tone, and variant, to suit different design needs. The avatar can also include notification indicators and badges for enhanced visual communication and can be disabled to prevent user interaction when necessary.

Basic Usage

A
vue
<template>
  <spr-avatar />
</template>

Notification

A
0
vue
<template>
  <spr-avatar :notification="true" />
</template>

Badge

A
0
vue
<template>
  <spr-avatar :badge="true" />
</template>

Image

Avatar
0
0
vue
<template>
  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="2xl"
  />
</template>

Sizes

avatar component has 7 different sizes. You can use the size prop to set the size of the avatar. The default size is 2xl. The available sizes are 2xl, xl, lg, md, sm, xs, 2xs.

Avatar
0
0
Avatar
0
Avatar
0
Avatar
0
Avatar
0
Avatar
Avatar
vue
<template>
  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="2xl"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="xl"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="lg"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="md"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="sm"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="xs"
  />

  <spr-avatar
    variant="image"
    src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg"
    :notification="true"
    :badge="true"
    size="2xs"
  />
</template>

Variant

JC
JJ
A
JC
JC
J
J
+10
+2
+3
+4
+5
+6
+7
vue
<template>
  <div class="spr-grid spr-gap-4">
    <div class="spr-space-x-3">
      <spr-avatar initial="Juan Dela Cruz" size="2xl" />
      <spr-avatar initial="John Jay Joe" size="xl" />
      <spr-avatar initial="Anthony" size="lg" />
      <spr-avatar initial="Juan Dela Cruz" size="md" />
      <spr-avatar initial="Juan Dela Cruz" size="sm" />
      <spr-avatar initial="Juan Dela Cruz" size="xs" />
      <spr-avatar initial="Juan Dela Cruz" size="2xs" />
    </div>

    <div class="spr-space-x-3">
      <spr-avatar variant="count" count="10" color="secondary" size="2xl" />
      <spr-avatar variant="count" count="2" color="secondary" size="xl" />
      <spr-avatar variant="count" count="3" color="secondary" size="lg" />
      <spr-avatar variant="count" count="4" color="secondary" size="md" />
      <spr-avatar variant="count" count="5" color="secondary" size="sm" />
      <spr-avatar variant="count" count="6" color="secondary" size="xs" />
      <spr-avatar variant="count" count="7" color="secondary" size="2xs" />
    </div>

    <div class="spr-space-x-3">
      <spr-avatar variant="user-group" size="2xl" />
      <spr-avatar variant="user-group" size="xl" />
      <spr-avatar variant="user-group" size="lg" />
      <spr-avatar variant="user-group" size="md" />
      <spr-avatar variant="user-group" size="sm" />
      <spr-avatar variant="user-group" size="xs" />
      <spr-avatar variant="user-group" size="2xs" />
    </div>

    <div class="spr-space-x-3">
      <spr-avatar variant="user" size="2xl" />
      <spr-avatar variant="user" size="xl" />
      <spr-avatar variant="user" size="lg" />
      <spr-avatar variant="user" size="md" />
      <spr-avatar variant="user" size="sm" />
      <spr-avatar variant="user" size="xs" />
      <spr-avatar variant="user" size="2xs" />
    </div>

    <div class="spr-space-x-3">
      <spr-avatar variant="client" size="2xl" />
      <spr-avatar variant="client" size="xl" />
      <spr-avatar variant="client" size="lg" />
      <spr-avatar variant="client" size="md" />
      <spr-avatar variant="client" size="sm" />
      <spr-avatar variant="client" size="xs" />
      <spr-avatar variant="client" size="2xs" />
    </div>
  </div>
</template>

Slot

Slot can be used to add custom content to the avatar. note: adjust your custom content to fit the avatar size.

0
0
0
0
0
0
User Avatar
0
0
User Avatar
0
User Avatar
0
User Avatar
0
User Avatar
0
User Avatar
User Avatar
vue
<template>
  <div>
    <spr-avatar :notification="true" :badge="true" size="2xl" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="xl" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="lg" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="md" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="sm" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="xs" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="2xs" color="primary">
      <Icon icon="ph:trash" />
    </spr-avatar>
  </div>

  <div>
    <spr-avatar :notification="true" :badge="true" size="2xl">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="xl">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="lg">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="md">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="sm">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="xs">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
    <spr-avatar :notification="true" :badge="true" size="2xs">
      <img src="https://media.sproutsocial.com/uploads/2022/06/profile-picture.jpeg" alt="User Avatar" />
    </spr-avatar>
  </div>
</template>

<script lang="ts" setup>
import { Icon } from '@iconify/vue';
</script>

Status

M
0
M
0
J
0
M
0
vue
<template>
  <spr-avatar variant="initial" status="danger" initial="Matthew" :badge="true" size="2xl" />
  <spr-avatar variant="initial" status="disabled" initial="Mark" :badge="true" size="2xl" />
  <spr-avatar variant="initial" status="information" initial="John" :badge="true" size="2xl" />
  <spr-avatar variant="initial" status="brand" initial="Mary" :badge="true" size="2xl" />
</template>

Loading

vue
<template>
  <div>
    <spr-avatar loading size="2xl" />
    <spr-avatar loading size="xl" />
    <spr-avatar loading size="lg" />
    <spr-avatar loading size="md" />
    <spr-avatar loading size="sm" />
    <spr-avatar loading size="xs" />
    <spr-avatar loading size="2xs" />
  </div>
</template>

API Reference

Props

NameDescriptionTypeDefault
variant Defines the type of avatar to display:
  • image: Displays an image using the src prop
  • initial: Shows text initials based on the initial prop
  • client: Shows a client-specific icon (building icon)
  • user: Shows a user-specific icon (single person)
  • user-group: Shows an icon representing a group of users (multiple people)
  • count: Displays a numeric count from the count prop with a "+" prefix
'image' | 'initial' | 'client' | 'user' | 'user-group' | 'count''initial'
srcURL for the avatar image when using variant="image". If not provided when using image variant, will fall back to the appropriate icon based on variant.stringundefined
altAlternative text for the avatar image for accessibility. Important for screen readers to identify the avatar content.string'Avatar'
size Controls the size of the avatar, affecting dimensions, font size, and position of indicators:
  • 2xl: 80px (5rem) - Extra extra large
  • xl: 56px (3.5rem) - Extra large
  • lg: 40px (2.5rem) - Large
  • md: 36px (2.25rem) - Medium
  • sm: 24px (1.5rem) - Small
  • xs: 20px (1.25rem) - Extra small
  • 2xs: 16px (1rem) - Extra extra small
Each size automatically adjusts notification and badge positions and sizes.
'2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs' | '2xs''2xl'
notificationWhen true, displays a small notification indicator (badge) at the top-right corner of the avatar. The notification uses the danger variant color.booleanfalse
notificationTextText to display in the notification indicator, typically a number. Only visible when notification is true.string'0'
badgeWhen true, displays a status badge at the bottom-right corner of the avatar. The badge color is determined by the status prop.booleanfalse
initial Text to display when using variant="initial". The component automatically extracts initials based on these rules:
  • For a single name: Uses the first letter (e.g., "John" → "J")
  • For multiple names: Uses the first letter of the first and last name (e.g., "John Doe" → "JD")
  • For small sizes (xs, 2xs): Limits to a single initial
string'Avatar'
color Background color scheme for the avatar:
  • primary: Uses the surface color for background
  • secondary: Uses the standard background color
A third option, 'tertiary', is also implemented in the code but not exposed in the prop validation.
'primary' | 'secondary''primary'
status Status indicator type when badge is true:
  • brand: Primary brand color (green), typically used for online or active status
  • information: Blue color, typically used for informational status
  • danger: Red color, typically used for error or blocked status
  • disabled: Gray color, typically used for offline or inactive status
'brand' | 'information' | 'danger' | 'disabled''brand'
countNumeric value to display when using variant="count". Will be displayed with a "+" prefix (e.g., "+10").number0
loadingWhen true, displays a skeletal loading state animation instead of the actual avatar content. Useful for showing loading states while data is being fetched.booleanfalse

Events

NameDescriptionParameters
imageErrorEmitted when the image source is not an image.

Slots

NameDescription
default

Custom content to display inside the avatar. This can be used to create custom avatars with icons, images, or other content.

When this slot is provided, it takes precedence over the standard icon or initial display. The slot content will be wrapped in the same container as images or icons, with appropriate sizing and styling.

Note: You should adjust your custom content to fit the avatar size, especially for the smaller size variants.

Product Uses

Sprout HR
Sprout Payroll
Sprout Ecosystem