Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
180 lines
6.3 KiB
TypeScript
180 lines
6.3 KiB
TypeScript
import * as React from 'react';
|
|
import AppBar from '@mui/material/AppBar';
|
|
import Box from '@mui/material/Box';
|
|
import CssBaseline from '@mui/material/CssBaseline';
|
|
import Divider from '@mui/material/Divider';
|
|
import Drawer from '@mui/material/Drawer';
|
|
import IconButton from '@mui/material/IconButton';
|
|
import InboxIcon from '@mui/icons-material/MoveToInbox';
|
|
import List from '@mui/material/List';
|
|
import ListItem from '@mui/material/ListItem';
|
|
import ListItemButton from '@mui/material/ListItemButton';
|
|
import ListItemIcon from '@mui/material/ListItemIcon';
|
|
import ListItemText from '@mui/material/ListItemText';
|
|
import MailIcon from '@mui/icons-material/Mail';
|
|
import MenuIcon from '@mui/icons-material/Menu';
|
|
import Toolbar from '@mui/material/Toolbar';
|
|
import Typography from '@mui/material/Typography';
|
|
|
|
const drawerWidth = 240;
|
|
|
|
interface Props {
|
|
/**
|
|
* Injected by the documentation to work in an iframe.
|
|
* Remove this when copying and pasting into your project.
|
|
*/
|
|
window?: () => Window;
|
|
}
|
|
|
|
export default function ResponsiveDrawer(props: Props) {
|
|
const { window } = props;
|
|
const [mobileOpen, setMobileOpen] = React.useState(false);
|
|
const [isClosing, setIsClosing] = React.useState(false);
|
|
|
|
const handleDrawerClose = () => {
|
|
setIsClosing(true);
|
|
setMobileOpen(false);
|
|
};
|
|
|
|
const handleDrawerTransitionEnd = () => {
|
|
setIsClosing(false);
|
|
};
|
|
|
|
const handleDrawerToggle = () => {
|
|
if (!isClosing) {
|
|
setMobileOpen(!mobileOpen);
|
|
}
|
|
};
|
|
|
|
const drawer = (
|
|
<div>
|
|
<Toolbar />
|
|
<Divider />
|
|
<List>
|
|
{['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => (
|
|
<ListItem key={text} disablePadding>
|
|
<ListItemButton>
|
|
<ListItemIcon>
|
|
{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}
|
|
</ListItemIcon>
|
|
<ListItemText primary={text} />
|
|
</ListItemButton>
|
|
</ListItem>
|
|
))}
|
|
</List>
|
|
<Divider />
|
|
<List>
|
|
{['All mail', 'Trash', 'Spam'].map((text, index) => (
|
|
<ListItem key={text} disablePadding>
|
|
<ListItemButton>
|
|
<ListItemIcon>
|
|
{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}
|
|
</ListItemIcon>
|
|
<ListItemText primary={text} />
|
|
</ListItemButton>
|
|
</ListItem>
|
|
))}
|
|
</List>
|
|
</div>
|
|
);
|
|
|
|
// Remove this const when copying and pasting into your project.
|
|
const container = window !== undefined ? () => window().document.body : undefined;
|
|
|
|
return (
|
|
<Box sx={{ display: 'flex' }}>
|
|
<CssBaseline />
|
|
<AppBar
|
|
position="fixed"
|
|
sx={{
|
|
width: { sm: `calc(100% - ${drawerWidth}px)` },
|
|
ml: { sm: `${drawerWidth}px` },
|
|
}}
|
|
>
|
|
<Toolbar>
|
|
<IconButton
|
|
color="inherit"
|
|
aria-label="open drawer"
|
|
edge="start"
|
|
onClick={handleDrawerToggle}
|
|
sx={{ mr: 2, display: { sm: 'none' } }}
|
|
>
|
|
<MenuIcon />
|
|
</IconButton>
|
|
<Typography variant="h6" noWrap component="div">
|
|
Responsive drawer
|
|
</Typography>
|
|
</Toolbar>
|
|
</AppBar>
|
|
<Box
|
|
component="nav"
|
|
sx={{ width: { sm: drawerWidth }, flexShrink: { sm: 0 } }}
|
|
aria-label="mailbox folders"
|
|
>
|
|
{/* The implementation can be swapped with js to avoid SEO duplication of links. */}
|
|
<Drawer
|
|
container={container}
|
|
variant="temporary"
|
|
open={mobileOpen}
|
|
onTransitionEnd={handleDrawerTransitionEnd}
|
|
onClose={handleDrawerClose}
|
|
sx={{
|
|
display: { xs: 'block', sm: 'none' },
|
|
'& .MuiDrawer-paper': { boxSizing: 'border-box', width: drawerWidth },
|
|
}}
|
|
slotProps={{
|
|
root: {
|
|
keepMounted: true, // Better open performance on mobile.
|
|
},
|
|
}}
|
|
>
|
|
{drawer}
|
|
</Drawer>
|
|
<Drawer
|
|
variant="permanent"
|
|
sx={{
|
|
display: { xs: 'none', sm: 'block' },
|
|
'& .MuiDrawer-paper': { boxSizing: 'border-box', width: drawerWidth },
|
|
}}
|
|
open
|
|
>
|
|
{drawer}
|
|
</Drawer>
|
|
</Box>
|
|
<Box
|
|
component="main"
|
|
sx={{ flexGrow: 1, p: 3, width: { sm: `calc(100% - ${drawerWidth}px)` } }}
|
|
>
|
|
<Toolbar />
|
|
<Typography sx={{ marginBottom: 2 }}>
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
|
tempor incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non
|
|
enim praesent elementum facilisis leo vel. Risus at ultrices mi tempus
|
|
imperdiet. Semper risus in hendrerit gravida rutrum quisque non tellus.
|
|
Convallis convallis tellus id interdum velit laoreet id donec ultrices.
|
|
Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit
|
|
adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra
|
|
nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum
|
|
leo. Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis
|
|
feugiat vivamus at augue. At augue eget arcu dictum varius duis at
|
|
consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem donec massa
|
|
sapien faucibus et molestie ac.
|
|
</Typography>
|
|
<Typography sx={{ marginBottom: 2 }}>
|
|
Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper
|
|
eget nulla facilisi etiam dignissim diam. Pulvinar elementum integer enim
|
|
neque volutpat ac tincidunt. Ornare suspendisse sed nisi lacus sed viverra
|
|
tellus. Purus sit amet volutpat consequat mauris. Elementum eu facilisis
|
|
sed odio morbi. Euismod lacinia at quis risus sed vulputate odio. Morbi
|
|
tincidunt ornare massa eget egestas purus viverra accumsan in. In hendrerit
|
|
gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem
|
|
et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis
|
|
tristique sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis
|
|
eleifend. Commodo viverra maecenas accumsan lacus vel facilisis. Nulla
|
|
posuere sollicitudin aliquam ultrices sagittis orci a.
|
|
</Typography>
|
|
</Box>
|
|
</Box>
|
|
);
|
|
}
|