- Update design tokens with dark gaming theme (OLED-friendly) - Pure black backgrounds (#000000) - Cyan primary (#00d9ff) and neon green accent (#00ff88) - Glassmorphism effects and mobile-specific tokens - Build complete React Native mobile app screens - HomeScreen: Chat list with dark cards and status indicators - MessagesScreen: Chat view with gradient bubbles and typing indicators - FriendsScreen: Friend list with online/offline sections and game presence - GamesScreen: GameForge projects with team channels - ProfileScreen: User profile with .aethex domain display - AppNavigator: Bottom tab navigation with glow effects - Create Astro marketing landing site - Hero section with animated gradients and phone mockup - Features showcase (6 cards) - Pricing tiers (Free/Premium/Enterprise) - Download section for all platforms - Fully responsive dark theme Design inspiration: BitChat, Root, Discord Dark, Telegram Mobile-first approach with 48px touch targets and safe areas
120 lines
3.3 KiB
TypeScript
120 lines
3.3 KiB
TypeScript
/**
|
|
* App Navigator
|
|
* Bottom tab navigation with sleek design
|
|
*/
|
|
|
|
import React from 'react';
|
|
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
|
import { NavigationContainer } from '@react-navigation/native';
|
|
import { StyleSheet, View, Text } from 'react-native';
|
|
import { theme } from '../theme';
|
|
|
|
// Screens
|
|
import HomeScreen from '../screens/HomeScreen';
|
|
import MessagesScreen from '../screens/MessagesScreen';
|
|
import GamesScreen from '../screens/GamesScreen';
|
|
import FriendsScreen from '../screens/FriendsScreen';
|
|
import ProfileScreen from '../screens/ProfileScreen';
|
|
|
|
const Tab = createBottomTabNavigator();
|
|
|
|
const TabIcon = ({ focused, emoji }: { focused: boolean; emoji: string }) => (
|
|
<View style={[styles.tabIcon, focused && styles.tabIconActive]}>
|
|
<Text style={styles.tabEmoji}>{emoji}</Text>
|
|
</View>
|
|
);
|
|
|
|
export default function AppNavigator() {
|
|
return (
|
|
<NavigationContainer
|
|
theme={{
|
|
dark: true,
|
|
colors: {
|
|
primary: theme.colors.primary,
|
|
background: theme.colors.background,
|
|
card: theme.colors.background,
|
|
text: theme.colors.text,
|
|
border: theme.colors.gray800,
|
|
notification: theme.colors.primary,
|
|
},
|
|
}}
|
|
>
|
|
<Tab.Navigator
|
|
screenOptions={{
|
|
headerShown: false,
|
|
tabBarStyle: styles.tabBar,
|
|
tabBarActiveTintColor: theme.colors.primary,
|
|
tabBarInactiveTintColor: theme.colors.gray600,
|
|
tabBarLabelStyle: styles.tabLabel,
|
|
}}
|
|
>
|
|
<Tab.Screen
|
|
name="Home"
|
|
component={HomeScreen}
|
|
options={{
|
|
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="🏠" />,
|
|
}}
|
|
/>
|
|
<Tab.Screen
|
|
name="Messages"
|
|
component={MessagesScreen}
|
|
options={{
|
|
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="💬" />,
|
|
tabBarBadge: 3, // Unread count
|
|
}}
|
|
/>
|
|
<Tab.Screen
|
|
name="Games"
|
|
component={GamesScreen}
|
|
options={{
|
|
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="🎮" />,
|
|
}}
|
|
/>
|
|
<Tab.Screen
|
|
name="Friends"
|
|
component={FriendsScreen}
|
|
options={{
|
|
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="👥" />,
|
|
}}
|
|
/>
|
|
<Tab.Screen
|
|
name="Profile"
|
|
component={ProfileScreen}
|
|
options={{
|
|
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="👤" />,
|
|
}}
|
|
/>
|
|
</Tab.Navigator>
|
|
</NavigationContainer>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
tabBar: {
|
|
backgroundColor: theme.colors.background,
|
|
borderTopWidth: 1,
|
|
borderTopColor: theme.colors.gray900,
|
|
height: theme.layout.tabBarHeight,
|
|
paddingBottom: 8,
|
|
paddingTop: 8,
|
|
},
|
|
tabLabel: {
|
|
fontSize: theme.typography.fontSize.xs,
|
|
fontWeight: theme.typography.fontWeight.medium,
|
|
},
|
|
tabIcon: {
|
|
width: 40,
|
|
height: 40,
|
|
borderRadius: theme.borderRadius.md,
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
backgroundColor: 'transparent',
|
|
},
|
|
tabIconActive: {
|
|
backgroundColor: theme.colors.backgroundTertiary,
|
|
...theme.shadows.glow,
|
|
},
|
|
tabEmoji: {
|
|
fontSize: 24,
|
|
},
|
|
});
|