import React, { createContext, useContext, useMemo, useState } from 'react'; import type { ThemeSeed, ThemeToken } from './types'; import { USAFSeed } from './constants'; import { createTailwindTheme, injectThemeVariables } from './styles'; import { generateTheme } from './generator'; interface ThemeContextValue { token: ThemeToken setTheme: (options: ThemeSeed) => void; toggleDarkMode: () => void; } const ThemeContext = createContext(null); export function ThemeProvider({ children, seed = USAFSeed, }: { children: React.ReactNode; seed?: ThemeSeed; }) { const [themeSeed, setThemeSeed] = useState(seed); const token = useMemo(() => { const result = generateTheme(themeSeed) console.log(createTailwindTheme(result)) injectThemeVariables(result) return result.token; }, [themeSeed]); const contextValue = useMemo( () => ({ token, setTheme: setThemeSeed, toggleDarkMode: () => setThemeSeed((prev) => ({ ...prev, isDark: !prev.isDark })), }), [token] ); return ( {children} ); } export function useTheme() { const context = useContext(ThemeContext); if (!context) { throw new Error('useTheme must be used within a ThemeProvider'); } return context; }