import { useEffect, useRef } from 'react' import { Animated, Pressable, StyleSheet, Text, View, } from 'react-native' import { useRouter, Redirect } from 'expo-router' import { StatusBar } from 'expo-status-bar' import { LinearGradient } from 'expo-linear-gradient' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { BRAND, TEXT, APP_GRADIENTS, ACCENT } from '@/src/shared/constants/colors' import { TYPOGRAPHY } from '@/src/shared/constants/typography' import { SHADOW, TEXT_SHADOW } from '@/src/shared/constants/shadows' import { DURATION, EASING } from '@/src/shared/constants/animations' import { useIsOnboardingComplete } from '@/src/features/onboarding/hooks/useOnboarding' export default function HomeScreen() { const router = useRouter() const insets = useSafeAreaInsets() const isOnboardingComplete = useIsOnboardingComplete() const glowAnim = useRef(new Animated.Value(0)).current // Show nothing while Zustand hydrates if (isOnboardingComplete === undefined) { return null } // Redirect to onboarding if not complete if (isOnboardingComplete === false) { return } useEffect(() => { Animated.loop( Animated.sequence([ Animated.timing(glowAnim, { toValue: 1, duration: DURATION.BREATH, easing: EASING.STANDARD, useNativeDriver: false, }), Animated.timing(glowAnim, { toValue: 0, duration: DURATION.BREATH, easing: EASING.STANDARD, useNativeDriver: false, }), ]) ).start() }, []) const glowOpacity = glowAnim.interpolate({ inputRange: [0, 1], outputRange: [0.15, 0.4], }) const glowScale = glowAnim.interpolate({ inputRange: [0, 1], outputRange: [1, 1.12], }) return ( TABATA GO 4 minutes. Tout donner. [ styles.startButton, pressed && styles.startButtonPressed, ]} onPress={() => router.push('/timer')} > START ) } const styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, brandArea: { alignItems: 'center', }, title: { ...TYPOGRAPHY.brandTitle, color: BRAND.PRIMARY, ...TEXT_SHADOW.BRAND, }, subtitle: { ...TYPOGRAPHY.displaySmall, color: TEXT.PRIMARY, marginTop: -6, }, tagline: { ...TYPOGRAPHY.caption, color: TEXT.HINT, fontStyle: 'italic', marginTop: 12, }, buttonArea: { marginTop: 72, alignItems: 'center', justifyContent: 'center', }, buttonGlow: { position: 'absolute', width: 172, height: 172, borderRadius: 86, backgroundColor: ACCENT.ORANGE, }, startButton: { width: 160, height: 160, borderRadius: 80, backgroundColor: BRAND.PRIMARY, alignItems: 'center', justifyContent: 'center', ...SHADOW.BRAND_GLOW, }, startButtonPressed: { transform: [{ scale: 0.95 }], }, startButtonText: { ...TYPOGRAPHY.buttonHero, color: TEXT.PRIMARY, letterSpacing: 4, }, })