import { Text } from '@/aesthetics/Text'; import { font, radius, spacing, useColors } from '@/aesthetics/styles'; import { useStrings } from '@/common/hooks/useStrings'; import React from 'react'; import { ActivityIndicator, Linking, Pressable, StyleSheet, View } from 'react-native'; export function Section({ title, subtitle, children, action, }: { title: string; subtitle?: string; children: React.ReactNode; action?: React.ReactNode; }) { const c = useColors(); return ( {title} {subtitle && ( {subtitle} )} {action} {children} ); } export function IngredientChip({ name }: { name: string }) { const c = useColors(); const strings = useStrings(); const onPress = () => { const query = strings.seeLog.castle.ingredientQuery(name); Linking.openURL(`https://chatgpt.com/?q=${encodeURIComponent(query)}`); }; return ( [ styles.chip, { backgroundColor: c.sageSubtle, borderColor: c.sageMuted }, pressed && { opacity: 0.7 }, ]} > {name} ); } export function EmptyState({ text }: { text: string }) { const c = useColors(); return ( {text} ); } export function PendingBanner({ count }: { count: number }) { const c = useColors(); const strings = useStrings(); return ( {strings.seeLog.analyzingItems(count)} ); } const styles = StyleSheet.create({ section: { gap: spacing.lg, }, sectionHeader: { flexDirection: 'row', alignItems: 'flex-start', justifyContent: 'space-between', }, sectionTitle: { fontSize: font.xl, letterSpacing: 0.3, }, sectionSubtitle: { fontSize: font.xs, marginTop: 2, }, chip: { paddingHorizontal: spacing.lg, paddingVertical: spacing.md, borderRadius: radius.pill, borderWidth: 1, }, chipText: { fontSize: font.md, fontWeight: '500', }, emptyState: { paddingVertical: spacing.xxl, paddingHorizontal: spacing.xl, borderRadius: radius.lg, alignItems: 'center', }, emptyText: { fontSize: font.sm, fontStyle: 'italic', }, pendingBanner: { flexDirection: 'row', alignItems: 'center', gap: spacing.sm, paddingHorizontal: spacing.lg, paddingVertical: spacing.md, borderRadius: radius.md, marginBottom: spacing.md, }, pendingText: { fontSize: font.sm, fontWeight: '500', }, });