This repository was archived by the owner on Nov 17, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
75 lines (66 loc) · 2.2 KB
/
App.tsx
File metadata and controls
75 lines (66 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import React, { useState, useEffect } from 'react';
import Header from './components/Header';
import Modal from './components/Modal';
import Home from './pages/Home';
import About from './pages/About';
import type { Tool } from './types';
type Page = 'home' | 'about';
const App: React.FC = () => {
const [activeTool, setActiveTool] = useState<Tool | null>(null);
const [currentPage, setCurrentPage] = useState<Page>('home');
const [isDarkMode, setIsDarkMode] = useState(() => {
if (typeof window !== 'undefined' && window.localStorage) {
const storedTheme = localStorage.getItem('theme');
if (storedTheme) {
return storedTheme === 'dark';
}
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
}
return false;
});
useEffect(() => {
if (isDarkMode) {
document.documentElement.classList.add('dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.classList.remove('dark');
localStorage.setItem('theme', 'light');
}
}, [isDarkMode]);
const toggleDarkMode = () => {
setIsDarkMode(!isDarkMode);
};
const openToolModal = (tool: Tool) => {
setActiveTool(tool);
};
const closeToolModal = () => {
setActiveTool(null);
};
return (
<div className="min-h-screen bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-200 font-sans flex flex-col">
<Header
currentPage={currentPage}
onNavigate={setCurrentPage}
isDarkMode={isDarkMode}
toggleDarkMode={toggleDarkMode}
/>
<main className="flex-grow container mx-auto px-4 sm:px-6 lg:px-8 py-12">
{currentPage === 'home' && <Home onToolClick={openToolModal} />}
{currentPage === 'about' && <About />}
</main>
<footer className="text-center py-8 text-gray-500 dark:text-gray-400">
<p>© {new Date().getFullYear()} All-in-One Tools Hub. All rights reserved.</p>
</footer>
{activeTool && (
<Modal
isOpen={!!activeTool}
onClose={closeToolModal}
title={activeTool.name}
>
<activeTool.component />
</Modal>
)}
</div>
);
};
export default App;