@props([ 'eta', // sprawność η (0..~0.7) lub null 'ry', // granica czerwony/żółty (η) 'yg', // granica żółty/zielony (η) 'zone' => null, // 'green'|'yellow'|'red' (kolor opisu) ]) @php // Skala 0..0.7 jak legacy. Pozycja znormalizowana: 0=lewo (wysoka η, zielona), 1=prawo. $clamp = fn ($v) => max(0.0, min(1.0, $v)); $pYG = $clamp(1 - ($yg / 0.7)); // granica zielony/żółty $pRY = $clamp(1 - ($ry / 0.7)); // granica żółty/czerwony $pYG = min($pYG, $pRY); $pEta = $eta === null ? null : $clamp(1 - ($eta / 0.7)); // Wyraźne strefy z krótkim przejściem (jak oryginał: green | yellow | red). $t = 0.03; $stops = []; $prev = 0.0; $add = function ($off, $color) use (&$stops, &$prev, $clamp) { $off = max($prev, $clamp($off)); // offsety rosnące $stops[] = [round($off * 100, 2), $color]; $prev = $off; }; $add(0, '#1f9d57'); $add($pYG - $t, '#1f9d57'); $add($pYG + $t, '#f4c20d'); $add($pRY - $t, '#f4c20d'); $add($pRY + $t, '#d32f2f'); $add(1, '#d32f2f'); $id = 'eg-'.substr(md5(($eta ?? 0).$ry.$yg), 0, 6); $pct = fn ($v) => round($v * 100, 2); $zoneColor = ['green' => '#1f9d57', 'yellow' => '#f4c20d', 'red' => '#d32f2f'][$zone] ?? '#5b6566'; @endphp @if ($eta === null)