"use client"; import React, { useRef } from "react"; import { motion, useScroll, useSpring } from "framer-motion"; import { Calendar, Lightbulb, Heart, Target } from "lucide-react"; import { cn } from "@/lib/utils"; // 1. Definição da Interface de Dados interface StoryStep { year: string; title: string; description: string; icon: React.ElementType; color: string; side: "left" | "right"; } const STORY_DATA: StoryStep[] = [ { year: "2024", title: "A Pergunta Simples", description: "O que realmente tem nesse produto? Decifrar tabelas nutricionais era um desafio individual que percebemos ser global.", icon: Calendar, color: "blue", side: "left", }, { year: "Descoberta", title: "Não Estávamos Sozinhos", description: "Milhares de pessoas buscam transparência alimentar. A necessidade de dados abertos tornou-se uma urgência técnica.", icon: Lightbulb, color: "green", side: "right", }, { year: "Solução", title: "NutriScan Nasce", description: "Nascido da Engenharia para o mundo. Uma ponte entre o código de barras e a verdade nutricional.", icon: Heart, color: "purple", side: "left", }, { year: "Hoje", title: "Nossa Missão", description: "Democratizar a informação. Conectar cidadãos à maior base de dados colaborativa do planeta.", icon: Target, color: "orange", side: "right", }, ]; export function StorySection() { const containerRef = useRef(null); // 2. Lógica de Scroll Progressivo (Engenharia de Movimento) const { scrollYProgress } = useScroll({ target: containerRef, offset: ["start end", "end end"], }); const scaleY = useSpring(scrollYProgress, { stiffness: 100, damping: 30, restDelta: 0.001 }); return (
{/* Header com Animação de Entrada */}

Nossa história

De uma dúvida individual a uma plataforma de transparência global.

{/* 3. A Linha do Tempo Reativa */}
{STORY_DATA.map((step, index) => ( ))}
); } // 4. Sub-componente com Encapsulamento de Animação function TimelineItem({ step }: { step: StoryStep; index: number }) { const isLeft = step.side === "left"; const colorMap = { blue: "bg-blue-500 text-blue-500 border-blue-200 dark:border-blue-900/30", green: "bg-green-500 text-green-500 border-green-200 dark:border-green-900/30", purple: "bg-purple-500 text-purple-500 border-purple-200 dark:border-purple-900/30", orange: "bg-orange-500 text-orange-500 border-orange-200 dark:border-orange-900/30", }; return (
{/* Conteúdo */}
{step.year}

{step.title}

{step.description}

{/* Ponto Central com Efeito de Pulso */}
); }