`;
// Display Steps
stepsContainer.innerHTML = `
Calculation Steps
${resultData.steps.map(step => `
`;
resultsSection.classList.remove('hidden');
downloadPdfBtn.style.display = 'inline-block';
};
/**
* Generates and triggers the download of a PDF report.
*/
const generatePdf = () => {
if (!lastResult) return;
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.setFontSize(20);
doc.text("Chemistry Mole Conversion Report", 105, 20, { align: 'center' });
doc.setFontSize(12);
doc.setTextColor(100);
doc.text(`Date: ${new Date().toLocaleDateString()}`, 14, 30);
// Inputs Table
doc.autoTable({
startY: 35,
head: [['Input Parameter', 'Value']],
body: [
['Chemical Formula', lastResult.formula],
['Starting Quantity', `${lastResult.quantity} ${lastResult.fromUnit}`],
['Target Unit', lastResult.toUnit],
],
theme: 'grid',
headStyles: { fillColor: [5, 150, 105] }, // emerald-600
});
// Molar Mass Table
const molarMassBody = lastResult.molarMassData.breakdown.map(b => [b.element, b.count, b.mass.toFixed(4), b.total.toFixed(4)]);
molarMassBody.push([{ content: 'Total Molar Mass', colSpan: 3, styles: { fontStyle: 'bold' } }, { content: lastResult.molarMassData.total.toFixed(4), styles: { fontStyle: 'bold' } }]);
doc.autoTable({
startY: doc.lastAutoTable.finalY + 10,
head: [['Element', 'Count', 'Atomic Mass (g/mol)', 'Total Mass (g/mol)']],
body: molarMassBody,
theme: 'striped',
headStyles: { fillColor: [52, 211, 153] }, // emerald-400
});
// Steps & Result
const finalY = doc.lastAutoTable.finalY + 10;
doc.setFontSize(14);
doc.text("Calculation Steps", 14, finalY);
doc.setFontSize(10);
doc.setTextColor(50);
doc.text(lastResult.steps, 14, finalY + 7);
doc.setFontSize(16);
doc.setFont('helvetica', 'bold');
doc.setTextColor(0);
doc.text("Final Result", 14, finalY + 25);
doc.setFillColor(236, 253, 245); // emerald-50
doc.rect(14, finalY + 28, 182, 16, 'F');
doc.setFontSize(18);
doc.setTextColor(5, 150, 105);
doc.text(`${lastResult.finalValue.toExponential(4)} ${lastResult.toUnit}`, 105, finalY + 37, { align: 'center' });
doc.save(`Mole_Conversion_${lastResult.formula}.pdf`);
};
// --- EVENT LISTENERS ---
convertBtn.addEventListener('click', handleConversion);
downloadPdfBtn.addEventListener('click', generatePdf);
});
${step}
`).join('')}