mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:01:08 +02:00
- Add nutriphi-database package with Drizzle ORM - meals and nutrition_goals schemas - PostgreSQL 16 Docker setup - Drizzle Kit configuration - Migrate backend from Supabase to Drizzle - Add DatabaseModule with connection pooling - Add StorageService for Hetzner Object Storage (S3-compatible) - Update MealsService with Drizzle queries - Add /api/meals/upload endpoint for image upload + analysis - Update web app to use backend for uploads - Remove Supabase Storage direct upload - Update uploadService to send images to backend - Remove Supabase dependencies from package.json - Simplify hooks.server.ts - Add Coolify deployment configuration - Dockerfile for production build - docker-compose.coolify.yml 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import React from 'react';
|
|
import { Platform } from 'react-native';
|
|
import { SymbolView, SymbolViewProps } from 'expo-symbols';
|
|
import FontAwesome from '@expo/vector-icons/FontAwesome';
|
|
import { useColorScheme } from 'nativewind';
|
|
|
|
interface SFSymbolProps {
|
|
name: string;
|
|
size?: number;
|
|
color?: string;
|
|
weight?: SymbolViewProps['weight'];
|
|
scale?: SymbolViewProps['scale'];
|
|
mode?: SymbolViewProps['mode'];
|
|
fallbackIcon?: React.ComponentProps<typeof FontAwesome>['name'];
|
|
style?: SymbolViewProps['style'];
|
|
}
|
|
|
|
export const SFSymbol: React.FC<SFSymbolProps> = ({
|
|
name,
|
|
size = 24,
|
|
color,
|
|
weight = 'regular',
|
|
scale = 'default',
|
|
mode = 'monochrome',
|
|
fallbackIcon,
|
|
style,
|
|
}) => {
|
|
const { colorScheme } = useColorScheme();
|
|
|
|
// Use dynamic color if no color specified
|
|
const dynamicColor = color || (colorScheme === 'dark' ? '#ffffff' : '#374151');
|
|
// Use SF Symbols on iOS, fallback to FontAwesome on Android
|
|
if (Platform.OS === 'ios') {
|
|
return (
|
|
<SymbolView
|
|
name={name}
|
|
size={size}
|
|
tintColor={dynamicColor}
|
|
weight={weight}
|
|
scale={scale}
|
|
mode={mode}
|
|
style={style}
|
|
/>
|
|
);
|
|
}
|
|
|
|
// Android fallback
|
|
if (fallbackIcon) {
|
|
return <FontAwesome name={fallbackIcon} size={size} color={dynamicColor} style={style} />;
|
|
}
|
|
|
|
// Default fallback if no fallbackIcon provided
|
|
return <FontAwesome name="question-circle" size={size} color={dynamicColor} style={style} />;
|
|
};
|