'use client' /** * SDK Pipeline Sidebar * * Floating Action Button mit Drawer zur Visualisierung der SDK-Pipeline. * Zeigt die 5 Pakete mit Fortschritt und ermoeglicht schnelle Navigation. * * Features: * - Desktop (xl+): Fixierte Sidebar rechts * - Mobile/Tablet: Floating Action Button mit Slide-In Drawer */ import { useState, useEffect } from 'react' import { useSDK } from '@/lib/sdk' import { CloseIcon, PipelineIcon } from './SDKPipelineSidebarIcons' import { SidebarContent } from './SDKPipelineSidebarParts' // ============================================================================= // MAIN COMPONENT - RESPONSIVE // ============================================================================= export interface SDKPipelineSidebarProps { /** Position des FAB auf Mobile */ fabPosition?: 'bottom-right' | 'bottom-left' } export function SDKPipelineSidebar({ fabPosition = 'bottom-right' }: SDKPipelineSidebarProps) { const [isMobileOpen, setIsMobileOpen] = useState(false) const [isDesktopCollapsed, setIsDesktopCollapsed] = useState(true) // Start collapsed const { completionPercentage } = useSDK() // Load collapsed state from localStorage useEffect(() => { const stored = localStorage.getItem('sdk-pipeline-sidebar-collapsed') if (stored !== null) { setIsDesktopCollapsed(stored === 'true') } }, []) // Save collapsed state to localStorage const toggleDesktopSidebar = () => { const newState = !isDesktopCollapsed setIsDesktopCollapsed(newState) localStorage.setItem('sdk-pipeline-sidebar-collapsed', String(newState)) } // Close drawer on escape key useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape') { setIsMobileOpen(false) setIsDesktopCollapsed(true) } } 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-6' : 'left-4 bottom-6' const progressCircle = ( ) return ( <> {/* Desktop: Fixed Sidebar (when expanded) */} {!isDesktopCollapsed && (