App.jsx 5.17 KB
Newer Older
fisherdaddy's avatar
fisherdaddy committed
1
import React, { Suspense, lazy } from 'react';
fisherdaddy's avatar
fisherdaddy committed
2 3 4
import { Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import Header from './components/Header';
fisherdaddy's avatar
fisherdaddy committed
5
import Footer from './components/Footer';
fisherdaddy's avatar
fisherdaddy committed
6
import NotFound from './pages/NotFound';
fisherdaddy's avatar
fisherdaddy committed
7
import Login from './pages/Login';
fisherdaddy's avatar
fisherdaddy committed
8

fisherdaddy's avatar
fisherdaddy committed
9 10 11 12
const DevTools = lazy(() => import('./pages/DevTools'));
const ImageTools = lazy(() => import('./pages/ImageTools'));
const Blog = lazy(() => import('./pages/Blog'));
const AIProduct = lazy(() => import('./pages/AIProduct'));
13
const Translator = lazy(() => import('./pages/Translator'));
14
const DocumentTranslator = lazy(() => import('./pages/DocumentTranslator'));
fisherdaddy's avatar
fisherdaddy committed
15

fisherdaddy's avatar
fisherdaddy committed
16
const JsonFormatter = lazy(() => import('./components/JsonFormatter'));
17
const MarkdownToImage = lazy(() => import('./components/MarkdownToImage'));
fisherdaddy's avatar
fisherdaddy committed
18
const UrlEnDecode = lazy(() => import('./components/UrlEnDecode'));
fisherdaddy's avatar
fisherdaddy committed
19
const About = lazy(() => import('./pages/About'));
fisherdaddy's avatar
fisherdaddy committed
20
const OpenAITimeline = lazy(() => import('./components/OpenAITimeline'));
21
const PricingCharts  = lazy(() => import('./components/PricingCharts'));
22
const HandwriteGen  = lazy(() => import('./components/HandwriteGen'));
23
const ImageBase64Converter  = lazy(() => import('./components/ImageBase64Converter'));
24
const QuoteCard = lazy(() => import('./components/QuoteCard'));
25
const LatexToImage = lazy(() => import('./components/LatexToImage'));
fisherdaddy's avatar
fisherdaddy committed
26
const TextDiff = lazy(() => import('./components/TextDiff'));
27
const SubtitleGenerator = lazy(() => import('./components/SubtitleGenerator'));
28
const ImageCompressor = lazy(() => import('./components/ImageCompressor'));
29
const ImageWatermark = lazy(() => import('./components/ImageWatermark'));
30
const TextBehindImage = lazy(() => import('./components/TextBehindImage'));
31
const BackgroundRemover = lazy(() => import('./components/BackgroundRemover'));
32
const IDPhotoMaker = lazy(() => import('./components/IDPhotoMaker'));
33
const AnthropicTimeline = lazy(() => import('./components/AnthropicTimeline'));
34
const DrugsList = lazy(() => import('./components/DrugsList'));
35
const DeepSeekTimeline = lazy(() => import('./components/DeepSeekTimeline'));
36
const WechatFormatter = lazy(() => import('./components/WechatFormatter'));
37
const ImageAnnotator = lazy(() => import('./components/ImageAnnotator'));
38
const AITimelinePage = lazy(() => import('./pages/AITimelinePage'));
39
const PerpetualCalendar = lazy(() => import('./components/PerpetualCalendar'));
40

fisherdaddy's avatar
fisherdaddy committed
41
function App() {
fisherdaddy's avatar
fisherdaddy committed
42
  return (
fisherdaddy's avatar
fisherdaddy committed
43
    <div className="app-container min-h-screen flex flex-col">
fisherdaddy's avatar
fisherdaddy committed
44
      <Header />
fisherdaddy's avatar
fisherdaddy committed
45
      <div className="flex-grow">
46 47 48 49 50 51 52
        <div className="content-wrapper">
          <main>
            <Suspense fallback={<div>Loading...</div>}>
              <Routes>
                <Route path="/" element={<Home />} />
                <Route path="/login" element={<Login />} />
                <Route path="/about" element={<About />} />
fisherdaddy's avatar
fisherdaddy committed
53

54 55 56 57
                <Route path="/dev-tools" element={<DevTools />} />
                <Route path="/image-tools" element={<ImageTools />} />
                <Route path="/ai-products" element={<AIProduct />} />
                <Route path="/blog" element={<Blog />} />
58
                <Route path="/translator" element={<Translator />} />
59
                <Route path="/document-translator" element={<DocumentTranslator />} />
fisherdaddy's avatar
fisherdaddy committed
60

61 62 63 64
                <Route path="/markdown-to-image" element={<MarkdownToImage />} />
                <Route path="/json-formatter" element={<JsonFormatter />} />
                <Route path="/url-encode-and-decode" element={<UrlEnDecode />} />
                <Route path="/openai-timeline" element={<OpenAITimeline />} />
65
                <Route path="/anthropic-timeline" element={<AnthropicTimeline />} />
66
                <Route path="/llm-model-price" element={<PricingCharts />} />
67
                <Route path="/drugs-list" element={<DrugsList />} />
68 69 70 71 72 73 74 75 76 77
                <Route path="/handwriting" element={<HandwriteGen />} />
                <Route path="/image-base64" element={<ImageBase64Converter />} />
                <Route path="/quote-card" element={<QuoteCard />} />
                <Route path="/latex-to-image" element={<LatexToImage />} />
                <Route path="/text-diff" element={<TextDiff />} />
                <Route path="/subtitle-to-image" element={<SubtitleGenerator />} />
                <Route path="/image-compressor" element={<ImageCompressor />} />
                <Route path="/image-watermark" element={<ImageWatermark />} />
                <Route path="/text-behind-image" element={<TextBehindImage />} /> 
                <Route path="/background-remover" element={<BackgroundRemover />} />
78
                <Route path="/id-photo-maker" element={<IDPhotoMaker />} />
79
                <Route path="/deepseek-timeline" element={<DeepSeekTimeline />} />
80
                <Route path="/wechat-formatter" element={<WechatFormatter />} />
81
                <Route path="/image-annotator" element={<ImageAnnotator />} />
82
                <Route path="/ai-timeline" element={<AITimelinePage />} />
83
                <Route path="/perpetual-calendar" element={<PerpetualCalendar />} />
84 85 86
                <Route path="*" element={<NotFound />} />
              </Routes>
            </Suspense>
fisherdaddy's avatar
fisherdaddy committed
87
          </main>
88
        </div>
fisherdaddy's avatar
fisherdaddy committed
89
      </div>
fisherdaddy's avatar
fisherdaddy committed
90
      <Footer />
fisherdaddy's avatar
fisherdaddy committed
91 92 93 94 95
    </div>
  );
}

export default App;