finish content page
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-04-11 23:52:05 +01:00
parent 104207d909
commit dcc9fccbde
3 changed files with 274 additions and 70 deletions
+260 -69
View File
@@ -1,15 +1,61 @@
"use client";
import React, { useState } from 'react';
import Image from 'next/image';
import { ThumbsUp, MessageCircle, Send, Share2 } from 'lucide-react';
import { ThumbsUp, MessageCircle, Send, Share2, LinkIcon, Link2, ChevronRight } from 'lucide-react';
import { TvoneAdBanner, TvoneFooter } from '../components/tvone-content';
import { TvonePromoStrip } from '../components/tvone-promo-strip';
import { TvoneSiteNav } from '../components/tvone-site-nav';
import { SiWhatsapp, SiFacebook, SiX } from 'react-icons/si'; // Ícones oficiais de marca
import { FiCopy } from 'react-icons/fi'; // Ícone de cópia mais limpo
import Link from 'next/link';
export default function NewsArticlePage() {
// Estado para controlar o play do vídeo customizado
const [isPlaying, setIsPlaying] = useState(false);
const recentes = [
{
cat: "EM FOCO",
readTime: "6",
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",
readTime: "6",
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",
readTime: "6",
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",
readTime: "6",
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",
},
];
return (
<div className="min-h-screen bg-white font-sans text-[#1d1d1f] selection:bg-[#0066CC]/20">
<TvonePromoStrip />
@@ -21,16 +67,26 @@ export default function NewsArticlePage() {
{/* --- COLUNA PRINCIPAL (ARTIGO) --- */}
<article className="flex-1 min-w-0">
<div className="mb-6">
<span className="rounded-md bg-blue-600 px-2.5 py-1 text-[11px] font-[900] uppercase tracking-wider text-white">
<div className="mb-4">
<span className="text-[13px] font-semibold uppercase tracking-wider text-[#0066CC]">
Música
</span>
</div>
<h1 className="Text-3xl font-bold tracking-tight text-neutral-900 text-2xl md:text-4xl">
Adele: A Turnê Mundial que Redefiniu a Indústria Musical em 2016.
Adele: A Turnê Mundial que Redefiniu a Indústria Musical.
</h1>
<div className="mt-6 flex items-center gap-3">
<div className="h-10 w-10 overflow-hidden rounded-full bg-[#f5f5f7] border border-black/5 flex items-center justify-center font-bold text-[#0066CC]">
R
</div>
<div className="text-[14px]">
<p className="font-semibold text-[#1d1d1f]">Redação TV ONE</p>
<p className="text-[#6e6e73]">12 de Junho, 2016 4 min de leitura</p>
</div>
</div>
{/* Hero Image (Bordas Apple 32px) */}
<div className="relative mt-10 aspect-video w-full overflow-hidden rounded-2xl bg-neutral-100 shadow-sm border border-black/5">
@@ -156,26 +212,210 @@ export default function NewsArticlePage() {
</article>
{/* --- SIDEBAR REFINADA --- */}
<aside className="w-full lg:w-[340px] shrink-0">
<div className="sticky top-10 space-y-10">
{/* --- SIDEBAR REFINADA COM SOCIAL SHARE --- */}
<aside className="w-full lg:w-[340px] flex flex-col justify-center align-center items-center shrink-0">
<div className="sticky top-10 space-y-10 max-w-[340px]">
{/* 1. CARD DE VÍDEO TV ONE COM PLAY CUSTOMIZADO */}
<div className="rounded-2xl bg-white p-4 shadow-[0_8px_40px_rgba(0,0,0,0.04)] border border-neutral-100">
<h3 className="text-[13px] font-black text-neutral-400 uppercase tracking-[0.1em] mb-4 pl-2">TV One em Destaque</h3>
{/* 1. SEÇÃO DE SHARE (ESTILO APPLE NEWS) */}
<div className="bg-white p-5 rounded-xl border border-neutral-100 shadow-[0_2px_15px_rgba(0,0,0,0.03)]">
<div className="flex items-center gap-2 mb-4">
<Share2 size={15} className="text-neutral-400" />
<h3 className="text-[11px] font-bold text-neutral-400 uppercase tracking-widest">
Compartilhar
</h3>
</div>
<div className="relative aspect-video w-full overflow-hidden rounded-2xl bg-black shadow-inner border border-black/5 group">
<div className="grid grid-cols-4 gap-3">
<button className="group flex flex-col items-center gap-2">
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-[#25D366] text-white transition-all hover:opacity-90 active:scale-95">
<SiWhatsapp size={20} />
</div>
<span className="text-[10px] font-medium text-neutral-500">WhatsApp</span>
</button>
<button className="group flex flex-col items-center gap-2">
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-[#007AFF] text-white transition-all hover:opacity-90 active:scale-95">
<SiFacebook size={20} />
</div>
<span className="text-[10px] font-medium text-neutral-500">Facebook</span>
</button>
<button className="group flex flex-col items-center gap-2">
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-black text-white transition-all hover:opacity-80 active:scale-95">
<SiX size={18} />
</div>
<span className="text-[10px] font-medium text-neutral-500">Twitter</span>
</button>
<button className="group flex flex-col items-center gap-2">
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-[#F2F2F7] text-[#8E8E93] transition-all hover:bg-[#E5E5EA] active:scale-95">
<Link2 size={20} />
</div>
<span className="text-[10px] font-medium text-neutral-500">Link</span>
</button>
</div>
</div>
{/* 2. ADVERTORIAL (CEO UNITEL) - REPLACING TV CARD */}
<div className="group cursor-pointer">
<div className="flex items-center justify-between mb-3 px-1">
<h3 className="text-[13px] font-bold text-black tracking-tight">Especial Unitel</h3>
<span className="text-[10px] font-bold text-neutral-400 uppercase">Pub</span>
</div>
<div className="relative aspect-[4/5] w-full overflow-hidden rounded-xl bg-neutral-100 shadow-sm transition-shadow group-hover:shadow-md">
<Image
src="https://images.unsplash.com/photo-1560250097-0b93528c311a?q=80&w=800&auto=format&fit=crop" // Substitua pelo path real da imagem do print
alt="CEO da Unitel - O futuro do 5G em Angola"
fill
unoptimized
className="object-cover transition-transform duration-700 group-hover:scale-105"
/>
{/* Overlay de gradiente para legibilidade do texto se estiver na imagem */}
<div className="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-60" />
<div className="absolute bottom-6 left-6 right-6">
<span className="text-[10px] font-bold text-[#007AFF] uppercase tracking-widest">CEO DA UNITEL</span>
<h4 className="text-white text-xl font-bold mt-2 leading-tight">
"O futuro do 5G em Angola e a expansão da conectividade rural"
</h4>
</div>
</div>
<div className="mt-4 px-1">
<div className="flex items-center text-[13px] font-bold text-[#007AFF]">
Ler entrevista completa <ChevronRight size={14} className="ml-1" />
</div>
</div>
</div>
{/* 3. PREMIUM SUBSCRIPTION - APPLE STYLE */}
<div className="bg-black p-7 rounded-xl relative overflow-hidden text-white shadow-xl">
<div className="relative z-10">
<h4 className="text-[20px] font-bold leading-tight tracking-tight mb-2">
Assine o Premium.
</h4>
<p className="text-[13px] text-[#8E8E93] font-medium mb-6">
Acesso ilimitado às notícias e análises exclusivas.
</p>
<button className="flex w-full items-center justify-center gap-2 rounded-xl bg-white py-3 text-black font-bold text-[15px] transition-all hover:bg-neutral-100 active:scale-95">
<svg viewBox="0 0 384 512" className="h-4 w-4 fill-black">
<path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/>
</svg>
<span>Pay</span>
</button>
</div>
{/* Sutil glow de fundo */}
<div className="absolute top-0 right-0 w-32 h-32 bg-blue-600/20 blur-[40px]" />
</div>
<div className="px-1">
<div className="flex items-center justify-between mb-4 border-b border-neutral-100 pb-2">
<h3 className="text-[13px] font-bold text-black uppercase tracking-tight">Mais Lidas</h3>
<span className="text-[11px] font-medium text-neutral-400">Últimas 24h</span>
</div>
<div className="space-y-4">
{[
{ id: "01", title: "Câmbio: Kwanza mantém trajetória de estabilidade frente ao Dólar", cat: "Economia" },
{ id: "02", title: "Novas infraestruturas no Porto de Luanda aumentam eficiência", cat: "Logística" },
{ id: "03", title: "Selecção Nacional prepara amistoso contra Marrocos", cat: "Desporto" }
].map((news) => (
<div key={news.id} className="group cursor-pointer flex align-start justify-start gap-4 text-black">
<span className="text-2xl font-black text-black group-hover:text-blue transition-colors leading-none">
{news.id}
</span>
<div className="space-y-1 flex flex-col">
<span className="text-[10px] font-bold text-blue-600 uppercase tracking-widest">{news.cat}</span>
<h4 className="text-[14px] font-bold text-neutral-900 leading-tight group-hover:text-blue-600 transition-colors">
{news.title}
</h4>
</div>
</div>
))}
</div>
<div className="grid gap-x-12 mt-12 gap-y-3 md:grid-cols-1">
<div className="flex items-center justify-between mb-2 border-b border-neutral-100 pb-2">
<h3 className="text-[13px] font-bold text-black uppercase tracking-tight">Noticias Principais</h3>
{/* <span className="text-[11px] font-medium text-neutral-400">Últimas 24h</span> */}
</div>
{recentes.map((item) => (
<article key={item.title} className="group cursor-pointer">
<Link href="#" className="flex flex-row items-start gap-6">
{/* 1. LADO DA IMAGEM (Limpo e Minimalista) */}
<div className="relative aspect-[4/3] w-15 shrink-0 overflow-hidden rounded-2xl bg-neutral-100 shadow-sm transition-all duration-500 group-hover:shadow-xl sm:w-25 md:w-25 lg:w-25">
<Image
src={item.img}
alt=""
fill
className="object-cover transition duration-700 group-hover:scale-110"
sizes="(max-width: 60px) 6px, 64px"
/>
</div>
{/* 2. LADO DO TEXTO (Categoria externa ao topo) */}
<div className="flex flex-1 flex-col pt-1">
{/* CATEGORIA E DATA LADO A LADO */}
<div className="flex items-center gap-2 mb-2">
<span className="text-[10px] font-bold uppercase tracking-wider text-[#0066CC]">
{item.cat}
</span>
{/* <span className="h-1 w-1 rounded-2xl bg-neutral-300" /> */}
{/* <span className="text-[10px] font-semibold text-neutral-400 uppercase tracking-tight">
{item.date}
</span>
<span className="h-1 w-1 rounded-2xl bg-neutral-300" />
<span className="text-[10px] font-bold uppercase text-neutral-400">
{item.readTime} min
</span> */}
</div>
<h3 className="line-clamp-3 text-[14px] font-bold leading-tight text-neutral-900 transition-colors group-hover:text-[#0066cc]">
{item.title}
</h3>
</div>
</Link>
</article>
))}
</div>
</div>
{/* 2. VIDEO - Minimalist Edge-to-Edge */}
<div className="group">
<div className="flex items-center justify-between mb-3 px-1">
<h3 className="text-[13px] font-bold text-black tracking-tight">TV One Angola</h3>
<div className="flex items-center gap-1.5">
<span className="h-1.5 w-1.5 rounded-full bg-[#FF3B30] animate-pulse" />
<span className="text-[11px] font-bold text-[#FF3B30] uppercase">Ao Vivo</span>
</div>
</div>
<div className="relative aspect-video w-full overflow-hidden rounded-xl bg-black shadow-sm group-hover:shadow-md transition-shadow">
{!isPlaying ? (
<div className="absolute inset-0 z-10 cursor-pointer" onClick={() => setIsPlaying(true)}>
<Image
src="https://i.ytimg.com/vi/bfEYtb2O3iI/maxresdefault.jpg"
alt="Thumbnail TV One"
alt="Workshop"
fill
className="object-cover transition-transform duration-700 group-hover:scale-105 opacity-80"
className="object-cover transition-transform duration-500 group-hover:scale-105 opacity-90"
/>
<div className="absolute inset-0 bg-black/10 transition-opacity group-hover:bg-black/5" />
<div className="absolute inset-0 flex items-center justify-center">
<div className="flex h-16 w-16 items-center justify-center rounded-full bg-white/20 backdrop-blur-xl border border-white/30 text-white shadow-2xl transition-all group-hover:bg-white group-hover:text-[#0066CC] group-hover:scale-110">
<svg className="h-7 w-7 ml-1" fill="currentColor" viewBox="0 0 24 24">
<div className="flex h-14 w-14 items-center justify-center rounded-full bg-white/20 backdrop-blur-md border border-white/30 text-white transition-all group-hover:bg-white group-hover:text-[#007AFF] group-hover:scale-110">
<svg className="h-6 w-6 ml-0.5" fill="currentColor" viewBox="0 0 24 24">
<path d="M8 5v14l11-7z" />
</svg>
</div>
@@ -185,70 +425,21 @@ export default function NewsArticlePage() {
<iframe
className="absolute inset-0 h-full w-full"
src="https://www.youtube.com/embed/bfEYtb2O3iI?autoplay=1"
title="TV One Video"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allow="autoplay; encrypted-media"
allowFullScreen
/>
)}
</div>
<div className="mt-4 px-2 pb-1">
<p className="text-[15px] font-bold text-black leading-tight">
<div className="mt-3.5 px-1">
<h4 className="text-[16px] font-semibold text-black leading-snug tracking-tight group-hover:text-[#007AFF] transition-colors">
Workshop Acelere a Sua Empresa impulsiona o empreendedorismo em Angola
</p>
<div className="mt-4 flex flex-col gap-3">
<a href="https://www.youtube.com/watch?v=bfEYtb2O3iI" target="_blank" className="flex w-full items-center justify-center gap-2 rounded-2xl bg-[#f5f5f7] py-3 text-[14px] font-bold text-[#0066CC] transition-all hover:bg-[#e8e8ed] active:scale-95">
Assistir no YouTube
</a>
<div className="flex items-center gap-2">
<span className="h-1.5 w-1.5 rounded-2xl bg-red-500 animate-pulse" />
<p className="text-[11px] text-neutral-400 font-bold uppercase tracking-wider">TV One Angola</p>
</div>
</div>
</h4>
<p className="mt-2 text-[12px] text-[#8E8E93] font-medium tracking-tight">Publicado em 24 de Março, 2026</p>
</div>
</div>
{/* 2. BOTÃO CUSTOM iOS PAY */}
<div className="rounded-2xl bg-white p-8 shadow-[0_8px_40px_rgba(0,0,0,0.04)] border border-neutral-100">
<p className="text-[13px] font-black text-neutral-400 uppercase tracking-[0.1em] mb-6 text-center">Assinatura Premium</p>
<button className="group relative flex w-full items-center justify-center gap-2 overflow-hidden rounded-2xl bg-black py-4 transition-all hover:bg-neutral-800 active:scale-95 shadow-xl shadow-black/10">
<svg viewBox="0 0 384 512" className="h-5 w-5 fill-white transition-transform group-hover:scale-110">
<path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/>
</svg>
<span className="text-[17px] font-bold tracking-tight text-white">Pay</span>
<div className="absolute inset-0 -translate-x-full bg-gradient-to-r from-transparent via-white/10 to-transparent transition-transform duration-1000 group-hover:translate-x-full" />
</button>
<p className="mt-4 text-[11px] text-center text-neutral-400 font-medium leading-relaxed">
Pagamento seguro via Apple Pay. <br/>Cancele a qualquer momento.
</p>
</div>
{/* 3. CARD DE FEEDBACK */}
<div className="rounded-2xl bg-white p-8 shadow-[0_8px_40px_rgba(0,0,0,0.04)] border border-neutral-100 text-center">
<h3 className="text-[13px] font-black text-neutral-400 uppercase tracking-[0.1em] mb-6">Feedback</h3>
<button className="flex w-full items-center justify-center gap-3 rounded-2xl bg-[#0066CC] py-4.5 text-white font-[800] shadow-xl shadow-blue-500/25 transition-transform hover:scale-[1.02] active:scale-[0.98]">
<ThumbsUp size={20} />
Curtidas
</button>
</div>
{/* 4. BANNERS PATROCINADOS */}
<div className="group relative aspect-[3/4] w-full overflow-hidden rounded-2xl bg-[#1d1d1f] p-10 text-white border border-white/5">
<div className="relative z-10 h-full flex flex-col justify-between">
<span className="text-[11px] font-[900] tracking-[0.2em] opacity-40 uppercase">Patrocinado</span>
<div>
<h4 className="text-[28px] font-[900] leading-tight tracking-tight">BAI Directo:<br/>Banca no seu pulso.</h4>
<p className="mt-4 text-sm font-medium opacity-50 leading-relaxed">Simples e rápido. Faça o download na App Store.</p>
</div>
</div>
<div className="absolute -bottom-20 -right-20 h-64 w-64 rounded-2xl bg-blue-600/30 blur-[80px] transition-opacity group-hover:opacity-50" />
</div>
<div className="w-full rounded-2xl bg-gradient-to-br from-[#FF6600] to-[#FF9900] p-9 text-white shadow-2xl shadow-orange-500/20 border border-white/10">
<h4 className="text-[24px] font-[900] leading-tight tracking-tight">Unitel NetCASA 5G</h4>
<p className="mt-3 text-[12px] font-black uppercase tracking-wider opacity-90">O futuro chegou ao Namibe!</p>
</div>
</div>
</aside>
+2 -1
View File
@@ -14,7 +14,8 @@
"next": "16.2.1",
"react": "19.2.4",
"react-dom": "19.2.4",
"react-easy-crop": "^5.5.7"
"react-easy-crop": "^5.5.7",
"react-icons": "^5.6.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
+12
View File
@@ -26,6 +26,9 @@ importers:
react-easy-crop:
specifier: ^5.5.7
version: 5.5.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react-icons:
specifier: ^5.6.0
version: 5.6.0(react@19.2.4)
devDependencies:
'@tailwindcss/postcss':
specifier: ^4
@@ -1713,6 +1716,11 @@ packages:
react: '>=16.4.0'
react-dom: '>=16.4.0'
react-icons@5.6.0:
resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==}
peerDependencies:
react: '*'
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@@ -3730,6 +3738,10 @@ snapshots:
react-dom: 19.2.4(react@19.2.4)
tslib: 2.8.1
react-icons@5.6.0(react@19.2.4):
dependencies:
react: 19.2.4
react-is@16.13.1: {}
react@19.2.4: {}