/* global React */ /* ===================================================== Digital Valor — Visual modules - HeroDashboard: aquisição & vendas dashboard - FlowDiagram: campanhas → otimização - EDVADiagram: 4 pilares conectados - MiniFunnel: visitante → otimização ===================================================== */ const { useState, useEffect } = React; /* ---------- Helper: count-up number ---------- */ function CountUp({ value, suffix = "", prefix = "", duration = 1200 }) { const [n, setN] = useState(0); useEffect(() => { let raf; const start = performance.now(); const tick = (now) => { const t = Math.min(1, (now - start) / duration); const eased = 1 - Math.pow(1 - t, 3); setN(value * eased); if (t < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); return () => cancelAnimationFrame(raf); }, [value, duration]); const fmt = Number.isInteger(value) ? Math.round(n).toLocaleString("pt-BR") : n.toFixed(1).replace(".", ","); return {prefix}{fmt}{suffix}; } /* ---------- Hero Dashboard ---------- */ function HeroDashboard() { const months = ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago"]; // pairs of [oportunidades, vendas] const data = [ [42, 16], [55, 22], [68, 28], [74, 32], [82, 38], [95, 44], [110, 52], [124, 61], ]; const maxV = 130; return (
Painel · Aquisição e Vendas
Mês Trimestre Ano
Oportunidades
↑ 28% vs período anterior
Em atendimento
↑ 14% follow-up ativo
Conversão comercial
↑ 6,2 p.p. ajuste de funil
Funil mensal · oportunidades vs vendas fechadas
Oportunidades Vendas
); } /* ---------- Flow diagram (Tese section) ---------- */ function FlowDiagram() { const steps = [ { name: "Campanhas", icon: "spark" }, { name: "Oportunidades", icon: "leads" }, { name: "Atendimento", icon: "chat" }, { name: "Conversão", icon: "check" }, { name: "Dados", icon: "data" }, { name: "Otimização", icon: "tune" }, ]; return (
{steps.map((s, i) => (
{String(i + 1).padStart(2, "0")}
{s.name}
{i < steps.length - 1 && }
))}
); } function FlowIcon({ name }) { const common = { width: 28, height: 28, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.6, strokeLinecap: "round", strokeLinejoin: "round" }; const color = { color: "var(--dv-green)" }; if (name === "spark") return ; if (name === "leads") return ; if (name === "chat") return ; if (name === "check") return ; if (name === "data") return ; if (name === "tune") return ; return null; } /* ---------- EDVA Diagram ---------- */ function EDVADiagram() { const tiles = [ { L: "E", name: "Estrutura", step: "Etapa 01", body: "Organizamos a base: funil, canais, CRM, WhatsApp comercial, indicadores e processo de acompanhamento." }, { L: "D", name: "Demanda", step: "Etapa 02", body: "Ativamos campanhas, criativos e canais digitais para gerar novas oportunidades comerciais." }, { L: "V", name: "Vendas", step: "Etapa 03", body: "Ajustamos o processo de atendimento, follow-up e conversão para que mais interessados avancem até a compra." }, { L: "A", name: "Aceleração", step: "Etapa 04", body: "Analisamos dados, identificamos gargalos e otimizamos campanhas, funil e comercial continuamente." }, ]; return (
{tiles.map((t, i) => (
{t.L}
{t.step}

{t.name}

{t.body}

{i < tiles.length - 1 &&
))}

Quando marketing e vendas trabalham como sistema, a empresa ganha previsibilidade.

); } /* ---------- Mini Funnel ---------- */ function MiniFunnel() { const steps = [ { label: "Visitante", v: "100%" }, { label: "Lead", v: "42%" }, { label: "Atendimento", v: "31%" }, { label: "Proposta", v: "18%" }, { label: "Venda", v: "9%" }, ]; return (
Funil de aquisição
conversão por etapa
{steps.map((s, i) => (
{String(i + 1).padStart(2, "0")} {s.label} {s.v}
))}
Otimização contínua sobre os dados do funil
); } Object.assign(window, { HeroDashboard, FlowDiagram, EDVADiagram, MiniFunnel, CountUp });