app-layout.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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
  18. style={{
  19. display: "grid",
  20. gridTemplateColumns: "16rem 1fr",
  21. gridTemplateRows: "1fr 3rem",
  22. gridTemplateAreas: '"sidebar main" "sidebar footer"',
  23. height: "100vh",
  24. width: "100vw",
  25. overflow: "hidden",
  26. }}
  27. >
  28. <aside
  29. style={{
  30. gridArea: "sidebar",
  31. height: "100vh",
  32. overflowY: "auto",
  33. borderRight: "1px solid var(--color-border)",
  34. backgroundColor: "var(--color-card)",
  35. zIndex: 10,
  36. }}
  37. >
  38. <Sidebar />
  39. </aside>
  40. <main
  41. style={{
  42. gridArea: "main",
  43. overflowY: "auto",
  44. overflowX: "hidden",
  45. backgroundColor: "var(--color-background)",
  46. maxWidth: "100%",
  47. boxSizing: "border-box",
  48. }}
  49. >
  50. {children}
  51. </main>
  52. <footer
  53. style={{
  54. gridArea: "footer",
  55. height: "3rem",
  56. display: "flex",
  57. justifyContent: "space-between",
  58. alignItems: "center",
  59. padding: "0 1rem",
  60. borderTop: "1px solid var(--color-border)",
  61. backgroundColor: "var(--color-card)",
  62. overflow: "hidden",
  63. }}
  64. >
  65. <div style={{ flex: 1, minWidth: 0, overflow: "hidden" }}>
  66. <ModelStatusBar />
  67. </div>
  68. <div style={{ flex: "none", marginLeft: "1rem" }}>
  69. <VersionChecker />
  70. </div>
  71. </footer>
  72. </div>
  73. </LayoutProvider>
  74. );
  75. }