feat: add theme system with light/dark mode support
- Add ThemeStore (Zustand) for reactive theme switching - Add Themes.tsx with THEMES object (defaultLight, defaultDark) - Add Settings screen with theme switcher and logout button - Add BaseButton component for reusable themed buttons - Migrate all components from static currentTheme to useThemeStore() - Add shadowColor to theme (iOS only, Android uses elevation) - All text elements now use theme colors (textPrimary, textSecondary, etc.) - Update tab navigation to include Settings tab - Move logout from Header to Settings screen
This commit is contained in:
39
apps/client/src/components/BaseButton.tsx
Normal file
39
apps/client/src/components/BaseButton.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
import { Pressable, Text } from "react-native";
|
||||
import { useThemeStore } from "../stores/ThemeStore";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type BaseButtonProps = {
|
||||
children?: ReactNode;
|
||||
onPress: () => void;
|
||||
solid?: boolean;
|
||||
};
|
||||
|
||||
const BaseButton = ({children, onPress, solid = false}: BaseButtonProps) => {
|
||||
const { theme } = useThemeStore();
|
||||
return (
|
||||
<Pressable
|
||||
className="w-11/12 rounded-lg p-4 mb-4 border-4"
|
||||
onPress={onPress}
|
||||
style={{
|
||||
borderColor: theme.borderPrimary,
|
||||
backgroundColor: solid
|
||||
? theme.chatBot
|
||||
: theme.primeBg,
|
||||
shadowColor: theme.shadowColor,
|
||||
shadowOffset: { width: 0, height: 2 },
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
elevation: 5,
|
||||
}}
|
||||
>
|
||||
<Text
|
||||
className="text-center font-semibold text-lg"
|
||||
style={{ color: theme.buttonText }}
|
||||
>
|
||||
{children}
|
||||
</Text>
|
||||
</Pressable>
|
||||
);
|
||||
};
|
||||
|
||||
export default BaseButton;
|
||||
Reference in New Issue
Block a user