dptxa-proxy / src /components /CombinedRegionSection.jsx
TXAVLOG
Deploy DPTXA to Hugging Face Spaces
4bea261
Raw
History Blame Contribute Delete
7.73 kB
import { formatImageUrl } from '../lib/image';
export default function CombinedRegionSection({ sections = [] }) {
if (!sections || sections.length === 0) return null;
return (
<section className="mx-auto max-w-7xl px-4 py-10 md:px-8 relative overflow-hidden">
{/* Master Premium Glass Container */}
<div className="relative overflow-hidden rounded-[32px] border border-white/5 bg-gradient-to-br from-white/[0.02] to-white/[0.003] p-6 shadow-2xl backdrop-blur-2xl md:p-10">
{/* Abstract Floating Glows */}
<div className="absolute -left-20 -top-20 -z-10 h-80 w-80 rounded-full bg-primary/5 blur-[100px] pointer-events-none" />
<div className="absolute -right-20 -bottom-20 -z-10 h-80 w-80 rounded-full bg-amber-500/5 blur-[100px] pointer-events-none" />
{/* Section Header */}
<div className="relative z-10 mb-10 flex items-center justify-between border-b border-white/5 pb-5">
<div className="flex items-center gap-3">
<span className="h-8 w-2 rounded-full bg-gradient-to-b from-primary to-amber-500 shadow-[0_0_20px_rgba(124,58,237,0.4)]" />
<h2 className="text-xl font-black uppercase tracking-tight text-white md:text-2xl">
Đường Đua Điện Ảnh Quốc Tế
</h2>
</div>
<span className="hidden sm:inline-block rounded-full bg-white/5 border border-white/10 px-3 py-1 text-[8px] font-black uppercase tracking-widest text-gray-400">
Cập nhật hàng ngày
</span>
</div>
{/* Rows wrapper */}
<div className="relative z-10 space-y-12">
{sections.map((sec, idx) => {
// Authentic sponsor configuration for each region
const sponsors = {
'trung-quoc': { name: 'VIC88 TÀI TRỢ', bg: 'from-amber-600 to-red-600 shadow-red-600/30' },
'han-quoc': { name: 'F88 SPORT', bg: 'from-emerald-600 to-teal-600 shadow-emerald-600/30' },
'au-my': { name: '86BET LIVE', bg: 'from-blue-600 to-indigo-600 shadow-blue-600/30' }
};
const sponsor = sponsors[sec.country] || { name: 'ROPHIM VIP', bg: 'from-primary to-accent shadow-primary/30' };
return (
<div key={sec.country} className="space-y-5">
{/* Row Header */}
<div className="flex items-center justify-between">
<h3 className="flex items-center gap-2.5 text-xs font-black uppercase tracking-widest text-gray-300">
<span className={`h-2.5 w-2.5 rounded-full bg-gradient-to-br ${sponsor.bg}`} />
{sec.title}
</h3>
<a
href={sec.href}
className="group/all flex items-center gap-1 text-[9px] font-black uppercase tracking-widest text-primary hover:text-white transition-all duration-300 cursor-pointer"
>
Xem tất cả
<i className="fas fa-chevron-right text-[7px] transition-transform duration-300 group-hover/all:translate-x-1" />
</a>
</div>
{/* Landscape 16/9 Card Scroll list */}
<div className="scrollbar-hide flex overflow-x-auto gap-5 pb-4 px-1 -mx-1 snap-x scroll-smooth">
{sec.movies.slice(0, 10).map((m, mIdx) => {
const poster = formatImageUrl(m.poster_url || m.thumb_url);
const year = m.year || '';
const quality = m.quality || 'FHD';
const lang = m.lang || 'Vietsub';
return (
<div
key={m._id || m.slug}
className="w-[200px] sm:w-[240px] md:w-[280px] flex-shrink-0 snap-start group/land relative"
>
{/* 16:9 Image wrapper */}
<div className="relative aspect-[16/9] w-full overflow-hidden rounded-2xl border border-white/5 bg-black/40 transition-all duration-500 shadow-lg group-hover/land:scale-[1.03] group-hover/land:shadow-[0_12px_30px_rgba(0,0,0,0.6)] group-hover/land:border-white/15">
<img
src={poster}
alt={m.name}
className="h-full w-full object-cover transition-transform duration-700 group-hover/land:scale-105"
/>
<div className="absolute inset-0 bg-gradient-to-t from-black/95 via-black/30 to-transparent" />
{/* Authentic Sponsor Badge Overlay (on FIRST card of row) */}
{mIdx === 0 && (
<div className={`absolute top-3 left-3 z-30 bg-gradient-to-r ${sponsor.bg} text-[7px] font-black uppercase text-white px-2.5 py-0.5 rounded shadow-[0_4px_12px_rgba(0,0,0,0.5)] tracking-widest`}>
{sponsor.name}
</div>
)}
{/* Quality/Lang tags in top-right */}
<div className="absolute top-3 right-3 z-20 flex gap-1">
<span className="rounded bg-black/70 border border-white/10 px-1.5 py-[2px] text-[7px] font-black uppercase text-gray-300 backdrop-blur-sm shadow-md">
{quality}
</span>
<span className="rounded bg-primary/90 px-1.5 py-[2px] text-[7px] font-black uppercase text-white backdrop-blur-sm shadow-md">
{lang}
</span>
</div>
{/* Glow Play Button overlay */}
<div className="absolute inset-0 flex items-center justify-center opacity-0 group-hover/land:opacity-100 transition-opacity duration-300 bg-black/40 backdrop-blur-[1px] z-10">
<div className="h-11 w-11 rounded-full bg-primary flex items-center justify-center text-white shadow-[0_0_20px_rgba(229,9,20,0.5)] transform scale-75 group-hover/land:scale-100 transition-transform duration-300">
<i className="fas fa-play text-xs ml-0.5" />
</div>
</div>
{/* Movie title overlay */}
<div className="absolute bottom-3 left-4 right-4 z-20">
<h4 className="line-clamp-1 text-[11px] sm:text-xs font-black uppercase tracking-tight text-white group-hover/land:text-primary transition-colors duration-300">
{m.name}
</h4>
<div className="mt-0.5 flex items-center gap-1.5 text-[8px] font-bold text-gray-400 uppercase tracking-widest">
<span className="truncate max-w-[120px]">{m.origin_name}</span>
{year && (
<>
<span className="h-1 w-1 rounded-full bg-gray-600" />
<span>{year}</span>
</>
)}
</div>
</div>
<a href={`/phim/${m.slug}`} className="absolute inset-0 z-30" />
</div>
</div>
);
})}
</div>
</div>
);
})}
</div>
</div>
</section>
);
}