import React, { useState, useEffect, useRef, useMemo } from 'react'; import { Wand2, Layout, Type, UserSquare2, Image as ImageIcon, Eraser, Sparkles, Layers, Minimize2, Maximize2, Scan, Package, Heart, Video, Mic2, Settings, LogOut, ChevronRight, Play, Download, Trash2, Send, Camera, Shirt, Palette, Volume2, Plus, Search, HelpCircle, Menu, X, CheckCircle2, AlertCircle, Loader2, FileJson, User, MonitorPlay, Move, Focus, UserCheck, Film, Music, Mic, Crop, ArrowRight } from 'lucide-react'; /** * GOOGLE GENAI CONFIGURATION & SERVICES */ const apiKey = ""; // Runtime provides this via environment // Mock service for local logic when API is loading or not yet configured const geminiService = { async generateText(prompt) { try { const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ parts: [{ text: prompt }] }] }) }); const result = await response.json(); return result.candidates?.[0]?.content?.parts?.[0]?.text || "Maaf, terjadi kesalahan saat memproses teks."; } catch (e) { console.error(e); // Fallback response for demo if API fails return "Ini adalah contoh respons otomatis dari Magic AI. Dalam aplikasi nyata, teks ini dihasilkan oleh Gemini berdasarkan input Anda untuk meningkatkan kualitas prompt."; } }, async generateImage(prompt) { try { const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/imagen-4.0-generate-001:predict?key=${apiKey}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instances: { prompt }, parameters: { sampleCount: 1 } }) }); const result = await response.json(); return `data:image/png;base64,${result.predictions[0].bytesBase64Encoded}`; } catch (e) { console.error(e); // Fallback image (using placeholder service) return `https://placehold.co/1024x1024/6366f1/ffffff?text=${encodeURIComponent(prompt.substring(0, 20))}`; } }, async generateSpeech(text, voice = "Kore") { // Mock simulation for TTS return new Promise(resolve => setTimeout(() => resolve("audio_data_mock"), 2000)); }, async generateVideo(prompt) { // Mock simulation for Veo return new Promise(resolve => setTimeout(() => resolve("https://www.w3schools.com/html/mov_bbb.mp4"), 3000)); }, async enhancePrompt(currentInput) { const prompt = `Bertindaklah sebagai Prompt Engineer ahli. Tulis ulang dan tingkatkan deskripsi berikut agar menjadi prompt yang sangat detail, artistik, dan profesional untuk AI Generator (Image/Video). Tambahkan detail pencahayaan, gaya, dan mood. Input: "${currentInput}". Outputkan HANYA prompt final dalam bahasa Inggris.`; return this.generateText(prompt); } }; /** * REUSABLE UI COMPONENTS */ const GlassCard = ({ children, className = "" }) => (
{children}
); const Button = ({ children, onClick, variant = "primary", className = "", loading = false, disabled = false, icon: Icon }) => { const variants = { primary: "bg-gradient-to-r from-indigo-600 to-purple-600 text-white hover:opacity-90 shadow-lg shadow-indigo-200", secondary: "bg-white/60 text-slate-700 hover:bg-white/80 border border-slate-200", danger: "bg-rose-500 text-white hover:bg-rose-600", ghost: "bg-transparent text-slate-500 hover:bg-slate-100", magic: "bg-gradient-to-r from-amber-200 to-yellow-400 text-amber-900 border border-amber-300 hover:from-amber-300 hover:to-yellow-500" }; return ( ); }; // New Component: Magic AI Input Wrapper const MagicInput = ({ value, onChange, placeholder, className = "", multiline = false }) => { const [loading, setLoading] = useState(false); const handleMagic = async () => { if (!value) return; setLoading(true); try { const enhanced = await geminiService.enhancePrompt(value); onChange({ target: { value: enhanced } }); } catch (e) { console.error(e); } finally { setLoading(false); } }; return (
{multiline ? (