Files
tvone/app/components/tvone-content.tsx
T
peter d81a1763d9
continuous-integration/drone/push Build is passing
save
2026-03-27 23:15:54 +01:00

309 lines
13 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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">
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>
);
}