"use client"; import { useEffect, useRef } from "react"; import type { PortfolioProjectView } from "@/lib/portfolio-data"; import type { Testimonial } from "@/lib/proof"; import type { ServiceLink } from "@/lib/site-navigation"; import About from "../About"; import type { ClientLink } from "../ClientStrip"; import Contact from "../Contact"; import EngineeringWithAI from "../EngineeringWithAI"; import FloatingWhatsApp from "../FloatingWhatsApp"; import Footer from "../Footer"; import Hero, { type HeroStats } from "../Hero"; import Projects from "../Projects"; import { displayUrl } from "../showcase/BrowserFrame"; import Testimonials from "../Testimonials"; import { WorkModalities } from "../WorkModalities"; import { useCinematicScroll } from "./useCinematicScroll"; import { useHomeFragmentNavigation } from "./useHomeFragmentNavigation"; /** Projeto cujo endereço aparece na barra do navegador de HeroWork. */ const HERO_WORK_PROJECT = "lavacao-047"; export default function CinematicHome({ projects, clients, testimonials, serviceLinks, heroStats, }: { heroStats?: HeroStats; /** Só projetos de cliente (o filtro é de app/page.tsx). */ projects: PortfolioProjectView[]; clients?: ClientLink[]; testimonials?: Testimonial[]; /** Serviços do hub; lib/site-content.ts só pode ser lido no servidor, então a página os entrega prontos. */ serviceLinks?: ServiceLink[]; }) { const heroWorkUrl = displayUrl({ demoUrl: projects.find((project) => project.id === HERO_WORK_PROJECT) ?.demoUrl, }); const onLayoutReady = useHomeFragmentNavigation(); const mainRef = useRef(null); useCinematicScroll(mainRef); // o layout da home é estável na montagem: a chegada por fragmento (#contato etc.) já pode ser resolvida useEffect(() => onLayoutReady(), [onLayoutReady]); return (
{/* Cada filho direto de
é uma cena; useCinematicScroll liga as passagens entre elas. */}
); }