Total Personal Hours
${personalHours.toFixed(1)}
Your Balance: ${workPercentage.toFixed(0)}% Work / ${personalPercentage.toFixed(0)}% Personal
Activity Log
| Activity |
Category |
Hours |
`;
data.forEach(item => {
dashboardHTML += `
| ${item.description} |
${item.category} |
${item.hours.toFixed(1)} |
`;
});
dashboardHTML += `
`;
dashboardOutput.innerHTML = dashboardHTML;
}
function downloadPDF() {
const data = getActivityData();
if (data.length === 0) {
console.warn("No data to export.");
return;
}
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const tableData = data.map(item => [item.description, item.category, item.hours.toFixed(1)]);
const workHours = data.filter(d => d.category === 'Work').reduce((sum, d) => sum + d.hours, 0);
const personalHours = data.filter(d => d.category === 'Personal').reduce((sum, d) => sum + d.hours, 0);
doc.setFontSize(18);
doc.text('Work-Life Balance Report', 14, 22);
doc.setFontSize(11);
doc.setTextColor(100);
doc.text(`Report as of: ${new Date().toLocaleDateString()}`, 14, 30);
doc.text(`Total Work Hours: ${workHours.toFixed(1)}`, 14, 36);
doc.text(`Total Personal Hours: ${personalHours.toFixed(1)}`, 14, 42);
doc.autoTable({
head: [['Activity', 'Category', 'Hours']],
body: tableData,
startY: 50,
theme: 'grid',
headStyles: { fillColor: [79, 70, 229] }, // Indigo-600
});
doc.save('Work-Life-Balance-Report.pdf');
}
// --- Event Listeners ---
addActivityBtn.addEventListener('click', addActivityForm);
downloadPdfBtn.addEventListener('click', downloadPDF);
// --- Initial Setup ---
updateNavButtons();
generateDashboard();
});