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
257 lines
7.7 KiB
TypeScript
257 lines
7.7 KiB
TypeScript
import * as React from 'react';
|
|
import { useColorScheme } from '@mui/joy/styles';
|
|
import Box from '@mui/joy/Box';
|
|
import Typography from '@mui/joy/Typography';
|
|
import IconButton from '@mui/joy/IconButton';
|
|
import Stack from '@mui/joy/Stack';
|
|
import Avatar from '@mui/joy/Avatar';
|
|
import Input from '@mui/joy/Input';
|
|
import Button from '@mui/joy/Button';
|
|
import Tooltip from '@mui/joy/Tooltip';
|
|
import Dropdown from '@mui/joy/Dropdown';
|
|
import Menu from '@mui/joy/Menu';
|
|
import MenuButton from '@mui/joy/MenuButton';
|
|
import MenuItem from '@mui/joy/MenuItem';
|
|
import ListDivider from '@mui/joy/ListDivider';
|
|
import Drawer from '@mui/joy/Drawer';
|
|
import ModalClose from '@mui/joy/ModalClose';
|
|
import DialogTitle from '@mui/joy/DialogTitle';
|
|
|
|
import SearchRoundedIcon from '@mui/icons-material/SearchRounded';
|
|
import DarkModeRoundedIcon from '@mui/icons-material/DarkModeRounded';
|
|
import LightModeRoundedIcon from '@mui/icons-material/LightModeRounded';
|
|
import BookRoundedIcon from '@mui/icons-material/BookRounded';
|
|
import LanguageRoundedIcon from '@mui/icons-material/LanguageRounded';
|
|
import SettingsRoundedIcon from '@mui/icons-material/SettingsRounded';
|
|
import HelpRoundedIcon from '@mui/icons-material/HelpRounded';
|
|
import OpenInNewRoundedIcon from '@mui/icons-material/OpenInNewRounded';
|
|
import LogoutRoundedIcon from '@mui/icons-material/LogoutRounded';
|
|
import MenuRoundedIcon from '@mui/icons-material/MenuRounded';
|
|
|
|
import Navigation from './Navigation';
|
|
|
|
function ColorSchemeToggle() {
|
|
const { mode, setMode } = useColorScheme();
|
|
const [mounted, setMounted] = React.useState(false);
|
|
React.useEffect(() => {
|
|
setMounted(true);
|
|
}, []);
|
|
if (!mounted) {
|
|
return <IconButton size="sm" variant="outlined" color="primary" />;
|
|
}
|
|
return (
|
|
<Tooltip title="Change theme" variant="outlined">
|
|
<IconButton
|
|
data-screenshot="toggle-mode"
|
|
size="sm"
|
|
variant="plain"
|
|
color="neutral"
|
|
sx={{ alignSelf: 'center' }}
|
|
onClick={() => {
|
|
if (mode === 'light') {
|
|
setMode('dark');
|
|
} else {
|
|
setMode('light');
|
|
}
|
|
}}
|
|
>
|
|
{mode === 'light' ? <DarkModeRoundedIcon /> : <LightModeRoundedIcon />}
|
|
</IconButton>
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
export default function Header() {
|
|
const [open, setOpen] = React.useState(false);
|
|
return (
|
|
<Box sx={{ display: 'flex', flexGrow: 1, justifyContent: 'space-between' }}>
|
|
<Stack
|
|
direction="row"
|
|
spacing={1}
|
|
sx={{
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
display: { xs: 'none', sm: 'flex' },
|
|
}}
|
|
>
|
|
<IconButton
|
|
size="md"
|
|
variant="outlined"
|
|
color="neutral"
|
|
sx={{ display: { xs: 'none', sm: 'inline-flex' }, borderRadius: '50%' }}
|
|
>
|
|
<LanguageRoundedIcon />
|
|
</IconButton>
|
|
<Button
|
|
variant="plain"
|
|
color="neutral"
|
|
aria-pressed="true"
|
|
component="a"
|
|
href="/joy-ui/getting-started/templates/email/"
|
|
size="sm"
|
|
sx={{ alignSelf: 'center' }}
|
|
>
|
|
Email
|
|
</Button>
|
|
<Button
|
|
variant="plain"
|
|
color="neutral"
|
|
component="a"
|
|
href="/joy-ui/getting-started/templates/team/"
|
|
size="sm"
|
|
sx={{ alignSelf: 'center' }}
|
|
>
|
|
Team
|
|
</Button>
|
|
<Button
|
|
variant="plain"
|
|
color="neutral"
|
|
component="a"
|
|
href="/joy-ui/getting-started/templates/files/"
|
|
size="sm"
|
|
sx={{ alignSelf: 'center' }}
|
|
>
|
|
Files
|
|
</Button>
|
|
</Stack>
|
|
<Box sx={{ display: { xs: 'inline-flex', sm: 'none' } }}>
|
|
<IconButton variant="plain" color="neutral" onClick={() => setOpen(true)}>
|
|
<MenuRoundedIcon />
|
|
</IconButton>
|
|
<Drawer
|
|
sx={{ display: { xs: 'inline-flex', sm: 'none' } }}
|
|
open={open}
|
|
onClose={() => setOpen(false)}
|
|
>
|
|
<ModalClose />
|
|
<DialogTitle>Acme Co.</DialogTitle>
|
|
<Box sx={{ px: 1 }}>
|
|
<Navigation />
|
|
</Box>
|
|
</Drawer>
|
|
</Box>
|
|
<Box
|
|
sx={{
|
|
display: 'flex',
|
|
flexDirection: 'row',
|
|
gap: 1.5,
|
|
alignItems: 'center',
|
|
}}
|
|
>
|
|
<Input
|
|
size="sm"
|
|
variant="outlined"
|
|
placeholder="Search anything…"
|
|
startDecorator={<SearchRoundedIcon color="primary" />}
|
|
endDecorator={
|
|
<IconButton
|
|
variant="outlined"
|
|
color="neutral"
|
|
sx={{ bgcolor: 'background.level1' }}
|
|
>
|
|
<Typography level="title-sm" textColor="text.icon">
|
|
⌘ K
|
|
</Typography>
|
|
</IconButton>
|
|
}
|
|
sx={{
|
|
alignSelf: 'center',
|
|
display: {
|
|
xs: 'none',
|
|
sm: 'flex',
|
|
},
|
|
}}
|
|
/>
|
|
<IconButton
|
|
size="sm"
|
|
variant="outlined"
|
|
color="neutral"
|
|
sx={{ display: { xs: 'inline-flex', sm: 'none' }, alignSelf: 'center' }}
|
|
>
|
|
<SearchRoundedIcon />
|
|
</IconButton>
|
|
<Tooltip title="Joy UI overview" variant="outlined">
|
|
<IconButton
|
|
size="sm"
|
|
variant="plain"
|
|
color="neutral"
|
|
component="a"
|
|
href="/blog/first-look-at-joy/"
|
|
sx={{ alignSelf: 'center' }}
|
|
>
|
|
<BookRoundedIcon />
|
|
</IconButton>
|
|
</Tooltip>
|
|
<ColorSchemeToggle />
|
|
<Dropdown>
|
|
<MenuButton
|
|
variant="plain"
|
|
size="sm"
|
|
sx={{ maxWidth: '32px', maxHeight: '32px', borderRadius: '9999999px' }}
|
|
>
|
|
<Avatar
|
|
src="https://i.pravatar.cc/40?img=2"
|
|
srcSet="https://i.pravatar.cc/80?img=2"
|
|
sx={{ maxWidth: '32px', maxHeight: '32px' }}
|
|
/>
|
|
</MenuButton>
|
|
<Menu
|
|
placement="bottom-end"
|
|
size="sm"
|
|
sx={{
|
|
zIndex: '99999',
|
|
p: 1,
|
|
gap: 1,
|
|
'--ListItem-radius': 'var(--joy-radius-sm)',
|
|
}}
|
|
>
|
|
<MenuItem>
|
|
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
|
<Avatar
|
|
src="https://i.pravatar.cc/40?img=2"
|
|
srcSet="https://i.pravatar.cc/80?img=2"
|
|
sx={{ borderRadius: '50%' }}
|
|
/>
|
|
<Box sx={{ ml: 1.5 }}>
|
|
<Typography level="title-sm" textColor="text.primary">
|
|
Rick Sanchez
|
|
</Typography>
|
|
<Typography level="body-xs" textColor="text.tertiary">
|
|
rick@email.com
|
|
</Typography>
|
|
</Box>
|
|
</Box>
|
|
</MenuItem>
|
|
<ListDivider />
|
|
<MenuItem>
|
|
<HelpRoundedIcon />
|
|
Help
|
|
</MenuItem>
|
|
<MenuItem>
|
|
<SettingsRoundedIcon />
|
|
Settings
|
|
</MenuItem>
|
|
<ListDivider />
|
|
<MenuItem component="a" href="/blog/first-look-at-joy/">
|
|
First look at Joy UI
|
|
<OpenInNewRoundedIcon />
|
|
</MenuItem>
|
|
<MenuItem
|
|
component="a"
|
|
href="https://github.com/mui/material-ui/tree/master/docs/data/joy/getting-started/templates/email"
|
|
>
|
|
Sourcecode
|
|
<OpenInNewRoundedIcon />
|
|
</MenuItem>
|
|
<ListDivider />
|
|
<MenuItem>
|
|
<LogoutRoundedIcon />
|
|
Log out
|
|
</MenuItem>
|
|
</Menu>
|
|
</Dropdown>
|
|
</Box>
|
|
</Box>
|
|
);
|
|
}
|