@php /** * Componente de Imagem Otimizada (V2) * Abstrai a renderização da tag com suporte a WebP responsivo. * * Toda URL de storage é gerada via V2 StorageService, nunca via Storage facade nativo. * * @param string $originalPath Caminho relativo da imagem original * @param array $variants Array de variantes [largura => caminho_relativo] * @param string $disk Disco de armazenamento (default: public) * @param string $alt Texto alternativo (Obrigatório para Acessibilidade) * @param string $class Classes CSS adicionais (Padrão: img-responsive para Bootstrap 3) * @param string $style Estilos inline adicionais * @param bool $lazy Quando true, o fallback recebe loading="lazy". * Quando false e há variantes, o ainda recebe loading="lazy" * (para evitar double-download do Chrome preload scanner), * mas o primeiro WebP ganha fetchpriority="high". * Quando false e NÃO há variantes, loading NÃO é aplicado. */ $disk = isset($disk) ? $disk : 'public'; /* Se alt for null ou não definido, tratamos como imagem decorativa (alt="") seguindo WCAG. */ /* Se for passado, mantemos o valor. O desenvolvedor deve prover conteúdo descritivo se a imagem for informativa. */ $altValue = isset($alt) ? $alt : ''; $class = isset($class) ? $class : 'img-responsive rounded'; $style = isset($style) ? $style : ''; $variants = isset($variants) && is_array($variants) ? $variants : []; $lazy = !isset($lazy) || $lazy === true; /* Ordena as variantes da maior para a menor para o matching do browser */ krsort($variants); /* Identifica a menor largura disponível */ $minWidth = !empty($variants) ? min(array_keys($variants)) : 0; /* * Quando há variantes WebP, o fallback SEMPRE recebe loading="lazy" * para impedir que o Chrome preload scanner descubra o src e inicie um * download desnecessário do PNG/JPG original (double-download). * O WebP é carregado prioritariamente via com fetchpriority="high". * Quando não há variantes, o comportamento respeita o parâmetro $lazy. */ $imgLazy = $lazy; if (!empty($variants) && !$lazy) { $imgLazy = true; } $isFirstSource = true; @endphp @if(count($variants) > 0) @foreach($variants as $width => $variantPath) $minWidth) media="(min-width: {{ $width }}px)" @endif srcset="{{ v2_storage_url($variantPath) }}" type="image/webp" @if($isFirstSource && !$lazy) fetchpriority="high" @endif> @php $isFirstSource = false; @endphp @endforeach @endif {{-- Fallback para navegadores sem suporte a ou WebP --}} {{ $altValue }}