```react
import React, { useState, useEffect, useRef } from 'react';
import {
Shield,
BookOpen,
Award,
Users,
Phone,
MapPin,
Mail,
CheckCircle,
Lock,
Unlock,
Menu,
X,
Send,
MessageSquare,
Search,
Calendar,
ArrowRight,
ChevronRight,
Eye,
Info,
Heart,
Plus,
Trash2,
Edit3,
Save,
RefreshCw
} from 'lucide-react';
// Konfigurasi API Gemini
const apiKey = ""; // Disuntikkan otomatis oleh environment saat runtime
export default function App() {
// --- 1. STATE MANAGEMENT KONTEN EDITABLE (ADMIN CMS) ---
const [siteContent, setSiteContent] = useState({
schoolName: "MAS Al Irsyad Muning Baru",
fullName: "Madrasah Swasta Aliyah Al Irsyad Muning Baru",
announcement: "Penerimaan Santri Baru (PSB) TA 2026/2027 Telah Resmi Dibuka!",
heroTitle: "Membentuk Generasi Robbani, Unggul Sains & Teknologi",
heroSubtitle: "MAS Al Irsyad Muning Baru mengintegrasikan pendidikan akhlakul karimah kepesantrenan dengan keunggulan akademik sains berstandar nasional dan global.",
address: "Jl. KH. Akhmad Dahlan, Desa Muning Baru, Kec. Daha Selatan, Kab. Hulu Sungai Selatan, Kalimantan Selatan",
phone: "+62 812-5555-4321",
email: "humas@masalirsyadmuningbaru.sch.id",
vision: "Terwujudnya generasi muda Muslim beraqidah lurus, berakhlak mulia, berprestasi dalam sains & teknologi, serta siap berkontribusi positif bagi kemaslahatan umat global.",
accreditation: "A (Unggul)"
});
// State Tab & Menu Navigasi
const [activeTab, setActiveTab] = useState('beranda');
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
// --- 2. STATE OTENTIKASI & PANEL ADMIN ---
const [isAdminLoggedIn, setIsAdminLoggedIn] = useState(false);
const [adminPasswordInput, setAdminPasswordInput] = useState('');
const [loginError, setLoginError] = useState('');
const [showLoginModal, setShowLoginModal] = useState(false);
const [adminTab, setAdminTab] = useState('content'); // 'content' | 'students' | 'messages'
// --- 3. STATE DATABASE SISWA (BISA DIEDIT/TAMBAH OLEH ADMIN) ---
const [students, setStudents] = useState([
{ id: "1", nisn: "1234567890", nama: "Ahmad Fauzi Rahman", kelas: "XII IPA 1", status: "Aktif", tahunMasuk: "2024" },
{ id: "2", nisn: "0987654321", nama: "Siti Zulaiha Aminah", kelas: "XI IPS 2", status: "Aktif", tahunMasuk: "2025" },
{ id: "3", nisn: "1122334455", nama: "Muhammad Ridho Husaini", kelas: "X Keagamaan", status: "Aktif", tahunMasuk: "2026" }
]);
const [newStudent, setNewStudent] = useState({ nisn: '', nama: '', kelas: 'XII IPA 1', status: 'Aktif', tahunMasuk: '2026' });
const [studentError, setStudentError] = useState('');
// --- 4. STATE KOTAK MASUK (PESAN DARI PENGUNJUNG UMUM) ---
const [inboxMessages, setInboxMessages] = useState([
{ id: "1", nama: "H. Abdullah", email: "abdullah@gmail.com", pesan: "Assalamu'alaikum, apakah untuk pendaftaran santri baru jalur beasiswa tahfidz masih dibuka?", tanggal: "03 Juni 2026" },
{ id: "2", nama: "Siti Rahmah", email: "rahmah@outlook.com", pesan: "Mohon info brosur rincian biaya asrama putri MAS Al Irsyad Muning Baru.", tanggal: "02 Juni 2026" }
]);
// State Verifikasi NISN oleh Publik
const [searchNisn, setSearchNisn] = useState('');
const [verificationResult, setVerificationResult] = useState(null);
const [verificationError, setVerificationError] = useState('');
// State Formulir Hubungi Kami
const [contactForm, setContactForm] = useState({ nama: '', email: '', pesan: '' });
const [contactStatus, setContactStatus] = useState(null);
// --- 5. STATE ASISTEN AI GEMINI ---
const [chatOpen, setChatOpen] = useState(false);
const [messages, setMessages] = useState([
{ role: 'assistant', text: 'Assalamualaikum! Saya Asisten AI MAS Al Irsyad Muning Baru. Ada yang bisa saya bantu terkait informasi pendaftaran, program studi, kegiatan, atau sejarah madrasah kami?' }
]);
const [userInput, setUserInput] = useState('');
const [isAiTyping, setIsAiTyping] = useState(false);
const chatEndRef = useRef(null);
// Scroll otomatis percakapan AI
useEffect(() => {
if (chatEndRef.current) {
chatEndRef.current.scrollIntoView({ behavior: 'smooth' });
}
}, [messages, chatOpen]);
// --- FORM HANDLER & SANITASI ---
// Login Admin
const handleAdminLogin = (e) => {
e.preventDefault();
// Simulasi password aman
if (adminPasswordInput === 'admin123') {
setIsAdminLoggedIn(true);
setLoginError('');
setAdminPasswordInput('');
setShowLoginModal(false);
setActiveTab('admin'); // Langsung buka halaman admin
} else {
setLoginError('Password salah! Coba gunakan password simulasi: admin123');
}
};
// Logout Admin
const handleAdminLogout = () => {
setIsAdminLoggedIn(false);
if (activeTab === 'admin') {
setActiveTab('beranda');
}
};
// Update Konten Situs oleh Admin
const handleUpdateContent = (key, value) => {
setSiteContent(prev => ({
...prev,
[key]: value
}));
};
// Tambah Siswa Baru oleh Admin
const handleAddStudent = (e) => {
e.preventDefault();
setStudentError('');
if (newStudent.nisn.length !== 10) {
setStudentError('NISN harus 10 digit angka!');
return;
}
if (students.some(s => s.nisn === newStudent.nisn)) {
setStudentError('Siswa dengan NISN tersebut sudah terdaftar.');
return;
}
const createdStudent = {
id: Date.now().toString(),
...newStudent
};
setStudents(prev => [createdStudent, ...prev]);
setNewStudent({ nisn: '', nama: '', kelas: 'XII IPA 1', status: 'Aktif', tahunMasuk: '2026' });
};
// Hapus Siswa oleh Admin
const handleDeleteStudent = (id) => {
setStudents(prev => prev.filter(s => s.id !== id));
};
// Verifikasi NISN Terproteksi (Sisi Publik)
const handleVerifyNisn = (e) => {
e.preventDefault();
setVerificationResult(null);
setVerificationError('');
const sanitizedInput = searchNisn.replace(/[^0-9]/g, '');
if (sanitizedInput.length !== 10) {
setVerificationError('NISN harus terdiri dari 10 digit angka.');
return;
}
const matchedSiswa = students.find(s => s.nisn === sanitizedInput);
if (matchedSiswa) {
// Sensor Nama demi Privasi Publik (UU Pelindungan Data Pribadi)
const namaAsli = matchedSiswa.nama;
const kata = namaAsli.split(' ');
const namaDisensor = kata.map(w => {
if (w.length <= 2) return w;
return w[0] + '*'.repeat(w.length - 2) + w[w.length - 1];
}).join(' ');
setVerificationResult({
...matchedSiswa,
nama: namaDisensor
});
} else {
setVerificationError('Data siswa tidak ditemukan atau tidak dipublikasikan demi perlindungan privasi.');
}
};
// Kirim Pesan Kontak Publik (Disimpan ke Inbox Admin secara Real-time)
const handleContactSubmit = (e) => {
e.preventDefault();
const sanitize = (text) => text.replace(/<[^>]*>/g, '').trim();
const cleanNama = sanitize(contactForm.nama);
const cleanEmail = sanitize(contactForm.email);
const cleanPesan = sanitize(contactForm.pesan);
if (!cleanNama || !cleanEmail || !cleanPesan) {
setContactStatus({ type: 'error', text: 'Format isian tidak aman atau mengandung karakter mencurigakan.' });
return;
}
setContactStatus({ type: 'loading', text: 'Mengirim pesan secara aman...' });
// Tambah pesan ke inbox admin secara instan
const tglHariIni = new Date().toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' });
const newMessage = {
id: Date.now().toString(),
nama: cleanNama,
email: cleanEmail,
pesan: cleanPesan,
tanggal: tglHariIni
};
setTimeout(() => {
setInboxMessages(prev => [newMessage, ...prev]);
setContactStatus({
type: 'success',
text: `Terima kasih Kak ${cleanNama}, pesan Anda berhasil disaring dan dikirimkan secara aman ke tim sekretariat MAS Al Irsyad Muning Baru.`
});
setContactForm({ nama: '', email: '', pesan: '' });
}, 1200);
};
// Hapus Pesan dari Inbox Admin
const handleDeleteMessage = (id) => {
setInboxMessages(prev => prev.filter(m => m.id !== id));
};
// Panggilan API Gemini untuk Asisten AI Virtual
const fetchGeminiResponse = async (userText, retries = 5, delay = 1000) => {
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`;
const systemPrompt = `Kamu adalah Asisten AI Virtual resmi untuk website Madrasah Swasta Aliyah Al Irsyad Muning Baru (disingkat MAS Al Irsyad Muning Baru) yang berlokasi di Desa Muning Baru, Kecamatan Daha Selatan, Kabupaten Hulu Sungai Selatan, Kalimantan Selatan.
Berikan informasi ramah, terstruktur, edukatif, dan bernuansa islami.
Gunakan detail sekolah terbaru yang saat ini aktif:
- Nama Lengkap: Madrasah Swasta Aliyah Al Irsyad Muning Baru (MAS Al Irsyad Muning Baru)
- Akreditasi: ${siteContent.accreditation}
- Alamat: ${siteContent.address}
- Kontak: Telepon ${siteContent.phone} dan Email ${siteContent.email}
- Jurusan Unggulan: MIPA (Sains & Riset), IPS (Sosial & Kewirausahaan), dan Keagamaan Islam (Pendalaman Kitab Kuning, Tahfidz Al-Qur'an, dan Bahasa Arab).
- Visi: ${siteContent.vision}
- Pengumuman Aktif: ${siteContent.announcement}
Jawablah pertanyaan masyarakat umum atau calon wali murid dengan sangat santun, profesional, ringkas, dan mulailah dengan salam islami (Assalamu'alaikum).`;
const payload = {
contents: [{ parts: [{ text: userText }] }],
systemInstruction: { parts: [{ text: systemPrompt }] }
};
try {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (!response.ok) throw new Error(`HTTP Error: ${response.status}`);
const data = await response.json();
return data.candidates?.[0]?.content?.parts?.[0]?.text || "Maaf, saya sedang mengalami kendala dalam merespon pesan Anda.";
} catch (error) {
if (retries > 0) {
await new Promise(resolve => setTimeout(resolve, delay));
return fetchGeminiResponse(userText, retries - 1, delay * 2);
}
throw error;
}
};
// Mengirim Chat ke AI
const handleSendChat = async (e) => {
e.preventDefault();
if (!userInput.trim()) return;
const userText = userInput;
setMessages(prev => [...prev, { role: 'user', text: userText }]);
setUserInput('');
setIsAiTyping(true);
try {
const reply = await fetchGeminiResponse(userText);
setMessages(prev => [...prev, { role: 'assistant', text: reply }]);
} catch (err) {
setMessages(prev => [...prev, {
role: 'assistant',
text: 'Maaf, sistem AI MAS Al Irsyad Muning Baru sedang mengalami gangguan koneksi aman. Silakan coba sesaat lagi.'
}]);
} finally {
setIsAiTyping(false);
}
};
return (
{/* 1. TOP SECURE BANNER */}
Situs Resmi MAS Al Irsyad Muning Baru | Akses Publik Terproteksi
Admin CMS Enabled
{isAdminLoggedIn ? (
Sesi Admin Aktif
) : (
Mode Publik
)}
{/* MARQUEE ANNOUNCEMENT (Editable by Admin) */}
PENTING:
{siteContent.announcement}
{/* 2. MAIN HEADER & NAVIGATION */}
{/* Mobile Menu */}
{isMobileMenuOpen && (
{ setActiveTab('beranda'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-semibold ${activeTab === 'beranda' ? 'bg-emerald-50 text-emerald-800' : 'text-slate-600'}`}
>
Beranda
{ setActiveTab('profil'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-semibold ${activeTab === 'profil' ? 'bg-emerald-50 text-emerald-800' : 'text-slate-600'}`}
>
Profil MAS
{ setActiveTab('akademik'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-semibold ${activeTab === 'akademik' ? 'bg-emerald-50 text-emerald-800' : 'text-slate-600'}`}
>
Kurikulum
{ setActiveTab('verifikasi'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-semibold flex items-center gap-2 ${activeTab === 'verifikasi' ? 'bg-emerald-50 text-emerald-800' : 'text-slate-600'}`}
>
Verifikasi Siswa
{ setActiveTab('kontak'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-semibold ${activeTab === 'kontak' ? 'bg-emerald-50 text-emerald-800' : 'text-slate-600'}`}
>
Hubungi Kami
{isAdminLoggedIn && (
{ setActiveTab('admin'); setIsMobileMenuOpen(false); }}
className={`w-full text-left px-4 py-2.5 rounded-lg text-sm font-bold bg-amber-400 text-emerald-950 ${activeTab === 'admin' ? 'ring-2 ring-emerald-800' : ''}`}
>
🔓 Panel Admin (Aktif)
)}
)}
{/* 3. CORE CONTENTS */}
{/* ==================== TAB 1: BERANDA ==================== */}
{activeTab === 'beranda' && (
{/* Hero Section */}
{/* Admin Quick Editor Indicator */}
{isAdminLoggedIn && (
Admin Mode: Klik "Panel Admin" untuk merubah teks di bawah ini.
)}
Penerimaan Santri Baru TA 2026/2027 Dibuka
{siteContent.heroTitle}
{siteContent.heroSubtitle}
setActiveTab('akademik')}
className="bg-amber-500 hover:bg-amber-600 text-emerald-950 font-extrabold px-8 py-3.5 rounded-xl shadow-lg shadow-amber-500/20 transition-all text-center flex items-center justify-center gap-2 group"
>
Lihat Program Studi
setChatOpen(true)}
className="bg-white/10 hover:bg-white/20 text-white border border-white/20 font-semibold px-6 py-3.5 rounded-xl transition-all text-center"
>
Konsultasi Instan (AI)
{/* Hero Side Graphic */}
Akreditasi {siteContent.accreditation}
MAS AL IRSYAD
Muning Baru, Hulu Sungai Selatan
Database Publik Dienkripsi & Aman
{/* Quick Stats */}
{students.length + 120}+
Siswa Terdaftar
100%
Bebas Biaya Formulir
{/* Core Values Section */}
Mengapa Memilih MAS Al Irsyad Muning Baru?
Fokus utama madrasah adalah memberikan pendidikan yang seimbang antara IPTEK dan IMTAQ demi kesuksesan santri.
Kurikulum Terintegrasi
Memadukan kurikulum Kementerian Agama dengan program riset ilmiah, tahfidz mutqin, serta kajian kitab klasik/pesantren.
Prestasi & Karakter
Siswa dibimbing untuk meraih prestasi olimpiade sains (KSM) lokal maupun nasional dengan pembiasaan adab dan karakter mulia.
Lingkungan Asri & Aman
Terletak di Muning Baru, Daha Selatan dengan suasana yang damai, religius, serta kondusif bagi tumbuh kembang santri.
)}
{/* ==================== TAB 2: PROFIL MADRASAH ==================== */}
{activeTab === 'profil' && (
Profil MAS Al Irsyad Muning Baru
Madrasah Aliyah kebanggaan masyarakat Daha Selatan yang berkomitmen melahirkan lulusan berdaya saing tinggi.
{/* Visi Misi */}
Visi Madrasah
"{siteContent.vision}"
Strategi Pembelajaran & Misi
Menyelenggarakan tata kelola pembelajaran berbasis IT dan literasi digital yang sehat.
Mendalami ilmu-ilmu keislaman (*Tafsir*, *Hadits*, *Fiqih*) secara komprehensif.
Mempersiapkan kemandirian santri melalui pelatihan kewirausahaan lokal unggulan.
{/* Kepala Madrasah */}
Sambutan Kepala
"Kami berkomitmen mengelola MAS Al Irsyad Muning Baru sebagai lembaga pendidikan yang sehat, inklusif, dan aman untuk publik. Dengan sistem admin terpusat, kami menjamin penyampaian informasi yang dinamis, akurat, dan terverifikasi secara berkala."
Ustadz Drs. H. Sofyan Tsauri
Kepala Madrasah MAS Al Irsyad
)}
{/* ==================== TAB 3: AKADEMIK ==================== */}
{activeTab === 'akademik' && (
Pilihan Jurusan & Peminatan
Kurikulum MAS Al Irsyad Muning Baru disusun untuk membekali kecerdasan holistik.
{/* MIPA */}
MIPA
Ilmu Alam Terpadu
Mengasah kemampuan riset, matematika, pemecahan masalah (coding), fisika, kimia, dan biologi berbasis praktikum aman.
Fokus: Sains, IT & Kedokteran
{/* IPS */}
IPS
Ilmu Sosial & Keekonomian
Pembekalan kepemimpinan, sosiologi, tata kelola keuangan syariah, dan dasar hukum tata usaha negara yang etis.
Fokus: Hukum, Sosial & Bisnis Syariah
{/* KEAGAMAAN */}
AGM
Keagamaan Islam (Khusus)
Kajian literatur kitab kuning (Turats), tata bahasa Arab tingkat lanjut (Nahwu/Shorof), serta hafalan Al-Qur'an teruji.
Fokus: Ulama, Da'i & Guru Agama
)}
{/* ==================== TAB 4: VERIFIKASI SISWA ==================== */}
{activeTab === 'verifikasi' && (
Verifikasi Status Siswa Secara Mandiri
Mencegah penyalahgunaan informasi atau penipuan mengatasnamakan siswa {siteContent.schoolName}. Lakukan pengecekan status keaktifan di bawah ini.
{/* NISN Search Card */}
{/* Data Privacy Disclaimer */}
Catatan Pelindungan Data: Sesuai dengan UU Perlindungan Data Pribadi, kami tidak menyajikan alamat rumah, nomor HP, atau nama wali secara publik. Admin MAS Al Irsyad mengelola database ini secara berkala melalui Dasbor Terenkripsi.
{/* Search Result Display */}
{verificationResult && (
SISWA TERDAFTAR RESMI
Nama Lengkap (Disensor):
{verificationResult.nama}
Kelas:
{verificationResult.kelas}
Status Madrasah:
{verificationResult.status}
Tahun Masuk:
{verificationResult.tahunMasuk}
)}
{verificationError && (
{verificationError}
)}
{/* Test Helper */}
Gunakan NISN Demo di bawah:
{students.slice(0, 3).map(student => (
setSearchNisn(student.nisn)}
className="cursor-pointer bg-slate-100 hover:bg-emerald-50 hover:text-emerald-800 px-3 py-1.5 rounded text-xs font-mono font-bold border border-slate-200 transition-all"
>
{student.nisn} ({student.nama.split(' ')[0]})
))}
)}
{/* ==================== TAB 5: KONTAK ==================== */}
{activeTab === 'kontak' && (
Hubungi Kami
Jika Anda memiliki kritik, saran, atau pertanyaan kemitraan, hubungi kesekretariatan kami.
{/* Info Details */}
Kontak Resmi
{siteContent.address}
{siteContent.phone} (Hotline Humas)
{siteContent.email}
{/* Sanitized Message Form */}
Hubungi Kesekretariatan
Pesan dikirim terenkripsi langsung ke Dasbor Admin Madrasah untuk segera ditindaklanjuti.
{contactStatus && (
{contactStatus.text}
)}
)}
{/* ==================== TAB 6: ADMIN EDITABLE CMS DASHBOARD ==================== */}
{activeTab === 'admin' && isAdminLoggedIn && (
{/* Admin Header */}
Sesi Terverifikasi
DIP_SEC_SECURE_256
Dasbor Admin MAS Al Irsyad
Kelola konten website publik secara langsung tanpa gangguan.
Tutup Sesi Admin
{/* Sub-nav Admin */}
setAdminTab('content')}
className={`px-4 py-2.5 text-xs sm:text-sm font-bold whitespace-nowrap border-b-2 transition-all ${adminTab === 'content' ? 'border-emerald-700 text-emerald-800' : 'border-transparent text-slate-500 hover:text-slate-800'}`}
>
📝 Edit Konten Utama
setAdminTab('students')}
className={`px-4 py-2.5 text-xs sm:text-sm font-bold whitespace-nowrap border-b-2 transition-all ${adminTab === 'students' ? 'border-emerald-700 text-emerald-800' : 'border-transparent text-slate-500 hover:text-slate-800'}`}
>
👥 Database Siswa ({students.length})
setAdminTab('messages')}
className={`px-4 py-2.5 text-xs sm:text-sm font-bold whitespace-nowrap border-b-2 transition-all ${adminTab === 'messages' ? 'border-emerald-700 text-emerald-800' : 'border-transparent text-slate-500 hover:text-slate-800'}`}
>
📥 Pesan Masuk ({inboxMessages.length})
{/* Admin Tab 1: Edit Konten Website */}
{adminTab === 'content' && (
Modifikasi Teks Website Publik
Seluruh perubahan di atas langsung diperbarui secara instan pada beranda web serta basis data bot AI.
)}
{/* Admin Tab 2: Manajemen Siswa */}
{adminTab === 'students' && (
{/* Form Tambah Siswa */}
{/* Daftar Siswa Terdaftar */}
Daftar Aktif Siswa Terdaftar ({students.length})
NISN
Nama Lengkap
Kelas
Tahun
Aksi
{students.map((student) => (
{student.nisn}
{student.nama}
{student.kelas}
{student.tahunMasuk}
handleDeleteStudent(student.id)}
className="p-1 text-red-500 hover:bg-red-50 rounded transition-all"
title="Hapus Siswa"
>
))}
)}
{/* Admin Tab 3: Pesan Masuk */}
{adminTab === 'messages' && (
Kotak Masuk Pesan Elektronik ({inboxMessages.length})
{inboxMessages.length === 0 ? (
Belum ada pesan masuk dari pengunjung umum.
) : (
{inboxMessages.map((msg) => (
{msg.nama}
({msg.email})
{msg.tanggal}
"{msg.pesan}"
handleDeleteMessage(msg.id)}
className="self-end sm:self-center p-2 text-red-500 hover:bg-red-100 rounded-lg transition-all"
title="Hapus Pesan"
>
))}
)}
)}
)}
{/* 4. MODAL LOGIN ADMIN */}
{showLoginModal && (
Login Admin MAS Al Irsyad
setShowLoginModal(false)} className="text-slate-400 hover:text-slate-600">
Masukkan Sandi Keamanan
setAdminPasswordInput(e.target.value)}
className="w-full px-4 py-2.5 border border-slate-200 rounded-xl text-xs focus:ring-1 focus:ring-emerald-500 focus:outline-none"
required
/>
{loginError && (
{loginError}
)}
Masuk ke Panel Admin
)}
{/* 5. FLOATING AI CHATBOT (GEMINI) */}
{!chatOpen ? (
setChatOpen(true)}
className="w-14 h-14 bg-emerald-800 hover:bg-emerald-900 text-white rounded-full shadow-2xl flex items-center justify-center cursor-pointer transition-transform hover:scale-105 border-2 border-amber-400 relative group"
>
Tanya Asisten AI MAS
) : (
{/* Header Chat */}
AI
Asisten Virtual MAS
Mode Enkripsi Aktif
setChatOpen(false)} className="text-white hover:text-amber-400 transition-colors">
{/* Chat Messages */}
{messages.map((msg, index) => (
))}
{isAiTyping && (
)}
{/* Chat Input */}
setUserInput(e.target.value)}
className="flex-grow px-3 py-2 border border-slate-200 rounded-lg focus:outline-none focus:ring-1 focus:ring-emerald-500 text-xs"
/>
)}
{/* 6. FOOTER */}
);
}
```