- 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
30 lines
814 B
TypeScript
30 lines
814 B
TypeScript
import { View, ViewStyle } from "react-native";
|
|
import { useThemeStore } from "../stores/ThemeStore";
|
|
|
|
type BubbleSide = "left" | "right";
|
|
|
|
type ChatBubbleProps = {
|
|
side: BubbleSide;
|
|
children: React.ReactNode;
|
|
className?: string;
|
|
style?: ViewStyle;
|
|
};
|
|
|
|
export function ChatBubble({ side, children, className = "", style }: ChatBubbleProps) {
|
|
const { theme } = useThemeStore();
|
|
const borderColor = side === "left" ? theme.chatBot : theme.primeFg;
|
|
const sideClass =
|
|
side === "left"
|
|
? "self-start ml-2 rounded-bl-sm"
|
|
: "self-end mr-2 rounded-br-sm";
|
|
|
|
return (
|
|
<View
|
|
className={`border-2 border-solid rounded-xl my-2 ${sideClass} ${className}`}
|
|
style={[{ borderColor, elevation: 8, backgroundColor: theme.secondaryBg }, style]}
|
|
>
|
|
{children}
|
|
</View>
|
|
);
|
|
}
|