{/* Header */}
{/* Notifikasi Message */}
{message.text && (
{/* Modal Preview Seluruh Slide */}
{showPreview && (
Auto PPT Generator
Ubah teks dan ide Anda menjadi slide presentasi PowerPoint (.pptx) yang siap pakai hanya dalam hitungan detik.
{message.type === 'error' ? : }
)}
{message.text}
{/* Form Panel (Kiri) */}
{/* Preview Panel (Kanan) - Simulasi Tampilan */}
{/* Judul PPT */}
{/* Unggah Logo */}
{/* Footer Action */}
setTitle(e.target.value)}
placeholder="Contoh: Strategi Pemasaran Q3 2026"
className="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all outline-none"
/>
{/* Materi PPT */}
{/* Template PPT */}
{/* Model Tulisan */}
{/* Ukuran Tulisan */}
setTitleFontSize(Number(e.target.value))}
className="w-full px-3 py-2.5 rounded-lg border border-gray-200 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all outline-none bg-white"
min="10" max="100"
/>
setSlideTitleFontSize(Number(e.target.value))}
className="w-full px-3 py-2.5 rounded-lg border border-gray-200 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all outline-none bg-white"
min="10" max="100"
/>
setContentFontSize(Number(e.target.value))}
className="w-full px-3 py-2.5 rounded-lg border border-gray-200 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all outline-none bg-white"
min="10" max="100"
/>
{!logoBase64 ? (
)}
fileInputRef.current?.click()}
>
) : (
Klik untuk mengunggah logo
PNG, JPG up to 2MB
{!scriptLoaded && (
Menyiapkan mesin pembuat PPT...
)}Preview Slide Judul
{/* Aspek rasio 16:9 untuk preview */}
t.id === template)?.bg}`,
color: `#${templates.find(t => t.id === template)?.text}`,
fontFamily: font
}}
>
{/* Logo Preview */}
{logoBase64 && (
)}
{/* Title Preview */}
t.id === template)?.text}`, fontSize: `${Math.max(16, titleFontSize * 0.7)}px` // Diskalakan sedikit untuk preview agar tidak menabrak kotak }} > {title || "Judul Presentasi Anda"}
{/* Accent Line */} t.id === template)?.accent}` }}
>
💡 Tips Penulisan Materi:
Pisahkan antar slide dengan 2x Enter (baris kosong).
Baris pertama pada setiap bagian akan otomatis dijadikan sebagai Judul Slide, dan baris berikutnya akan menjadi poin-poin isi slide.
{/* Modal Header */}
{/* Modal Body (Scrollable Slides) */}
Preview Seluruh Slide
{parsedSlides.map((slide, index) => (
))}
{/* Modal Footer */}
Slide {index + 1} {index === 0 && '(Judul Utama)'}
t.id === template)?.bg}`,
color: `#${templates.find(t => t.id === template)?.text}`,
fontFamily: font
}}
>
{/* Logo Preview */}
{logoBase64 && (
)}
{slide.type === 'title' ? (
) : (
)}
{slide.title}
t.id === template)?.accent}` }}
>
{slide.title}
t.id === template)?.accent}` }}
>
-
{slide.bullets.map((bullet, bIndex) => (
- {bullet} ))}