import { Calendar as CalendarIcon, MapPin } from "lucide-react"; import { RichTextContent } from "@/components/rich-text"; import type { CalendarShareData, EventShareData } from "../server/share-queries"; import { ShareEyebrow } from "@/components/share/share-eyebrow"; import { MiniDayCard } from "@/components/share/mini-day-card"; import { MiniMapCard } from "@/components/share/mini-map-card"; import { ShareDetailCard, ShareRow } from "@/components/share/share-detail-card"; function formatTime(d: Date): string { return d.toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" }); } function formatTimeRange(startAt: string, endAt: string, allDay: boolean): string { const start = new Date(startAt); const end = new Date(endAt); if (allDay) return "All day"; return `${formatTime(start)} – ${formatTime(end)}`; } function formatFullDate(d: Date): string { return d.toLocaleDateString(undefined, { weekday: "long", month: "long", day: "numeric", year: "numeric", }); } export function EventSharedView({ data }: { data: EventShareData }) { const start = new Date(data.startAt); const end = new Date(data.endAt); const time = data.allDay ? "All day" : `${formatTime(start)} – ${formatTime(end)}`; return ( <> Event

{data.title}

{data.calendarName && (

On the {data.calendarName} calendar.

)}
{data.location && }
{formatFullDate(start)} {!data.allDay && ( <> {" · "} {formatTimeRange(data.startAt, data.endAt, data.allDay)} )} {data.location && ( {data.location} )} {data.calendarName} {data.notes && (
)} ); } export function CalendarSharedView({ data }: { data: CalendarShareData }) { return ( <> Calendar

{data.name}

Upcoming events — next 90 days.

{data.events.length === 0 ? (

No upcoming events.

) : ( data.events.map((event) => { const start = new Date(event.startAt); return (
{event.title}
{start.toLocaleDateString(undefined, { month: "short", day: "numeric", })} {!event.allDay && ` · ${formatTime(start)}`} {event.location && ` · ${event.location}`}
); }) )}
); }