+
+ {format(new Date(data.date), "MMM d, yyyy")}
+
+
+ {data.venue}
+
+
+ Rating:
+
+ ★ {data.rating.toFixed(1)}
+
+
+
+ )
+ }
+ return null
+}
+
+export function SongEvolutionChart({ performances, title = "Rating Evolution" }: SongEvolutionChartProps) {
+ // Filter out unrated performances to keep chart clean?
+ // Or keep them as 0? Usually 0 skews the chart. Let's filter > 0 for "Evolution of Quality".
+ const ratedPerfs = performances
+ .filter(p => p.avg_rating > 0)
+ .map(p => ({
+ id: p.id,
+ date: new Date(p.show_date).getTime(),
+ rating: p.avg_rating,
+ venue: `${p.venue_name}, ${p.venue_city}`,
+ fullDate: p.show_date
+ }))
+ .sort((a, b) => a.date - b.date)
+
+ if (ratedPerfs.length < 2) {
+ return null
+ }
+
+ // Calculate trend? Simple linear/avg for now.
+ const average = ratedPerfs.reduce((acc, curr) => acc + curr.rating, 0) / ratedPerfs.length
+ const latest = ratedPerfs[ratedPerfs.length - 1].rating
+ const isTrendingUp = latest >= average
+
+ return (
+