`).join('');
// 2. Display data table
elements.dataSetTable.innerHTML = `
| Index |
Value |
${lastAnalysisResults.data.map((val, i) => `
| ${i + 1} |
${val.toLocaleString()} |
`).join('')}
`;
// 3. Show results panel
elements.dashboardPlaceholder.classList.add('hidden');
elements.dashboardResults.classList.remove('hidden');
}
/**
* Loads USA-relevant sample data into the input field.
*/
function loadSampleData() {
// Sample data: Average daily high temperatures in July for various US cities (°F)
const sample = `86, 95, 72, 84, 91, 78, 106, 88, 85, 79, 92, 86, 99, 75, 89, 86, 91, 101, 83, 77`;
elements.dataInput.value = sample;
clearError();
}
/**
* Generates and downloads a PDF report of the analysis.
*/
function downloadPdf() {
if (!lastAnalysisResults) {
showError("Please analyze some data first.");
return;
}
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const docWidth = doc.internal.pageSize.getWidth();
// Title
doc.setFont('helvetica', 'bold');
doc.setFontSize(18);
doc.text('Statistical Analysis Report', docWidth / 2, 20, { align: 'center' });
doc.setFontSize(11);
doc.setTextColor(100);
doc.text(`Generated on: ${new Date().toLocaleDateString()}`, docWidth / 2, 28, { align: 'center' });
// Summary Table
doc.autoTable({
startY: 40,
head: [['Metric', 'Value']],
body: lastAnalysisResults.summary.map(s => [s.label, typeof s.value === 'number' ? s.value.toLocaleString(undefined, {maximumFractionDigits: 4}) : s.value]),
theme: 'grid',
headStyles: { fillColor: [243, 244, 246], textColor: [55, 65, 81] }
});
// Data Set Table
doc.autoTable({
startY: doc.autoTable.previous.finalY + 10,
head: [['Index', 'Data Value']],
body: lastAnalysisResults.data.map((d, i) => [i + 1, d.toLocaleString()]),
theme: 'grid',
headStyles: { fillColor: [243, 244, 246], textColor: [55, 65, 81] }
});
doc.save('statistical-analysis-report.pdf');
}
// --- Event Listeners ---
elements.tabDashboard.addEventListener('click', () => switchTab('dashboard'));
elements.tabConfig.addEventListener('click', () => switchTab('config'));
elements.btnGoToConfig.addEventListener('click', () => switchTab('config'));
elements.btnPrev.addEventListener('click', () => switchTab('dashboard'));
elements.btnNext.addEventListener('click', () => switchTab('config'));
elements.btnAnalyze.addEventListener('click', analyzeData);
elements.btnLoadSample.addEventListener('click', loadSampleData);
elements.btnDownloadPdf.addEventListener('click', downloadPdf);
});