/* global React, Icon */
// ============================================
// MODULE MOCKUPS — lightweight SVG/HTML previews
// ============================================
// CRM / Kanban mockup
function KanbanMockup() {
const cols = [
{ name: 'Prospecção', color: '#64748b', items: [
{ t: 'Clínica Vida Nova', v: 'R$ 12k', tag: 'Indicação' },
{ t: 'Padaria São João', v: 'R$ 3.5k', tag: 'Inbound' },
]},
{ name: 'Qualificação', color: '#3b5bdb', items: [
{ t: 'Tech Corp SA', v: 'R$ 48k', tag: 'Enterprise', hot: true },
]},
{ name: 'Proposta', color: '#f59e0b', items: [
{ t: 'Mercado Central', v: 'R$ 18k', tag: 'SMB' },
{ t: 'Studio Fit', v: 'R$ 7k', tag: 'Inbound' },
]},
{ name: 'Fechado', color: '#10b981', items: [
{ t: 'Loja do Bairro', v: 'R$ 4.2k', tag: 'Recorrente' },
]},
];
return (
{/* header */}
Funil — Comercial 2026
12 oportunidades · R$ 92.7k em pipeline
Atualizado agora
{/* kanban */}
{cols.map((c, i) => (
{c.name}
{c.items.length}
{c.items.map((it, j) => (
{it.t}
{it.v}
{it.tag}
{it.hot && 🔥}
))}
))}
);
}
// Financeiro mockup
function FinanceMockup() {
const txs = [
{ d: '23/04', desc: 'Cliente X — Mensalidade', cat: 'Receita', v: '+ R$ 4.280,00', pos: true },
{ d: '22/04', desc: 'Fornecedor Cloud AWS', cat: 'Infraestrutura', v: '- R$ 1.842,30', pos: false },
{ d: '22/04', desc: 'Cliente Y — Mensalidade', cat: 'Receita', v: '+ R$ 2.100,00', pos: true },
{ d: '20/04', desc: 'Folha abril — parcial', cat: 'Pessoal', v: '- R$ 18.500,00', pos: false },
{ d: '19/04', desc: 'Cliente Z — Setup', cat: 'Receita', v: '+ R$ 12.000,00', pos: true },
];
return (
{/* top stats */}
{[
{ l: 'A receber', v: 'R$ 142.8k', c: '#10b981' },
{ l: 'A pagar', v: 'R$ 58.2k', c: '#ef4444' },
{ l: 'Projeção mensal', v: '+ R$ 84.6k', c: '#3b5bdb' },
].map((s, i) => (
))}
{/* mini chart */}
Fluxo de caixa · últimos 30 dias
● Entradas
● Saídas
{/* tx list */}
);
}
// ============================================
// GENERIC MODULE MOCKUP — flexible "dashboard-style" preview
// Accepts a config and renders a credible UI for any module.
// ============================================
function GenericMockup({ color, bg, icon, title, subtitle, rows = [], stats = [], chart = false }) {
return (
{/* header */}
{title}
{subtitle &&
{subtitle}
}
Tempo real
{/* stats */}
{stats.length > 0 && (
{stats.map((s, i) => (
))}
)}
{/* chart */}
{chart && (
{chart.label || 'Visão geral'}
)}
{/* rows */}
{rows.map((r, i) => (
{r.badge &&
}
{r.v &&
{r.v}
}
{r.tag &&
{r.tag}}
))}
);
}
window.KanbanMockup = KanbanMockup;
window.FinanceMockup = FinanceMockup;
window.GenericMockup = GenericMockup;