Summary & Notes
Total Naps: ${state.config[age].naps}
Total Daytime Sleep: ${Math.floor(totalDaySleep / 60)} hours, ${totalDaySleep % 60} minutes
Important: This is a sample schedule based on averages. The most important thing is to watch your baby for sleepy cues (yawning, rubbing eyes, fussiness) and adapt the schedule to their individual needs. Wake windows are a guide, not a strict rule.
This tool provides general guidance and is not a substitute for professional medical advice. Consult a pediatrician for any health concerns.
`;
document.body.appendChild(reportContainer);
try {
const canvas = await html2canvas(reportContainer, { scale: 2, useCORS: true, logging: false });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });
const pageHeight = pdf.internal.pageSize.getHeight();
const pageWidth = pdf.internal.pageSize.getWidth();
const margin = 15;
const contentWidth = pageWidth - (margin * 2);
const imgProps = pdf.getImageProperties(imgData);
const contentHeight = (imgProps.height * contentWidth) / imgProps.width;
let heightLeft = contentHeight;
let position = 0;
pdf.addImage(imgData, 'PNG', margin, margin, contentWidth, contentHeight);
heightLeft -= (pageHeight - (margin * 2));
while (heightLeft > 0) {
position -= (pageHeight - (margin * 2));
pdf.addPage();
pdf.addImage(imgData, 'PNG', margin, position + margin, contentWidth, contentHeight);
heightLeft -= (pageHeight - (margin * 2));
}
pdf.save('Infant-Sleep-Schedule.pdf');
} catch (error) {
console.error("Error generating PDF:", error);
alert("Sorry, there was an error creating the PDF report.");
} finally {
document.body.removeChild(reportContainer);
}
};
// --- INITIALIZATION ---
switchTab(1);
populateConfig();
});