'use client' /** * AI Module Sidebar * * Kompakte Sidebar-Komponente für Cross-Navigation zwischen AI-Modulen. * Zeigt den Datenfluss und ermöglicht schnelle Navigation. * * Features: * - Desktop: Fixierte Sidebar rechts * - Mobile: Floating Action Button mit Slide-In Drawer */ import Link from 'next/link' import { useState, useEffect } from 'react' import { AI_MODULES, DATA_FLOW_CONNECTIONS, type AIModuleLink } from '@/types/ai-modules' export interface AIModuleSidebarProps { /** ID des aktuell aktiven Moduls */ currentModule: 'magic-help' | 'ocr-labeling' | 'rag-pipeline' | 'rag' /** Optional: Kompakter Modus (nur Icons) */ compact?: boolean /** Optional: Zusätzliche CSS-Klassen */ className?: string } export interface AIModuleSidebarResponsiveProps extends AIModuleSidebarProps { /** Position des FAB auf Mobile */ fabPosition?: 'bottom-right' | 'bottom-left' } // Icons für die Module const ModuleIcon = ({ id }: { id: string }) => { switch (id) { case 'magic-help': return ( ) case 'ocr-labeling': return ( ) case 'rag-pipeline': return ( ) case 'rag': return ( ) default: return null } } // Pfeil-Icon für Datenfluss const ArrowIcon = () => ( ) export function AIModuleSidebar({ currentModule, compact = false, className = '', }: AIModuleSidebarProps) { const [isExpanded, setIsExpanded] = useState(!compact) return (
{/* Header */}
setIsExpanded(!isExpanded)} >
KI-Daten-Pipeline
{/* Content */} {isExpanded && (
{/* Module Links */}
{AI_MODULES.map((module) => (
{module.name}
{module.description}
{currentModule === module.id && ( )} ))}
{/* Datenfluss-Visualisierung */}
Datenfluss
🏷️ 🔄 🔍
{/* Quick Info zum aktuellen Modul */}
{currentModule === 'magic-help' && ( Testen und verbessern Sie die TrOCR-Handschrifterkennung )} {currentModule === 'ocr-labeling' && ( Erstellen Sie Ground Truth Daten für das OCR-Training )} {currentModule === 'rag-pipeline' && ( Indexieren Sie Dokumente für die semantische Suche )} {currentModule === 'rag' && ( Verwalten und durchsuchen Sie indexierte Dokumente )}
)}
) } /** * Kompakte Inline-Version für mobile Ansichten */ export function AIModuleNav({ currentModule }: { currentModule: string }) { return (
{AI_MODULES.map((module) => ( {module.name} ))}
) } /** * Responsive Sidebar mit Mobile FAB + Drawer * * Desktop (xl+): Fixierte Sidebar rechts * Mobile/Tablet: Floating Action Button unten rechts, öffnet Drawer */ export function AIModuleSidebarResponsive({ currentModule, compact = false, className = '', fabPosition = 'bottom-right', }: AIModuleSidebarResponsiveProps) { const [isMobileOpen, setIsMobileOpen] = useState(false) // Close drawer on route change or escape key useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape') setIsMobileOpen(false) } window.addEventListener('keydown', handleEscape) return () => window.removeEventListener('keydown', handleEscape) }, []) // Prevent body scroll when drawer is open useEffect(() => { if (isMobileOpen) { document.body.style.overflow = 'hidden' } else { document.body.style.overflow = '' } return () => { document.body.style.overflow = '' } }, [isMobileOpen]) const fabPositionClasses = fabPosition === 'bottom-right' ? 'right-4 bottom-20' : 'left-4 bottom-20' return ( <> {/* Desktop: Fixed Sidebar */}
{/* Mobile/Tablet: FAB */} {/* Mobile/Tablet: Drawer Overlay */} {isMobileOpen && (
{/* Backdrop */}
setIsMobileOpen(false)} /> {/* Drawer */}
{/* Drawer Header */}
KI-Daten-Pipeline
{/* Drawer Content */}
{/* Module Links */}
{AI_MODULES.map((module) => ( setIsMobileOpen(false)} className={`flex items-center gap-3 px-4 py-3 rounded-xl transition-all ${ currentModule === module.id ? 'bg-teal-100 dark:bg-teal-900/30 text-teal-700 dark:text-teal-300 font-medium shadow-sm' : 'text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-gray-800' }`} >
{module.name}
{module.description}
{currentModule === module.id && ( )} ))}
{/* Datenfluss-Visualisierung */}
Datenfluss
Magic
🏷️ OCR
🔄 Pipeline
🔍 RAG
{/* Quick Info */}
{currentModule === 'magic-help' && ( <> Aktuell: TrOCR-Handschrifterkennung testen und verbessern )} {currentModule === 'ocr-labeling' && ( <> Aktuell: Ground Truth Daten für OCR-Training erstellen )} {currentModule === 'rag-pipeline' && ( <> Aktuell: Dokumente für semantische Suche indexieren )} {currentModule === 'rag' && ( <> Aktuell: Indexierte Dokumente verwalten und durchsuchen )}
)} {/* CSS for slide-in animation */} ) } export default AIModuleSidebar