import React from 'react' import * as z from "zod"; export const layoutId = 'number-box-slide' export const layoutName = 'Number Box Slide' export const layoutDescription = 'A professional slide featuring numbered content boxes with titles, descriptions, and clean typography.' const numberBoxSlideSchema = z.object({ title: z.string().min(3).max(100).default('Key Metrics').meta({ description: "Main title of the slide", }), subtitle: z.string().min(10).max(200).optional().meta({ description: "Optional subtitle or description", }), numberBoxes: z.array(z.object({ number: z.string().min(1).max(20).meta({ description: "Number or statistic to display", }), title: z.string().min(2).max(50).meta({ description: "Title for the number", }), description: z.string().min(10).max(100).meta({ description: "Brief description of the metric", }) })).min(2).max(6).default([ { number: '150+', title: 'Projects Completed', description: 'Successfully delivered across various industries' }, { number: '98%', title: 'Client Satisfaction', description: 'Consistently exceeding expectations' }, { number: '24/7', title: 'Support Available', description: 'Round-the-clock assistance for all clients' } ]).meta({ description: "List of number boxes (2-6 items)", }) }) export const Schema = numberBoxSlideSchema export type NumberBoxSlideData = z.infer interface NumberBoxSlideLayoutProps { data?: Partial } const NumberBoxSlideLayout: React.FC = ({ data: slideData }) => { // Parse and validate data with defaults // const data = numberBoxSlideSchema.parse(slideData || {}) return (
{/* Subtle background pattern */}
{/* Header section */}

{slideData?.title || 'Key Metrics'}

{slideData?.subtitle && (

{slideData.subtitle}

)}
{/* Content section */}
{slideData?.numberBoxes?.map((box, index) => (
{/* Number display */}
{box.number}

{box.title}

{box.description}

{/* Decorative corner accent */}
))}
{/* Bottom decorative accent */}
) } export default NumberBoxSlideLayout