@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) {{ $name ?: 'Avatar' }}merge(['class' => 'inline-flex shrink-0 rounded-full object-cover '.$avatarSize]) }} > @else
merge(['class' => 'inline-flex shrink-0 items-center justify-center rounded-full font-semibold text-white '.$avatarSize.' '.$colorClass]) }}> {{ $initials }}
@endif