diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx index 6e4aeb9..f17d471 100644 --- a/src/AppRouter.tsx +++ b/src/AppRouter.tsx @@ -9,6 +9,7 @@ import FollowingPage from "./pages/FollowingPage"; import Nip05ProfilePage from "./pages/Nip05ProfilePage"; import ArticleByDTagPage from "./pages/ArticleByDTagPage"; import { NIP19Page } from "./pages/NIP19Page"; +import SettingsPage from "./pages/SettingsPage"; import NotFound from "./pages/NotFound"; import HomePage from "./pages/HomePage"; @@ -24,6 +25,7 @@ export function AppRouter() { } /> } /> } /> + } /> {/* NIP-05 profile route (e.g., /p/alice@example.com) */} } /> {/* Article by d-tag route (e.g., /article/my-article-slug) */} diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 9120bdf..90c2edf 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -2,7 +2,7 @@ import { Link } from 'react-router-dom'; import { useCurrentUser } from '@/hooks/useCurrentUser'; import { LoginArea } from '@/components/auth/LoginArea'; import { Button } from '@/components/ui/button'; -import { PenSquare, Bookmark, Users } from 'lucide-react'; +import { PenSquare, Bookmark, Users, Settings } from 'lucide-react'; import { ThemeToggle } from '@/components/ThemeToggle'; export function Header() { @@ -46,12 +46,22 @@ export function Header() { {/* Desktop Actions */}
+
{/* Mobile: show LoginArea in header (bottom nav is still used for nav) */} -
+
+
diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx new file mode 100644 index 0000000..51df6d5 --- /dev/null +++ b/src/pages/SettingsPage.tsx @@ -0,0 +1,82 @@ +import { Settings, Palette, Wifi } from 'lucide-react'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Label } from '@/components/ui/label'; +import { Switch } from '@/components/ui/switch'; +import { RelayListManager } from '@/components/RelayListManager'; +import { useTheme } from '@/hooks/useTheme'; + +export function SettingsPage() { + const { theme, setTheme } = useTheme(); + + const isDarkMode = theme === 'dark'; + + const handleThemeToggle = () => { + setTheme(isDarkMode ? 'light' : 'dark'); + }; + + return ( +
+ {/* Page Header */} +
+
+ +

Settings

+
+

+ Manage your preferences and relay connections +

+
+ + {/* Settings Sections */} +
+ {/* Appearance Settings */} + + +
+ + Appearance +
+ + Customize how the application looks + +
+ +
+
+ +

+ Switch between light and dark themes +

+
+ +
+
+
+ + {/* Relay Settings */} + + +
+ + Relays +
+ + Manage your Nostr relay connections. Read relays are used to fetch content, while write relays receive your published events. + +
+ + + +
+
+
+ ); +} + +export default SettingsPage;