wallet-core/packages/taler-wallet-webextension/src/mui/Menu.stories.tsx

172 lines
4.8 KiB
TypeScript
Raw Normal View History

2022-06-24 16:42:21 +02:00
/*
This file is part of GNU Taler
(C) 2022 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { h, VNode } from "preact";
import { useState } from "preact/hooks";
import { Menu, MenuItem } from "./Menu.jsx";
import { Paper } from "./Paper.js";
export default {
2022-12-06 15:28:56 +01:00
title: "menu",
2022-06-24 16:42:21 +02:00
component: Menu,
};
export const BasicExample = (): VNode => {
const [open, setOpen] = useState(false);
async function handleClose(): Promise<void> {
setOpen(false);
}
async function handleClick(): Promise<void> {
setOpen(true);
}
return (
<Menu open={open} onClose={handleClose} onClick={handleClick}>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
);
};
import { styled } from "@linaria/react";
2023-02-16 03:23:42 +01:00
import { theme } from "./style.js";
2022-06-24 16:42:21 +02:00
import { Typography } from "./Typography.js";
import { Divider } from "./Divider.js";
const ListItemIcon = styled.div`
min-width: 36px;
color: ${theme.palette.action.active};
flex-shrink: 0;
display: inline-flex;
`;
const IconCut = (): VNode => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
style={{
width: "1em",
height: "1em",
}}
>
<path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z" />
</svg>
);
const IconCopy = (): VNode => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
style={{
width: "1em",
height: "1em",
}}
>
<path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" />
</svg>
);
const IconPaste = (): VNode => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
style={{
width: "1em",
height: "1em",
}}
>
<path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z" />
</svg>
);
const IconCloud = (): VNode => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
style={{
width: "1em",
height: "1em",
}}
>
<path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z" />
</svg>
);
const ListItemText = styled.div`
flex: 1 1 auto;
min-width: 0px;
margin-top: 4px;
margin-bottom: 4px;
`;
export function IconMenu(): VNode {
return (
<div style={{ width: 320 }}>
<Paper>
<ul>
<MenuItem>
<ListItemIcon>
<IconCut />
</ListItemIcon>
<ListItemText>Cut</ListItemText>
<Typography variant="body2" /* color="text.secondary" */>
X
</Typography>
</MenuItem>
<MenuItem>
<ListItemIcon>
<IconCopy />
</ListItemIcon>
<ListItemText>Copy</ListItemText>
<Typography variant="body2" /* color="text.secondary" */>
C
</Typography>
</MenuItem>
<MenuItem>
<ListItemIcon>
<IconPaste />
</ListItemIcon>
<ListItemText>Paste</ListItemText>
<Typography variant="body2" /* color="text.secondary" */>
V
</Typography>
</MenuItem>
<Divider />
<MenuItem>
<ListItemIcon>
<IconCloud />
</ListItemIcon>
<ListItemText>Web Clipboard</ListItemText>
</MenuItem>
</ul>
</Paper>
</div>
);
}