import { useCarouselContext } from '@strv/react-native-hero-carousel' import { StyleSheet, View } from 'react-native' import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated' import { BlurView } from 'expo-blur' // Individual pagination dot component const PaginationDot = ({ index, hideProgressOnInteraction, }: { index: number total: number hideProgressOnInteraction: boolean }) => { const { scrollValue, timeoutValue, userInteracted } = useCarouselContext() const progressStyle = useAnimatedStyle(() => { const isActive = scrollValue.value - 1 >= index && scrollValue.value - 1 < index + 1 const wasActive = scrollValue.value - 1 > index if ((!isActive && !wasActive) || (hideProgressOnInteraction && userInteracted)) { return { width: 0, } } return { width: `${wasActive ? 100 : timeoutValue.value * 100}%`, } }) const dotStyle = useAnimatedStyle(() => { const isActive = Math.round(scrollValue.value - 1) === index const opacity = isActive ? withTiming(1) : withTiming(0.5) return { opacity, } }) return ( ) } export const TimerPagination = ({ total, hideProgressOnInteraction, }: { total: number hideProgressOnInteraction: boolean }) => { return ( {Array.from({ length: total }).map((_, index) => ( ))} ) } const styles = StyleSheet.create({ paginationContainer: { position: 'absolute', top: 20, left: 20, right: 20, overflow: 'hidden', flexDirection: 'row', gap: 8, borderRadius: 16, borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.05)', zIndex: 10, }, paginationDot: { flex: 1, height: 3, backgroundColor: 'rgba(255, 255, 255, 0.3)', borderRadius: 2, overflow: 'hidden', }, dotBackground: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, backgroundColor: 'rgba(255, 255, 255, 0.5)', }, dotProgress: { position: 'absolute', top: 0, left: 0, bottom: 0, backgroundColor: 'white', borderRadius: 2, }, })