function BuilderScreen() { const [selected, setSelected] = useState("kpi-1"); const widgets = [ { kind: "KPI Tile", icon: "gauge" }, { kind: "Line Chart", icon: "lineChart" }, { kind: "Bar Chart", icon: "barChart" }, { kind: "Pie / Donut", icon: "pie" }, { kind: "Table", icon: "table" }, { kind: "Pivot", icon: "layers" }, { kind: "Map", icon: "map" }, { kind: "Heatmap", icon: "activity" }, { kind: "Gauge", icon: "gauge" }, { kind: "Calendar", icon: "calendar" }, { kind: "Image", icon: "image" }, { kind: "Text / Markdown", icon: "text" }, ]; return (
{/* Left palette */}
Widgets
Drag to canvas
{widgets.map((w, i) => (
{w.kind}
))}
Data
{["gem_transactions", "state_revenue_daily", "vendor_master"].map(d => (
{d}
))}
{/* Canvas */}
GeM Quarterly Review
Draft Saved 2 min ago
{/* Grid canvas */}
{/* Row 1: 4 KPIs */} {KPIS.map((k, i) => (
setSelected(`kpi-${i}`)} className="card" style={{ gridColumn: 'span 3', position: 'relative', outline: selected === `kpi-${i}` ? '2px solid var(--primary)' : 'none', cursor: 'pointer' }}>
{k.label}
{k.value}{k.unit}
{fmtPct(k.delta)}
{selected === `kpi-${i}` && }
))} {/* Row 2: 2 large */}
setSelected("chart-1")} style={{ gridColumn: 'span 8', outline: selected === "chart-1" ? '2px solid var(--primary)' : 'none', cursor: 'pointer', position: 'relative' }}>

Revenue Trend

{selected === "chart-1" && }
setSelected("chart-2")} style={{ gridColumn: 'span 4', outline: selected === "chart-2" ? '2px solid var(--primary)' : 'none', cursor: 'pointer', position: 'relative' }}>

Category Split

{selected === "chart-2" && }
{/* Drop zone */}
Drop a widget here — or ask AI to add one
{/* Right properties */}
Properties
{selected ? 'KPI Tile · GeM Procurement' : 'No widget selected'}
{selected && (
Auto-detect anomalies
Show AI-generated caption
Forecast next quarter
)}
); } function WidgetHandles() { return <>
; } function PropSection({ title, children }) { return (
{title}
{children}
); } function PropField({ label, value }) { return (
{label}
{value}
); } window.BuilderScreen = BuilderScreen;