// Vidgas — screens // Exports: LibraryScreen, PlayerScreen, UploadScreen, CollectionsScreen, SearchScreen const { useState: useS, useEffect: useE, useRef: useR, useMemo } = React; /* ============== LIBRARY ============== */ function LibraryScreen({ data, navigate }) { const [filter, setFilter] = useS('all'); const featured = data.VIDEOS.find(v => v.featured) || data.VIDEOS[0]; const rest = data.VIDEOS.filter(v => v.id !== featured.id); const filters = [ { value: 'all', label: 'Semua' }, { value: 'recent', label: 'Terbaru' }, { value: '4k', label: '4K' }, { value: 'travel', label: 'Travel' }, { value: 'family', label: 'Keluarga' }, { value: 'friends', label: 'Anak-anak' }, ]; const filtered = useMemo(() => { if (filter === 'all') return rest; if (filter === 'recent') return rest.slice(0, 6); if (filter === '4k') return rest.filter(v => v.resolution === '4K'); return rest.filter(v => v.collection === filter); }, [filter]); const recentlyAdded = rest.slice(0, 6); return (
{recentlyAdded.map(v => )}
{filtered.length} video
} />
{filtered.map(v => )}
); } /* ============== VIDEO PLAYER COMPONENT ============== */ // iOS Safari has the best native HLS implementation. Video.js VHS polyfill // often stutters on iOS even in "native mode", so we bypass Video.js entirely // for iOS and use a plain