Skip to content

Avatar

Neo-brutalist avatar component for displaying user profile images with fallback support. Includes Avatar, AvatarImage, and AvatarFallback sub-components, supporting multiple variants, sizes, shapes, and status indicators.

Demo

Preview

尺寸

默认特大

形状

方形圆角

带图片

用户用户

变体

状态

Installation

pnpm dlx brutx-vue@latest add avatar

Usage

vue
<script setup>
import { Avatar, AvatarImage, AvatarFallback } from 'brutx-ui-vue'
</script>

<template>
    <Avatar size="default" shape="square">
        <AvatarImage src="/avatar.jpg" alt="User avatar" />
        <AvatarFallback>JD</AvatarFallback>
    </Avatar>
</template>

Fallback Behavior

When the image fails to load, AvatarFallback is automatically displayed:

vue
<script setup>
import { Avatar, AvatarImage, AvatarFallback } from 'brutx-ui-vue'
</script>

<template>
    <Avatar>
        <AvatarImage src="/broken-url.jpg" alt="User" />
        <AvatarFallback>JD</AvatarFallback>
    </Avatar>
</template>

Status Indicator

Renders a small status dot at the bottom-right corner of the avatar (w-3 h-3 rounded-full border-3 border-brutal-bg). Not rendered when status="none" (default).

StatusColorDescription
onlinebg-brutal-successOnline (green)
offlinebg-brutal-mutedOffline (gray)
busybg-brutal-destructiveBusy (red)
noneNot rendered (default)
vue
<script setup>
import { Avatar, AvatarFallback } from 'brutx-ui-vue'
</script>

<template>
    <div class="flex items-center gap-4">
        <Avatar size="lg" status="online">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
        <Avatar size="lg" status="offline">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
        <Avatar size="lg" status="busy">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
    </div>
</template>

Variants

Controls the background color of the avatar root container and AvatarFallback, passed down to sub-components via provide/inject.

VariantRoot Container BackgroundFallback Background
defaultbg-brutal-mutedbg-brutal-muted
primarybg-brutal-primary/20bg-brutal-primary
secondarybg-brutal-secondary/20bg-brutal-secondary
accentbg-brutal-accent/20bg-brutal-accent
vue
<script setup>
import { Avatar, AvatarFallback } from 'brutx-ui-vue'
</script>

<template>
    <div class="flex items-center gap-4">
        <Avatar size="lg" variant="default">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
        <Avatar size="lg" variant="primary">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
        <Avatar size="lg" variant="secondary">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
        <Avatar size="lg" variant="accent">
            <AvatarFallback>JD</AvatarFallback>
        </Avatar>
    </div>
</template>

Sizes

SizeDimensions
smh-8 w-8 (32px)
defaulth-10 w-10 (40px)
lgh-14 w-14 (56px)
xlh-20 w-20 (80px)

Shapes

ShapeDescription
squareNo border radius (default)
roundedUses the --brutal-radius token
vue
<script setup>
import { Avatar, AvatarFallback } from 'brutx-ui-vue'
</script>

<template>
    <Avatar size="lg" shape="rounded">
        <AvatarFallback>JD</AvatarFallback>
    </Avatar>
</template>

Sub-components

ComponentDescription
AvatarRoot container providing size, shape, variant, and status context
AvatarImageAvatar image that automatically hides on load failure
AvatarFallbackFallback content that automatically shows when the image is not visible

Props

Avatar

PropTypeDefaultDescription
variant'default' | 'primary' | 'secondary' | 'accent''default'Color variant, passed down to AvatarFallback
size'sm' | 'default' | 'lg' | 'xl''default'Size
shape'square' | 'rounded''square'Shape
status'online' | 'offline' | 'busy' | 'none''none'Status dot at the bottom-right corner
classstringAdditional class name

AvatarImage

PropTypeDefaultDescription
srcstringImage URL
altstringAlternative text
classstringAdditional class name

AvatarFallback

PropTypeDefaultDescription
classstringAdditional class name

Slots

Avatar Slots

SlotScopeDescription
defaultDefault slot for placing AvatarImage and AvatarFallback sub-components

AvatarFallback Slots

SlotScopeDescription
defaultDefault slot for placing fallback content (text or icon)

Accessibility

  • ARIA Attributes: The status dot uses role="status" and aria-label attributes for screen reader support
  • Internationalization: Status labels provide localized text via i18n:
    • online -> "Online"
    • offline -> "Offline"
    • busy -> "Busy"

Brute force builds.