- Extract theme constants (THEMES, THEME_CLASSES, DARK_SURFACES) into a new framework-free lib/themes.ts so server and client code share one source of truth; re-export from theme-provider for backward compatibility. - Add nullable `theme` column to Project (Prisma migration + schema), plus ProjectThemeSchema validation and a setProjectTheme server action. - Introduce a ThemeScope context in the provider: a subtree can temporarily override the global preference via useThemeScope().setScope(name); the scoped theme wins for resolvedTheme/DOM while active, then lifts on cleanup. - Render an inline no-FOUC script (themeSwitchScript) on project pages that applies the theme class before first paint and leaves a data-project-theme marker the provider reads at hydration. - Add ProjectThemeScope component that sets/clears the scope from live ProjectsContext state, so picking a new theme updates instantly without waiting for the server re-render. - Add ProjectThemePicker dropdown (Default + light/dark options) rendered beside the project title in the kanban board header. - Wire optimistic setProjectTheme into ProjectsContext with rollback and error toast on failure. - Update use-dark-theme hooks to read resolvedTheme from context instead of resolving locally, so they reflect scoped themes correctly. |
||
|---|---|---|
| .. | ||
| actions | ||
| ai | ||
| validation | ||
| access.ts | ||
| ai-settings.ts | ||
| auth-errors.ts | ||
| auth-helpers.ts | ||
| board.ts | ||
| colors.ts | ||
| dates.ts | ||
| db.ts | ||
| format.ts | ||
| rrule-utils.ts | ||
| scheduled-todos.ts | ||
| settings.ts | ||
| themes.ts | ||
| time-of-day.ts | ||
| utils.ts | ||