// App entry — wires everything together const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#F5A524", "density": "comfortable", "showCopilot": true }/*EDITMODE-END*/; function App(){ const [active, setActive] = React.useState('dashboard'); const [theme, setTheme] = React.useState('light'); const [cmdOpen, setCmdOpen] = React.useState(false); const [copilotOpen, setCopilotOpen] = React.useState(false); const [sidebarOpen, setSidebarOpen] = React.useState(false); const { toasts, push } = window.useToasts(); const [tweaks, setTweak] = (window.useTweaks || (()=>[TWEAK_DEFAULTS,()=>{}]))(TWEAK_DEFAULTS); // theme React.useEffect(()=>{ document.documentElement.setAttribute('data-theme', theme); },[theme]); // accent React.useEffect(()=>{ document.documentElement.style.setProperty('--amber', tweaks.accent); },[tweaks.accent]); // cmd+k React.useEffect(()=>{ const onKey = (e) => { if((e.metaKey||e.ctrlKey) && e.key.toLowerCase()==='k'){ e.preventDefault(); setCmdOpen(o=>!o); } }; window.addEventListener('keydown', onKey); return ()=> window.removeEventListener('keydown', onKey); },[]); const onAction = (item) => { if(item.type==='action'){ if(item.id==='copilot'){ setCopilotOpen(true); return; } if(item.id==='sync'){ push('Sincronización iniciada'); return; } if(item.id==='export'){ push('Reporte exportado'); return; } push(`Acción: ${item.label}`); } else if(item.type==='sku'){ setActive('inventory'); } else if(item.type==='store'){ setActive('stores'); } }; const Page = (() => { switch(active){ case 'dashboard': return ; case 'inventory': return ; case 'sales': return ; case 'forecasts': return ; case 'alerts': return ; case 'reports': return ; case 'stores': return ; case 'products': return ; case 'suppliers': return ; case 'users': return ; case 'integrations': return ; case 'settings': return setTheme(t=>t==='light'?'dark':'light')}/>; default: return null; } })(); // Tweaks panel const TweaksPanel = window.TweaksPanel; const TweakSection = window.TweakSection; const TweakColor = window.TweakColor; const TweakRadio = window.TweakRadio; const TweakToggle = window.TweakToggle; return ( <>
{setActive(id); setSidebarOpen(false); window.scrollTo({top:0});}} open={sidebarOpen} onClose={()=>setSidebarOpen(false)}/>
setTheme(t=>t==='light'?'dark':'light')} onCmdK={()=>setCmdOpen(true)} onAlerts={()=>setActive('alerts')} onToggleCopilot={()=>setCopilotOpen(o=>!o)} onMenuToggle={()=>setSidebarOpen(o=>!o)} />
{Page}
setCmdOpen(false)} onNav={(id)=>{setActive(id); push('Navegando...');}} onAction={onAction}/> setCopilotOpen(false)}/> setCopilotOpen(o=>!o)} hidden={copilotOpen || !tweaks.showCopilot}/> {TweaksPanel && ( setTweak('accent', v)} presets={['#F5A524','#2563EB','#16A34A','#DC2626','#7C3AED','#EA580C']}/> setTweak('showCopilot', v)}/> )} ); } ReactDOM.createRoot(document.getElementById('root')).render();