/* * ThreeColumnLayout.tsx * Purpose: Implements one of the generic fallback slide layouts used when a template-specific renderer is unavailable. * Used by: components/slides/SlideFactory. * Depends on: Template styling props and inline field-edit callbacks. */ 'use client'; import React, { useState } from 'react'; import { TemplateStyles } from '@/data/templates'; export interface ThreeColumnLayoutProps { title: string; columns: Array<{ heading: string; text: string }>; styles: TemplateStyles; slideId?: string; isEditable?: boolean; onFieldUpdate?: (slideId: string, field: string, value: string, index?: number) => void; } export default function ThreeColumnLayout({ title, columns, styles, slideId, isEditable = false, onFieldUpdate, }: ThreeColumnLayoutProps) { const [editingField, setEditingField] = useState<{ field: string; index?: number; sub?: string } | null>(null); const [tempTitle, setTempTitle] = useState(title); const [tempColumns, setTempColumns] = useState(columns); const handleBlur = (field: string, index?: number) => { if (!slideId || !onFieldUpdate) return; if (field === 'title' && tempTitle !== title) onFieldUpdate(slideId, 'title', tempTitle); if (field === 'columns' && index !== undefined) { onFieldUpdate(slideId, 'columns', JSON.stringify(tempColumns[index]), index); } setEditingField(null); }; const handleKeyDown = (e: React.KeyboardEvent, field: string, index?: number) => { if (e.key === 'Enter') { e.preventDefault(); handleBlur(field, index); } if (e.key === 'Escape') { setEditingField(null); setTempTitle(title); setTempColumns(columns); } }; return (