import { makeStyles, tokens, FluentProvider, webLightTheme, webDarkTheme, Toaster, useId } from '@fluentui/react-components'; import type { ReactNode } from 'react'; import { Outlet } from 'react-router-dom'; import Header from './components/Header'; import Sidebar from './components/Sidebar'; import Footer from './components/Footer'; import StatusDisplay from '../components/StatusDisplay'; import { LayoutProvider, useLayout } from '../context/LayoutContext'; const useStyles = makeStyles({ root: { position: 'fixed', top: 0, left: 0, right: 0, bottom: 0, display: 'flex', flexDirection: 'column', backgroundColor: tokens.colorNeutralBackground2, overflow: 'hidden', height: '100vh', }, container: { display: 'flex', flex: '1 1 auto', overflow: 'hidden', height: 'calc(100vh - 64px)', // 减去 Header 的高度 position: 'relative', }, content: { flex: '1 1 auto', padding: '20px', overflowY: 'auto', display: 'flex', flexDirection: 'column', alignItems: 'center', height: '100%', width: '100%', minHeight: 0, boxSizing: 'border-box', }, rightPanel: { width: '240px', flexShrink: 0, borderLeft: `1px solid ${tokens.colorNeutralStroke1}`, padding: '20px', backgroundColor: tokens.colorNeutralBackground1, overflowY: 'auto', '@media (max-width: 768px)': { display: 'none', }, } }); const LayoutContent = ({ toasterId, imageViewer }: { toasterId: string; imageViewer?: ReactNode }) => { const styles = useStyles(); const { isDarkMode } = useLayout(); return (
); }; export const MainLayout = ({ imageViewer }: { imageViewer?: ReactNode }) => { const toasterId = useId('toaster'); return ( ); };