// DemoCalendar.jsx — auto-looping demo: calendários de trabalho (Scheduler). // Espelha a "Biblioteca de calendários": o cursor torna o Sábado útil no // calendário de obra, a semana passa de Seg–Sex a Seg–Sáb (40 h → 48 h) e o // agendamento CPM reagenda as atividades do projeto. (function () { const STR = { pt: { days: ['Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'], title: 'Scheduler · Biblioteca de calendários', calName: 'Obra — Fase 2', rangeMonSat: 'Seg–Sáb', rangeMonFri: 'Seg–Sex', calDesc: 'Frente de obra. Domingos e feriados não úteis.', calMeta: '15 feriados · 1 projeto · 24 atividades', workWeek: 'Semana de trabalho', off: 'Folga', totalPre: 'Total semanal', totalPost: 'úteis', recalc: 'A recalcular CPM…', updated: 'Agendamento atualizado', save: 'Guardar e reagendar', toast: '24 atividades reagendadas no projeto', }, en: { days: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], title: 'Scheduler · Calendar library', calName: 'Site — Phase 2', rangeMonSat: 'Mon–Sat', rangeMonFri: 'Mon–Fri', calDesc: 'Site work front. Sundays and holidays non-working.', calMeta: '15 holidays · 1 project · 24 activities', workWeek: 'Working week', off: 'Off', totalPre: 'Weekly total', totalPost: 'of work', recalc: 'Recalculating CPM…', updated: 'Schedule updated', save: 'Save and reschedule', toast: '24 activities rescheduled in the project', }, es: { days: ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'], title: 'Scheduler · Biblioteca de calendarios', calName: 'Obra — Fase 2', rangeMonSat: 'Lun–Sáb', rangeMonFri: 'Lun–Vie', calDesc: 'Frente de obra. Domingos y festivos no laborables.', calMeta: '15 festivos · 1 proyecto · 24 actividades', workWeek: 'Semana laboral', off: 'Libre', totalPre: 'Total semanal', totalPost: 'útiles', recalc: 'Recalculando CPM…', updated: 'Programación actualizada', save: 'Guardar y reprogramar', toast: '24 actividades reprogramadas en el proyecto', }, }; function WeekDots({ useful, days }) { return ( {days.map((d, i) => ( ))} ); } function DemoCalendar() { const lang = (window.__DEMO_LANG === 'en' || window.__DEMO_LANG === 'es') ? window.__DEMO_LANG : 'pt'; const s = STR[lang]; const D = 10000; const t = window.useDemoLoop(D, 8400); const { dkProg, dkEase, dkCursor } = window; const { DemoCursor, DemoToast, MiniWindow, DemoStage } = window; const satOn = t >= 2800; const hours = Math.round(40 + 8 * dkEase(dkProg(t, 2800, 3600))); const saving = t >= 5300 && t < 6600; const saved = t >= 6600; const toast = t >= 6900 && t < 9400; const useful = [true, true, true, true, true, satOn, false]; const cur = dkCursor(t, [ { at: 0, x: 540, y: 390, hidden: true }, { at: 1600, x: 540, y: 390 }, { at: 1800, x: 418, y: 240 }, { at: 4400, x: 438, y: 296 }, { at: 7600, x: 540, y: 390, hidden: true }, ], [2600, 5200]); return ( CPM }>
{/* library row */}
{s.calName} {satOn ? s.rangeMonSat : s.rangeMonFri}
{s.calDesc}
{s.calMeta}
{/* week editor */}
{s.workWeek}
{s.days.map((d, i) => { const on = useful[i]; const isSat = i === 5; return (
{d} {on ? '8 h' : s.off}
); })}
{/* footer */}
{s.totalPre} {hours} h {s.totalPost}
); } window.DemoCalendar = DemoCalendar; })();