import { useState } from 'react'; import { ChevronLeft, ChevronRight, Calendar as CalendarIcon } from 'lucide-react'; export interface CalendarEvent { id: string; title: string; date: string; // YYYY-MM-DD time?: string; // HH:MM type: 'meeting' | 'task' | 'milestone' | 'reminder'; participants?: { name: string; avatar?: string }[]; color?: string; // Hex or theme color } export interface CalendarProps { events: CalendarEvent[]; onEventClick?: (event: CalendarEvent) => void; className?: string; } export function Calendar({ events, onEventClick, className = '' }: CalendarProps) { const [currentDate, setCurrentDate] = useState(new Date()); const getDaysInMonth = (year: number, month: number) => { return new Date(year, month + 1, 0).getDate(); }; const getFirstDayOfMonth = (year: number, month: number) => { return new Date(year, month, 1).getDay(); }; const year = currentDate.getFullYear(); const month = currentDate.getMonth(); const daysInMonth = getDaysInMonth(year, month); const firstDay = getFirstDayOfMonth(year, month); const monthNames = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]; const dayNames = ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"]; const handlePrevMonth = () => { setCurrentDate(new Date(year, month - 1, 1)); }; const handleNextMonth = () => { setCurrentDate(new Date(year, month + 1, 1)); }; // Generate calendar grid const days = []; for (let i = 0; i < firstDay; i++) { days.push(
); } for (let day = 1; day <= daysInMonth; day++) { const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`; const dayEvents = events.filter(e => e.date === dateStr); const isToday = dateStr === new Date().toISOString().split('T')[0]; days.push(Vista Mensual