import React from 'react'; import { View, Text, Image, TouchableOpacity, StyleSheet, Dimensions } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import type { VideoItem } from '../services/types'; import { formatCount, formatDuration } from '../utils/format'; import { proxyImageUrl } from '../utils/imageUrl'; const { width } = Dimensions.get('window'); const CARD_WIDTH = (width - 24) / 2; interface Props { item: VideoItem; onPress: () => void; } export function VideoCard({ item, onPress }: Props) { return ( {formatDuration(item.duration)} {item.title} {formatCount(item.stat?.view ?? 0)} {item.owner?.name ?? ''} ); } const styles = StyleSheet.create({ card: { width: CARD_WIDTH, marginBottom: 12, backgroundColor: '#fff', borderRadius: 6, overflow: 'hidden' }, thumbContainer: { position: 'relative' }, thumb: { width: CARD_WIDTH, height: CARD_WIDTH * 0.5625 }, durationBadge: { position: 'absolute', bottom: 4, right: 4, backgroundColor: 'rgba(0,0,0,0.6)', borderRadius: 3, paddingHorizontal: 4, paddingVertical: 1 }, durationText: { color: '#fff', fontSize: 10 }, info: { padding: 6 }, title: { fontSize: 12, color: '#212121', lineHeight: 16, height: 32, marginBottom: 4 }, meta: { flexDirection: 'row', alignItems: 'center', gap: 2 }, metaText: { fontSize: 11, color: '#999' }, owner: { fontSize: 11, color: '#999', marginTop: 2 }, });