/** * Utility functions for Antigravity Console */ window.utils = { // Shared Request Wrapper async request(url, options = {}, webuiPassword = '') { options.headers = options.headers || {}; if (webuiPassword) { options.headers['x-webui-password'] = webuiPassword; } let response = await fetch(url, options); if (response.status === 401) { const store = Alpine.store('global'); const password = prompt(store ? store.t('enterPassword') : 'Enter Web UI Password:'); if (password) { // Return new password so caller can update state // This implies we need a way to propagate the new password back // For simplicity in this functional utility, we might need a callback or state access // But generally utils shouldn't probably depend on global state directly if possible // let's stick to the current logic but wrapped localStorage.setItem('antigravity_webui_password', password); options.headers['x-webui-password'] = password; response = await fetch(url, options); return { response, newPassword: password }; } } return { response, newPassword: null }; }, formatTimeUntil(isoTime) { const store = Alpine.store('global'); const diff = new Date(isoTime) - new Date(); if (diff <= 0) return store ? store.t('ready') : 'READY'; const mins = Math.floor(diff / 60000); const hrs = Math.floor(mins / 60); if (hrs > 0) return `${hrs}H ${mins % 60}M`; return `${mins}M`; }, getThemeColor(name) { return getComputedStyle(document.documentElement).getPropertyValue(name).trim(); } };