class ReplPanel { constructor() { this.panel = document.getElementById('bottom-panel'); this.output = document.getElementById('repl-output'); this.setupEventListeners(); } setupEventListeners() { document.getElementById('bottom-panel-toggle')?.addEventListener('click', () => this.toggle()); document.getElementById('repl-clear')?.addEventListener('click', () => this.clear()); } toggle() { this.panel.classList.toggle('collapsed'); const btn = document.getElementById('bottom-panel-toggle'); if (btn) btn.textContent = this.panel.classList.contains('collapsed') ? '\u25BC' : '\u25B2'; } show() { this.panel.classList.remove('collapsed'); const btn = document.getElementById('bottom-panel-toggle'); if (btn) btn.textContent = '\u25B2'; } clear() { if (this.output) this.output.innerHTML = ''; } appendOutput(command, result) { const entry = document.createElement('div'); entry.className = 'repl-entry'; entry.innerHTML = `
\u25B6 ${command}
${result.stdout ? `
${this.escapeHtml(result.stdout)}
` : ''} ${result.stderr ? `
${this.escapeHtml(result.stderr)}
` : ''} ${result.error ? `
Error: ${this.escapeHtml(result.error)}
` : ''} `; this.output?.appendChild(entry); this.output?.scrollTo(0, this.output.scrollHeight); } escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } } module.exports = { ReplPanel };