- 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. |
||
|---|---|---|
| .. | ||
| add-category-lane.tsx | ||
| add-group-popover.tsx | ||
| board-context.tsx | ||
| board-view-provider.tsx | ||
| category-lane.tsx | ||
| color-swatch-picker.tsx | ||
| edit-group-dialog.tsx | ||
| empty-state.tsx | ||
| group-ai-dialog.tsx | ||
| group-card-overlay.tsx | ||
| group-card.tsx | ||
| hand-drawn-check.tsx | ||
| kanban-board.tsx | ||
| mouse-follow-tooltip.tsx | ||
| notes-dialog.tsx | ||
| status-update-dialog.tsx | ||
| summary-button.tsx | ||
| todo-ai-dialog.tsx | ||
| todo-checkbox.tsx | ||
| todo-create-dialog.tsx | ||
| todo-create-popover.tsx | ||
| todo-edit-dialog.tsx | ||
| todo-progress-pie.tsx | ||
| view-switcher.tsx | ||