56 lines
2.3 KiB
PHP
56 lines
2.3 KiB
PHP
@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)
|
|
<div class="h-10 rounded bg-surface-container grid place-items-center font-body-sm text-body-sm text-on-surface-variant">
|
|
Brak oceny
|
|
</div>
|
|
@else
|
|
<svg viewBox="0 0 100 16" class="w-full h-12" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
|
|
<defs>
|
|
<linearGradient id="{{ $id }}" x1="0" y1="0" x2="1" y2="0">
|
|
@foreach ($stops as [$off, $color])
|
|
<stop offset="{{ $off }}%" stop-color="{{ $color }}"/>
|
|
@endforeach
|
|
</linearGradient>
|
|
</defs>
|
|
<rect x="0" y="3" width="100" height="10" rx="1.5" fill="url(#{{ $id }})"/>
|
|
{{-- Znacznik (dzwon) - pozycja wg η --}}
|
|
<line x1="{{ $pct($pEta) }}" y1="0.5" x2="{{ $pct($pEta) }}" y2="15.5" stroke="#101415" stroke-width="0.9"/>
|
|
<line x1="{{ $pct($pEta) }}" y1="0.5" x2="{{ $pct($pEta) }}" y2="15.5" stroke="#ffffff" stroke-width="0.3"/>
|
|
</svg>
|
|
@endif
|