import React, { ReactNode, useCallback, useEffect } from 'react'; import Navbar from './Navbar'; import AdminNavbar from './admin/AdminNavbar'; import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { useLocation } from 'react-router-dom'; import { queryClient } from '../utils/queryClient'; import { useCustomConfig } from '../features/utils/hooks/useCustomConfig'; import CompanionOverlay from '../features/companion/CompanionOverlay'; import { useUIStore } from '../store/uiStore'; import { useAuthStore } from '../store/authStore'; import { Settings } from 'lucide-react'; import SidebarOverlay from './layout/SidebarOverlay'; import SidebarDrawer from './layout/SidebarDrawer'; import SettingsDrawer from './layout/SettingsDrawer'; import Footer from './layout/Footer'; import { useThemeSync } from './layout/useThemeSync'; import { installLazyImageRescue } from '../utils/lazyImageRescue'; interface LayoutProps { children: ReactNode; } const LayoutContent: React.FC<{ children: ReactNode }> = ({ children }) => { const { config } = useCustomConfig(); const location = useLocation(); const { isSidebarOpen, isSettingsOpen, theme, currentLang, toggleSidebar, toggleSettings, setTheme, setCurrentLang } = useUIStore(); const { user, isAuthenticated } = useAuthStore(); useThemeSync(theme, config?.visual_theme); // Rescues native lazy images stuck by the page-transition opacity animation. useEffect(() => installLazyImageRescue(), []); const handleOverlayClose = useCallback(() => { toggleSidebar(true); toggleSettings(true); }, [toggleSidebar, toggleSettings]); return (