// fichaje.eu — Screen: Calendario const ScreenCalendario = () => { const [view, setView] = React.useState('month'); // May 2026: starts on Friday const days = []; // Prepend Mon–Thu of previous month for (let i = 27; i <= 30; i++) days.push({ d: i, prev: true }); for (let i = 1; i <= 31; i++) days.push({ d: i, m: 5 }); // Append next month for (let i = 1; i <= 7; i++) days.push({ d: i, next: true }); const eventByDay = {}; CAL_EVENTS.forEach(e => { const d = parseInt(e.date.split('-')[2]); if (e.date.startsWith('2026-05')) { eventByDay[d] = eventByDay[d] || []; eventByDay[d].push(e); } }); return (
{/* Header */}
Mayo 2026
Hoy
}>Nuevo evento
{/* Weekday headers */}
{['Lun','Mar','Mié','Jue','Vie','Sáb','Dom'].map((d, i) => (
4 ? 'var(--slate-400)' : 'var(--slate-500)', borderRight: i < 6 ? '1px solid var(--slate-100)' : 'none', }}>{d}
))}
{/* Day grid */}
{days.map((dd, idx) => { const isToday = dd.d === 13 && dd.m === 5; const isWeekend = (idx % 7) > 4; const events = (dd.m === 5 && eventByDay[dd.d]) || []; return (
{dd.d}
{events.map((e, i) => { const colors = { holiday: ['var(--danger-50)', 'var(--danger-600)'], birthday: ['var(--pink-100)', '#BE185D'], event: ['var(--brand-100)', 'var(--brand-700)'], vacation: ['var(--warning-100)', 'var(--warning-600)'], today: ['var(--brand-600)', '#fff'], }[e.type]; return (
{e.time && {e.time}} {e.title}
); })}
); })}
{/* Right column */}
{CAL_EVENTS.filter(e => e.type !== 'today' && parseInt(e.date.split('-')[2]) >= 13).slice(0, 6).map((e, i) => { const tone = e.type === 'holiday' ? 'danger' : e.type === 'birthday' ? 'pink' : e.type === 'vacation' ? 'warning' : 'brand'; const day = parseInt(e.date.split('-')[2]); return (
May
{day}
{e.title}
{e.time ? {e.time} : {e.type === 'holiday' ? 'Festivo' : e.type === 'birthday' ? 'Cumple' : e.type === 'vacation' ? 'Ausencia' : 'Evento'}}
); })}
{[ { c: 'var(--brand-600)', l: 'Hoy / evento de equipo' }, { c: 'var(--danger-500)', l: 'Festivo nacional / autonómico' }, { c: 'var(--warning-500)', l: 'Ausencia / vacaciones aprobadas' }, { c: 'var(--pink-500)', l: 'Cumpleaños y aniversarios' }, { c: 'var(--violet-500)', l: 'Ausencias pendientes' }, ].map((x, i) => (
{x.l}
))}
{[ { d: '24 jun', n: 'San Juan (CAT)' }, { d: '15 ago', n: 'Asunción de la Virgen' }, { d: '12 oct', n: 'Fiesta Nacional' }, { d: '01 nov', n: 'Todos los Santos' }, ].map((f, i) => (
{f.n} {f.d}
))}
); }; Object.assign(window, { ScreenCalendario });