import React, { useEffect } from "react"; import { View } from "react-native"; import Animated, { Easing, interpolate, useAnimatedStyle, useSharedValue, withDelay, withRepeat, withTiming, } from "react-native-reanimated"; interface Props { color?: string; barWidth?: number; barCount?: number; height?: number; gap?: number; } const MIN_SCALE = 0.35; const MAX_SCALE = 1; const DURATIONS = [800, 650, 750]; const DELAYS = [0, 200, 100]; const Bar: React.FC<{ color: string; barWidth: number; height: number; duration: number; delay: number; }> = ({ color, barWidth, height, duration, delay }) => { const progress = useSharedValue(0); useEffect(() => { progress.value = withDelay( delay, withRepeat( withTiming(1, { duration, easing: Easing.inOut(Easing.ease) }), -1, true, ), ); }, []); const animatedStyle = useAnimatedStyle(() => ({ transform: [ { scaleY: interpolate(progress.value, [0, 1], [MIN_SCALE, MAX_SCALE]), }, ], })); return ( ); }; export const AnimatedEqualizer: React.FC = ({ color = "#9334E9", barWidth = 3, barCount = 3, height = 12, gap = 2, }) => { return ( {Array.from({ length: barCount }).map((_, index) => ( ))} ); };