managarten/chat/apps/mobile/theme/ThemeProvider.tsx
Till-JS c638a7ffee feat(chat): integrate chat project into monorepo with full app structure
- Restructure chat as apps/mobile, apps/web, apps/landing, backend
- Add NestJS backend for secure Azure OpenAI API calls
- Remove exposed API key from mobile app (security fix)
- Add shared chat-types package
- Create SvelteKit web app scaffold
- Create Astro landing page scaffold
- Update pnpm workspace configuration
- Add project-level CLAUDE.md documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 13:48:24 +01:00

41 lines
1.2 KiB
TypeScript

import React, { createContext, useContext, useState, useEffect } from 'react';
import { useColorScheme } from 'react-native';
import { lightTheme, darkTheme } from './index';
import { Theme } from '@react-navigation/native';
type ThemeContextType = {
isDarkMode: boolean;
toggleTheme: () => void;
theme: Theme;
};
const ThemeContext = createContext<ThemeContextType>({
isDarkMode: false,
toggleTheme: () => {},
theme: lightTheme,
});
export const useAppTheme = () => useContext(ThemeContext);
export function ThemeProvider({ children }: { children: React.ReactNode }) {
const colorScheme = useColorScheme();
const [isDarkMode, setIsDarkMode] = useState(colorScheme === 'dark');
// Aktualisiere den Theme-Modus, wenn sich das System-Theme ändert
useEffect(() => {
setIsDarkMode(colorScheme === 'dark');
}, [colorScheme]);
const toggleTheme = () => {
setIsDarkMode((prev) => !prev);
};
const theme = isDarkMode ? darkTheme : lightTheme;
return (
<ThemeContext.Provider value={{ isDarkMode, toggleTheme, theme }}>
{/* Wir verwenden die NativeWind-Klassen direkt in den Komponenten */}
{children}
</ThemeContext.Provider>
);
}