Virtual Meeting Assistant
Keep your meetings focused, productive, and on-track.
Meeting Timer
00:00:00
Meeting Agenda
Meeting Details
Total Duration: 00:00:00
Agenda Items
Action Items
No action items added yet.
`; return; } actionItems.forEach(item => { const div = document.createElement('div'); div.className = 'p-4 bg-white rounded-lg border grid grid-cols-12 gap-4 items-center'; div.innerHTML = `${item.desc}
Assignee: ${item.assignee}
Due: ${item.due}
No action items were assigned.
`; } } // --- PDF Generation --- downloadPdfBtn.addEventListener('click', () => { const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(20); doc.text("Meeting Summary Report", 14, 22); doc.setFontSize(12); doc.text(`Date: ${new Date().toLocaleDateString('en-US')}`, 14, 32); doc.text(`Duration: ${formatTime(seconds)}`, 14, 40); doc.setFontSize(16); doc.text("Agenda Items", 14, 60); let yPos = 70; agendaItems.forEach(item => { doc.setTextColor(item.completed ? 34 : 199, item.completed ? 197 : 51, item.completed ? 94 : 78); // green or red doc.text(`- ${item.text} (${item.completed ? 'Completed' : 'Not Completed'})`, 20, yPos); yPos += 8; }); doc.setTextColor(0); const tableData = actionItems.map(item => [item.desc, item.assignee, item.due]); if (tableData.length > 0) { doc.autoTable({ startY: yPos + 10, head: [['Action Item', 'Assigned To', 'Due Date']], body: tableData, theme: 'striped', headStyles: { fillColor: [219, 39, 119] }, // Pink-600 }); } doc.save('meeting-summary.pdf'); }); // --- Initial Setup --- renderActionItems(); switchTab('timer'); });