@props([
'src' => null,
'name' => '',
'size' => 'md',
])
@php
$sizeClasses = [
'sm' => 'h-8 w-8 text-xs',
'md' => 'h-10 w-10 text-sm',
'lg' => 'h-14 w-14 text-base',
'xl' => 'h-20 w-20 text-xl',
];
$avatarSize = $sizeClasses[$size] ?? $sizeClasses['md'];
$letters = collect(explode(' ', trim((string) $name)))
->filter()
->take(2)
->map(fn ($part) => strtoupper(substr($part, 0, 1)))
->implode('');
$initials = $letters !== '' ? $letters : 'U';
$palette = [
'bg-rose-500',
'bg-amber-500',
'bg-emerald-500',
'bg-blue-500',
'bg-indigo-500',
'bg-fuchsia-500',
];
$colorClass = $palette[crc32((string) $name) % count($palette)];
$resolvedSrc = null;
if (is_string($src) && $src !== '') {
if (
str_starts_with($src, 'http://')
|| str_starts_with($src, 'https://')
|| str_starts_with($src, 'data:')
|| str_starts_with($src, '/')
) {
$resolvedSrc = $src;
} else {
$resolvedSrc = \Illuminate\Support\Facades\Storage::disk('public')->url($src);
}
}
@endphp
@if($resolvedSrc)
merge(['class' => 'inline-flex shrink-0 rounded-full object-cover '.$avatarSize]) }}
>
@else