UNPKG

gatsby-openrpc-theme

Version:

A gatsby theme for generated OpenRPC documentation

150 lines 8.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); const gatsby_1 = require("gatsby"); const material_1 = require("@mui/material"); const Menu_1 = __importDefault(require("@mui/icons-material/Menu")); const WbSunny_1 = __importDefault(require("@mui/icons-material/WbSunny")); // Sun icon (original) const Brightness3_1 = __importDefault(require("@mui/icons-material/Brightness3")); // Moon icon (original) const default_1 = require("../themes/default"); const Layout = ({ children, location }) => { const [mobileOpen, setMobileOpen] = (0, react_1.useState)(false); const [sidebarOpen, setSidebarOpen] = (0, react_1.useState)(false); // Default to closed const [darkMode, setDarkMode] = (0, react_1.useState)(false); const theme = darkMode ? default_1.darkTheme : default_1.lightTheme; const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md')); const data = (0, gatsby_1.useStaticQuery)((0, gatsby_1.graphql) ` query MainLayoutSiteMetadata { site { siteMetadata { title description logoUrl primaryColor primaryColorDark secondaryColor secondaryColorDark menuLinks { name link } footerLinks { name link } } } } `); const handleDrawerToggle = () => { setMobileOpen(!mobileOpen); }; const toggleSidebar = () => { setSidebarOpen(!sidebarOpen); }; const toggleDarkMode = () => { setDarkMode(!darkMode); }; const drawer = (react_1.default.createElement(material_1.Box, { sx: { p: 2 } }, data.site.siteMetadata.logoUrl && (react_1.default.createElement(material_1.Box, { sx: { textAlign: 'center', mb: 2 } }, react_1.default.createElement("img", { src: data.site.siteMetadata.logoUrl, alt: data.site.siteMetadata.title, style: { maxWidth: '100%', maxHeight: '60px' } }))), react_1.default.createElement(material_1.Typography, { variant: "h6", sx: { mb: 2 } }, data.site.siteMetadata.title), react_1.default.createElement(material_1.Divider, { sx: { mb: 2 } }), react_1.default.createElement(material_1.List, null, data.site.siteMetadata.menuLinks.map((link) => (react_1.default.createElement(material_1.ListItem, { key: link.name, component: gatsby_1.Link, to: link.link, sx: { color: 'text.primary', textDecoration: 'none', bgcolor: location?.pathname === link.link ? 'action.selected' : 'transparent', '&:hover': { bgcolor: 'action.hover', }, } }, react_1.default.createElement(material_1.ListItemText, { primary: link.name }))))))); return (react_1.default.createElement(material_1.ThemeProvider, { theme: theme }, react_1.default.createElement(material_1.CssBaseline, null), react_1.default.createElement(material_1.Box, { sx: { display: 'flex', flexDirection: 'column', minHeight: '100vh' } }, react_1.default.createElement(material_1.AppBar, { position: "sticky", sx: { bgcolor: theme.palette.background.paper, color: theme.palette.text.primary, boxShadow: 0, zIndex: (theme) => theme.zIndex.appBar, } }, react_1.default.createElement(material_1.Toolbar, null, react_1.default.createElement(material_1.IconButton, { color: "inherit", "aria-label": "open drawer", edge: "start", onClick: handleDrawerToggle, sx: { mr: 2, display: { md: 'none' } } }, react_1.default.createElement(Menu_1.default, null)), !isMobile && (react_1.default.createElement(material_1.IconButton, { color: "inherit", "aria-label": sidebarOpen ? 'close sidebar' : 'open sidebar', edge: "start", onClick: toggleSidebar, sx: { mr: 2 } }, react_1.default.createElement(Menu_1.default, null))), react_1.default.createElement(material_1.Typography, { variant: "h6", component: gatsby_1.Link, to: "/", sx: { color: 'inherit', textDecoration: 'none', flexGrow: 1, display: 'flex', alignItems: 'center', gap: 1, } }, data.site.siteMetadata.logoUrl && (react_1.default.createElement("img", { src: data.site.siteMetadata.logoUrl, alt: "", style: { height: 30 } })), data.site.siteMetadata.title), react_1.default.createElement(material_1.Tooltip, { title: darkMode ? 'Switch to light mode' : 'Switch to dark mode' }, react_1.default.createElement(material_1.IconButton, { onClick: toggleDarkMode, color: "inherit", sx: { ml: 1 }, "aria-label": "toggle dark/light mode" }, darkMode ? react_1.default.createElement(WbSunny_1.default, null) : react_1.default.createElement(Brightness3_1.default, null))))), react_1.default.createElement(material_1.Box, { sx: { display: 'flex', flex: 1 } }, !isMobile && (react_1.default.createElement(material_1.Drawer, { variant: "temporary", open: sidebarOpen, onClose: toggleSidebar, ModalProps: { keepMounted: true, // Better open performance }, hideBackdrop: false, sx: { '& .MuiDrawer-paper': { width: 240, boxSizing: 'border-box', borderRight: `1px solid ${theme.palette.divider}`, zIndex: (theme) => theme.zIndex.drawer, }, } }, drawer)), react_1.default.createElement(material_1.Drawer, { variant: "temporary", open: mobileOpen, onClose: handleDrawerToggle, ModalProps: { keepMounted: true, // Better open performance on mobile }, sx: { display: { xs: 'block', md: 'none' }, '& .MuiDrawer-paper': { width: 240 }, } }, drawer), react_1.default.createElement(material_1.Box, { component: "main", sx: { flexGrow: 1, p: 0, width: '100%', } }, react_1.default.createElement(material_1.Toolbar, { sx: { display: { md: 'none' } } }), children))))); }; exports.default = Layout; //# sourceMappingURL=index.js.map