// Enable debug logging export const ENABLE_DEBUG = false; /** * Helper function to trigger a new queue generation. * This function finds the queue button and clicks it to start a new generation. */ export function triggerNewGeneration() { let queueButton = document.querySelector('button[data-testid="queue-button"]'); if (queueButton) { console.log('Triggering new queue generation.'); queueButton.click(); return; } const buttonContainer = document.querySelector('div[data-testid="queue-button"]'); if (buttonContainer) { queueButton = buttonContainer.querySelector('button[data-pc-name="pcbutton"]'); if (queueButton) { console.log('Triggering new queue generation.'); queueButton.click(); return; // Do not proceed to default fail condition. } else { console.warn("Queue button not found inside container."); return; // Do not proceed to default fail condition. } } // Default fail condition. console.error("Queue button not found."); } // Helper functions to hide and show widgets export function hideWidget(node, widget) { if (!widget) return; if (widget.type === "hidden" || widget.hidden) return; widget.origType ??= widget.type; widget.origComputeSize ??= widget.computeSize; widget.origHidden = widget.hidden ?? false; widget.type = "hidden"; widget.hidden = true; widget.computeSize = widget.computeSize || (() => [0, 0]); if (widget.element) { widget.element.style.display = "none"; } node?.setDirtyCanvas?.(true, true); } export function showWidget(node, widget) { if (!widget) return; widget.type = widget.origType ?? widget.type; widget.computeSize = widget.origComputeSize ?? widget.computeSize; widget.hidden = widget.origHidden ?? false; if (widget.element) { widget.element.style.removeProperty("display"); } node?.setDirtyCanvas?.(true, true); } /** * Enumerate available microphone input devices. * * @param {Object} [options] * @param {boolean} [options.requestAccess=true] - Whether to request `getUserMedia` before enumerating. * @param {string} [options.logPrefix="[Microphone]"] - Prefix for debug logging. * @param {boolean} [options.debugEnabled=false] - Enable console logs when true. * @returns {Promise} Resolves with the list of audioinput devices. */ export async function listMicrophoneDevices(options = {}) { const { requestAccess = true, logPrefix = "[Microphone]", debugEnabled = false } = options; try { if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) { throw new Error("MediaDevices API not supported in this browser"); } if (requestAccess) { try { await navigator.mediaDevices.getUserMedia({ audio: true }); } catch (permissionError) { if (debugEnabled) { console.warn(`${logPrefix} Permission request failed:`, permissionError); } } } const mediaDevices = await navigator.mediaDevices.enumerateDevices(); const audioInputs = mediaDevices.filter(device => device.kind === "audioinput"); if (debugEnabled) { console.log(`${logPrefix} Enumerated ${audioInputs.length} microphone device(s).`); } return audioInputs; } catch (error) { if (debugEnabled) { console.error(`${logPrefix} Failed to enumerate microphones:`, error); } throw error; } } /** * Populate a