/* global React, Icon, StatusPill, fmtAED */ const { useState } = React; /* ============================================================ FUNNELS LIST + BUILDER The funnel builder = a list of pages stacked in sequence. Each page is its own HTML — we render a placeholder lineup. ============================================================ */ function Funnels({ goto }) { return (
Marketing

Funnels

{window.FUNNELS.length} funnels · {window.FUNNELS.filter(f => f.status === 'live').length} live
{window.FUNNELS.map(f => (
goto('funnel-builder', f.id)}>
{f.name}
lineagroup.ae/{f.slug}
{f.submissions}
Subs
{f.conversion}%
Conv
{f.pages}
Pages
))}
); } function FunnelBuilder({ funnelId, goto }) { const f = window.FUNNELS.find(x => x.id === funnelId) || window.FUNNELS[0]; const [selectedPage, setSelectedPage] = useState(0); const [device, setDevice] = useState('desktop'); const pages = [ { id: 1, label: 'Landing — Hero', slug: '/' }, { id: 2, label: 'Step 2 — Application', slug: '/apply' }, { id: 3, label: 'Step 3 — Calendar', slug: '/book' }, { id: 4, label: 'Confirmation — Thank You', slug: '/confirm' }, ].slice(0, f.pages); const blocks = ['Hero', 'Video VSL', 'Body Copy', 'Form', 'Testimonial', 'FAQ', 'Footer', 'Custom Code']; return (
{/* Left: page list */}
{f.name}
/{f.slug}
Pages · {pages.length}
{pages.map((p, i) => (
setSelectedPage(i)} style={{ padding: 10, border: '1px solid', borderColor: i === selectedPage ? 'var(--accent)' : 'var(--divider)', marginBottom: 6, cursor: 'pointer', background: i === selectedPage ? 'var(--raised)' : 'transparent', display: 'flex', alignItems: 'center', gap: 8, }}>
{i+1}
{p.label}
{p.slug}
))}
{/* Middle: canvas */}
{['desktop', 'tablet', 'mobile'].map(d => ( ))}
{/* Mock landing page */}
Hero

The 7-Day Funnel Audit For DTC Brands.

We tear down your current funnel, identify the leaks, and hand you a 7-day fix plan. Free.

Video VSL
Form
Footer
© Linea Group · lineagroup.ae
{/* Right: blocks library + properties */}
Blocks
{blocks.map(b => { const isCode = b === 'Custom Code'; return (
{isCode && {''}} {b}
); })}
Properties · Hero
Heading
CTA Label
CTA Link
Background
{['#0a0a0a', '#141414', '#22c55e', '#ffffff'].map(c => (
))}
); } Object.assign(window, { Funnels, FunnelBuilder });