// Layout — sidebar + topbar. LIGHT enterprise theme. // Branded: SOLUCERSA (operator) running SOFIA MCP Recruitment (product). const { useState: usL, useEffect: ueL, useRef: urL } = React; const NAV_GROUPS = [ { title: 'Workspace', items: [ { id: 'dashboard', label: 'Dashboard', icon: 'Dashboard' }, { id: 'requisitions', label: 'Vacantes', icon: 'Briefcase', badge: 7 }, { id: 'candidates', label: 'Pool de candidatos', icon: 'Users', badge: 1248 }, ], }, { title: 'SOFIA AI Tools', items: [ { id: 'screening', label: 'AI Screening', icon: 'PhoneCall', subText: 'Call' }, { id: 'interviews', label: 'Entrevistas & Outreach', icon: 'Message', subText: 'Chat' }, ], }, { title: 'Operaciones', items: [ { id: 'clients', label: 'Clientes', icon: 'Building' }, { id: 'reports', label: 'Reportes & Analítica', icon: 'Bar' }, { id: 'settings', label: 'Configuración', icon: 'Settings' }, ], }, ]; function Sidebar({ route, onNavigate }) { return ( ); } function TopBar({ onOpenAssistant, onNavigate }) { const [openNotif, setOpenNotif] = usL(false); const [openUser, setOpenUser] = usL(false); const notifRef = urL(null); const userRef = urL(null); ueL(() => { const h = (e) => { if (notifRef.current && !notifRef.current.contains(e.target)) setOpenNotif(false); if (userRef.current && !userRef.current.contains(e.target)) setOpenUser(false); }; document.addEventListener('mousedown', h); return () => document.removeEventListener('mousedown', h); }, []); return (
⌘ K
{openNotif && (
Notificaciones
{DATA.NOTIFICATIONS.map((n) => { const I = Icon[n.icon] || Icon.Bell; const toneCls = { amber: 'bg-ai-50 text-ai-700', brand: 'bg-brand-50 text-brand-600', rose: 'bg-rose-50 text-rose-700', emerald: 'bg-emerald-50 text-emerald-700', }[n.tone]; return (
{n.title}
{n.body}
{n.t}
); })}
)}
{openUser && (
{[ { icon: , label: 'Perfil' }, { icon: , label: 'Configuración' }, { icon: , label: 'Seguridad' }, ].map((x) => ( ))}
)}
); } function Page({ id, children }) { return
{children}
; } Object.assign(window, { Sidebar, TopBar, Page });