import { useState } from "react"; const MONTHS = [ "Hammer", "Alturiak", "Ches", "Tarsakh", "Mirtul", "Kythorn", "Flamerule", "Eleasis", "Eleint", "Marpenoth", "Uktar", "Nightal", ]; interface CalendarEvent { day: number; month: number; text: string; color: string; } const COLORS = ["var(--color-gold-bright)", "var(--color-info)", "var(--color-success)", "var(--color-danger)"]; export function CalendarWidget() { const [month, setMonth] = useState(0); const [year, setYear] = useState(1492); const [events, setEvents] = useState([]); const [selectedDay, setSelectedDay] = useState(null); const [newEvent, setNewEvent] = useState(""); const today = { day: 15, month: 5 }; // 15th of Kythorn (arbitrary "today") function addEvent() { if (!newEvent.trim() || selectedDay === null) return; setEvents((prev) => [ ...prev, { day: selectedDay, month, text: newEvent.trim(), color: COLORS[events.length % COLORS.length] }, ]); setNewEvent(""); } function removeEvent(idx: number) { setEvents((prev) => prev.filter((_, i) => i !== idx)); } const dayEvents = events.filter((e) => e.day === selectedDay && e.month === month); return (
{/* Month navigation */}
{MONTHS[month]}
{year} DR
{/* Day grid */}
{["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((d) => (
{d}
))} {/* Start offset - Faerûn calendar starts on first of month */} {Array.from({ length: 30 }, (_, i) => { const dayNum = i + 1; const isToday = dayNum === today.day && month === today.month; const hasEvent = events.some((e) => e.day === dayNum && e.month === month); const isSelected = dayNum === selectedDay; return ( ); })}
{/* Events for selected day */} {selectedDay !== null && (
{MONTHS[month]} {selectedDay}
{dayEvents.length === 0 && (
No events
)} {dayEvents.map((e, i) => (
{e.text}
))}
setNewEvent(e.target.value)} onKeyDown={(e) => e.key === "Enter" && addEvent()} placeholder="Add event…" />
)}
); }