/** * DebugPanel Component * * Extracted from monolithic editor.js as part of architecture refactoring. * Handles debug message display and management for client-side debugging. * * Dependencies: * - None (standalone component) */ /** * DebugPanel - Manages debug message display and interaction */ class DebugPanel { constructor() { this.messages = []; this.isActive = false; this.maxMessages = 1000; // Keep last 1000 messages } /** * Add a debug message */ addMessage(message, category = 'INFO') { const messageObj = { message, category, timestamp: new Date().toLocaleTimeString() }; this.messages.push(messageObj); // Keep only last maxMessages if (this.messages.length > this.maxMessages) { this.messages = this.messages.slice(-this.maxMessages); } // Auto-update if panel is visible if (this.isActive) { this.update(); } } /** * Toggle the debug panel on/off */ toggle() { const debugContainer = document.getElementById('debug-messages-container'); const debugButton = document.getElementById('toggle-debug'); if (!debugContainer || !debugButton) { console.warn('DebugPanel: Required DOM elements not found'); return; } if (this.isActive) { this.hide(); } else { this.show(); } } /** * Show the debug panel */ show() { const debugContainer = document.getElementById('debug-messages-container'); const debugButton = document.getElementById('toggle-debug'); if (!debugContainer || !debugButton) { console.warn('DebugPanel: Required DOM elements not found'); return; } debugContainer.style.display = 'block'; debugButton.textContent = '🔍 Debug (ON)'; debugButton.style.background = '#28a745'; this.isActive = true; this.update(); } /** * Hide the debug panel */ hide() { const debugContainer = document.getElementById('debug-messages-container'); const debugButton = document.getElementById('toggle-debug'); if (!debugContainer || !debugButton) { console.warn('DebugPanel: Required DOM elements not found'); return; } debugContainer.style.display = 'none'; debugButton.textContent = '🔍 Debug'; debugButton.style.background = '#6c757d'; this.isActive = false; } /** * Update the debug panel with current messages */ update() { const debugContainer = document.getElementById('debug-messages-container'); if (!debugContainer || !this.isActive) { return; } if (this.messages.length === 0) { debugContainer.innerHTML = '