--- /** * Simple HTML table layout for the schedule โ used by themes that prefer * a flat, retro look (geocities, aim) instead of the CSS-grid calendar. * * Receives the same props as DaySchedule so they're interchangeable. */ interface Speaker { name: string; id?: string; } interface ScheduleEvent { id?: string; title: string; type: string; speakers?: Speaker[]; start?: string; end?: string; room?: string; description?: string; link_url?: string; link_text?: string; } interface Props { events: ScheduleEvent[]; rooms: string[]; tableIndex?: number; } const { events, tableIndex = 0 } = Astro.props; function formatTime(iso: string) { const m = iso.match(/T(\d{2}):(\d{2})/); if (!m) return ""; let h = parseInt(m[1]); const min = m[2]; const p = h >= 12 ? "pm" : "am"; h = h === 0 ? 12 : h > 12 ? h - 12 : h; return min === "00" ? `${h}${p}` : `${h}:${min}${p}`; } const sorted = [...events] .filter((e) => e.start && e.type !== "info") .sort((a, b) => (a.start! > b.start! ? 1 : -1)); const infoEvents = events.filter((e) => e.type === "info" && e.start); const linkableTypes = new Set(["workshop", "presentation", "lightning-talk", "panel"]); ---