/** * ThemeProvider - Universal theme management * * Re-exports next-themes ThemeProvider with sensible defaults. * Supports light, dark, and system themes with localStorage persistence. * * Framework-agnostic: works in any React app (Electron, Vite, Next.js). * * @example * ```tsx * import { ThemeProvider } from '@djangocfg/ui-core/theme'; * * * {children} * * ``` */ 'use client'; import { ThemeProvider as NextThemesProvider, useTheme as useNextTheme } from 'next-themes'; import type { ThemeProviderProps as NextThemesProviderProps } from 'next-themes'; // Re-export types export type Theme = 'light' | 'dark' | 'system'; export type ThemeProviderProps = NextThemesProviderProps; /** * ThemeProvider wraps next-themes with sensible defaults */ export function ThemeProvider({ children, attribute = 'class', defaultTheme = 'system', enableSystem = true, disableTransitionOnChange = true, ...props }: ThemeProviderProps) { return ( {children} ); } /** * Hook to access theme context * Returns theme, setTheme, resolvedTheme, systemTheme, and themes */ export function useThemeContext() { const { theme, setTheme, resolvedTheme, systemTheme, themes } = useNextTheme(); const toggleTheme = () => { // Toggle between light and dark (ignore system) const currentResolved = resolvedTheme || 'light'; setTheme(currentResolved === 'light' ? 'dark' : 'light'); }; return { theme: theme as Theme | undefined, setTheme, resolvedTheme: resolvedTheme as 'light' | 'dark' | undefined, systemTheme: systemTheme as 'light' | 'dark' | undefined, themes, toggleTheme, }; }