"use client"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { Search, FileText, Shield, Network, Scale, ChevronLeft, TerminalSquare, Loader2, } from "lucide-react"; import { pb } from "@/lib/pb"; // --- МОДЕЛЬ ДАННЫХ POCKETBASE --- interface PBDocument { id: string; title: string; category: "Core" | "Security" | "Network" | "Legal"; status: "Encrypted" | "Public" | "Internal" | "Dynamic"; content: string; created: string; // Системное поле PocketBase } const CATEGORIES = ["All", "Core", "Security", "Network", "Legal"]; export function DocsClient({ lang }: { lang: string }) { const [docs, setDocs] = useState([]); const [loading, setLoading] = useState(true); const [search, setSearch] = useState(""); const [activeCategory, setActiveCategory] = useState("All"); const [selectedDoc, setSelectedDoc] = useState(null); useEffect(() => { async function fetchDocs() { try { setLoading(true); // Обращаемся к documents_ru или documents_en const records = await pb .collection(`documents_${lang}`) .getFullList({ sort: "-created", }); setDocs(records); } catch (error) { console.error("Vault access error:", error); } finally { setLoading(false); } } fetchDocs(); }, [lang]); const filteredDocs = docs.filter((doc) => { const matchesSearch = doc.title.toLowerCase().includes(search.toLowerCase()) || doc.content.toLowerCase().includes(search.toLowerCase()); const matchesCategory = activeCategory === "All" || doc.category === activeCategory; return matchesSearch && matchesCategory; }); const getCategoryIcon = (cat: string) => { switch (cat) { case "Core": return ; case "Security": return ; case "Network": return ; case "Legal": return ; default: return ; } }; const formatDate = (dateStr: string) => dateStr.split(" ")[0]; return ( // Добавлен overflow-x-hidden для защиты от горизонтального скролла на мобилках
{/* Исправлено свечение: теперь max-w-full, чтобы не распирать экран */}
{loading ? (

Establishing_secure_link...

) : !selectedDoc ? ( {/* Заголовок и поиск: центрирование на мобильных (items-center text-center) */}

DATA_VAULT

System logs & documentation // V4.2

setSearch(e.target.value)} className="w-full bg-card/50 backdrop-blur-md border border-border/50 rounded-xl py-3 pl-12 pr-4 text-sm text-foreground focus:outline-none focus:border-primary/50 focus:shadow-[0_0_15px_rgba(0,240,255,0.15)] transition-all placeholder:text-muted-foreground/50" />
{/* Фильтры: центрирование на мобильных (justify-center) */}
{CATEGORIES.map((cat) => ( ))}
{/* Сетка документов */} {filteredDocs.map((doc) => ( setSelectedDoc(doc)} className="group bg-card/30 backdrop-blur-sm border border-border/50 hover:border-primary/40 rounded-2xl p-5 md:p-6 cursor-pointer transition-all duration-300 hover:shadow-[0_0_30px_rgba(0,240,255,0.1)] hover:-translate-y-1 flex flex-col h-48" >
{getCategoryIcon(doc.category)}
{doc.status}

{doc.title}

{doc.category} {formatDate(doc.created)}
))}
{filteredDocs.length === 0 && (

0 records found for query {`"${search}"`}

)}
) : ( // --- РЕЖИМ ЧТЕНИЯ --- {/* Кнопка "Назад": центрируем на мобилках */}
{/* Шапка терминала: перенос на новую строку на мобильных */}
{selectedDoc.id}.txt
{getCategoryIcon(selectedDoc.category)} {selectedDoc.category}
{/* Тело документа: уменьшены отступы для телефона (p-5 вместо p-8) */}

{selectedDoc.title}

{selectedDoc.content || "NO_CONTENT_FOUND"}
EOF
)}
); }