import React, { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { Trash2, Plus, Minus, Flag, RotateCcw } from "lucide-react"; // ------- Helpers ------- function uid(prefix = "id") { return `${prefix}-${Math.random().toString(36).slice(2, 9)}`; } // ------- Main App ------- export default function GameTrackerApp() { const [teams, setTeams] = useState({ home: { name: "Home Team", score: 0, penalties: [], turnovers: [] }, away: { name: "Away Team", score: 0, penalties: [], turnovers: [] }, }); const [penaltyText, setPenaltyText] = useState(""); const [turnoverText, setTurnoverText] = useState(""); function updateScore(side, delta) { setTeams(t => ({ ...t, [side]: { ...t[side], score: Math.max(0, t[side].score + delta) }, })); } function addPenalty(side) { if (!penaltyText) return; setTeams(t => ({ ...t, [side]: { ...t[side], penalties: [...t[side].penalties, { id: uid("pen"), text: penaltyText }] }, })); setPenaltyText(""); } function addTurnover(side) { if (!turnoverText) return; setTeams(t => ({ ...t, [side]: { ...t[side], turnovers: [...t[side].turnovers, { id: uid("to"), text: turnoverText }] }, })); setTurnoverText(""); } function resetGame() { setTeams({ home: { name: "Home Team", score: 0, penalties: [], turnovers: [] }, away: { name: "Away Team", score: 0, penalties: [], turnovers: [] }, }); } return (

Game Tracker

{(["home", "away"]).map(side => ( {teams[side].name} {side === "home" ? "Your team" : "Opponent"} {/* Score */}
Score: {teams[side].score}
{/* Penalties */}

Penalties

setPenaltyText(e.target.value)} />
    {teams[side].penalties.map(p => (
  • {p.text}
  • ))}
{/* Turnovers */}

Turnovers

setTurnoverText(e.target.value)} />
    {teams[side].turnovers.map(to => (
  • {to.text}
  • ))}
))}
Track scores, penalties, and turnovers live during the game.
); }