import { type FormEvent, useState } from "react"; import { useEncounter } from "./hooks/use-encounter"; function formatEvent(e: ReturnType["events"][number]) { switch (e.type) { case "TurnAdvanced": return `Turn: ${e.previousCombatantId} → ${e.newCombatantId} (round ${e.roundNumber})`; case "RoundAdvanced": return `Round advanced to ${e.newRoundNumber}`; case "CombatantAdded": return `Added combatant: ${e.name}`; } } export function App() { const { encounter, events, advanceTurn, addCombatant } = useEncounter(); const activeCombatant = encounter.combatants[encounter.activeIndex]; const [nameInput, setNameInput] = useState(""); const handleAdd = (e: FormEvent) => { e.preventDefault(); if (nameInput.trim() === "") return; addCombatant(nameInput); setNameInput(""); }; return (

Initiative Tracker

{activeCombatant && (

Round {encounter.roundNumber} — Current: {activeCombatant.name}

)}
setNameInput(e.target.value)} placeholder="Combatant name" />
{events.length > 0 && (

Events

    {events.map((e, i) => (
  • {formatEvent(e)}
  • ))}
)}
); }