Files
ProjectE/apps/web/lib/stores/use-theme-store.ts
T
mbatchelder 8f55626e03 refactor: migrate to monorepo structure with Docker, PocketBase, and e2e tests
- Reorganize into apps/, packages/, docs/, e2e/, pocketbase/ directories
- Add Dockerfiles for web, worker, and PocketBase services
- Add docker-compose.yml for local orchestration
- Add turbo.json for monorepo task management
- Add Playwright e2e test infrastructure
- Add PocketBase backend with migrations
- Remove Vite/Next.js/ESLint/PostCSS config files
- Update package.json with workspace dependencies
- Add .env.example and .dockerignore
2026-07-16 06:19:58 -04:00

42 lines
1.0 KiB
TypeScript

import { create } from 'zustand';
import { persist } from 'zustand/middleware';
type ThemeMode = 'light' | 'dark' | 'system';
type Density = 'compact' | 'comfortable' | 'spacious';
interface ThemeState {
mode: ThemeMode;
accent: string;
font: string;
density: Density;
reducedMotion: boolean;
// Actions
setMode: (mode: ThemeMode) => void;
setAccent: (color: string) => void;
setFont: (font: string) => void;
setDensity: (density: Density) => void;
setReducedMotion: (enabled: boolean) => void;
}
export const useThemeStore = create<ThemeState>()(
persist(
(set) => ({
mode: 'system',
accent: '#356bff',
font: 'geist',
density: 'comfortable',
reducedMotion: false,
setMode: (mode) => set({ mode }),
setAccent: (accent) => set({ accent }),
setFont: (font) => set({ font }),
setDensity: (density) => set({ density }),
setReducedMotion: (reducedMotion) => set({ reducedMotion }),
}),
{
name: 'project-e-theme',
}
)
);