import React, { forwardRef, useImperativeHandle } from 'react'; import { View } from 'react-native'; import Animated, { Easing, useAnimatedStyle, useSharedValue, withTiming, } from 'react-native-reanimated'; import { twMerge } from 'tailwind-merge'; type Props = { initialProgress?: number; className?: string; }; export type ProgressBarRef = { setProgress: (value: number) => void; }; export const ProgressBar = forwardRef( ({ initialProgress = 0, className = '' }, ref) => { const progress = useSharedValue(initialProgress ?? 0); useImperativeHandle( ref, () => { return { setProgress: (value: number) => { progress.value = withTiming(value, { duration: 250, easing: Easing.inOut(Easing.quad), }); }, }; }, [progress] ); const style = useAnimatedStyle(() => { return { width: `${progress.value}%`, backgroundColor: '#000', height: 2, }; }); return ( ); } );