import React from 'react'; import { useStyles } from '../../core/hooks/useStyles'; // Main Layout component interface LayoutProps extends React.HTMLAttributes { hasSider?: boolean; } const Layout: React.FC & { Header: React.FC>; Content: React.FC>; Footer: React.FC>; Sider: React.FC>; } = ({ hasSider, className, children, ...props }) => { const createStyle = useStyles('layout'); const layoutClass = createStyle({ display: 'flex', flexDirection: 'column', flex: '1 1 auto', // When a sider is present, the inner layout should be vertical '&:has(aside)': { flexDirection: 'row', } }); const outerLayoutClass = createStyle({ display: 'flex', flexDirection: hasSider ? 'row' : 'column', width: '100%', minHeight: '100vh', }) return
{children}
; }; // Header const Header: React.FC> = ({ className, ...props }) => { const createStyle = useStyles('layout-header'); const headerClass = createStyle({ flexShrink: 0 }); return
; }; Header.displayName = 'Layout.Header'; Layout.Header = Header; // Content const Content: React.FC> = ({ className, ...props }) => { const createStyle = useStyles('layout-content'); const contentClass = createStyle({ flex: '1 1 auto', position: 'relative' }); return
; }; Content.displayName = 'Layout.Content'; Layout.Content = Content; // Footer const Footer: React.FC> = ({ className, ...props }) => { const createStyle = useStyles('layout-footer'); const footerClass = createStyle({ flexShrink: 0 }); return