diff --git a/app/settings/SettingsPageClient.tsx b/app/settings/SettingsPageClient.tsx new file mode 100644 index 0000000..901d138 --- /dev/null +++ b/app/settings/SettingsPageClient.tsx @@ -0,0 +1,150 @@ +'use client' + +import { useState } from 'react' +import ProfileSettings from '@/components/settings/ProfileSettings' +import { motion, AnimatePresence } from 'framer-motion' +import { + UserIcon, + ChevronDownIcon, +} from '@ciphera-net/ui' + +type ProfileSubTab = 'profile' | 'security' | 'preferences' + +function SectionHeader({ + expanded, + active, + onToggle, + icon: Icon, + label, + description, +}: { + expanded: boolean + active: boolean + onToggle: () => void + icon: React.ElementType + label: string + description?: string +}) { + return ( + + ) +} + +function SubItem({ + active, + onClick, + label, +}: { + active: boolean + onClick: () => void + label: string +}) { + return ( + + ) +} + +function ExpandableSubItems({ expanded, children }: { expanded: boolean; children: React.ReactNode }) { + return ( + + {expanded && ( + +
+ {children} +
+
+ )} +
+ ) +} + +export default function SettingsPageClient() { + const [activeSubTab, setActiveSubTab] = useState('profile') + const [expanded, setExpanded] = useState(true) + + return ( +
+
+

Settings

+

+ Manage your account settings and preferences. +

+
+ +
+ {/* Sidebar Navigation */} + + + {/* Content Area */} +
+ +
+
+
+ ) +} diff --git a/app/settings/page.tsx b/app/settings/page.tsx index f56e3d2..334828c 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -1,4 +1,4 @@ -import ProfileSettings from '@/components/settings/ProfileSettings' +import SettingsPageClient from './SettingsPageClient' export const metadata = { title: 'Settings - Pulse', @@ -8,7 +8,7 @@ export const metadata = { export default function SettingsPage() { return (
- +
) } diff --git a/components/settings/ProfileSettings.tsx b/components/settings/ProfileSettings.tsx index 56a91af..d98574b 100644 --- a/components/settings/ProfileSettings.tsx +++ b/components/settings/ProfileSettings.tsx @@ -8,7 +8,11 @@ import { deleteAccount, getUserSessions, revokeSession, updateUserPreferences, u import { setup2FA, verify2FA, disable2FA, regenerateRecoveryCodes } from '@/lib/api/2fa' import { registerPasskey, listPasskeys, deletePasskey } from '@/lib/api/webauthn' -export default function ProfileSettings() { +interface Props { + activeTab?: 'profile' | 'security' | 'preferences' +} + +export default function ProfileSettings({ activeTab }: Props = {}) { const { user, refresh, logout } = useAuth() if (!user) return null @@ -54,6 +58,8 @@ export default function ProfileSettings() { deriveAuthKey={deriveAuthKey} refreshUser={refresh} logout={logout} + activeTab={activeTab} + hideNav={activeTab !== undefined} /> ) } diff --git a/package.json b/package.json index 7594ec1..b96bcd0 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "@ciphera-net/ui": "^0.0.74", + "@ciphera-net/ui": "^0.0.75", "@ducanh2912/next-pwa": "^10.2.9", "@radix-ui/react-icons": "^1.3.0", "@simplewebauthn/browser": "^13.2.2",