feat: post-PR-159 UI cleanup — sidebar IA + account redesign #160

Merged
chihlasm merged 4 commits from feat/account-redesign-cleanup into main 2026-05-06 23:14:16 +00:00
2 changed files with 469 additions and 592 deletions
Showing only changes of commit 86120423da - Show all commits

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,7 @@ import { Link } from 'react-router-dom'
import { User as UserIcon, Loader2, AlertCircle, Check } from 'lucide-react'
import { authApi } from '@/api/auth'
import { useAuthStore } from '@/store/authStore'
import { useUserPreferencesStore } from '@/store/userPreferencesStore'
import { cn } from '@/lib/utils'
import { toast } from '@/lib/toast'
import type { UserUpdate } from '@/types'
@@ -16,6 +17,7 @@ const inputClass = cn(
export function ProfileSettingsPage() {
const user = useAuthStore((s) => s.user)
const fetchUser = useAuthStore((s) => s.fetchUser)
const { defaultExportFormat, setDefaultExportFormat } = useUserPreferencesStore()
const [name, setName] = useState(user?.name ?? '')
const [email, setEmail] = useState(user?.email ?? '')
@@ -120,6 +122,27 @@ export function ProfileSettingsPage() {
</select>
</div>
{/* Default export format — saved on change, not via Save Changes */}
<div>
<label htmlFor="profile-export-format" className="block text-sm font-medium text-foreground">
Default export format
</label>
<p className="text-xs text-muted-foreground">Pre-selected when exporting sessions.</p>
<select
id="profile-export-format"
value={defaultExportFormat}
onChange={(e) => {
setDefaultExportFormat(e.target.value as 'markdown' | 'text' | 'html')
toast.success('Preference saved')
}}
className={inputClass}
>
<option value="markdown">Markdown (.md)</option>
<option value="text">Plain text (.txt)</option>
<option value="html">HTML (.html)</option>
</select>
</div>
{error && (
<div className="flex items-center gap-2 text-sm text-rose-500">
<AlertCircle className="h-4 w-4 shrink-0" />