diff --git a/src/App.tsx b/src/App.tsx
index b2c715d..0920bce 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -5,6 +5,7 @@ import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { UserProvider } from "@/contexts/UserContext";
+import { ThemeProvider } from "@/contexts/ThemeContext";
import AppRoutes from "./routes";
const queryClient = new QueryClient({
@@ -20,15 +21,17 @@ const queryClient = new QueryClient({
const App = () => (
-
-
-
-
-
+
+
+
+
+
+
+
);
diff --git a/src/components/ThemeToggle.tsx b/src/components/ThemeToggle.tsx
new file mode 100644
index 0000000..8b17e5f
--- /dev/null
+++ b/src/components/ThemeToggle.tsx
@@ -0,0 +1,46 @@
+import React from 'react';
+import { useTheme as useNextTheme } from 'next-themes';
+import { Sun, Moon, Monitor } from 'lucide-react';
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu";
+import { Button } from "@/components/ui/button";
+import { Theme } from '@/contexts/ThemeContext';
+
+export const ThemeToggle = () => {
+ const { theme, setTheme } = useNextTheme();
+
+ return (
+
+
+
+
+
+ setTheme('light')}>
+
+ Light
+
+ setTheme('dark')}>
+
+ Dark
+
+ setTheme('system')}>
+
+ System
+
+
+
+ );
+};
diff --git a/src/components/TopBar.tsx b/src/components/TopBar.tsx
index f8a792b..5540e5a 100644
--- a/src/components/TopBar.tsx
+++ b/src/components/TopBar.tsx
@@ -14,6 +14,7 @@ import {
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { BookFormDialog } from './BookFormDialog';
+import { ThemeToggle } from './ThemeToggle';
const TopBar = () => {
const [searchQuery, setSearchQuery] = useState('');
@@ -46,7 +47,7 @@ const handleSearch = (e: React.FormEvent) => {
return (
<>
-
+
-
+
+
diff --git a/src/contexts/ThemeContext.tsx b/src/contexts/ThemeContext.tsx
new file mode 100644
index 0000000..ff8d25e
--- /dev/null
+++ b/src/contexts/ThemeContext.tsx
@@ -0,0 +1,26 @@
+import React, { createContext, useContext, useEffect, useState } from 'react';
+import { ThemeProvider as NextThemesProvider } from 'next-themes';
+
+// Define the theme options
+export type Theme = 'light' | 'dark' | 'system';
+
+// Create a context for theme-related functionality
+export const ThemeContext = createContext<{
+ theme: Theme;
+ setTheme: (theme: Theme) => void;
+}>({
+ theme: 'system',
+ setTheme: () => {},
+});
+
+// Custom hook to use the theme context
+export const useTheme = () => useContext(ThemeContext);
+
+// Theme provider component
+export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
+ return (
+
+ {children}
+
+ );
+};