import * as z from "zod"; const MetricSchema = z.object({ value: z.string().min(2).max(6).meta({ description: "Primary metric value.", }), label: z.string().min(3).max(15).meta({ description: "Metric label text.", }), subtext: z.string().min(3).max(30).meta({ description: "Metric subtext/description.", }), }); export const slideLayoutId = "description-and-metrics-slide"; export const slideLayoutName = "Description and Metrics Slide"; export const slideLayoutDescription = "A metrics slide with description text on the left and metric cards on the right."; export const Schema = z.object({ title: z.string().min(6).max(18).default("Metrics").meta({ description: "Slide title shown at the top-left.", }), explanationTitle: z.string().min(4).max(16).default("Explanation").meta({ description: "Heading above the explanatory paragraph.", }), explanation: z .string() .max(320) .default( "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." ) .meta({ description: "Body text for the narrative section.", }), metrics: z .array(MetricSchema) .min(0) .max(4) .default([ { value: "50k+", label: "Active Users", subtext: "Last 12 months" }, { value: "50k+", label: "Active Users", subtext: "Last 12 months" }, { value: "50k+", label: "Active Users", subtext: "Last 12 months" }, { value: "50k+", label: "Active Users", subtext: "Last 12 months" } ]) .meta({ description: "Metric cards shown in the right column.", }), pageLabel: z.string().min(3).max(8).optional().default("10 / 11").meta({ description: "Bottom pagination label.", }), }); export type SchemaType = z.infer; const CodeSlide10MetricsSplit = ({ data }: { data: Partial }) => { return ( <>

{data.title}

{data.explanationTitle}

{data.explanation}

{data?.metrics?.map((metric, index) => (

{metric.value}

{metric.label}

{metric.subtext}

))}
{data?.pageLabel}
); }; export default CodeSlide10MetricsSplit;