@props(['label', 'value', 'previousValue' => null, 'format' => 'number', 'suffix' => '']) @php $formatted = match($format) { 'duration' => gmdate('i:s', (int) $value), 'percent' => $value . '%', default => number_format($value) . $suffix, }; $delta = null; $deltaClass = ''; $deltaIcon = ''; if ($previousValue !== null && is_numeric($previousValue)) { if ($previousValue > 0) { $delta = round((($value - $previousValue) / $previousValue) * 100, 1); } elseif ($value > 0) { $delta = 100; } if ($delta !== null) { $isNegativeBetter = in_array($format, ['percent']) && str_contains(strtolower($label), 'bounce'); $isPositive = $delta > 0; $isGood = $isNegativeBetter ? !$isPositive : $isPositive; $deltaClass = $delta == 0 ? 'text-gray-500 bg-gray-50' : ($isGood ? 'text-emerald-700 bg-emerald-50' : 'text-red-700 bg-red-50'); $deltaIcon = $delta > 0 ? '↑' : ($delta < 0 ? '↓' : '→'); } } @endphp