diff --git a/src/app/ThemeProvider.tsx b/src/app/ThemeProvider.tsx new file mode 100644 index 0000000..7c1420b --- /dev/null +++ b/src/app/ThemeProvider.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { useState, useEffect, createContext, useContext } from "react"; + +const ThemeContext = createContext<{ + theme: "light" | "dark"; + toggle: () => void; +}>({ theme: "light", toggle: () => {} }); + +export function ThemeProvider({ children }: { children: React.ReactNode }) { + const [theme, setTheme] = useState<"light" | "dark">("light"); + + useEffect(() => { + const saved = localStorage.getItem("tia_theme") as "light" | "dark"; + if (saved) setTheme(saved); + }, []); + + const toggle = () => { + const next = theme === "light" ? "dark" : "light"; + setTheme(next); + localStorage.setItem("tia_theme", next); + }; + + return ( + +
{children}
+
+ ); +} + +export function useTheme() { + return useContext(ThemeContext); +} \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css index a2dc41e..c04ece7 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,10 +1,17 @@ @import "tailwindcss"; +@custom-variant dark (&:where(.dark, .dark *)); + :root { - --background: #ffffff; + --background: #fdf2f2; --foreground: #171717; } +.dark { + --background: #111827; + --foreground: #f9fafb; +} + @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); @@ -12,13 +19,6 @@ --font-mono: var(--font-geist-mono); } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - body { background: var(--background); color: var(--foreground); diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx new file mode 100644 index 0000000..b591fa4 --- /dev/null +++ b/src/app/settings/page.tsx @@ -0,0 +1,83 @@ +"use client"; + +import { useState, useEffect } from "react"; +import Link from "next/link"; +import { useRouter } from "next/navigation"; + +export default function SettingsPage() { + const router = useRouter(); + const [darkMode, setDarkMode] = useState(false); + + useEffect(() => { + const saved = localStorage.getItem("tia_theme"); + setDarkMode(saved === "dark"); + if (saved === "dark") { + document.documentElement.classList.add("dark"); + } + }, []); + + const toggleDarkMode = () => { + const next = !darkMode; + setDarkMode(next); + localStorage.setItem("tia_theme", next ? "dark" : "light"); + if (next) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + }; + + return ( +
+
+ +

Settings

+
+ +
+ {/* Dark Mode Toggle */} +
+
+
Dark Mode
+
Switch to dark theme
+
+ +
+ + {/* Other Settings */} + +
Profile
+
+ + + +
Notifications
+
+ + + +
Family Members
+
+ + +
+
App Version
+
Tia v1.0.0
+
+
+
+ ); +} \ No newline at end of file