1+ import React , { useState , useEffect } from 'react' ;
2+ import { Routes , Route , useNavigate , useLocation } from 'react-router-dom' ;
3+ import { LanguageProvider } from './i18n/LanguageContext' ;
4+ import Header from './components/Header' ;
5+ import Hero from './components/HeroReleased' ;
6+ import Features from './components/Features' ;
7+ import Community from './components/Community' ;
8+ import DownloadSection from './components/Download' ;
9+ import Funding from './components/Funding' ;
10+ import Blog from './components/Blog' ;
11+ import DatabaseHome from './components/Database/DatabaseHome' ;
12+ import Dependencies from './components/Database/Dependencies' ;
13+ import Components from './components/Database/Components' ;
14+ import AppStore from './components/AppStore/AppStore' ;
15+ import AppDetails from './components/AppStore/AppDetails' ;
16+ import Docs from './components/Docs/Docs' ;
17+ import Sponsors from './components/Sponsors' ;
18+ import Gaming from './components/Gaming' ;
19+ import Next from './components/Next' ;
20+ import Runners from './components/Runners' ;
21+ import Eagle from './components/Eagle' ;
22+ import EagleBanner from './components/EagleBanner' ;
23+ import WineBridge from './components/WineBridge' ;
24+ import Footer from './components/Footer' ;
25+ import GrantBanner from './components/GrantBanner' ;
26+
27+ const App = ( ) => {
28+ const navigate = useNavigate ( ) ;
29+ const location = useLocation ( ) ;
30+ const [ showDownloadModal , setShowDownloadModal ] = useState ( false ) ;
31+ const [ theme , setTheme ] = useState ( 'system' ) ;
32+
33+ const getCurrentView = ( ) => {
34+ const path = location . pathname ;
35+ if ( path . startsWith ( '/funding' ) ) return 'funding' ;
36+ if ( path . startsWith ( '/blog' ) ) return 'blog' ;
37+ if ( path . startsWith ( '/gaming' ) ) return 'gaming' ;
38+ return 'home' ;
39+ } ;
40+
41+ const currentView = getCurrentView ( ) ;
42+
43+ useEffect ( ( ) => {
44+ const root = window . document . documentElement ;
45+ root . classList . remove ( 'light' , 'dark' ) ;
46+
47+ if ( theme === 'system' ) {
48+ const systemTheme = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ? 'dark' : 'light' ;
49+ root . classList . add ( systemTheme ) ;
50+ } else {
51+ root . classList . add ( theme ) ;
52+ }
53+ } , [ theme ] ) ;
54+
55+ const handleOpenDownload = ( ) => {
56+ setShowDownloadModal ( true ) ;
57+ } ;
58+
59+ const handleOpenPost = ( filename ) => {
60+ navigate ( `/blog/${ filename } ` ) ;
61+ window . scrollTo ( 0 , 0 ) ;
62+ } ;
63+
64+ const handleNavigate = ( view ) => {
65+ if ( view === 'home' ) navigate ( '/' ) ;
66+ else navigate ( `/${ view } ` ) ;
67+ } ;
68+
69+ const isGaming = currentView === 'gaming' ;
70+
71+ return (
72+ < LanguageProvider >
73+ < div className = "min-h-screen bg-zinc-50 dark:bg-black text-zinc-900 dark:text-zinc-100 font-sans selection:bg-blue-500 selection:text-white transition-colors duration-300" >
74+ < Header
75+ currentView = { currentView }
76+ onNavigate = { handleNavigate }
77+ onDownload = { handleOpenDownload }
78+ theme = { theme }
79+ onThemeChange = { setTheme }
80+ forceDark = { isGaming }
81+ />
82+ < main className = "relative" >
83+ < div className = "fixed inset-0 bg-grid z-0 pointer-events-none opacity-[0.5] dark:opacity-[0.3]" > </ div >
84+
85+ < div className = "fixed top-0 left-0 w-full h-[500px] bg-gradient-to-b from-zinc-900/5 to-transparent pointer-events-none z-0" />
86+
87+ < div className = "relative z-10" >
88+ < Routes >
89+ < Route path = "/" element = {
90+ < >
91+ < Hero onDownload = { handleOpenDownload } onOpenPost = { handleOpenPost } />
92+ < GrantBanner onOpenPost = { handleOpenPost } />
93+ < Features onNavigate = { handleNavigate } />
94+ < Community />
95+ < Sponsors onNavigate = { handleNavigate } />
96+ < EagleBanner />
97+ </ >
98+ } />
99+ < Route path = "/funding" element = { < Funding /> } />
100+ < Route path = "/blog" element = { < Blog /> } />
101+ < Route path = "/blog/:slug" element = { < Blog /> } />
102+ < Route path = "/database" element = { < DatabaseHome /> } />
103+ < Route path = "/runners" element = { < Runners /> } />
104+ < Route path = "/next" element = { < Next /> } />
105+ < Route path = "/eagle" element = { < Eagle /> } />
106+ < Route path = "/winebridge" element = { < WineBridge onDownload = { handleOpenDownload } /> } />
107+ < Route path = "/database/dependencies" element = { < Dependencies /> } />
108+ < Route path = "/database/components" element = { < Components /> } />
109+ < Route path = "/appstore" element = { < AppStore /> } />
110+ < Route path = "/app" element = { < AppDetails /> } />
111+ < Route path = "/docs/*" element = { < Docs /> } />
112+ < Route path = "/gaming" element = { < Gaming onNavigate = { handleNavigate } /> } />
113+ </ Routes >
114+ </ div >
115+ < DownloadSection showModal = { showDownloadModal } setShowModal = { setShowDownloadModal } />
116+ </ main >
117+ < Footer />
118+ </ div >
119+ </ LanguageProvider >
120+ ) ;
121+ } ;
122+
123+ export default App ;
0 commit comments