import React, { useRef, useState } from "react"; import { Animated, Easing, Pressable, TextInput, type TextInputProps, } from "react-native"; interface TVInputProps extends TextInputProps { label?: string; hasTVPreferredFocus?: boolean; } export const TVInput: React.FC = ({ label, placeholder, hasTVPreferredFocus, style, ...props }) => { const [isFocused, setIsFocused] = useState(false); const inputRef = useRef(null); const scale = useRef(new Animated.Value(1)).current; const animateFocus = (focused: boolean) => { Animated.timing(scale, { toValue: focused ? 1.02 : 1, duration: 200, easing: Easing.out(Easing.quad), useNativeDriver: true, }).start(); }; const handleFocus = () => { setIsFocused(true); animateFocus(true); }; const handleBlur = () => { setIsFocused(false); animateFocus(false); }; const displayPlaceholder = placeholder || label; return ( inputRef.current?.focus()} onFocus={handleFocus} onBlur={handleBlur} hasTVPreferredFocus={hasTVPreferredFocus} > ); };