'use client'; import { ActionLink } from '@/components/actions/ActionLink'; import { DemoTrigger } from '@/components/integrations/DemoTrigger'; import type { ShellMessages } from '@/lib/localization/messages'; import { localizedPath, type Locale } from '@/lib/localization/config'; import type { ThemePreference } from '@/lib/theme/config'; import { useEffect, useRef, useState } from 'react'; import { HeaderNavigation } from './HeaderNavigation'; import { LocaleSelector } from './LocaleSelector'; import styles from './SiteHeader.module.css'; import { ThemeSelector } from './ThemeSelector'; function signInUrl(locale: Locale): string { return localizedPath('sign-in', locale); } interface MobileNavigationProps { locale: Locale; messages: ShellMessages; themePreference: ThemePreference; demoEnabled: boolean; } export function MobileNavigation({ locale, messages, themePreference, demoEnabled, }: MobileNavigationProps) { const [open, setOpen] = useState(false); const dialogRef = useRef(null); const triggerRef = useRef(null); const closeRef = useRef(null); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; if (open && !dialog.open) { dialog.showModal(); document.body.dataset.navigationOpen = 'true'; closeRef.current?.focus(); } else if (!open && dialog.open) { dialog.close(); } return () => { delete document.body.dataset.navigationOpen; }; }, [open]); const close = () => { dialogRef.current?.close(); setOpen(false); delete document.body.dataset.navigationOpen; window.requestAnimationFrame(() => triggerRef.current?.focus()); }; return (
{ setOpen(false); delete document.body.dataset.navigationOpen; }} onCancel={(event) => { event.preventDefault(); close(); }} >
RentalDriveGo
{messages.header.login}
); }