import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faBars } from '@fortawesome/free-solid-svg-icons/faBars'; import { Image, Modal, Pressable, StyleSheet, Text, View } from 'react-native'; import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; import { StatusBar } from 'expo-status-bar'; import { useState } from 'react'; import { EventListScreen } from '../screens/EventListScreen'; import { EventDetailScreen } from '../screens/EventDetailScreen'; import { AddEventScreen } from '../screens/AddEventScreen'; import { SettingsScreen } from '../screens/SettingsScreen'; import { CalendarImportScreen } from '../screens/CalendarImportScreen'; import type { RootStack } from '../types/navigation'; import navLogo from '../../assets/nav-logo.png'; // ── Root Stack ── const Root = createNativeStackNavigator(); const byPrefixAndName = { fas: { bars: faBars } }; type HeaderMenuProps = { navigation: { navigate: (screen: 'CalendarImport' | 'Settings') => void; }; }; function HeaderMenu({ navigation }: HeaderMenuProps) { const [isOpen, setIsOpen] = useState(false); const navigateTo = (screen: 'CalendarImport' | 'Settings') => { setIsOpen(false); navigation.navigate(screen); }; return ( <> setIsOpen(true)} style={({ pressed }) => [styles.menuButton, pressed && styles.menuButtonPressed]} > setIsOpen(false)}> setIsOpen(false)}> navigateTo('CalendarImport')} style={({ pressed }) => [styles.menuItem, pressed && styles.menuItemPressed]} > Calendar navigateTo('Settings')} style={({ pressed }) => [styles.menuItem, pressed && styles.menuItemPressed]} > Settings ); } /** * Root native stack navigator for the app. * Wraps all screens in SafeAreaProvider/SafeAreaView with a dark header bar. */ export default function AppNavigator() { return ( ({ headerStyle: { backgroundColor: '#17112A' }, headerTintColor: '#F4F1EA', headerRight: () => , headerTitle: () => ( Time To Leave ), })} > ); } const styles = StyleSheet.create({ menuButton: { alignItems: 'center', height: 40, justifyContent: 'center', width: 40, }, menuButtonPressed: { opacity: 0.65, }, menuOverlay: { alignItems: 'flex-end', backgroundColor: 'rgba(9, 8, 22, 0.45)', flex: 1, paddingRight: 12, paddingTop: 72, }, menuPanel: { backgroundColor: '#17112A', borderColor: '#3B3157', borderRadius: 8, borderWidth: 1, minWidth: 168, overflow: 'hidden', }, menuItem: { paddingHorizontal: 18, paddingVertical: 14, }, menuItemPressed: { backgroundColor: '#2A2140', }, menuItemText: { color: '#F4F1EA', fontSize: 16, fontWeight: '600', }, });