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',
},
});