/** * Application State Management * Central state for the entire application */ // Main application state export const appState = { history: [], favorites: [], budgetItems: [], currentSection: 'cev', currentTheme: 'dark', expertMode: false, currentSidebarTab: 0 }; // User preferences (persisted to localStorage) export let userPreferences = { theme: 'dark', colorScheme: 'default', fontSize: 'medium', fontFamily: 'default' }; // Load preferences from localStorage export function loadPreferences() { try { const saved = localStorage.getItem('acoCalcPreferences'); if (saved) { userPreferences = { ...userPreferences, ...JSON.parse(saved) }; } } catch (e) { console.warn('Não foi possível carregar preferências:', e); } } // Save preferences to localStorage export function savePreferences() { try { localStorage.setItem('acoCalcPreferences', JSON.stringify(userPreferences)); } catch (e) { console.warn('Não foi possível salvar preferências:', e); } } // Admin configuration export const adminConfig = { appName: 'SteelBase', appSubtitle: 'Plataforma Técnica com Base de Dados de Materiais Brasileiros', footerText: '© 2025 SteelBase v7.5 PROFESSIONAL EDITION - Plataforma Técnica com Base de Dados de Materiais Brasileiros', themeDefault: 'escuro', modeDefault: 'simples', toolsVisibility: { 'cev': true, 'seletor': true, 'equivalencias': false, 'comparativo': false, 'parafusos': true, 'layout': true, 'parafuso-vs-solda': false, 'preaquecimento': true, 'dureza': true, 'charpy': true, 'certificado': false, 'ultrassom': false, 'area-pintura': true, 'consumo-tinta': true, 'galvanizacao': false, 'custo-pintura': true, 'secagem': false, 'inspecao-pintura': false, 'orcamento': true, 'peso-rigging': false, 'referencia': false } }; /** * Update app state * @param {string} key - State key * @param {any} value - New value */ export function updateState(key, value) { appState[key] = value; } /** * Get state value * @param {string} key - State key * @returns {any} State value */ export function getState(key) { return appState[key]; } /** * Update user preferences * @param {string} key - Preference key * @param {any} value - New value */ export function updatePreference(key, value) { userPreferences[key] = value; } /** * Get preference value * @param {string} key - Preference key * @returns {any} Preference value */ export function getPreference(key) { return userPreferences[key]; } /** * Check if localStorage is available and has space * @returns {object} Storage status */ export function checkStorage() { try { const testKey = '__storage_test__'; localStorage.setItem(testKey, testKey); localStorage.removeItem(testKey); let totalSize = 0; for (let key in localStorage) { if (localStorage.hasOwnProperty(key)) { totalSize += localStorage[key].length * 2; } } return { available: true, usedBytes: totalSize }; } catch (error) { return { available: false, error: error.message }; } }