'use client' import { ChevronLeft, ChevronRight, Menu, Calendar, Moon, Settings, MapPin, ZoomIn, ZoomOut, Globe } from 'lucide-react' import { useCalendarStore } from '@/lib/store' import { TemporalGranularity, TEMPORAL_GRANULARITY_LABELS } from '@/lib/types' import { getTimezoneAbbreviation } from '@/lib/time-format' import { clsx } from 'clsx' import { AppSwitcher } from '@/components/AppSwitcher' import { ViewSwitcher } from './ViewSwitcher' interface CalendarHeaderProps { onToggleSidebar: () => void sidebarOpen: boolean } export function CalendarHeader({ onToggleSidebar, sidebarOpen }: CalendarHeaderProps) { const { currentDate, goToToday, navigateByGranularity, temporalGranularity, setTemporalGranularity, zoomIn, zoomOut, showLunarOverlay, setShowLunarOverlay, viewerTimezone, } = useCalendarStore() // Format the display based on temporal granularity const getDateDisplay = () => { switch (temporalGranularity) { case TemporalGranularity.DECADE: { const decadeStart = Math.floor(currentDate.getFullYear() / 10) * 10 return `${decadeStart}--${decadeStart + 9}` } case TemporalGranularity.YEAR: return currentDate.getFullYear().toString() case TemporalGranularity.MONTH: return currentDate.toLocaleDateString('en-US', { month: 'long', year: 'numeric' }) case TemporalGranularity.WEEK: { const weekStart = new Date(currentDate) weekStart.setDate(currentDate.getDate() - currentDate.getDay()) const weekEnd = new Date(weekStart) weekEnd.setDate(weekStart.getDate() + 6) return `${weekStart.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} -- ${weekEnd.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}` } case TemporalGranularity.SEASON: { const quarter = Math.ceil((currentDate.getMonth() + 1) / 3) const seasonNames = ['Winter', 'Spring', 'Summer', 'Fall'] return `${seasonNames[quarter - 1]} ${currentDate.getFullYear()}` } case TemporalGranularity.DAY: return currentDate.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric', }) default: return currentDate.toLocaleDateString('en-US', { month: 'long', year: 'numeric' }) } } const currentDisplay = getDateDisplay() return (
{/* Left section */}

rCal

{/* Center section - navigation */}
{/* Zoom out button */}
{currentDisplay} {TEMPORAL_GRANULARITY_LABELS[temporalGranularity]} view
{/* Zoom in button */}
{/* View preset switcher */}
{/* Timezone indicator */}
{getTimezoneAbbreviation(viewerTimezone)}
{/* Show lunar overlay toggle */} {/* Location filter */} {/* Settings */}
) }