managarten/apps/traces/apps/mobile/components/Button.tsx
Till JS bd1178edf8 feat(traces): integrate traces app into monorepo with NestJS backend and AI city guides
Restructure standalone traces app into monorepo pattern with mobile + backend + shared types.
Add NestJS backend with Drizzle ORM schema for locations, cities, places, POIs, and AI guides.
Add mobile sync layer, cities tab, and guide generation UI. Fix pre-existing type errors across
mobile codebase, matrix-mana-bot (sendDirectMessage), llm-playground, and all web auth stores
(signUp call signature).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:12:42 +01:00

39 lines
1 KiB
TypeScript

import { forwardRef } from 'react';
import { Text, TouchableOpacity, TouchableOpacityProps, View } from 'react-native';
import { useTheme } from '../utils/themeContext';
type ButtonProps = {
title: string;
variant?: 'primary' | 'secondary';
} & TouchableOpacityProps;
export const Button = forwardRef<View, ButtonProps>(
({ title, variant = 'primary', ...touchableProps }, ref) => {
const { isDarkMode } = useTheme();
// Dynamic button styles based on variant and theme
const getButtonStyle = () => {
if (variant === 'primary') {
return 'bg-primary';
} else {
return 'bg-secondary';
}
};
return (
<TouchableOpacity
ref={ref}
{...touchableProps}
className={`${styles.button} ${getButtonStyle()} ${isDarkMode ? 'shadow-lg shadow-black/50' : 'shadow-md'} ${touchableProps.className}`}
>
<Text className={styles.buttonText}>{title}</Text>
</TouchableOpacity>
);
}
);
const styles = {
button: 'items-center rounded-[28px] p-4',
buttonText: 'text-white text-lg font-semibold text-center',
};