Files
2025-01-16 21:30:24 -05:00

87 lines
3.2 KiB
JavaScript

// Performance monitor UI component
import { debug } from '../utils/debug.js';
import { updateMenuStats } from '../utils/tabs.js';
export function createPerformanceMonitor() {
debug("Creating performance monitor UI");
const container = document.createElement('div');
container.className = 'comfyui-button-wrapper';
container.style.position = 'relative';
const button = document.createElement('button');
button.className = 'comfyui-button primary popup-closed';
button.title = 'Profiling Stats';
button.setAttribute('aria-label', 'Profiling Stats');
// Create icon
const icon = document.createElement('i');
icon.className = 'mdi mdi-chart-line';
button.appendChild(icon);
// Add empty text node (like other buttons)
button.appendChild(document.createTextNode(''));
container.appendChild(button);
// Create detailed stats popup with proper positioning
const popup = document.createElement('div');
popup.className = 'comfyui-popup profilerx-stats-popup left';
popup.style.cssText = `
display: none;
position: fixed;
background: var(--comfy-input-bg);
color: var(--descrip-text);
padding: 8px;
border-radius: 4px;
z-index: 9999;
max-height: 80vh;
overflow-y: auto;
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
border: 1px solid var(--border-color);
min-width: 300px;
font-size: 12px;
`;
container.appendChild(popup);
// Toggle popup on click
button.addEventListener('click', (e) => {
debug("Button clicked!");
e.preventDefault();
e.stopPropagation();
const isVisible = popup.style.display !== 'none';
debug("Current popup visibility:", popup.style.display, "isVisible:", isVisible);
if (!isVisible) {
// Position the popup relative to the button
const rect = button.getBoundingClientRect();
popup.style.setProperty('--left', `${rect.left}px`);
popup.style.setProperty('--top', `${rect.bottom}px`);
popup.style.setProperty('--limit', `${rect.bottom}px`);
popup.classList.add('open');
popup.style.display = 'block';
updateMenuStats(popup);
}
else {
popup.classList.remove('open');
popup.style.display = 'none';
}
debug("New popup display:", popup.style.display);
button.classList.toggle('popup-opened', !isVisible);
button.classList.toggle('popup-closed', isVisible);
debug("Button classes after toggle:", button.className);
});
// Close popup when clicking outside
document.addEventListener('click', (e) => {
debug("Document clicked, checking if outside container");
if (!container.contains(e.target)) {
debug("Click was outside container, closing popup");
popup.style.display = 'none';
popup.classList.remove('open');
button.classList.remove('popup-opened');
button.classList.add('popup-closed');
}
else {
debug("Click was inside container");
}
});
return {
container,
elements: {
button,
popup
}
};
}