import { FolderOpen, LayoutGrid, Menu, Settings as SettingsIcon, Workflow, X } from "lucide-react"; import { useState } from "react"; import { Link } from "react-router-dom"; import { useMobile } from "@/hooks/use-mobile"; import { cn } from "@/lib/utils"; import { useConnectionStore } from "@/stores/connection-store"; import { Dropzone } from "../common/dropzone"; import { ImageEditIcon } from "../common/image-edit-icon"; import { OtterLogo } from "../common/otter-logo"; import { HelpDialog } from "../help/help-dialog"; import { SettingsDialog } from "../settings/settings-dialog"; import { AiInstallIndicator } from "./ai-install-indicator"; import { Footer } from "./footer"; import { Sidebar } from "./sidebar"; import { ToolPanel } from "./tool-panel"; interface AppLayoutProps { children?: React.ReactNode; showToolPanel?: boolean; onFiles?: (files: File[]) => void; onUrlImport?: (file: File) => void; } export function AppLayout({ children, showToolPanel = true, onFiles, onUrlImport, }: AppLayoutProps) { const [settingsOpen, setSettingsOpen] = useState(false); const [helpOpen, setHelpOpen] = useState(false); const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false); const isMobile = useMobile(); const connectionStatus = useConnectionStore((s) => s.status); const bannerVisible = connectionStatus !== "connected"; return (
{/* Desktop sidebar */} {!isMobile && ( setSettingsOpen(true)} onHelpClick={() => setHelpOpen(true)} /> )} {/* Mobile sidebar overlay */} {isMobile && mobileSidebarOpen && ( <> ); } function MobileNavItem({ icon: Icon, label, href, }: { icon: React.ComponentType<{ className?: string }>; label: string; href: string; }) { return ( {label} ); }