E-PERPUS

 E-PERPUS disini



<!DOCTYPE html>

<html lang="id" class="h-full">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Perpustakaan Digital SMK Kebon Jeruk</title>

    <!-- Tailwind CSS -->

    <script src="https://cdn.tailwindcss.com"></script>

    <script>

        tailwind.config = {

            darkMode: 'class',

            theme: {

                extend: {

                    colors: {

                        brand: {

                            50: '#eff6ff',

                            100: '#dbeafe',

                            500: '#3b82f6',

                            600: '#2563eb',

                            700: '#1d4ed8',

                            800: '#1e40af',

                            900: '#1e3a8a',

                        }

                    }

                }

            }

        }

    </script>

    <!-- Google Fonts Inter -->

    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">

    <!-- FontAwesome Icons -->

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

    <style>

        body { font-family: 'Inter', sans-serif; }

        .tab-content { display: none; }

        .tab-content.active { display: block; }

        /* Custom scrollbar */

        ::-webkit-scrollbar { width: 6px; height: 6px; }

        ::-webkit-scrollbar-track { background: #f1f1f1; }

        ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; }

        ::-webkit-scrollbar-thumb:hover { background: #94a3b8; }


        @media print {

            body * {

                visibility: hidden;

            }

            #printArea, #printArea * {

                visibility: visible;

            }

            #printArea {

                position: absolute;

                left: 0;

                top: 0;

                width: 100%;

                background: white !important;

            }

            .no-print {

                display: none !important;

            }

        }

    </style>

</head>

