+ {text} +
+ {clamp && ( + + )} + > + ); +} diff --git a/src/components/Stars.tsx b/src/components/Stars.tsx new file mode 100644 index 0000000..5c7fb7d --- /dev/null +++ b/src/components/Stars.tsx @@ -0,0 +1,34 @@ +import { starsLabel } from "@/lib/review-format"; + +const STAR_PATH = "M12 2.5l2.9 6.1 6.6.8-4.9 4.6 1.3 6.6L12 17.3l-5.9 3.3 1.3-6.6-4.9-4.6 6.6-.8z"; + +function Row({ className }: { className: string }) { + return ( + + {[0, 1, 2, 3, 4].map((i) => ( + + ))} + + ); +} + +/** + * Sternebewertung von 0 bis 5, auch mit Nachkommastelle (Durchschnitt). + * Die gefuellte Reihe wird auf den Anteil beschnitten; Screenreader lesen + * nur die Textalternative, z. B. "4 von 5 Sternen". + */ +export function Stars({ rating, className = "" }: { rating: number; className?: string }) { + const clamped = Math.max(0, Math.min(5, rating)); + // Naeherung: die Abstaende zwischen den Sternen zaehlen zur Breite. + const percent = (clamped / 5) * 100; + return ( + +
+ {formatRating(data.rating)}
+
+
Rezensionen von Google. Angezeigt werden die Rezensionen, die Google für diesen Eintrag ausliefert.
+ {data.mapsUrl && ( ++ + Alle Rezensionen auf Google Maps (öffnet in neuem Tab) + +
+ )} ++ Entwurf + Google-Rezensionen erscheinen, sobald GOOGLE_PLACES_API_KEY und GOOGLE_PLACE_ID gesetzt sind. +
++++
+++