/** * Writing Analytics Panel — modal overlay displaying analytics dashboard */ const { analyze } = require('./writing-analytics'); function showAnalyticsModal(tabManager) { const existing = document.getElementById('analytics-modal'); if (existing) existing.remove(); const content = tabManager.getEditorContent(); const metrics = analyze(content); const overlay = document.createElement('div'); overlay.id = 'analytics-modal'; overlay.className = 'analytics-overlay'; const maxCount = metrics.topWords.length > 0 ? metrics.topWords[0].count : 1; overlay.innerHTML = `

Writing Analytics

Readability

Flesch Reading Ease ${metrics.fleschEase}${metrics.readabilityLabel}
Grade Level ${metrics.fleschGrade}

Timing

Reading Time ~${metrics.readingTime} min
Speaking Time ~${metrics.speakingTime} min

Structure

Sentences ${metrics.sentenceCount} • Paragraphs: ${metrics.paragraphCount}
Avg Sentence ${metrics.avgSentenceLength} words
${metrics.longestSentenceLength > 0 ? `
Longest (${metrics.longestSentenceLength} words) ${escapeHtml(metrics.longestSentence)}
` : ''}

Vocabulary

Unique ${metrics.uniqueWordCount} / ${metrics.wordCount}${metrics.lexicalDiversity}%
${metrics.topWords.length > 0 ? `
${metrics.topWords.map(w => { const scale = 13 + Math.round((w.count / maxCount) * 3); return `${escapeHtml(w.word)}${w.count}`; }).join('')}
` : ''}
`; const closeBtn = overlay.querySelector('.analytics-close'); closeBtn.addEventListener('click', () => overlay.remove()); overlay.addEventListener('click', (e) => { if (e.target === overlay) overlay.remove(); }); const escHandler = (e) => { if (e.key === 'Escape') { overlay.remove(); document.removeEventListener('keydown', escHandler); } }; document.addEventListener('keydown', escHandler); document.body.appendChild(overlay); } function escapeHtml(str) { const div = document.createElement('div'); div.textContent = str; return div.innerHTML; } module.exports = { showAnalyticsModal };