import React from 'react' import * as z from 'zod' import { ResponsiveContainer, BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, LineChart, Line, PieChart, Pie, Cell, } from 'recharts' const layoutId = 'chart-left-text-right-layout' const layoutName = 'Chart Left Text Right' const layoutDescription = 'A slide with header label, a left-side inline bar chart, and right-side title with paragraph.' const ChartDatumSchema = z.object({ label: z.string().min(1).max(12).default('A').meta({ description: 'Category label' }), value: z.number().min(0).max(100).default(60).meta({ description: 'Value 0–100' }), }) const Schema = z.object({ title: z .string() .min(16) .max(64) .default('Insights At A Glance') .meta({ description: 'Main heading (max ~7 words)' }), paragraph: z .string() .min(50) .max(200) .default( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ) .meta({ description: 'Supporting description' }), chart: z .object({ type: z.enum(['bar', 'horizontalBar', 'line', 'pie']).default('line'), data: z.array(ChartDatumSchema).min(3).max(8).default([ { label: 'A', value: 60 }, { label: 'B', value: 42 }, { label: 'C', value: 75 }, { label: 'D', value: 30 }, ]), showLabels: z.boolean().default(true), }) .default({ type: 'line', data: [ { label: 'A', value: 60 }, { label: 'B', value: 42 }, { label: 'C', value: 75 }, { label: 'D', value: 30 }, ], showLabels: true, }), }) const CHART_COLORS = [ '#3b82f6', '#ef4444', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#84cc16', '#f97316', '#ec4899', '#6366f1' ]; type SlideData = z.infer interface SlideLayoutProps { data?: Partial } const dynamicSlideLayout: React.FC = ({ data: slideData }) => { const data = slideData?.chart?.data || [] const type = slideData?.chart?.type || 'bar' const showLabels = slideData?.chart?.showLabels !== false const axisProps = { tick: { fill: 'var(--background-text, #7f8491)', fontSize: 12, fontWeight: 600 }, axisLine: { stroke: 'var(--background-text, #7f8491)' }, tickLine: { stroke: 'var(--background-text, #7f8491)' }, }; return ( <>
{((slideData as any)?.__companyName__ || (slideData as any)?._logo_url__) &&
{(slideData as any)?._logo_url__ && logo} {(slideData as any)?.__companyName__ && {(slideData as any)?.__companyName__ || "Pitchdeck"}}
}
{/* Left: Recharts visualization */}
{type === 'bar' ? ( {data.map((_, i) => ( ))} ) : type === 'horizontalBar' ? ( {data.map((_, i) => ( ))} ) : type === 'line' ? ( {data.map((_, i) => ( ))} ) : ( {data.map((_, i) => ( ))} )}
{/* Right: Text */}

{slideData?.title || 'Insights At A Glance'}

{slideData?.paragraph || 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'}

) } export { Schema, layoutId, layoutName, layoutDescription } export default dynamicSlideLayout