2026-03-30 20:20:21 +06:00
|
|
|
import { Toaster as Sonner } from "@/components/ui/sonner";
|
2026-04-19 21:58:53 +06:00
|
|
|
import { Toaster } from "@/components/ui/toaster";
|
2026-03-30 20:20:21 +06:00
|
|
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
|
|
|
import { ThemeProvider } from "@/contexts/ThemeContext";
|
|
|
|
|
import { AnimatePresence } from "framer-motion";
|
2026-04-19 21:58:53 +06:00
|
|
|
import { BrowserRouter, Route, Routes, useLocation } from "react-router-dom";
|
|
|
|
|
import Footer from "./components/Footer";
|
|
|
|
|
import Navbar from "./components/Navbar";
|
2026-03-30 20:20:21 +06:00
|
|
|
import Blog from "./pages/Blog";
|
|
|
|
|
import BlogArticle from "./pages/BlogArticle";
|
2026-04-19 21:58:53 +06:00
|
|
|
import Index from "./pages/Index";
|
2026-03-30 20:20:21 +06:00
|
|
|
import NotFound from "./pages/NotFound";
|
2026-04-19 21:58:53 +06:00
|
|
|
import ProjectDetails from "./pages/ProjectDetails";
|
|
|
|
|
import Projects from "./pages/Projects";
|
2026-04-04 22:49:48 +06:00
|
|
|
import { QueryProvider } from "./provider/QueryProvider";
|
2026-04-19 21:58:53 +06:00
|
|
|
import { PrivacyPolicy } from "./pages/PrivacyPolicy";
|
2026-03-30 20:20:21 +06:00
|
|
|
|
|
|
|
|
function AnimatedRoutes() {
|
|
|
|
|
const location = useLocation();
|
2026-04-04 22:49:48 +06:00
|
|
|
|
2026-03-30 20:20:21 +06:00
|
|
|
return (
|
|
|
|
|
<AnimatePresence mode="wait">
|
|
|
|
|
<Routes location={location} key={location.pathname}>
|
|
|
|
|
<Route path="/" element={<Index />} />
|
|
|
|
|
<Route path="/projects" element={<Projects />} />
|
|
|
|
|
<Route path="/projects/:slug" element={<ProjectDetails />} />
|
|
|
|
|
<Route path="/blog" element={<Blog />} />
|
2026-04-06 01:05:05 +06:00
|
|
|
<Route path="/blog/:id" element={<BlogArticle />} />
|
2026-03-30 20:20:21 +06:00
|
|
|
{/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
|
|
|
|
|
<Route path="*" element={<NotFound />} />
|
2026-04-19 21:58:53 +06:00
|
|
|
<Route path="/privacy" element={<PrivacyPolicy />} />
|
2026-03-30 20:20:21 +06:00
|
|
|
</Routes>
|
|
|
|
|
</AnimatePresence>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const App = () => (
|
2026-04-04 22:49:48 +06:00
|
|
|
<QueryProvider>
|
2026-03-30 20:20:21 +06:00
|
|
|
<ThemeProvider>
|
|
|
|
|
<TooltipProvider>
|
|
|
|
|
<Toaster />
|
|
|
|
|
<Sonner />
|
|
|
|
|
<BrowserRouter>
|
2026-04-19 21:58:53 +06:00
|
|
|
<Navbar />
|
2026-03-30 20:20:21 +06:00
|
|
|
<AnimatedRoutes />
|
2026-04-19 21:58:53 +06:00
|
|
|
<Footer />
|
2026-03-30 20:20:21 +06:00
|
|
|
</BrowserRouter>
|
|
|
|
|
</TooltipProvider>
|
|
|
|
|
</ThemeProvider>
|
2026-04-04 22:49:48 +06:00
|
|
|
</QueryProvider>
|
2026-03-30 20:20:21 +06:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
export default App;
|