import { View, Text, StyleSheet, Pressable, Linking, Platform } from 'react-native' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { useRouter } from 'expo-router' import { ChevronLeft, Globe } from 'lucide-react-native' import Svg, { Path } from 'react-native-svg' import Constants from 'expo-constants' import { OrcaLogo } from '../src/components/OrcaLogo' import { colors, spacing, typography } from '../src/theme/mobile-theme' // Why: read version + native build identifier from expo-constants at // runtime so the About screen never drifts out of sync with app.json. // nativeBuildVersion is iOS buildNumber on iOS and versionCode on // Android — different concepts, same role (monotonic native build id). function getVersionLabel(): string { const version = Constants.expoConfig?.version ?? '?.?.?' const build = Platform.OS === 'ios' ? Constants.expoConfig?.ios?.buildNumber : String(Constants.expoConfig?.android?.versionCode ?? '') return build ? `v${version} (${build})` : `v${version}` } function GithubIcon({ size = 16, color = colors.textSecondary }) { return ( ) } function XIcon({ size = 16, color = colors.textSecondary }) { return ( ) } export default function AboutScreen() { const router = useRouter() const insets = useSafeAreaInsets() return ( router.back()}> About Orca Open-source agent IDE for 100x builders [styles.row, pressed && styles.rowPressed]} onPress={() => void Linking.openURL('https://onOrca.dev')} > onOrca.dev [styles.row, pressed && styles.rowPressed]} onPress={() => void Linking.openURL('https://github.com/stablyai/orca')} > stablyai/orca [styles.row, pressed && styles.rowPressed]} onPress={() => void Linking.openURL('https://x.com/orca_build')} > @orca_build {getVersionLabel()} ) } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.bgBase, padding: spacing.lg }, topRow: { flexDirection: 'row', alignItems: 'center', marginBottom: spacing.xl }, backButton: { width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center', marginRight: spacing.sm }, heading: { fontSize: 20, fontWeight: '700', color: colors.textPrimary }, brand: { alignItems: 'center', paddingVertical: spacing.xl, marginBottom: spacing.lg }, brandName: { fontSize: 22, fontWeight: '800', color: colors.textPrimary, marginTop: spacing.sm }, brandSub: { fontSize: 13, color: colors.textMuted, marginTop: spacing.xs }, section: { backgroundColor: colors.bgPanel, borderRadius: 12, overflow: 'hidden' }, row: { flexDirection: 'row', alignItems: 'center', gap: spacing.sm + 2, paddingVertical: spacing.md, paddingHorizontal: spacing.md + 2 }, rowPressed: { backgroundColor: colors.bgRaised }, rowLabel: { flex: 1, fontSize: typography.bodySize, fontWeight: '500', color: colors.textPrimary }, rowValue: { flex: 1, textAlign: 'right', fontSize: typography.bodySize, color: colors.textSecondary }, separator: { height: StyleSheet.hairlineWidth, backgroundColor: colors.borderSubtle, marginHorizontal: spacing.md }, versionText: { marginTop: spacing.lg, textAlign: 'center', fontSize: typography.metaSize, color: colors.textMuted } })