mirror of
https://github.com/PeterMaquiran/tvone.git
synced 2026-04-18 15:27:52 +00:00
312 lines
14 KiB
TypeScript
312 lines
14 KiB
TypeScript
import Image from "next/image";
|
||
import Link from "next/link";
|
||
|
||
const destaques = [
|
||
{
|
||
cat: "FAMOSOS",
|
||
catColor: "text-pink-600",
|
||
title: "Cerimónia reúne estrelas nacionais e internacionais em Lisboa.",
|
||
date: "24 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1524504388940-b1c1722653e1?w=600&q=80",
|
||
},
|
||
{
|
||
cat: "NEGÓCIOS",
|
||
catColor: "text-[#0066cc]",
|
||
title: "Mercados reagem às novas projeções de crescimento para a região.",
|
||
date: "24 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1518770660439-4636190af475?w=600&q=80",
|
||
},
|
||
{
|
||
cat: "DESPORTO",
|
||
catColor: "text-emerald-600",
|
||
title: "Taça: equipa da casa garante lugar nas meias com exibição sólida.",
|
||
date: "23 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1574629810360-7efbbe195018?w=600&q=80",
|
||
},
|
||
{
|
||
cat: "TECNOLOGIA",
|
||
catColor: "text-violet-600",
|
||
title: "Novos dispositivos chegam às lojas com foco em sustentabilidade.",
|
||
date: "23 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1518770660439-4636190af475?w=600&q=80",
|
||
},
|
||
];
|
||
|
||
const recentes = [
|
||
{
|
||
cat: "EM FOCO",
|
||
catBg: "bg-pink-100 text-pink-700",
|
||
title: "Governo anuncia medidas para apoiar famílias e pequenas empresas.",
|
||
excerpt: "Pacote inclui linhas de crédito e simplificação de procedimentos.",
|
||
byline: "Por Redação",
|
||
date: "24 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1507679799987-c73779587ccf?w=200&q=80",
|
||
},
|
||
{
|
||
cat: "ECONOMIA",
|
||
catBg: "bg-amber-100 text-amber-800",
|
||
title: "Inflação desce pelo terceiro mês consecutivo, segundo dados preliminares.",
|
||
excerpt: "Analistas mantêm cautela face ao cenário internacional.",
|
||
byline: "Por Economia",
|
||
date: "24 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1611974789855-9c2a0a7236a3?w=200&q=80",
|
||
},
|
||
{
|
||
cat: "CULTURA",
|
||
catBg: "bg-violet-100 text-violet-800",
|
||
title: "Museu inaugura exposição com obras inéditas de artistas locais.",
|
||
excerpt: "Visitas guiadas e programa educativo arrancam no próximo fim de semana.",
|
||
byline: "Por Cultura",
|
||
date: "23 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1507679799987-c73779587ccf?w=200&q=80",
|
||
},
|
||
{
|
||
cat: "SAÚDE",
|
||
catBg: "bg-emerald-100 text-emerald-800",
|
||
title: "Campanha de vacinação alarga faixas etárias em todo o país.",
|
||
excerpt: "Autoridades de saúde reforçam importância da adesão às janelas recomendadas.",
|
||
byline: "Por Saúde",
|
||
date: "23 Mar 2025",
|
||
img: "https://images.unsplash.com/photo-1576091160399-112ba8d25d1d?w=200&q=80",
|
||
},
|
||
];
|
||
|
||
const aSeguir = [
|
||
{
|
||
title: "Mercado imobiliário: especialistas explicam tendências para 2025.",
|
||
date: "23 Mar",
|
||
img: "https://images.unsplash.com/photo-1560518883-ce09059eeffa?w=120&q=80",
|
||
},
|
||
{
|
||
title: "Cinema: estreia nacional bate recordes de bilheteira no primeiro fim de semana.",
|
||
date: "22 Mar",
|
||
img: "https://images.unsplash.com/photo-1489599849927-2ee91cede3ba?w=120&q=80",
|
||
},
|
||
{
|
||
title: "Ambiente: projeto de reflorestação ultrapassa meta anual em três meses.",
|
||
date: "22 Mar",
|
||
img: "https://images.unsplash.com/photo-1560518883-ce09059eeffa?w=120&q=80",
|
||
},
|
||
];
|
||
|
||
export function TvoneDestaques() {
|
||
return (
|
||
<section className="mx-auto w-full max-w-[1200px] px-4 pb-10">
|
||
<h2 className="mb-5 text-xl font-bold tracking-tight text-neutral-900">Destaques</h2>
|
||
<div className="grid gap-5 sm:grid-cols-2 lg:grid-cols-4">
|
||
{destaques.map((item) => (
|
||
<article
|
||
key={item.title}
|
||
className="group overflow-hidden rounded-xl border border-neutral-200/80 bg-white shadow-sm transition hover:shadow-md"
|
||
>
|
||
<Link href="#" className="block">
|
||
<div className="relative aspect-[4/3] w-full overflow-hidden">
|
||
<Image
|
||
src={item.img}
|
||
alt=""
|
||
fill
|
||
className="object-cover transition duration-300 group-hover:scale-[1.03]"
|
||
sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 25vw"
|
||
/>
|
||
</div>
|
||
<div className="p-4">
|
||
<p className={`mb-2 text-[11px] font-bold uppercase tracking-wide ${item.catColor}`}>{item.cat}</p>
|
||
<h3 className="text-[15px] font-semibold leading-snug text-neutral-900">{item.title}</h3>
|
||
<p className="mt-3 text-xs text-neutral-500">{item.date}</p>
|
||
</div>
|
||
</Link>
|
||
</article>
|
||
))}
|
||
</div>
|
||
</section>
|
||
);
|
||
}
|
||
|
||
export function TvoneMainColumns() {
|
||
return (
|
||
<div className="mx-auto grid w-full max-w-[1200px] gap-10 px-4 pb-12 lg:grid-cols-[1fr_340px]">
|
||
<section>
|
||
<h2 className="mb-6 text-xl font-bold tracking-tight text-neutral-900">Mais Recentes</h2>
|
||
<ul className="flex flex-col gap-6">
|
||
{recentes.map((item) => (
|
||
<li key={item.title}>
|
||
<Link href="#" className="group flex gap-4 rounded-xl border border-transparent p-1 transition hover:border-neutral-200 hover:bg-neutral-50">
|
||
<div className="relative h-24 w-28 shrink-0 overflow-hidden rounded-lg sm:h-28 sm:w-36">
|
||
<Image src={item.img} alt="" fill className="object-cover" sizes="144px" />
|
||
</div>
|
||
<div className="min-w-0 flex-1">
|
||
<span className={`inline-block rounded px-2 py-0.5 text-[10px] font-bold uppercase tracking-wide ${item.catBg}`}>
|
||
{item.cat}
|
||
</span>
|
||
<h3 className="mt-2 text-base font-semibold leading-snug text-neutral-900 group-hover:text-[#0066cc]">
|
||
{item.title}
|
||
</h3>
|
||
<p className="mt-1 line-clamp-2 text-sm text-neutral-600">{item.excerpt}</p>
|
||
<p className="mt-2 text-xs text-neutral-500">
|
||
{item.byline} · {item.date}
|
||
</p>
|
||
</div>
|
||
</Link>
|
||
</li>
|
||
))}
|
||
</ul>
|
||
<Link
|
||
href="#"
|
||
className="mt-8 flex w-full items-center justify-center rounded-xl bg-[#f5f5f7] py-3 text-sm font-medium text-neutral-800 transition hover:bg-neutral-200/80"
|
||
>
|
||
Ver todas as notícias
|
||
</Link>
|
||
</section>
|
||
|
||
<aside className="flex flex-col gap-8">
|
||
<div className="overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-sm">
|
||
<div className="flex items-center gap-2 border-b border-neutral-100 px-4 py-3">
|
||
<svg className="h-5 w-5 text-neutral-800" viewBox="0 0 24 24" fill="currentColor" aria-hidden>
|
||
<path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z" />
|
||
</svg>
|
||
<span className="text-sm font-semibold text-neutral-800">Apple Line</span>
|
||
</div>
|
||
<div className="relative aspect-[16/10] w-full">
|
||
<Image
|
||
src="https://images.unsplash.com/photo-1518770660439-4636190af475?w=600&q=80"
|
||
alt=""
|
||
fill
|
||
className="object-cover"
|
||
sizes="340px"
|
||
/>
|
||
</div>
|
||
<div className="p-4">
|
||
<span className="text-[11px] font-bold uppercase tracking-wide text-[#0066cc]">Bancos</span>
|
||
<h3 className="mt-2 text-lg font-bold leading-snug text-neutral-900">
|
||
BAI regista lucros acima das expectativas no último trimestre.
|
||
</h3>
|
||
<p className="mt-2 text-xs text-neutral-500">24 Mar 2025</p>
|
||
<Link
|
||
href="#"
|
||
className="mt-4 flex w-full items-center justify-center rounded-lg bg-neutral-900 py-2.5 text-sm font-medium text-white transition hover:bg-neutral-800"
|
||
>
|
||
Ver Página Apple Line
|
||
</Link>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h3 className="mb-4 text-lg font-bold text-neutral-900">A seguir</h3>
|
||
<ul className="flex flex-col gap-4">
|
||
{aSeguir.map((item) => (
|
||
<li key={item.title}>
|
||
<Link href="#" className="group flex gap-3">
|
||
<div className="relative h-16 w-16 shrink-0 overflow-hidden rounded-lg">
|
||
<Image src={item.img} alt="" fill className="object-cover" sizes="64px" />
|
||
</div>
|
||
<div className="min-w-0">
|
||
<p className="text-sm font-medium leading-snug text-neutral-900 group-hover:text-[#0066cc]">{item.title}</p>
|
||
<p className="mt-1 text-xs text-neutral-500">{item.date}</p>
|
||
</div>
|
||
</Link>
|
||
</li>
|
||
))}
|
||
</ul>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
export function TvoneAdBanner() {
|
||
return (
|
||
<section className="mx-auto w-full max-w-[1200px] px-4 pb-10">
|
||
<div className="relative overflow-hidden rounded-xl bg-gradient-to-r from-[#0a4d8c] via-[#1e6fb8] to-[#e85c2a] px-6 py-8 text-white md:flex md:items-center md:justify-between md:py-10">
|
||
<div className="max-w-lg">
|
||
<p className="text-[11px] font-semibold uppercase tracking-widest text-white/90">BAI Directo</p>
|
||
<h2 className="mt-2 text-2xl font-bold md:text-3xl">Actualização do BAI Directo</h2>
|
||
<p className="mt-2 text-sm text-white/90">Faça as suas operações com mais rapidez e segurança em qualquer dispositivo.</p>
|
||
</div>
|
||
<div className="relative mt-6 h-32 w-full max-w-xs shrink-0 md:mt-0 md:h-36">
|
||
<Image
|
||
src="https://images.unsplash.com/photo-1511707171634-5f897ff02aa9?w=400&q=80"
|
||
alt=""
|
||
fill
|
||
className="object-contain object-right"
|
||
sizes="320px"
|
||
/>
|
||
</div>
|
||
<span className="absolute right-6 top-1/2 hidden -translate-y-1/2 text-2xl font-black tracking-tight opacity-90 md:block">
|
||
BAI
|
||
</span>
|
||
</div>
|
||
</section>
|
||
);
|
||
}
|
||
|
||
export function TvoneFooter() {
|
||
return (
|
||
<footer className="border-t border-neutral-200 bg-[#fafafa] py-12">
|
||
<div className="mx-auto max-w-[1200px] px-4">
|
||
<div className="grid gap-10 md:grid-cols-[1fr_260px] md:gap-12 lg:grid-cols-[1fr_280px]">
|
||
<div className="space-y-4 text-sm leading-relaxed text-neutral-600">
|
||
<p className="text-pretty">
|
||
A TV ONE é um portal angolano dedicado à informação e ao entretenimento, com a missão de informar,
|
||
educar e envolver o público angolano e todos os interessados nos mais variados temas da atualidade.
|
||
</p>
|
||
<p className="text-pretty">
|
||
Com uma abordagem dinâmica e atual, a TV ONE oferece conteúdos diversificados que abrangem áreas
|
||
como cultura, turismo, moda, celebridades, entretenimento, atualidade, lifestyle, conteúdos virais e
|
||
desporto, proporcionando uma experiência completa e envolvente para os seus leitores e espectadores.
|
||
</p>
|
||
</div>
|
||
<div className="flex flex-col gap-4 text-sm md:border-l md:border-neutral-200 md:pl-8">
|
||
<div>
|
||
<p className="text-xs font-semibold uppercase tracking-wide text-neutral-500">Email</p>
|
||
<a
|
||
href="mailto:tvone.geral@gmail.com"
|
||
className="mt-1 block font-medium text-[color:var(--tvone-nav-sub,#2f8bc4)] hover:underline"
|
||
>
|
||
tvone.geral@gmail.com
|
||
</a>
|
||
</div>
|
||
<div>
|
||
<p className="text-xs font-semibold uppercase tracking-wide text-neutral-500">Call Center</p>
|
||
<a href="tel:+244934292121" className="mt-1 block font-medium text-neutral-900 hover:underline">
|
||
934 292 121
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div className="mt-10 flex flex-col gap-6 border-t border-neutral-200 pt-8 sm:flex-row sm:items-center sm:justify-between">
|
||
<p className="text-sm text-neutral-500">© {new Date().getFullYear()} TV ONE. Todos os direitos reservados.</p>
|
||
<nav className="flex flex-wrap gap-x-6 gap-y-2 text-sm text-neutral-600">
|
||
<Link href="#" className="hover:text-neutral-900">
|
||
Privacidade
|
||
</Link>
|
||
<Link href="#" className="hover:text-neutral-900">
|
||
Termos de Uso
|
||
</Link>
|
||
<Link href="#" className="hover:text-neutral-900">
|
||
Publicidade
|
||
</Link>
|
||
<Link href="#" className="hover:text-neutral-900">
|
||
Contactos
|
||
</Link>
|
||
</nav>
|
||
<div className="flex items-center gap-4 text-neutral-500 sm:ml-auto lg:ml-0">
|
||
<Link href="#" aria-label="Facebook" className="hover:text-neutral-800">
|
||
f
|
||
</Link>
|
||
<Link href="#" aria-label="Instagram" className="hover:text-neutral-800">
|
||
in
|
||
</Link>
|
||
<Link href="#" aria-label="YouTube" className="hover:text-neutral-800">
|
||
▶
|
||
</Link>
|
||
<Link href="#" aria-label="X" className="hover:text-neutral-800">
|
||
𝕏
|
||
</Link>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
);
|
||
}
|