# Memoro Theme-System Dieses Modul enthält ein komplettes Theme-System für die Memoro App mit: - Hell/Dunkel Modus (inkl. System-Einstellung) - Verschiedene Theme-Varianten (Lume, Nature, Stone, Ocean) - Theme Provider & Hooks - Fertige UI-Komponenten für Theme-Einstellungen ## Komponenten ### ThemeProvider Der zentrale Provider für das Theme-System. Er verwaltet den Theme-Zustand, speichert Einstellungen in AsyncStorage und stellt den `tw`-Helper bereit. ### ThemeSettings UI-Komponente zur Auswahl des Farbmodus und der Theme-Variante. Kann in jede Einstellungsseite eingebunden werden. ### useTheme Hook Hook zum Zugriff auf das aktuelle Theme und dessen Funktionen in Komponenten. ## Verwendung ### 1. Verwenden des useTheme Hooks ```tsx import { useTheme } from '~/features/theme/ThemeProvider'; export function MyComponent() { const { isDark, themeVariant, tw } = useTheme(); return ( Hello World ); } ``` ### 2. Verwenden des tw-Helpers Der `tw`-Helper transformiert generische Klassen in theme-spezifische Klassen: ```tsx // Generische Klasse -> Theme-spezifische Klasse "bg-primary" -> "bg-lume-primary" (bei Theme "lume") "text-default" -> "text-lume-text" (bei Theme "lume") "border-secondary" -> "border-lume-secondary" (bei Theme "lume") ``` Im Dark Mode werden zusätzlich die Light-Mode-Klassen durch Dark-Mode-Klassen ersetzt: ```tsx "bg-lume-primary" -> "bg-dark-lume-primary" (im Dark Mode) ``` ### 3. Unterstützte generische Klassen | Generische Klasse | Beschreibung | |-------------------|-------------| | `bg-primary` | Primärfarbe als Hintergrund | | `text-primary` | Primärfarbe als Textfarbe | | `border-primary` | Primärfarbe als Rahmenfarbe | | `bg-secondary` | Sekundärfarbe als Hintergrund | | `text-secondary` | Sekundärfarbe als Textfarbe | | `border-secondary`| Sekundärfarbe als Rahmenfarbe | | `bg-background` | Hintergrundfarbe | | `text-default` | Standard-Textfarbe | | `border-default` | Standard-Rahmenfarbe | ### 4. Atom-Komponenten Für eine konsistente Darstellung sollten die Atom-Komponenten verwendet werden: ```tsx import Text from '~/components/atoms/Text'; import Icon from '~/components/atoms/Icon'; // Text-Komponente mit Varianten Überschrift Normaler Text // Icon-Komponente mit Theme-Farben ``` ## Best Practices 1. **Konsistente Verwendung des tw-Helpers**: Verwende den `tw`-Helper für alle Klassen, die theme-abhängig sind. 2. **Atom-Komponenten nutzen**: Verwende die Atom-Komponenten (Text, Icon) für eine konsistente Darstellung. 3. **Direktes Styling für komplexe Fälle**: Bei komplexen Styling-Anforderungen kannst du auch direkte Styles verwenden: ```tsx const { isDark } = useTheme(); const backgroundColor = isDark ? '#121212' : '#FFFFFF'; {/* Inhalt */} ``` 4. **Theme-Version beachten**: Wenn eine Komponente auf Theme-Änderungen reagieren soll, verwende die `themeVersion` als Abhängigkeit: ```tsx const { themeVersion } = useTheme(); // Die Komponente wird neu gerendert, wenn sich das Theme ändert ```