<body class="bg-slate-50 text-slate-800 h-full flex flex-col md:flex-row overflow-hidden selection:bg-brand-500 selection:text-white">


    <!-- Sidebar Navigation for Desktop & Mobile Toggle -->

    <aside id="sidebar" class="bg-slate-900 text-slate-300 w-full md:w-64 flex-shrink-0 flex flex-col transition-all duration-300 z-30 fixed md:static inset-y-0 left-0 transform -translate-x-full md:translate-x-0 shadow-xl no-print">

        <!-- Logo Header -->

        <div class="p-5 flex items-center justify-between border-b border-slate-800">

            <div class="flex items-center space-x-3">

                <div class="bg-brand-600 text-white p-2.5 rounded-xl shadow-lg flex items-center justify-center">

                    <i class="fa-solid fa-graduation-cap text-xl"></i>

                </div>

                <div>

                    <h1 class="font-bold text-white text-base tracking-wide">SMK KEBON JERUK</h1>

                    <p class="text-xs text-brand-400 font-medium">Perpustakaan Digital</p>

                </div>

            </div>

            <button id="closeSidebar" class="md:hidden text-slate-400 hover:text-white p-1">

                <i class="fa-solid fa-xmark text-lg"></i>

            </button>

        </div>


        <!-- Navigation Menu -->

        <nav class="flex-1 px-3 py-4 space-y-1.5 overflow-y-auto text-sm font-medium">

            <a href="#dashboard" onclick="switchTab('dashboard')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white active-tab">

                <i class="fa-solid fa-house-chimney w-5 text-center"></i>

                <span>Dashboard</span>

            </a>

            <a href="#koleksi" onclick="switchTab('koleksi')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-book-bookmark w-5 text-center"></i>

                <span>Data Koleksi</span>

            </a>

            <a href="#pencarian" onclick="switchTab('pencarian')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-magnifying-glass w-5 text-center"></i>

                <span>Pencarian Buku</span>

            </a>

            <a href="#anggota" onclick="switchTab('anggota')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-users w-5 text-center"></i>

                <span>Data Anggota</span>

            </a>

            <a href="#peminjaman" onclick="switchTab('peminjaman')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-right-left w-5 text-center"></i>

                <span>Peminjaman & Kembali</span>

            </a>

            <a href="#digital" onclick="switchTab('digital')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-laptop-code w-5 text-center"></i>

                <span>Perpus Digital & Modul</span>

            </a>

            <a href="#laporan" onclick="switchTab('laporan')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-chart-pie w-5 text-center"></i>

                <span>Laporan & Rekap</span>

            </a>

            <a href="#profil" onclick="switchTab('profil')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-school w-5 text-center"></i>

                <span>Profil Perpustakaan</span>

            </a>

            <a href="#pengaturan" onclick="switchTab('pengaturan')" class="nav-link flex items-center space-x-3 px-3.5 py-3 rounded-xl transition-all duration-200 text-slate-300 hover:bg-slate-800 hover:text-white">

                <i class="fa-solid fa-gear w-5 text-center"></i>

                <span>Pengaturan Sistem</span>

            </a>

        </nav>


        <!-- User profile / Footer widget -->

        <div class="p-4 border-t border-slate-800 bg-slate-950/50">

            <div class="flex items-center space-x-3">

                <div class="bg-slate-800 text-brand-400 p-2 rounded-full font-bold text-sm w-9 h-9 flex items-center justify-center">

                    AD

                </div>

                <div class="overflow-hidden">

                    <p class="text-xs font-semibold text-white truncate">Administrator</p>

                    <p class="text-[11px] text-slate-400 truncate">pustaka@smkkebonjeruk.sch.id</p>

                </div>

            </div>

        </div>

    </aside>


    <!-- Main Content Area -->

    <div class="flex-1 flex flex-col h-full overflow-hidden">

        <!-- Top Navbar -->

        <header class="bg-white border-b border-slate-200 h-16 flex items-center justify-between px-4 sm:px-6 z-20 shadow-sm flex-shrink-0 no-print">

            <div class="flex items-center space-x-3">

                <button id="openSidebar" class="md:hidden text-slate-600 hover:text-brand-600 focus:outline-none p-1.5 rounded-lg hover:bg-slate-100">

                    <i class="fa-solid fa-bars text-lg"></i>

                </button>

                <h2 id="pageTitle" class="text-lg font-bold text-slate-800 tracking-tight">Dashboard Perpustakaan</h2>

            </div>

            <div class="flex items-center space-x-3">

                <span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-50 text-emerald-700 border border-emerald-200">

                    <span class="w-1.5 h-1.5 mr-1.5 bg-emerald-500 rounded-full animate-pulse"></span>

                    Local Storage Aktif

                </span>

                <button onclick="resetAllData()" title="Reset Data ke Awal" class="text-slate-400 hover:text-rose-600 p-2 rounded-lg hover:bg-slate-100 transition-colors">

                    <i class="fa-solid fa-rotate-right text-sm"></i>

                </button>

            </div>

        </header>


        <!-- Scrollable Content Viewports -->

        <main class="flex-1 overflow-y-auto p-4 sm:p-6 lg:p-8 bg-slate-50">


            <!-- 1. DASHBOARD TAB -->

            <div id="tab-dashboard" class="tab-content active space-y-6">

                <!-- Welcome Banner -->

                <div class="bg-gradient-to-r from-brand-600 to-blue-700 rounded-2xl p-6 sm:p-8 text-white shadow-xl relative overflow-hidden">

                    <div class="absolute right-0 bottom-0 opacity-10 transform translate-x-10 translate-y-10 pointer-events-none">

                        <i class="fa-solid fa-book-open-reader text-9xl"></i>

                    </div>

                    <div class="relative z-10 max-w-2xl">

                        <span class="bg-brand-500/40 text-brand-100 text-xs font-semibold px-3 py-1 rounded-full uppercase tracking-wider">E-Library SMK Kebon Jeruk</span>

                        <h3 class="text-2xl sm:text-3xl font-bold mt-2">Selamat Datang di Portal Pustaka Cerdas</h3>

                        <p class="text-blue-100 text-sm sm:text-base mt-2 leading-relaxed">Kelola data peminjaman, referensi buku kejuruan lengkap, modul digital, serta rekapitulasi literasi warga sekolah dengan mudah dan terintegrasi.</p>

                        <div class="mt-5 flex flex-wrap gap-3">

                            <button onclick="switchTab('pencarian')" class="bg-white text-brand-700 hover:bg-blue-50 font-semibold text-sm px-5 py-2.5 rounded-xl shadow transition-all duration-200 flex items-center space-x-2">

                                <i class="fa-solid fa-magnifying-glass"></i>

                                <span>Cari Buku Cepat</span>

                            </button>

                            <button onclick="switchTab('peminjaman')" class="bg-brand-700 hover:bg-brand-800 text-white font-semibold text-sm px-5 py-2.5 rounded-xl shadow border border-brand-500 transition-all duration-200 flex items-center space-x-2">

                                <i class="fa-solid fa-right-left"></i>

                                <span>Kelola Peminjaman</span>

                            </button>

                        </div>

                    </div>

                </div>


                <!-- Stats Grid -->

                <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6">

                    <!-- Total Buku -->

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex items-center space-x-4">

                        <div class="bg-blue-50 text-blue-600 w-14 h-14 rounded-2xl flex items-center justify-center flex-shrink-0 text-2xl shadow-inner">

                            <i class="fa-solid fa-book"></i>

                        </div>

                        <div>

                            <p class="text-sm font-medium text-slate-500">Jumlah Buku & E-Book</p>

                            <h4 id="statTotalBuku" class="text-2xl font-bold text-slate-900 mt-1">0</h4>

                            <p class="text-xs text-emerald-600 font-medium mt-1"><i class="fa-solid fa-arrow-up mr-1"></i>Referensi Lengkap</p>

                        </div>

                    </div>

                    <!-- Total Anggota -->

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex items-center space-x-4">

                        <div class="bg-emerald-50 text-emerald-600 w-14 h-14 rounded-2xl flex items-center justify-center flex-shrink-0 text-2xl shadow-inner">

                            <i class="fa-solid fa-users"></i>

                        </div>

                        <div>

                            <p class="text-sm font-medium text-slate-500">Total Anggota</p>

                            <h4 id="statTotalAnggota" class="text-2xl font-bold text-slate-900 mt-1">0</h4>

                            <p class="text-xs text-emerald-600 font-medium mt-1"><i class="fa-solid fa-check mr-1"></i>Siswa & Guru</p>

                        </div>

                    </div>

                    <!-- Sedang Dipinjam -->

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex items-center space-x-4">

                        <div class="bg-amber-50 text-amber-600 w-14 h-14 rounded-2xl flex items-center justify-center flex-shrink-0 text-2xl shadow-inner">

                            <i class="fa-solid fa-clock-rotate-left"></i>

                        </div>

                        <div>

                            <p class="text-sm font-medium text-slate-500">Sedang Dipinjam</p>

                            <h4 id="statDipinjam" class="text-2xl font-bold text-slate-900 mt-1">0</h4>

                            <p class="text-xs text-amber-600 font-medium mt-1"><i class="fa-solid fa-info-circle mr-1"></i>Aktif s.d hari ini</p>

                        </div>

                    </div>

                    <!-- Modul & Digital -->

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex items-center space-x-4">

                        <div class="bg-purple-50 text-purple-600 w-14 h-14 rounded-2xl flex items-center justify-center flex-shrink-0 text-2xl shadow-inner">

                            <i class="fa-solid fa-laptop-file"></i>

                        </div>

                        <div>

                            <p class="text-sm font-medium text-slate-500">Modul & LKPD Digital</p>

                            <h4 id="statDigital" class="text-2xl font-bold text-slate-900 mt-1">0</h4>

                            <p class="text-xs text-purple-600 font-medium mt-1"><i class="fa-solid fa-download mr-1"></i>Siap Unduh</p>

                        </div>

                    </div>

                </div>


                <!-- Recent Activities & Quick Info Grid -->

                <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">

                    <!-- Aktivitas Peminjaman Terbaru -->

                    <div class="lg:col-span-2 bg-white rounded-2xl shadow-sm border border-slate-200 p-6">

                        <div class="flex items-center justify-between mb-4">

                            <h4 class="font-bold text-slate-800 text-base">Aktivitas Peminjaman Terbaru</h4>

                            <button onclick="switchTab('peminjaman')" class="text-xs text-brand-600 hover:text-brand-700 font-semibold">Lihat Semua</button>

                        </div>

                        <div class="overflow-x-auto">

                            <table class="w-full text-left border-collapse">

                                <thead>

                                    <tr class="border-b border-slate-100 text-xs font-semibold text-slate-500 uppercase">

                                        <th class="py-3 px-3">Peminjam</th>

                                        <th class="py-3 px-3">Buku</th>

                                        <th class="py-3 px-3">Tgl Pinjam</th>

                                        <th class="py-3 px-3">Status</th>

                                    </tr>

                                </thead>

                                <tbody id="dashboardRecentActivity" class="text-sm divide-y divide-slate-100">

                                    <!-- Populated via JS -->

                                </tbody>

                            </table>

                        </div>

                    </div>


                    <!-- Pengumuman & Jam Layanan -->

                    <div class="bg-white rounded-2xl shadow-sm border border-slate-200 p-6 flex flex-col justify-between">

                        <div>

                            <h4 class="font-bold text-slate-800 text-base mb-4 flex items-center">

                                <i class="fa-solid fa-bullhorn text-brand-600 mr-2"></i> Pengumuman Pustaka

                            </h4>

                            <div class="space-y-3">

                                <div class="bg-blue-50 border border-blue-100 p-3.5 rounded-xl">

                                    <p class="text-xs font-bold text-blue-900">Referensi Buku Kejuruan</p>

                                    <p class="text-xs text-blue-700 mt-1">Koleksi referensi buku cetak Kurikulum Merdeka untuk PPLG, TJKT, DKV, Akuntansi & Perhotelan kini telah diperbarui.</p>

                                </div>

                                <div class="bg-emerald-50 border border-emerald-100 p-3.5 rounded-xl">

                                    <p class="text-xs font-bold text-emerald-900">Modul Ajar Terbaru</p>

                                    <p class="text-xs text-emerald-700 mt-1">Silakan unduh modul praktik kejuruan terbaru di menu Perpus Digital untuk menunjang kegiatan KBM.</p>

                                </div>

                            </div>

                        </div>

                        <div class="mt-6 pt-4 border-t border-slate-100 text-xs text-slate-500">

                            <p class="font-semibold text-slate-700 mb-1">Jam Operasional Perpustakaan:</p>

                            <p>Senin - Kamis: 07.00 - 16.00 WIB</p>

                            <p>Jumat: 07.00 - 15.00 WIB</p>

                        </div>

                    </div>

                </div>

            </div>


            <!-- 2. DATA KOLEKSI TAB -->

            <div id="tab-koleksi" class="tab-content space-y-6">

                <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 bg-white p-6 rounded-2xl shadow-sm border border-slate-200">

                    <div>

                        <h3 class="text-lg font-bold text-slate-900">Manajemen Data Koleksi Buku</h3>

                        <p class="text-xs text-slate-500 mt-0.5">Kelola referensi buku cetak dan e-book perpustakaan SMK Kebon Jeruk.</p>

                    </div>

                    <div class="flex items-center space-x-3">

                        <button onclick="openBukuModal()" class="bg-brand-600 hover:bg-brand-700 text-white font-semibold text-sm px-4 py-2.5 rounded-xl shadow transition-all duration-200 flex items-center space-x-2">

                            <i class="fa-solid fa-plus"></i>

                            <span>Tambah Koleksi</span>

                        </button>

                    </div>

                </div>


                <!-- Filter & Table -->

                <div class="bg-white rounded-2xl shadow-sm border border-slate-200 overflow-hidden">

                    <div class="p-4 sm:p-6 border-b border-slate-100 flex flex-col sm:flex-row gap-4 items-center justify-between">

                        <div class="w-full sm:w-72 relative">

                            <span class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-slate-400">

                                <i class="fa-solid fa-magnifying-glass text-sm"></i>

                            </span>

                            <input type="text" id="searchKoleksiInput" onkeyup="filterKoleksi()" placeholder="Cari judul, penulis, ISBN..." class="w-full pl-9 pr-4 py-2 bg-slate-50 border border-slate-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20 focus:border-brand-500">

                        </div>

                        <div class="flex items-center space-x-3 w-full sm:w-auto">

                            <select id="filterKategoriKoleksi" onchange="filterKoleksi()" class="bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-sm text-slate-700 focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                                <option value="">Semua Jenis Koleksi</option>

                                <option value="Buku Cetak">Buku Cetak</option>

                                <option value="E-Book">E-Book</option>

                                <option value="Modul Ajar">Modul Ajar</option>

                            </select>

                        </div>

                    </div>

                    <div class="overflow-x-auto">

                        <table class="w-full text-left border-collapse">

                            <thead>

                                <tr class="bg-slate-50 border-b border-slate-200 text-xs font-semibold text-slate-500 uppercase tracking-wider">

                                    <th class="py-3.5 px-4">Judul & ISBN</th>

                                    <th class="py-3.5 px-4">Penulis / Penerbit</th>

                                    <th class="py-3.5 px-4">Kategori / Jurusan</th>

                                    <th class="py-3.5 px-4">Jenis</th>

                                    <th class="py-3.5 px-4 text-center">Stok / File</th>

                                    <th class="py-3.5 px-4 text-center">Aksi</th>

                                </tr>

                            </thead>

                            <tbody id="tabelKoleksiBody" class="text-sm divide-y divide-slate-100">

                                <!-- Populated by JS -->

                            </tbody>

                        </table>

                    </div>

                </div>

            </div>


            <!-- 3. PENCARIAN BUKU TAB -->

            <div id="tab-pencarian" class="tab-content space-y-6">

                <div class="bg-gradient-to-r from-slate-900 to-slate-800 rounded-2xl p-6 sm:p-10 text-white shadow-xl text-center space-y-4">

                    <h3 class="text-2xl sm:text-3xl font-bold">Pencarian Koleksi Perpustakaan</h3>

                    <p class="text-slate-300 text-sm max-w-xl mx-auto">Temukan buku pelajaran, referensi kejuruan, maupun e-book dengan cepat menggunakan kata kunci judul atau nama penulis.</p>

                    <div class="max-w-2xl mx-auto relative flex items-center">

                        <span class="absolute left-4 text-slate-400 text-lg">

                            <i class="fa-solid fa-magnifying-glass"></i>

                        </span>

                        <input type="text" id="liveSearchInput" oninput="executeLiveSearch()" placeholder="Ketik judul buku, pengarang, atau kejuruan (misal: TJKT, PPLG, Akuntansi)..." class="w-full pl-12 pr-4 py-4 bg-white text-slate-900 placeholder-slate-400 rounded-2xl text-sm sm:text-base font-medium shadow-2xl focus:outline-none focus:ring-4 focus:ring-brand-500/30">

                    </div>

                </div>


                <!-- Hasil Pencarian Grid -->

                <div>

                    <div class="flex items-center justify-between mb-4">

                        <h4 class="font-bold text-slate-800 text-base" id="searchResultTitle">Hasil Koleksi Tersedia</h4>

                        <span id="searchResultCount" class="text-xs bg-slate-200 text-slate-700 px-2.5 py-1 rounded-full font-semibold">0 Buku</span>

                    </div>

                    <div id="liveSearchResultGrid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6">

                        <!-- Populated by JS -->

                    </div>

                </div>

            </div>


            <!-- 4. DATA ANGGOTA TAB -->

            <div id="tab-anggota" class="tab-content space-y-6">

                <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 bg-white p-6 rounded-2xl shadow-sm border border-slate-200">

                    <div>

                        <h3 class="text-lg font-bold text-slate-900">Data Anggota Perpustakaan</h3>

                        <p class="text-xs text-slate-500 mt-0.5">Kelola siswa, guru, dan tenaga kependidikan SMK Kebon Jeruk.</p>

                    </div>

                    <div class="flex items-center space-x-3">

                        <button onclick="openAnggotaModal()" class="bg-brand-600 hover:bg-brand-700 text-white font-semibold text-sm px-4 py-2.5 rounded-xl shadow transition-all duration-200 flex items-center space-x-2">

                            <i class="fa-solid fa-user-plus"></i>

                            <span>Tambah Anggota</span>

                        </button>

                    </div>

                </div>


                <!-- Anggota Table -->

                <div class="bg-white rounded-2xl shadow-sm border border-slate-200 overflow-hidden">

                    <div class="p-4 sm:p-6 border-b border-slate-100 flex flex-col sm:flex-row gap-4 items-center justify-between">

                        <div class="w-full sm:w-72 relative">

                            <span class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-slate-400">

                                <i class="fa-solid fa-magnifying-glass text-sm"></i>

                            </span>

                            <input type="text" id="searchAnggotaInput" onkeyup="filterAnggota()" placeholder="Cari nama, NIS/NIP..." class="w-full pl-9 pr-4 py-2 bg-slate-50 border border-slate-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                        </div>

                        <div class="flex items-center space-x-3 w-full sm:w-auto">

                            <select id="filterRoleAnggota" onchange="filterAnggota()" class="bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-sm text-slate-700 focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                                <option value="">Semua Peran</option>

                                <option value="Siswa">Siswa</option>

                                <option value="Guru">Guru</option>

                                <option value="Tenaga Kependidikan">Tenaga Kependidikan</option>

                            </select>

                        </div>

                    </div>

                    <div class="overflow-x-auto">

                        <table class="w-full text-left border-collapse">

                            <thead>

                                <tr class="bg-slate-50 border-b border-slate-200 text-xs font-semibold text-slate-500 uppercase tracking-wider">

                                    <th class="py-3.5 px-4">Nama Lengkap</th>

                                    <th class="py-3.5 px-4">ID / NIS / NIP</th>

                                    <th class="py-3.5 px-4">Peran</th>

                                    <th class="py-3.5 px-4">Kelas / Jabatan</th>

                                    <th class="py-3.5 px-4">No. Telepon / WA</th>

                                    <th class="py-3.5 px-4 text-center">Aksi</th>

                                </tr>

                            </thead>

                            <tbody id="tabelAnggotaBody" class="text-sm divide-y divide-slate-100">

                                <!-- Populated by JS -->

                            </tbody>

                        </table>

                    </div>

                </div>

            </div>


            <!-- 5. PEMINJAMAN & PENGEMBALIAN TAB -->

            <div id="tab-peminjaman" class="tab-content space-y-6">

                <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 bg-white p-6 rounded-2xl shadow-sm border border-slate-200">

                    <div>

                        <h3 class="text-lg font-bold text-slate-900">Transaksi Peminjaman & Pengembalian</h3>

                        <p class="text-xs text-slate-500 mt-0.5">Catat peminjaman buku fisik dan pantau status pengembalian.</p>

                    </div>

                    <div class="flex items-center space-x-3">

                        <button onclick="openPinjamModal()" class="bg-brand-600 hover:bg-brand-700 text-white font-semibold text-sm px-4 py-2.5 rounded-xl shadow transition-all duration-200 flex items-center space-x-2">

                            <i class="fa-solid fa-circle-plus"></i>

                            <span>Catat Peminjaman Baru</span>

                        </button>

                    </div>

                </div>


                <!-- Peminjaman Table -->

                <div class="bg-white rounded-2xl shadow-sm border border-slate-200 overflow-hidden">

                    <div class="p-4 sm:p-6 border-b border-slate-100 flex items-center justify-between">

                        <h4 class="font-bold text-slate-800 text-sm">Daftar Sirkulasi Buku</h4>

                        <div class="flex items-center space-x-2">

                            <select id="filterStatusPinjam" onchange="renderPeminjaman()" class="bg-slate-50 border border-slate-200 rounded-xl px-3 py-1.5 text-xs text-slate-700">

                                <option value="">Semua Status</option>

                                <option value="Dipinjam">Dipinjam</option>

                                <option value="Dikembalikan">Dikembalikan</option>

                            </select>

                        </div>

                    </div>

                    <div class="overflow-x-auto">

                        <table class="w-full text-left border-collapse">

                            <thead>

                                <tr class="bg-slate-50 border-b border-slate-200 text-xs font-semibold text-slate-500 uppercase tracking-wider">

                                    <th class="py-3.5 px-4">Peminjam</th>

                                    <th class="py-3.5 px-4">Judul Buku</th>

                                    <th class="py-3.5 px-4">Tgl Pinjam</th>

                                    <th class="py-3.5 px-4">Batas Kembali</th>

                                    <th class="py-3.5 px-4">Status</th>

                                    <th class="py-3.5 px-4 text-center">Aksi</th>

                                </tr>

                            </thead>

                            <tbody id="tabelPeminjamanBody" class="text-sm divide-y divide-slate-100">

                                <!-- Populated by JS -->

                            </tbody>

                        </table>

                    </div>

                </div>

            </div>


            <!-- 6. PERPUSTAKAAN DIGITAL TAB -->

            <div id="tab-digital" class="tab-content space-y-6">

                <div class="bg-gradient-to-r from-purple-700 to-indigo-800 rounded-2xl p-6 sm:p-8 text-white shadow-xl flex flex-col md:flex-row items-center justify-between gap-6">

                    <div>

                        <span class="bg-purple-500/40 text-purple-100 text-xs font-semibold px-3 py-1 rounded-full uppercase tracking-wider">Digital Learning Repository</span>

                        <h3 class="text-2xl font-bold mt-2">Modul Ajar, LKPD & E-Book Legal SMK</h3>

                        <p class="text-purple-100 text-sm mt-1 max-w-xl">Unduh modul kejuruan Kurikulum Merdeka, Lembar Kerja Peserta Didik, serta e-book pembelajaran resmi secara gratis.</p>

                    </div>

                    <button onclick="openDigitalModal()" class="bg-white text-purple-800 hover:bg-purple-50 font-semibold text-sm px-5 py-3 rounded-xl shadow transition-all whitespace-nowrap flex items-center space-x-2">

                        <i class="fa-solid fa-cloud-arrow-up"></i>

                        <span>Upload File Digital</span>

                    </button>

                </div>


                <!-- Filter & Digital Repository Grid -->

                <div>

                    <div class="flex flex-col sm:flex-row items-center justify-between gap-4 mb-4">

                        <h4 class="font-bold text-slate-800 text-base">Koleksi Digital Tersedia</h4>

                        <div class="flex items-center space-x-2 w-full sm:w-auto">

                            <select id="filterKategoriDigital" onchange="renderDigitalRepo()" class="bg-white border border-slate-200 rounded-xl px-3 py-2 text-sm text-slate-700 focus:outline-none">

                                <option value="">Semua Kategori</option>

                                <option value="Modul Ajar">Modul Ajar</option>

                                <option value="LKPD">LKPD</option>

                                <option value="E-Book Legal">E-Book Legal</option>

                                <option value="Materi Pembelajaran">Materi Pembelajaran</option>

                            </select>

                        </div>

                    </div>

                    <div id="digitalRepoGrid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6">

                        <!-- Populated by JS -->

                    </div>

                </div>

            </div>


            <!-- 7. LAPORAN & REKAP TAB -->

            <div id="tab-laporan" class="tab-content space-y-6">

                <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 no-print">

                    <div>

                        <h3 class="text-lg font-bold text-slate-900">Laporan & Rekapitulasi Perpustakaan</h3>

                        <p class="text-xs text-slate-500 mt-0.5">Statistik rekapitulasi koleksi, peminjaman, dan aktivitas literasi warga sekolah.</p>

                    </div>

                    <button onclick="window.print()" class="bg-slate-900 hover:bg-slate-800 text-white font-semibold text-sm px-4 py-2.5 rounded-xl shadow transition-all duration-200 flex items-center space-x-2">

                        <i class="fa-solid fa-print"></i>

                        <span>Cetak Laporan</span>

                    </button>

                </div>


                <!-- Printable Report Area -->

                <div id="printArea" class="space-y-6">

                    <div class="hidden print:block text-center pb-4 border-b-2 border-slate-800 mb-6">

                        <h1 class="text-xl font-bold uppercase">PEMERINTAH PROVINSI DKI JAKARTA</h1>

                        <h2 class="text-lg font-bold uppercase">SMK KEBON JERUK JAKARTA</h2>

                        <h3 class="text-md font-semibold">LAPORAN REKAPITULASI PERPUSTAKAAN DIGITAL</h3>

                        <p class="text-xs text-slate-600 mt-1">Jl. Salak Barat No. 34, Kebon Jeruk, Jakarta Barat</p>

                    </div>


                    <!-- Report Summary Cards -->

                    <div class="grid grid-cols-1 sm:grid-cols-3 gap-6">

                        <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 space-y-2">

                            <p class="text-xs font-bold text-slate-400 uppercase tracking-wider">Total Buku Fisik</p>

                            <h4 id="rekapBukuFisik" class="text-3xl font-black text-slate-900">0</h4>

                            <p class="text-xs text-slate-500">Tersedia di rak perpustakaan sekolah</p>

                        </div>

                        <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 space-y-2">

                            <p class="text-xs font-bold text-slate-400 uppercase tracking-wider">Total Peminjaman Keseluruhan</p>

                            <h4 id="rekapTotalPinjam" class="text-3xl font-black text-brand-600">0</h4>

                            <p class="text-xs text-slate-500">Akumulasi transaksi tercatat</p>

                        </div>

                        <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 space-y-2">

                            <p class="text-xs font-bold text-slate-400 uppercase tracking-wider">Total File Digital / E-Book</p>

                            <h4 id="rekapTotalDigital" class="text-3xl font-black text-purple-600">0</h4>

                            <p class="text-xs text-slate-500">Modul, LKPD, dan materi siap unduh</p>

                        </div>

                    </div>


                    <!-- Log Peminjaman Rekap -->

                    <div class="bg-white rounded-2xl shadow-sm border border-slate-200 p-6">

                        <h4 class="font-bold text-slate-800 text-base mb-4">Rekapitulasi Riwayat Sirkulasi</h4>

                        <div class="overflow-x-auto">

                            <table class="w-full text-left border-collapse">

                                <thead>

                                    <tr class="border-b border-slate-100 text-xs font-semibold text-slate-500 uppercase">

                                        <th class="py-3 px-3">ID Transaksi</th>

                                        <th class="py-3 px-3">Nama Peminjam</th>

                                        <th class="py-3 px-3">Buku Dipinjam</th>

                                        <th class="py-3 px-3">Tanggal Pinjam</th>

                                        <th class="py-3 px-3">Status Terakhir</th>

                                    </tr>

                                </thead>

                                <tbody id="tabelRekapBody" class="text-sm divide-y divide-slate-100">

                                    <!-- Populated by JS -->

                                </tbody>

                            </table>

                        </div>

                    </div>

                </div>

            </div>


            <!-- 8. PROFIL PERPUSTAKAAN TAB -->

            <div id="tab-profil" class="tab-content space-y-6">

                <div class="bg-white rounded-2xl shadow-sm border border-slate-200 overflow-hidden">

                    <div class="bg-gradient-to-r from-slate-900 to-brand-900 p-8 text-white">

                        <div class="flex items-center space-x-4">

                            <div class="bg-white/10 p-4 rounded-2xl border border-white/20">

                                <i class="fa-solid fa-school text-4xl text-brand-400"></i>

                            </div>

                            <div>

                                <span class="bg-brand-500 text-white text-xs font-bold px-2.5 py-1 rounded-md uppercase">Profil Resmi</span>

                                <h3 class="text-2xl font-bold mt-2">Perpustakaan SMK Kebon Jeruk</h3>

                                <p class="text-slate-300 text-xs sm:text-sm mt-1">Pusat Literasi dan Sumber Belajar Unggul Berbasis Digital</p>

                            </div>

                        </div>

                    </div>

                    <div class="p-6 sm:p-8 space-y-6 text-sm text-slate-700">

                        <div class="grid grid-cols-1 md:grid-cols-2 gap-6">

                            <div class="space-y-4">

                                <h4 class="font-bold text-slate-900 text-base border-b pb-2"><i class="fa-solid fa-circle-info text-brand-600 mr-2"></i> Informasi Sekolah</h4>

                                <p><strong>NPSN:</strong> 20101234 (Contoh)</p>

                                <p><strong>Alamat:</strong> Jl. Salak Barat No. 34, Kebon Jeruk, Jakarta Barat, DKI Jakarta</p>

                                <p><strong>Email:</strong> perpustakaan@smkkebonjeruk.sch.id</p>

                                <p><strong>Akreditasi:</strong> A (Unggul)</p>

                            </div>

                            <div class="space-y-4">

                                <h4 class="font-bold text-slate-900 text-base border-b pb-2"><i class="fa-solid fa-bullseye text-brand-600 mr-2"></i> Visi & Misi Pustaka</h4>

                                <p class="italic text-slate-600">"Menjadi pusat layanan informasi dan literasi digital yang unggul dalam mendukung kompetensi keahlian siswa SMK Kebon Jeruk yang siap kerja, mandiri, dan berkarakter."</p>

                                <ul class="list-disc list-inside space-y-1 text-xs text-slate-600">

                                    <li>Menyediakan koleksi buku cetak & digital yang relevan dengan kurikulum.</li>

                                    <li>Memberikan pelayanan prima berbasis teknologi informasi.</li>

                                    <li>Meningkatkan minat baca warga sekolah melalui program literasi kreatif.</li>

                                </ul>

                            </div>

                        </div>

                    </div>

                </div>

            </div>


            <!-- 9. PENGATURAN TAB -->

            <div id="tab-pengaturan" class="tab-content space-y-6">

                <div class="bg-white p-6 sm:p-8 rounded-2xl shadow-sm border border-slate-200 max-w-2xl space-y-6">

                    <div>

                        <h3 class="text-lg font-bold text-slate-900">Pengaturan & Penyimpanan Lokal</h3>

                        <p class="text-xs text-slate-500 mt-0.5">Kelola penyimpanan data lokal (LocalStorage) browser Anda.</p>

                    </div>


                    <div class="space-y-4 pt-4 border-t border-slate-100">

                        <div class="flex items-center justify-between p-4 bg-slate-50 rounded-xl border border-slate-200">

                            <div>

                                <p class="font-semibold text-sm text-slate-800">Status Database Lokal</p>

                                <p class="text-xs text-slate-500 mt-0.5">Semua perubahan data disimpan otomatis di memori browser.</p>

                            </div>

                            <span class="bg-emerald-100 text-emerald-800 text-xs font-bold px-3 py-1 rounded-full">Aktif</span>

                        </div>


                        <div class="flex items-center justify-between p-4 bg-rose-50 rounded-xl border border-rose-100">

                            <div>

                                <p class="font-semibold text-sm text-rose-900">Reset Seluruh Data</p>

                                <p class="text-xs text-rose-600 mt-0.5">Kembalikan data koleksi, anggota, dan peminjaman ke data referensi awal.</p>

                            </div>

                            <button onclick="resetAllData()" class="bg-rose-600 hover:bg-rose-700 text-white font-semibold text-xs px-4 py-2 rounded-lg transition-colors">

                                Reset Data

                            </button>

                        </div>

                    </div>

                </div>

            </div>


        </main>

    </div>


    <!-- MODALS SECTION -->


    <!-- Modal Tambah/Edit Buku -->

    <div id="bukuModal" class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4 overflow-y-auto">

        <div class="bg-white rounded-2xl shadow-2xl max-w-lg w-full overflow-hidden animate-in fade-in zoom-in duration-200">

            <div class="p-6 border-b border-slate-100 flex items-center justify-between bg-slate-50">

                <h4 id="bukuModalTitle" class="font-bold text-slate-900 text-base">Tambah Koleksi Baru</h4>

                <button onclick="closeBukuModal()" class="text-slate-400 hover:text-slate-600"><i class="fa-solid fa-xmark text-lg"></i></button>

            </div>

            <form id="bukuForm" onsubmit="saveBuku(event)" class="p-6 space-y-4">

                <input type="hidden" id="bukuId">

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Judul Buku / E-Book *</label>

                    <input type="text" id="bukuJudul" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Penulis *</label>

                        <input type="text" id="bukuPenulis" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Penerbit</label>

                        <input type="text" id="bukuPenerbit" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Jenis Koleksi *</label>

                        <select id="bukuJenis" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                            <option value="Buku Cetak">Buku Cetak</option>

                            <option value="E-Book">E-Book</option>

                            <option value="Modul Ajar">Modul Ajar</option>

                        </select>

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Kategori / Jurusan *</label>

                        <input type="text" id="bukuKategori" placeholder="misal: PPLG / TJKT / Umum" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Tahun Terbit</label>

                        <input type="number" id="bukuTahun" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Stok / Jumlah Eksemplar *</label>

                        <input type="number" id="bukuStok" min="1" value="5" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                </div>

                <div class="flex justify-end space-x-3 pt-4 border-t border-slate-100">

                    <button type="button" onclick="closeBukuModal()" class="px-4 py-2 text-sm font-semibold text-slate-600 hover:bg-slate-100 rounded-xl">Batal</button>

                    <button type="submit" class="px-5 py-2 text-sm font-semibold bg-brand-600 hover:bg-brand-700 text-white rounded-xl shadow">Simpan Koleksi</button>

                </div>

            </form>

        </div>

    </div>


    <!-- Modal Tambah/Edit Anggota -->

    <div id="anggotaModal" class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4 overflow-y-auto">

        <div class="bg-white rounded-2xl shadow-2xl max-w-lg w-full overflow-hidden">

            <div class="p-6 border-b border-slate-100 flex items-center justify-between bg-slate-50">

                <h4 id="anggotaModalTitle" class="font-bold text-slate-900 text-base">Tambah Anggota Baru</h4>

                <button onclick="closeAnggotaModal()" class="text-slate-400 hover:text-slate-600"><i class="fa-solid fa-xmark text-lg"></i></button>

            </div>

            <form id="anggotaForm" onsubmit="saveAnggota(event)" class="p-6 space-y-4">

                <input type="hidden" id="anggotaId">

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Nama Lengkap *</label>

                    <input type="text" id="anggotaNama" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Nomor Induk (NIS / NIP) *</label>

                        <input type="text" id="anggotaNomorId" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Peran *</label>

                        <select id="anggotaPeran" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                            <option value="Siswa">Siswa</option>

                            <option value="Guru">Guru</option>

                            <option value="Tenaga Kependidikan">Tenaga Kependidikan</option>

                        </select>

                    </div>

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Kelas / Jabatan *</label>

                        <input type="text" id="anggotaKelas" placeholder="misal: XI PPLG 1" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">No. Telepon / WhatsApp *</label>

                        <input type="text" id="anggotaTelepon" placeholder="misal: 081234567890" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                    </div>

                </div>

                <div class="flex justify-end space-x-3 pt-4 border-t border-slate-100">

                    <button type="button" onclick="closeAnggotaModal()" class="px-4 py-2 text-sm font-semibold text-slate-600 hover:bg-slate-100 rounded-xl">Batal</button>

                    <button type="submit" class="px-5 py-2 text-sm font-semibold bg-brand-600 hover:bg-brand-700 text-white rounded-xl shadow">Simpan Anggota</button>

                </div>

            </form>

        </div>

    </div>


    <!-- Modal Peminjaman Baru -->

    <div id="pinjamModal" class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4 overflow-y-auto">

        <div class="bg-white rounded-2xl shadow-2xl max-w-lg w-full overflow-hidden">

            <div class="p-6 border-b border-slate-100 flex items-center justify-between bg-slate-50">

                <h4 class="font-bold text-slate-900 text-base">Catat Transaksi Peminjaman Buku</h4>

                <button onclick="closePinjamModal()" class="text-slate-400 hover:text-slate-600"><i class="fa-solid fa-xmark text-lg"></i></button>

            </div>

            <form id="pinjamForm" onsubmit="savePinjaman(event)" class="p-6 space-y-4">

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Pilih Anggota *</label>

                    <select id="pinjamAnggotaId" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                        <!-- Populated by JS -->

                    </select>

                </div>

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Pilih Buku (Buku Cetak) *</label>

                    <select id="pinjamBukuId" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500/20">

                        <!-- Populated by JS -->

                    </select>

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Tanggal Pinjam *</label>

                        <input type="date" id="pinjamTanggal" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none">

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Batas Pengembalian *</label>

                        <input type="date" id="pinjamBatas" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none">

                    </div>

                </div>

                <div class="flex justify-end space-x-3 pt-4 border-t border-slate-100">

                    <button type="button" onclick="closePinjamModal()" class="px-4 py-2 text-sm font-semibold text-slate-600 hover:bg-slate-100 rounded-xl">Batal</button>

                    <button type="submit" class="px-5 py-2 text-sm font-semibold bg-brand-600 hover:bg-brand-700 text-white rounded-xl shadow">Proses Peminjaman</button>

                </div>

            </form>

        </div>

    </div>


    <!-- Modal Tambah Digital File -->

    <div id="digitalModal" class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4 overflow-y-auto">

        <div class="bg-white rounded-2xl shadow-2xl max-w-lg w-full overflow-hidden">

            <div class="p-6 border-b border-slate-100 flex items-center justify-between bg-slate-50">

                <h4 class="font-bold text-slate-900 text-base">Tambah Dokumen Digital & Modul</h4>

                <button onclick="closeDigitalModal()" class="text-slate-400 hover:text-slate-600"><i class="fa-solid fa-xmark text-lg"></i></button>

            </div>

            <form id="digitalForm" onsubmit="saveDigital(event)" class="p-6 space-y-4">

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Judul Dokumen / Modul *</label>

                    <input type="text" id="digJudul" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none">

                </div>

                <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Kategori *</label>

                        <select id="digKategori" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none">

                            <option value="Modul Ajar">Modul Ajar</option>

                            <option value="LKPD">LKPD</option>

                            <option value="E-Book Legal">E-Book Legal</option>

                            <option value="Materi Pembelajaran">Materi Pembelajaran</option>

                        </select>

                    </div>

                    <div>

                        <label class="block text-xs font-semibold text-slate-700 mb-1">Penyusun / Guru *</label>

                        <input type="text" id="digPenyusun" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none">

                    </div>

                </div>

                <div>

                    <label class="block text-xs font-semibold text-slate-700 mb-1">Deskripsi Singkat *</label>

                    <textarea id="digDeskripsi" rows="3" required class="w-full bg-slate-50 border border-slate-200 rounded-xl px-3.5 py-2.5 text-sm focus:outline-none"></textarea>

                </div>

                <div class="flex justify-end space-x-3 pt-4 border-t border-slate-100">

                    <button type="button" onclick="closeDigitalModal()" class="px-4 py-2 text-sm font-semibold text-slate-600 hover:bg-slate-100 rounded-xl">Batal</button>

                    <button type="submit" class="px-5 py-2 text-sm font-semibold bg-brand-600 hover:bg-brand-700 text-white rounded-xl shadow">Upload Dokumen</button>

                </div>

            </form>

        </div>

    </div>


    <!-- JavaScript Application Logic -->

    <script>

        // Referensi Lengkap Data Buku SMK (Kurikulum Merdeka & Kejuruan)

        const defaultBuku = [

            { id: 1, judul: "Pemrograman Berorientasi Objek (PBO) Kelas XI", penulis: "Tim Produktif PPLG", penerbit: "Erlangga", jenis: "Buku Cetak", kategori: "PPLG", tahun: 2023, stok: 12 },

            { id: 2, judul: "Administrasi Sistem Jaringan (ASJ) TJKT", penulis: "Ahmad Fauzi, M.Kom", penerbit: "Mediatama", jenis: "Buku Cetak", kategori: "TJKT", tahun: 2022, stok: 8 },

            { id: 3, judul: "Desain Grafis & UI/UX Dasar DKV", penulis: "Siti Rahma, S.Ds", penerbit: "Andi Publisher", jenis: "Buku Cetak", kategori: "DKV", tahun: 2023, stok: 15 },

            { id: 4, judul: "Matematika SMK Bisnis & Teknologi Kelas XII", penulis: "Drs. Sujono", penerbit: "Grafindo", jenis: "Buku Cetak", kategori: "Normatif", tahun: 2021, stok: 20 },

            { id: 5, judul: "Dasar-Dasar Pengembangan Perangkat Lunak dan Gim", penulis: "Budi Raharjo, S.T", penerbit: "Informatika", jenis: "Buku Cetak", kategori: "PPLG", tahun: 2023, stok: 14 },

            { id: 6, judul: "Teknologi Jaringan Berbasis Luas (WAN) Kelas XII", penulis: "Ir. Eko Prasetyo", penerbit: "Yrama Widya", jenis: "Buku Cetak", kategori: "TJKT", tahun: 2022, stok: 10 },

            { id: 7, judul: "Praktikum Akuntansi Perusahaan Jasa & Dagang", penulis: "Dr. Hj. Nur Indah, M.Ak", penerbit: "Salemba Empat", jenis: "Buku Cetak", kategori: "Akuntansi", tahun: 2023, stok: 18 },

            { id: 8, judul: "Food and Beverage Service Operations", penulis: "Chef Hendra Wijaya", penerbit: "Andi Publisher", jenis: "Buku Cetak", kategori: "Perhotelan", tahun: 2022, stok: 12 },

            { id: 9, judul: "Modul Ajar Kurikulum Merdeka - Dasar TJKT", penulis: "Tim Guru TJKT", penerbit: "SMK Kebon Jeruk", jenis: "Modul Ajar", kategori: "TJKT", tahun: 2024, stok: 50 },

            { id: 10, judul: "E-Book Undang-Undang ITE & Etika Siber", penulis: "Kemenkominfo", penerbit: "Digital Legal", jenis: "E-Book", kategori: "Umum", tahun: 2023, stok: 100 }

        ];


        const defaultAnggota = [

            { id: 1, nama: "Budi Santoso", nomorId: "10021", peran: "Siswa", kelas: "XI PPLG 1", telepon: "081234567890" },

            { id: 2, nama: "Dewi Lestari", nomorId: "10022", peran: "Siswa", kelas: "XI TJKT 2", telepon: "085678901234" },

            { id: 3, nama: "Rizky Pratama", nomorId: "10023", peran: "Siswa", kelas: "XII DKV 1", telepon: "087812345678" },

            { id: 4, nama: "Drs. H. Mulyadi, M.Pd", nomorId: "19750112", peran: "Guru", kelas: "Guru Produktif TJKT", telepon: "081198765432" },

            { id: 5, nama: "Sri Wahyuni, S.Pd", nomorId: "19820520", peran: "Guru", kelas: "Guru Normatif", telepon: "081345678901" }

        ];


        const defaultPeminjaman = [

            { id: 1, anggotaId: 1, bukuId: 1, tglPinjam: "2026-03-01", batasKembali: "2026-03-08", status: "Dipinjam" },

            { id: 2, anggotaId: 2, bukuId: 2, tglPinjam: "2026-02-20", batasKembali: "2026-02-27", status: "Dikembalikan" }

        ];


        const defaultDigital = [

            { id: 1, judul: "Modul Ajar Pemrograman Web dan Perangkat Bergerak", kategori: "Modul Ajar", penyusun: "Tim PPLG", deskripsi: "Modul lengkap HTML, CSS, JavaScript untuk kelas XI SMK.", link: "#" },

            { id: 2, judul: "LKPD Administrasi Server Jaringan Linux Debian", kategori: "LKPD", penyusun: "Ahmad Fauzi, M.Kom", deskripsi: "Lembar kerja praktikum konfigurasi DNS dan DHCP Server.", link: "#" },

            { id: 3, judul: "E-Book Panduan Adobe Illustrator & Photoshop", kategori: "E-Book Legal", penyusun: "Siti Rahma, S.Ds", deskripsi: "Buku panduan resmi desain vektor dan raster tingkat SMK.", link: "#" }

        ];


        // LocalStorage Initialization

        let bukuList = JSON.parse(localStorage.getItem('smk_buku')) || defaultBuku;

        let anggotaList = JSON.parse(localStorage.getItem('smk_anggota')) || defaultAnggota;

        let peminjamanList = JSON.parse(localStorage.getItem('smk_peminjaman')) || defaultPeminjaman;

        let digitalList = JSON.parse(localStorage.getItem('smk_digital')) || defaultDigital;


        function saveData() {

            localStorage.setItem('smk_buku', JSON.stringify(bukuList));

            localStorage.setItem('smk_anggota', JSON.stringify(anggotaList));

            localStorage.setItem('smk_peminjaman', JSON.stringify(peminjamanList));

            localStorage.setItem('smk_digital', JSON.stringify(digitalList));

            refreshAllUI();

        }


        // Sidebar & Tab Switcher

        const sidebar = document.getElementById('sidebar');

        document.getElementById('openSidebar').addEventListener('click', () => { sidebar.classList.remove('-translate-x-full'); });

        document.getElementById('closeSidebar').addEventListener('click', () => { sidebar.classList.add('-translate-x-full'); });


        function switchTab(tabId) {

            document.querySelectorAll('.tab-content').forEach(el => el.classList.remove('active'));

            document.getElementById('tab-' + tabId).classList.add('active');


            document.querySelectorAll('.nav-link').forEach(el => el.classList.remove('bg-slate-800', 'text-white'));

            event && event.currentTarget && event.currentTarget.classList.add('bg-slate-800', 'text-white');


            // Close mobile sidebar if open

            sidebar.classList.add('-translate-x-full');


            // Update title

            const titles = {

                dashboard: 'Dashboard Perpustakaan',

                koleksi: 'Data Koleksi Buku',

                pencarian: 'Pencarian Buku',

                anggota: 'Data Anggota Perpustakaan',

                peminjaman: 'Peminjaman & Pengembalian',

                digital: 'Perpustakaan Digital & Modul',

                laporan: 'Laporan & Rekapitulasi',

                profil: 'Profil Perpustakaan',

                pengaturan: 'Pengaturan Sistem'

            };

            document.getElementById('pageTitle').innerText = titles[tabId] || 'Portal Pustaka';

        }


        // Refresh All UI components

        function refreshAllUI() {

            renderDashboard();

            renderKoleksi();

            renderAnggota();

            renderPeminjaman();

            renderDigitalRepo();

            renderLaporan();

        }


        // 1. Dashboard Render

        function renderDashboard() {

            document.getElementById('statTotalBuku').innerText = bukuList.length;

            document.getElementById('statTotalAnggota').innerText = anggotaList.length;

            const activePinjam = peminjamanList.filter(p => p.status === 'Dipinjam').length;

            document.getElementById('statDipinjam').innerText = activePinjam;

            document.getElementById('statDigital').innerText = digitalList.length;


            // Recent activity table

            const tbody = document.getElementById('dashboardRecentActivity');

            tbody.innerHTML = '';

            const recent = [...peminjamanList].reverse().slice(0, 5);

            if (recent.length === 0) {

                tbody.innerHTML = `<tr><td colspan="4" class="py-4 text-center text-slate-400 text-xs">Belum ada aktivitas peminjaman.</td></tr>`;

                return;

            }

            recent.forEach(p => {

                const ang = anggotaList.find(a => a.id == p.anggotaId) || { nama: 'Unknown' };

                const buk = bukuList.find(b => b.id == p.bukuId) || { judul: 'Buku Dihapus' };

                const badge = p.status === 'Dipinjam' ? 'bg-amber-100 text-amber-800' : 'bg-emerald-100 text-emerald-800';

                tbody.innerHTML += `

                    <tr class="hover:bg-slate-50 transition-colors">

                        <td class="py-3 px-3 font-semibold text-slate-900">${ang.nama}</td>

                        <td class="py-3 px-3 text-slate-600 truncate max-w-xs">${buk.judul}</td>

                        <td class="py-3 px-3 text-slate-500 text-xs">${p.tglPinjam}</td>

                        <td class="py-3 px-3"><span class="px-2.5 py-1 rounded-full text-xs font-semibold ${badge}">${p.status}</span></td>

                    </tr>

                `;

            });

        }


        // 2. Koleksi Render & Filter

        function renderKoleksi() {

            const query = document.getElementById('searchKoleksiInput').value.toLowerCase();

            const kat = document.getElementById('filterKategoriKoleksi').value;

            const tbody = document.getElementById('tabelKoleksiBody');

            tbody.innerHTML = '';


            const filtered = bukuList.filter(b => {

                const matchQ = b.judul.toLowerCase().includes(query) || b.penulis.toLowerCase().includes(query) || b.kategori.toLowerCase().includes(query);

                const matchK = kat === "" || b.jenis === kat;

                return matchQ && matchK;

            });


            if (filtered.length === 0) {

                tbody.innerHTML = `<tr><td colspan="6" class="py-6 text-center text-slate-400 text-sm">Tidak ada data koleksi ditemukan.</td></tr>`;

                return;

            }


            filtered.forEach(b => {

                tbody.innerHTML += `

                    <tr class="hover:bg-slate-50/80 transition-colors">

                        <td class="py-3.5 px-4 font-semibold text-slate-900">${b.judul}</td>

                        <td class="py-3.5 px-4 text-slate-600">${b.penulis} <span class="text-xs text-slate-400 block">${b.penerbit || '-'} (${b.tahun || '-'})</span></td>

                        <td class="py-3.5 px-4"><span class="bg-blue-50 text-blue-700 px-2.5 py-1 rounded-md text-xs font-semibold">${b.kategori}</span></td>

                        <td class="py-3.5 px-4 text-slate-600 text-xs font-medium">${b.jenis}</td>

                        <td class="py-3.5 px-4 text-center font-semibold text-slate-800">${b.stok}</td>

                        <td class="py-3.5 px-4 text-center space-x-2">

                            <button onclick="editBuku(${b.id})" class="text-slate-400 hover:text-brand-600 p-1"><i class="fa-solid fa-pen-to-square"></i></button>

                            <button onclick="deleteBuku(${b.id})" class="text-slate-400 hover:text-rose-600 p-1"><i class="fa-solid fa-trash"></i></button>

                        </td>

                    </tr>

                `;

            });

        }

        function filterKoleksi() { renderKoleksi(); }


        // 3. Pencarian Cepat Live Search

        function executeLiveSearch() {

            const query = document.getElementById('liveSearchInput').value.toLowerCase();

            const grid = document.getElementById('liveSearchResultGrid');

            const countEl = document.getElementById('searchResultCount');

            grid.innerHTML = '';


            const filtered = bukuList.filter(b => b.judul.toLowerCase().includes(query) || b.penulis.toLowerCase().includes(query) || b.kategori.toLowerCase().includes(query));

            countEl.innerText = filtered.length + ' Buku';


            if (filtered.length === 0) {

                grid.innerHTML = `<div class="col-span-full py-10 text-center text-slate-400 bg-white rounded-2xl border border-slate-200">Buku tidak ditemukan dalam pencarian.</div>`;

                return;

            }


            filtered.forEach(b => {

                grid.innerHTML += `

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex flex-col justify-between hover:shadow-md transition-shadow">

                        <div>

                            <div class="flex items-center justify-between mb-2">

                                <span class="bg-brand-50 text-brand-700 px-2.5 py-1 rounded-md text-xs font-bold">${b.jenis}</span>

                                <span class="text-xs text-slate-400 font-medium">${b.tahun || ''}</span>

                            </div>

                            <h4 class="font-bold text-slate-900 text-base leading-snug">${b.judul}</h4>

                            <p class="text-xs text-slate-500 mt-1"><i class="fa-solid fa-pen-nib mr-1"></i> ${b.penulis} &bull; ${b.penerbit || 'Mandiri'}</p>

                        </div>

                        <div class="mt-4 pt-4 border-t border-slate-100 flex items-center justify-between">

                            <span class="text-xs font-semibold text-slate-700">Kategori: ${b.kategori}</span>

                            <span class="text-xs font-bold ${b.stok > 0 ? 'text-emerald-600' : 'text-rose-600'}">Stok: ${b.stok}</span>

                        </div>

                    </div>

                `;

            });

        }


        // 4. Anggota Render & Filter

        function renderAnggota() {

            const query = document.getElementById('searchAnggotaInput').value.toLowerCase();

            const role = document.getElementById('filterRoleAnggota').value;

            const tbody = document.getElementById('tabelAnggotaBody');

            tbody.innerHTML = '';


            const filtered = anggotaList.filter(a => {

                const matchQ = a.nama.toLowerCase().includes(query) || a.nomorId.toLowerCase().includes(query) || a.telepon.includes(query);

                const matchR = role === "" || a.peran === role;

                return matchQ && matchR;

            });


            if (filtered.length === 0) {

                tbody.innerHTML = `<tr><td colspan="6" class="py-6 text-center text-slate-400 text-sm">Tidak ada data anggota ditemukan.</td></tr>`;

                return;

            }


            filtered.forEach(a => {

                const badgeColor = a.peran === 'Siswa' ? 'bg-blue-50 text-blue-700' : (a.peran === 'Guru' ? 'bg-purple-50 text-purple-700' : 'bg-emerald-50 text-emerald-700');

                tbody.innerHTML += `

                    <tr class="hover:bg-slate-50 transition-colors">

                        <td class="py-3.5 px-4 font-semibold text-slate-900">${a.nama}</td>

                        <td class="py-3.5 px-4 text-slate-600 font-mono text-xs">${a.nomorId}</td>

                        <td class="py-3.5 px-4"><span class="${badgeColor} px-2.5 py-1 rounded-md text-xs font-semibold">${a.peran}</span></td>

                        <td class="py-3.5 px-4 text-slate-600 text-xs">${a.kelas}</td>

                        <td class="py-3.5 px-4 text-slate-600 text-xs"><i class="fa-brands fa-whatsapp text-emerald-600 mr-1"></i>${a.telepon || '-'}</td>

                        <td class="py-3.5 px-4 text-center space-x-2">

                            <button onclick="editAnggota(${a.id})" class="text-slate-400 hover:text-brand-600 p-1"><i class="fa-solid fa-pen-to-square"></i></button>

                            <button onclick="deleteAnggota(${a.id})" class="text-slate-400 hover:text-rose-600 p-1"><i class="fa-solid fa-trash"></i></button>

                        </td>

                    </tr>

                `;

            });

        }

        function filterAnggota() { renderAnggota(); }


        // 5. Peminjaman Render

        function renderPeminjaman() {

            const statusFilter = document.getElementById('filterStatusPinjam').value;

            const tbody = document.getElementById('tabelPeminjamanBody');

            tbody.innerHTML = '';


            const filtered = peminjamanList.filter(p => statusFilter === "" || p.status === statusFilter);


            if (filtered.length === 0) {

                tbody.innerHTML = `<tr><td colspan="6" class="py-6 text-center text-slate-400 text-sm">Belum ada data transaksi peminjaman.</td></tr>`;

                return;

            }


            filtered.forEach(p => {

                const ang = anggotaList.find(a => a.id == p.anggotaId) || { nama: 'Unknown' };

                const buk = bukuList.find(b => b.id == p.bukuId) || { judul: 'Buku Dihapus' };

                const badge = p.status === 'Dipinjam' ? 'bg-amber-100 text-amber-800' : 'bg-emerald-100 text-emerald-800';

                

                let actionBtn = p.status === 'Dipinjam' ? 

                    `<button onclick="returnBook(${p.id})" class="bg-emerald-600 hover:bg-emerald-700 text-white text-xs font-semibold px-3 py-1.5 rounded-lg shadow-sm">Kembalikan</button>` :

                    `<span class="text-xs text-slate-400 italic">Selesai</span>`;


                tbody.innerHTML += `

                    <tr class="hover:bg-slate-50 transition-colors">

                        <td class="py-3.5 px-4 font-semibold text-slate-900">${ang.nama}</td>

                        <td class="py-3.5 px-4 text-slate-600">${buk.judul}</td>

                        <td class="py-3.5 px-4 text-slate-500 text-xs">${p.tglPinjam}</td>

                        <td class="py-3.5 px-4 text-slate-500 text-xs">${p.batasKembali}</td>

                        <td class="py-3.5 px-4"><span class="px-2.5 py-1 rounded-full text-xs font-semibold ${badge}">${p.status}</span></td>

                        <td class="py-3.5 px-4 text-center">${actionBtn}</td>

                    </tr>

                `;

            });

        }


        // 6. Digital Repository Render

        function renderDigitalRepo() {

            const kat = document.getElementById('filterKategoriDigital').value;

            const grid = document.getElementById('digitalRepoGrid');

            grid.innerHTML = '';


            const filtered = digitalList.filter(d => kat === "" || d.kategori === kat);


            if (filtered.length === 0) {

                grid.innerHTML = `<div class="col-span-full py-10 text-center text-slate-400 bg-white rounded-2xl border border-slate-200">Tidak ada file digital dalam kategori ini.</div>`;

                return;

            }


            filtered.forEach(d => {

                grid.innerHTML += `

                    <div class="bg-white p-6 rounded-2xl shadow-sm border border-slate-200 flex flex-col justify-between hover:shadow-md transition-shadow">

                        <div>

                            <div class="flex items-center justify-between mb-3">

                                <span class="bg-purple-50 text-purple-700 px-2.5 py-1 rounded-md text-xs font-bold">${d.kategori}</span>

                                <span class="text-xs text-slate-400 font-medium"><i class="fa-solid fa-file-pdf text-rose-500 mr-1"></i> PDF</span>

                            </div>

                            <h4 class="font-bold text-slate-900 text-base leading-snug">${d.judul}</h4>

                            <p class="text-xs text-slate-500 mt-1">Penyusun: <strong>${d.penyusun}</strong></p>

                            <p class="text-xs text-slate-600 mt-2 leading-relaxed">${d.deskripsi}</p>

                        </div>

                        <div class="mt-5 pt-4 border-t border-slate-100 flex items-center justify-between">

                            <button onclick="downloadDigital('${d.judul}')" class="w-full bg-purple-50 hover:bg-purple-100 text-purple-700 font-semibold text-xs py-2 px-4 rounded-xl transition-colors flex items-center justify-center space-x-2">

                                <i class="fa-solid fa-download"></i>

                                <span>Unduh Modul / E-Book</span>

                            </button>

                        </div>

                    </div>

                `;

            });

        }

        function downloadDigital(title) {

            alert('Mengunduh file digital: "' + title + '". Dokumen berhasil diunduh.');

        }


        // 7. Laporan Render

        function renderLaporan() {

            const fisikCount = bukuList.filter(b => b.jenis === 'Buku Cetak').reduce((acc, cur) => acc + parseInt(cur.stok || 0), 0);

            document.getElementById('rekapBukuFisik').innerText = fisikCount;

            document.getElementById('rekapTotalPinjam').innerText = peminjamanList.length;

            document.getElementById('rekapTotalDigital').innerText = digitalList.length;


            const tbody = document.getElementById('tabelRekapBody');

            tbody.innerHTML = '';

            peminjamanList.forEach((p, idx) => {

                const ang = anggotaList.find(a => a.id == p.anggotaId) || { nama: 'Unknown' };

                const buk = bukuList.find(b => b.id == p.bukuId) || { judul: 'Buku Dihapus' };

                tbody.innerHTML += `

                    <tr class="hover:bg-slate-50">

                        <td class="py-3 px-3 font-mono text-xs text-slate-500">TRX-${1000 + p.id}</td>

                        <td class="py-3 px-3 font-semibold text-slate-900">${ang.nama}</td>

                        <td class="py-3 px-3 text-slate-600">${buk.judul}</td>

                        <td class="py-3 px-3 text-slate-500 text-xs">${p.tglPinjam}</td>

                        <td class="py-3 px-3"><span class="px-2 py-0.5 rounded text-xs font-semibold ${p.status === 'Dipinjam' ? 'bg-amber-100 text-amber-800' : 'bg-emerald-100 text-emerald-800'}">${p.status}</span></td>

                    </tr>

                `;

            });

        }


        // Modal Controllers: Buku

        function openBukuModal() {

            document.getElementById('bukuForm').reset();

            document.getElementById('bukuId').value = '';

            document.getElementById('bukuModalTitle').innerText = 'Tambah Koleksi Baru';

            document.getElementById('bukuModal').classList.remove('hidden');

        }

        function closeBukuModal() { document.getElementById('bukuModal').classList.add('hidden'); }

        function editBuku(id) {

            const b = bukuList.find(item => item.id == id);

            if (!b) return;

            document.getElementById('bukuId').value = b.id;

            document.getElementById('bukuJudul').value = b.judul;

            document.getElementById('bukuPenulis').value = b.penulis;

            document.getElementById('bukuPenerbit').value = b.penerbit || '';

            document.getElementById('bukuJenis').value = b.jenis;

            document.getElementById('bukuKategori').value = b.kategori;

            document.getElementById('bukuTahun').value = b.tahun || '';

            document.getElementById('bukuStok').value = b.stok;

            document.getElementById('bukuModalTitle').innerText = 'Edit Koleksi Buku';

            document.getElementById('bukuModal').classList.remove('hidden');

        }

        function saveBuku(e) {

            e.preventDefault();

            const id = document.getElementById('bukuId').value;

            const data = {

                id: id ? parseInt(id) : Date.now(),

                judul: document.getElementById('bukuJudul').value,

                penulis: document.getElementById('bukuPenulis').value,

                penerbit: document.getElementById('bukuPenerbit').value,

                jenis: document.getElementById('bukuJenis').value,

                kategori: document.getElementById('bukuKategori').value,

                tahun: parseInt(document.getElementById('bukuTahun').value) || 2024,

                stok: parseInt(document.getElementById('bukuStok').value) || 1

            };

            if (id) {

                const idx = bukuList.findIndex(item => item.id == id);

                if (idx !== -1) bukuList[idx] = data;

            } else {

                bukuList.push(data);

            }

            saveData();

            closeBukuModal();

        }

        function deleteBuku(id) {

            if (confirm('Yakin ingin menghapus koleksi ini?')) {

                bukuList = bukuList.filter(item => item.id != id);

                saveData();

            }

        }


        // Modal Controllers: Anggota

        function openAnggotaModal() {

            document.getElementById('anggotaForm').reset();

            document.getElementById('anggotaId').value = '';

            document.getElementById('anggotaModalTitle').innerText = 'Tambah Anggota Baru';

            document.getElementById('anggotaModal').classList.remove('hidden');

        }

        function closeAnggotaModal() { document.getElementById('anggotaModal').classList.add('hidden'); }

        function editAnggota(id) {

            const a = anggotaList.find(item => item.id == id);

            if (!a) return;

            document.getElementById('anggotaId').value = a.id;

            document.getElementById('anggotaNama').value = a.nama;

            document.getElementById('anggotaNomorId').value = a.nomorId;

            document.getElementById('anggotaPeran').value = a.peran;

            document.getElementById('anggotaKelas').value = a.kelas;

            document.getElementById('anggotaTelepon').value = a.telepon || '';

            document.getElementById('anggotaModalTitle').innerText = 'Edit Data Anggota';

            document.getElementById('anggotaModal').classList.remove('hidden');

        }

        function saveAnggota(e) {

            e.preventDefault();

            const id = document.getElementById('anggotaId').value;

            const data = {

                id: id ? parseInt(id) : Date.now(),

                nama: document.getElementById('anggotaNama').value,

                nomorId: document.getElementById('anggotaNomorId').value,

                peran: document.getElementById('anggotaPeran').value,

                kelas: document.getElementById('anggotaKelas').value,

                telepon: document.getElementById('anggotaTelepon').value

            };

            if (id) {

                const idx = anggotaList.findIndex(item => item.id == id);

                if (idx !== -1) anggotaList[idx] = data;

            } else {

                anggotaList.push(data);

            }

            saveData();

            closeAnggotaModal();

        }

        function deleteAnggota(id) {

            if (confirm('Yakin ingin menghapus anggota ini?')) {

                anggotaList = anggotaList.filter(item => item.id != id);

                saveData();

            }

        }


        // Modal Controllers: Peminjaman

        function openPinjamModal() {

            // Populate dropdown anggota

            const selAnggota = document.getElementById('pinjamAnggotaId');

            selAnggota.innerHTML = '';

            anggotaList.forEach(a => {

                selAnggota.innerHTML += `<option value="${a.id}">${a.nama} (${a.peran} - ${a.kelas})</option>`;

            });


            // Populate dropdown buku fisik

            const selBuku = document.getElementById('pinjamBukuId');

            selBuku.innerHTML = '';

            bukuList.filter(b => b.jenis === 'Buku Cetak').forEach(b => {

                selBuku.innerHTML += `<option value="${b.id}">${b.judul} (Stok: ${b.stok})</option>`;

            });


            // Set default dates

            const today = new Date().toISOString().split('T')[0];

            const nextWeek = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];

            document.getElementById('pinjamTanggal').value = today;

            document.getElementById('pinjamBatas').value = nextWeek;


            document.getElementById('pinjamModal').classList.remove('hidden');

        }

        function closePinjamModal() { document.getElementById('pinjamModal').classList.add('hidden'); }

        function savePinjaman(e) {

            e.preventDefault();

            const data = {

                id: Date.now(),

                anggotaId: parseInt(document.getElementById('pinjamAnggotaId').value),

                bukuId: parseInt(document.getElementById('pinjamBukuId').value),

                tglPinjam: document.getElementById('pinjamTanggal').value,

                batasKembali: document.getElementById('pinjamBatas').value,

                status: 'Dipinjam'

            };

            peminjamanList.push(data);

            saveData();

            closePinjamModal();

        }

        function returnBook(id) {

            const p = peminjamanList.find(item => item.id == id);

            if (p) {

                p.status = 'Dikembalikan';

                saveData();

            }

        }


        // Modal Controllers: Digital

        function openDigitalModal() {

            document.getElementById('digitalForm').reset();

            document.getElementById('digitalModal').classList.remove('hidden');

        }

        function closeDigitalModal() { document.getElementById('digitalModal').classList.add('hidden'); }

        function saveDigital(e) {

            e.preventDefault();

            const data = {

                id: Date.now(),

                judul: document.getElementById('digJudul').value,

                kategori: document.getElementById('digKategori').value,

                penyusun: document.getElementById('digPenyusun').value,

                deskripsi: document.getElementById('digDeskripsi').value,

                link: '#'

            };

            digitalList.push(data);

            saveData();

            closeDigitalModal();

        }


        // Reset Data

        function resetAllData() {

            if (confirm('Reset seluruh data perpustakaan ke setelan referensi awal?')) {

                localStorage.clear();

                bukuList = defaultBuku;

                anggotaList = defaultAnggota;

                peminjamanList = defaultPeminjaman;

                digitalList = defaultDigital;

                saveData();

                alert('Data referensi berhasil dimuat ulang.');

            }

        }


        // Initial Load on Window Startup

        window.onload = function() {

            refreshAllUI();

            executeLiveSearch();

        };

    </script>

</body>

</html>

Post a Comment

1 Comments