'use client'; import * as React from 'react'; import { usePathname } from 'next/navigation'; import { TransitionLink } from '@/components/ui/TransitionLink'; import { Home, Layers, Star, Mail, Menu } from 'lucide-react'; import { m, LazyMotion, domAnimation, AnimatePresence } from 'framer-motion'; export interface NavLink { label: string; url: string; children?: NavLink[]; } interface MobileBottomNavProps { navLinks: NavLink[]; currentLocale: string; } export function MobileBottomNav({ navLinks, currentLocale }: MobileBottomNavProps) { const pathname = usePathname() || '/'; const [isFlyoutOpen, setIsFlyoutOpen] = React.useState(false); // Scroll lock when flyout is open React.useEffect(() => { if (isFlyoutOpen) { document.body.style.overflow = 'hidden'; document.documentElement.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; document.documentElement.style.overflow = ''; } return () => { document.body.style.overflow = ''; document.documentElement.style.overflow = ''; }; }, [isFlyoutOpen]); const items = React.useMemo(() => { const homeUrl = `/${currentLocale}`; const competenciesUrl = navLinks[0]?.url || `/${currentLocale}/kompetenzen`; const referencesUrl = navLinks[2]?.url || `/${currentLocale}/referenzen`; const contactUrl = `/${currentLocale}/${currentLocale === 'de' ? 'kontakt' : 'contact'}`; return [ { id: 'home', label: currentLocale === 'de' ? 'Start' : 'Home', url: homeUrl, icon: , exactMatch: true }, { id: 'kompetenzen', label: navLinks[0]?.label || (currentLocale === 'de' ? 'Kompetenzen' : 'Competencies'), url: competenciesUrl, icon: }, { id: 'referenzen', label: navLinks[2]?.label || (currentLocale === 'de' ? 'Referenzen' : 'References'), url: referencesUrl, icon: }, { id: 'kontakt', label: currentLocale === 'de' ? 'Kontakt' : 'Contact', url: contactUrl, icon: }, { id: 'menu', label: currentLocale === 'de' ? 'Mehr' : 'Menu', url: '#', icon: , isFlyoutTrigger: true } ]; }, [currentLocale, navLinks]); const flyoutLinks = React.useMemo(() => { const aboutNode = navLinks[1]; const karriereNode = navLinks[3]; const messenNode = navLinks[4]; let links: {label: string, url: string}[] = []; if (aboutNode?.children) { links.push(...aboutNode.children.map(c => ({ label: c.label, url: c.url }))); } if (karriereNode) links.push({ label: karriereNode.label, url: karriereNode.url }); if (messenNode) links.push({ label: messenNode.label, url: messenNode.url }); return links; }, [navLinks]); return ( <>
{isFlyoutOpen && ( <> setIsFlyoutOpen(false)} /> { if (info.offset.y > 50 || info.velocity.y > 100) { setIsFlyoutOpen(false); } }} className="fixed bottom-0 left-0 right-0 z-[9998] bg-white rounded-t-[32px] pt-4 pb-[calc(env(safe-area-inset-bottom)_+_7rem)] px-6 md:hidden shadow-[0_-20px_40px_rgba(0,0,0,0.1)] border-t border-neutral-100" >

{currentLocale === 'de' ? 'Über uns & Mehr' : 'About us & More'}

{flyoutLinks.map((link, i) => { const childUrl = link.url.startsWith('/') && !link.url.match(/^\/(en|de)/) ? `/${currentLocale}${link.url}` : link.url; const isChildActive = pathname === childUrl; return ( setIsFlyoutOpen(false)} className={`px-4 py-4 rounded-2xl text-[15px] font-semibold transition-all flex items-center justify-between ${ isChildActive ? 'bg-primary/10 text-primary' : 'text-neutral-700 hover:bg-neutral-50 active:bg-neutral-100' }`} > {link.label} ); })}
)} ); }