diff --git a/apps/app/src/components/layout/sidebar.tsx b/apps/app/src/components/layout/sidebar.tsx index ff28f4e8..222e54e2 100644 --- a/apps/app/src/components/layout/sidebar.tsx +++ b/apps/app/src/components/layout/sidebar.tsx @@ -210,6 +210,7 @@ export function Sidebar() { cycleNextProject, clearProjectHistory, setProjectTheme, + setTheme, theme: globalTheme, } = useAppStore(); @@ -430,12 +431,16 @@ export function Sidebar() { ); useAppStore.setState({ projects: updatedProjects }); } else { - // Create new project + // Create new project - check for trashed project with same path first (preserves theme if deleted/recreated) + // Then fall back to current effective theme, then global theme + const trashedProject = trashedProjects.find((p) => p.path === path); + const effectiveTheme = trashedProject?.theme || currentProject?.theme || globalTheme; project = { id: `project-${Date.now()}`, name, path, lastOpened: new Date().toISOString(), + theme: effectiveTheme, }; addProject(project); } @@ -474,7 +479,7 @@ export function Sidebar() { }); } } - }, [projects, addProject, setCurrentProject]); + }, [projects, trashedProjects, addProject, setCurrentProject, currentProject, globalTheme]); const handleRestoreProject = useCallback( (projectId: string) => { @@ -963,6 +968,10 @@ export function Sidebar() { value={currentProject.theme || ""} onValueChange={(value) => { if (currentProject) { + // If selecting an actual theme (not "Use Global"), also update global + if (value !== "") { + setTheme(value as any); + } setProjectTheme( currentProject.id, value === "" ? null : (value as any) diff --git a/apps/app/src/components/views/settings-view.tsx b/apps/app/src/components/views/settings-view.tsx index 810df708..9b085f2a 100644 --- a/apps/app/src/components/views/settings-view.tsx +++ b/apps/app/src/components/views/settings-view.tsx @@ -82,12 +82,14 @@ export function SettingsView() { // Compute the effective theme for the current project const effectiveTheme = (settingsProject?.theme || theme) as Theme; - // Handler to set theme - saves to project if one is selected, otherwise to global + // Handler to set theme - always updates global theme (user's preference), + // and also sets per-project theme if a project is selected const handleSetTheme = (newTheme: typeof theme) => { + // Always update global theme so user's preference persists across all projects + setTheme(newTheme); + // Also set per-project theme if a project is selected if (currentProject) { setProjectTheme(currentProject.id, newTheme); - } else { - setTheme(newTheme); } }; diff --git a/apps/app/src/store/app-store.ts b/apps/app/src/store/app-store.ts index ca8a6336..81d50617 100644 --- a/apps/app/src/store/app-store.ts +++ b/apps/app/src/store/app-store.ts @@ -636,6 +636,7 @@ export const useAppStore = create()( name: trashed.name, path: trashed.path, lastOpened: new Date().toISOString(), + theme: trashed.theme, // Preserve theme from trashed project }; set({