import { Ionicons } from "@expo/vector-icons"; import React from "react"; import { Animated, Pressable, StyleSheet, View } from "react-native"; import { Text } from "@/components/common/Text"; import { useScaledTVTypography } from "@/constants/TVTypography"; import { scaleSize } from "@/utils/scaleSize"; import { useTVFocusAnimation } from "./hooks/useTVFocusAnimation"; export interface TVTrackCardProps { label: string; sublabel?: string; selected: boolean; hasTVPreferredFocus?: boolean; onPress: () => void; } export const TVTrackCard = React.forwardRef( ({ label, sublabel, selected, hasTVPreferredFocus, onPress }, ref) => { const typography = useScaledTVTypography(); const styles = createStyles(typography); const { focused, handleFocus, handleBlur, animatedStyle } = useTVFocusAnimation({ scaleAmount: 1.05 }); return ( {label} {sublabel && ( {sublabel} )} {selected && !focused && ( )} ); }, ); const createStyles = (typography: ReturnType) => StyleSheet.create({ trackCard: { width: scaleSize(180), height: scaleSize(80), borderRadius: scaleSize(14), justifyContent: "center", alignItems: "center", paddingHorizontal: scaleSize(12), }, trackCardText: { fontSize: typography.callout, textAlign: "center", }, trackCardSublabel: { fontSize: typography.callout, marginTop: 2, }, checkmark: { position: "absolute", top: scaleSize(8), right: scaleSize(8), }, });