app-layout.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 'use client';
  2. import { ReactNode } from 'react';
  3. import { Sidebar } from './sidebar';
  4. import { ModelStatusBar } from '../features/models';
  5. import { VersionChecker } from './version-checker';
  6. import { LayoutProvider } from './layout-context';
  7. /**
  8. * AppLayout - Pure inline style layout (no CSS modules)
  9. * Using inline styles to avoid any CSS loading/cascade issues
  10. */
  11. interface AppLayoutProps {
  12. children: ReactNode;
  13. }
  14. export function AppLayout({ children }: AppLayoutProps) {
  15. return (
  16. <LayoutProvider>
  17. <div style={{
  18. display: 'grid',
  19. gridTemplateColumns: '16rem 1fr',
  20. gridTemplateRows: '1fr auto',
  21. gridTemplateAreas: '"sidebar main" "sidebar footer"',
  22. minHeight: '100vh',
  23. width: '100vw',
  24. overflowX: 'hidden',
  25. }}>
  26. <aside style={{
  27. gridArea: 'sidebar',
  28. position: 'sticky',
  29. top: 0,
  30. height: '100vh',
  31. overflowY: 'auto',
  32. borderRight: '1px solid var(--color-border)',
  33. backgroundColor: 'var(--color-card)',
  34. zIndex: 10000,
  35. }}>
  36. <Sidebar />
  37. </aside>
  38. <main style={{
  39. gridArea: 'main',
  40. minHeight: '100vh',
  41. maxWidth: 'calc(100vw - 16rem)',
  42. overflowX: 'hidden',
  43. backgroundColor: 'var(--color-background)',
  44. }}>
  45. {children}
  46. </main>
  47. <footer style={{
  48. gridArea: 'footer',
  49. minHeight: '3rem',
  50. display: 'flex',
  51. justifyContent: 'space-between',
  52. alignItems: 'center',
  53. padding: '0 1rem',
  54. borderTop: '1px solid var(--color-border)',
  55. backgroundColor: 'var(--color-card)',
  56. }}>
  57. <div style={{ flex: 1 }}>
  58. <ModelStatusBar />
  59. </div>
  60. <div style={{ flex: 'none', marginLeft: '1rem' }}>
  61. <VersionChecker />
  62. </div>
  63. </footer>
  64. </div>
  65. </LayoutProvider>
  66. );
  67. }