import { useState } from "react"; import { TABS } from "../constants/index.js"; import { version } from "../../package.json"; import { useUpdateCheck } from "../hooks/useUpdateCheck.js"; import { useApp } from "../context/AppContext.jsx"; const TAB_ICONS = [ , , , , ]; const GEBRUIKERS_ICON = ( ); const INSTELLINGEN_ICON = ( ); const LOGOUT_ICON = ( ); const INFO_ICON = ( ); const MOON_ICON = ( ); function initials(naam = "") { const parts = naam.trim().split(/\s+/); if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase(); return naam.slice(0, 2).toUpperCase(); } function SectionLabel({ children }) { return (
{children}
); } const ACTIVE_BG = "#7c3aed"; const ACTIVE_SHADOW = "0 4px 14px rgba(124,58,237,0.4)"; function NavItem({ active, onClick, icon, label, T, danger }) { const [hovered, setHovered] = useState(false); const isLit = active || hovered; return (
setHovered(true)} onMouseLeave={() => setHovered(false)} style={{ display: "flex", alignItems: "center", gap: 10, padding: "11px 12px", borderRadius: 9, cursor: "pointer", marginBottom: 4, background: active ? ACTIVE_BG : hovered ? "rgba(139,92,246,0.08)" : "transparent", color: active ? "#fff" : hovered ? T.text : (danger ? "#ef4444" : T.muted), fontWeight: active ? 600 : 400, fontSize: 15, boxShadow: active ? ACTIVE_SHADOW : "none", transition: "all 0.15s", }} > {icon} {label}
); } function OverPopup({ onClose, nieuweVersie, T }) { return ( <> {/* Overlay */}
{/* Modal */}
e.stopPropagation()} style={{ background: T.popupBg, border: `1px solid ${T.border}`, borderRadius: 16, padding: "28px 28px 24px", width: 300, boxShadow: "0 24px 60px rgba(0,0,0,0.5)", position: "relative", }}> {/* Sluitknop */} {/* Logo + naam */}
VibeFinance
Versie v{version}
{nieuweVersie && (
Nieuw beschikbaar v{nieuweVersie.latest}
)}
© {new Date().getFullYear()} VibeFinance
); } function DarkModeToggle({ darkMode, setDarkMode, T }) { return (
setDarkMode(!darkMode)} style={{ display: "flex", alignItems: "center", gap: 10, padding: "11px 12px", borderRadius: 9, cursor: "pointer", marginBottom: 4, color: T.muted, fontSize: 13.5, fontWeight: 500, transition: "background 0.12s", }} onMouseEnter={e => e.currentTarget.style.background = "rgba(255,255,255,0.04)"} onMouseLeave={e => e.currentTarget.style.background = "transparent"} > {MOON_ICON} Dark Mode {/* Toggle pill */}
); } export default function NavBar() { const { tab, setTab, setShowUsers, setShowInstellingen, T, logout, darkMode, setDarkMode, currentUser, avatar } = useApp(); const nieuweVersie = useUpdateCheck(); const [overOpen, setOverOpen] = useState(false); return (
{/* Logo */}
VibeFinance
{/* Nav */} {/* Uitloggen */}
); }