@chtc/web-components 0.0.0-1 → 0.0.0-11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/package.json +22 -18
- package/src/index.d.ts +0 -1
- package/src/index.ts +0 -1
- package/src/layout/Header/BurgerMenu.tsx +0 -101
- package/src/layout/Header/DesktopMenu.tsx +0 -50
- package/src/layout/Header/Header.tsx +0 -54
- package/src/layout/Header/HeaderDropdown.tsx +0 -71
- package/src/layout/Header/HeaderItem.tsx +0 -110
- package/src/layout/Header/ImageIcon.tsx +0 -1
- package/src/layout/Header/index.d.ts +0 -21
- package/src/layout/Header/index.tsx +0 -5
- package/src/layout/index.ts +0 -1
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chtc/web-components",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-11",
|
|
4
4
|
"description": "PATh Web Components",
|
|
5
|
-
"main": "
|
|
6
|
-
"types": "
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"test": "jest --coverage --json --outputFile=.github/tests/test-summary.json",
|
|
9
|
-
"build": "tsc",
|
|
9
|
+
"build": "tsc --build src",
|
|
10
10
|
"storybook": "storybook dev -p 6006",
|
|
11
11
|
"build-storybook": "storybook build",
|
|
12
|
-
"publish": "npm publish --access public",
|
|
13
|
-
"publish:increment": "npm version prerelease --no-git-tag-version && npm publish
|
|
12
|
+
"publish": "npm publish --omit=dev --access public",
|
|
13
|
+
"publish:increment": "npm version prerelease --no-git-tag-version && npm run publish"
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
|
-
"
|
|
16
|
+
"dist"
|
|
17
17
|
],
|
|
18
18
|
"author": "",
|
|
19
19
|
"license": "Apache-2.0",
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@babel/preset-typescript": "^7.23.3",
|
|
22
|
-
"@chromatic-com/storybook": "^
|
|
23
|
-
"@storybook/addon-essentials": "^8.
|
|
24
|
-
"@storybook/addon-interactions": "^8.
|
|
25
|
-
"@storybook/addon-links": "^8.
|
|
26
|
-
"@storybook/addon-onboarding": "^8.
|
|
27
|
-
"@storybook/
|
|
28
|
-
"@storybook/
|
|
29
|
-
"@storybook/
|
|
30
|
-
"@storybook/
|
|
22
|
+
"@chromatic-com/storybook": "^3.2.3",
|
|
23
|
+
"@storybook/addon-essentials": "^8.4.7",
|
|
24
|
+
"@storybook/addon-interactions": "^8.4.7",
|
|
25
|
+
"@storybook/addon-links": "^8.4.7",
|
|
26
|
+
"@storybook/addon-onboarding": "^8.4.7",
|
|
27
|
+
"@storybook/addon-themes": "^8.4.7",
|
|
28
|
+
"@storybook/blocks": "^8.4.7",
|
|
29
|
+
"@storybook/nextjs": "^8.4.7",
|
|
30
|
+
"@storybook/react": "^8.4.7",
|
|
31
|
+
"@storybook/test": "^8.4.7",
|
|
31
32
|
"@types/jest": "^29.5.8",
|
|
32
33
|
"jest": "^29.7.0",
|
|
33
34
|
"jest-environment-jsdom": "^29.7.0",
|
|
34
|
-
"storybook": "^8.
|
|
35
|
+
"storybook": "^8.4.7",
|
|
35
36
|
"ts-jest": "^29.1.1",
|
|
36
37
|
"typescript": "^5.2.2"
|
|
37
38
|
},
|
|
@@ -39,6 +40,9 @@
|
|
|
39
40
|
"@emotion/react": "^11.11.4",
|
|
40
41
|
"@emotion/styled": "^11.11.5",
|
|
41
42
|
"@mui/icons-material": "^5.16.0",
|
|
42
|
-
"@mui/material": "^5.
|
|
43
|
+
"@mui/material": "^5.14.19",
|
|
44
|
+
"react-markdown": "^9.0.1",
|
|
45
|
+
"react-wrap-balancer": "^1.1.1",
|
|
46
|
+
"rehype-raw": "^7.0.0"
|
|
43
47
|
}
|
|
44
48
|
}
|
package/src/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./layout"
|
package/src/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './layout'
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import React, {useState} from "react";
|
|
3
|
-
import {Box,Typography, IconButton, Drawer, Divider, List, ListSubheader} from "@mui/material";
|
|
4
|
-
import MenuIcon from '@mui/icons-material/Menu';
|
|
5
|
-
import {
|
|
6
|
-
Home, GitHub, Description, Groups, Email, Help, Group, Info, Grade, Newspaper, Close, Terminal, CalendarMonth, FileDownload
|
|
7
|
-
} from "@mui/icons-material";
|
|
8
|
-
import { HeaderDropdown, HeaderLink, HeaderMainLink } from "./HeaderDropdown";
|
|
9
|
-
import { HeaderLinkItem, HeaderMenuProps } from "./index";
|
|
10
|
-
|
|
11
|
-
export const BurgerMenu = ({menuItems} : {menuItems: (Omit<HeaderMenuProps, "setAnchor" | "anchorEl"> | HeaderLinkItem)[]}) => {
|
|
12
|
-
const [openDrawer, setOpenDrawer] = useState(false);
|
|
13
|
-
|
|
14
|
-
const handleDrawer = () => {
|
|
15
|
-
setOpenDrawer(!openDrawer);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
<Box ml={"auto"}>
|
|
20
|
-
<IconButton
|
|
21
|
-
aria-label="menu"
|
|
22
|
-
onClick={handleDrawer}
|
|
23
|
-
>
|
|
24
|
-
<MenuIcon/>
|
|
25
|
-
</IconButton>
|
|
26
|
-
<Drawer anchor={"right"} open={openDrawer} onClose={handleDrawer}
|
|
27
|
-
sx={{
|
|
28
|
-
"& .MuiDrawer-paper": {
|
|
29
|
-
boxSizing: "border-box",
|
|
30
|
-
width: "100%",
|
|
31
|
-
"@media (min-width: 576px)": {
|
|
32
|
-
width: "30rem",
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
boxShadow: "0px 0px 10px rgba(0, 0, 0, 0.25)",
|
|
36
|
-
backdropFilter: "blur(2px)",
|
|
37
|
-
WebkitBackdropFilter: "blur(2px)",
|
|
38
|
-
backgroundColor: "rgba(255, 255, 255, 0.5)",
|
|
39
|
-
}}
|
|
40
|
-
>
|
|
41
|
-
<List
|
|
42
|
-
sx={{margin: "1rem" }}
|
|
43
|
-
component="nav"
|
|
44
|
-
aria-labelledby="nested-list-subheader"
|
|
45
|
-
subheader={
|
|
46
|
-
<ListSubheader component="div" id="nested-list-subheader">
|
|
47
|
-
<Box style={{display: "flex", flexDirection:"row", justifyContent:"start" }}>
|
|
48
|
-
<img src={PelicanLogo} alt={"Pelican Logo"} height={48}/>
|
|
49
|
-
<Typography variant={"h5"} pl={1} my={"auto"}>Pelican Platform</Typography>
|
|
50
|
-
<IconButton
|
|
51
|
-
sx={{ml: "auto"}}
|
|
52
|
-
edge="start"
|
|
53
|
-
color="inherit"
|
|
54
|
-
aria-label="menu"
|
|
55
|
-
onClick={handleDrawer}
|
|
56
|
-
>
|
|
57
|
-
<Close sx={{fontSize:"2rem"}}/>
|
|
58
|
-
</IconButton>
|
|
59
|
-
</Box>
|
|
60
|
-
</ListSubheader>
|
|
61
|
-
}
|
|
62
|
-
>
|
|
63
|
-
<Divider sx={{my:2}}/>
|
|
64
|
-
{menuItems.map((item) => {
|
|
65
|
-
if ('menuItems' in item) {
|
|
66
|
-
// This is a dropdown item
|
|
67
|
-
return (
|
|
68
|
-
<HeaderDropdown key={item.value} value={item.value} icon={item.icon}>
|
|
69
|
-
{item.menuItems.map((subItem) => (
|
|
70
|
-
<HeaderLink
|
|
71
|
-
key={item.value}
|
|
72
|
-
value={subItem.value}
|
|
73
|
-
href={subItem.href}
|
|
74
|
-
icon={subItem.icon}
|
|
75
|
-
target={subItem?.target}
|
|
76
|
-
onClick={handleDrawer}
|
|
77
|
-
/>
|
|
78
|
-
))}
|
|
79
|
-
</HeaderDropdown>
|
|
80
|
-
);
|
|
81
|
-
} else {
|
|
82
|
-
// This is a main link item
|
|
83
|
-
return (
|
|
84
|
-
<HeaderMainLink
|
|
85
|
-
key={item.value}
|
|
86
|
-
value={item.value}
|
|
87
|
-
href={item.href}
|
|
88
|
-
icon={item.icon}
|
|
89
|
-
target={item.target}
|
|
90
|
-
onClick={handleDrawer}
|
|
91
|
-
/>
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
})}
|
|
95
|
-
</List>
|
|
96
|
-
</Drawer>
|
|
97
|
-
</Box>
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export default BurgerMenu;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import {useState, ReactNode, useRef, ComponentType} from "react";
|
|
4
|
-
import {Box, Button, Grid, IconButton, Menu, MenuItem, Tooltip, IconProps} from "@mui/material"
|
|
5
|
-
|
|
6
|
-
import {HeaderItem} from "./HeaderItem";
|
|
7
|
-
|
|
8
|
-
import type {HeaderLinkItem, MenuProps} from "./index.d";
|
|
9
|
-
|
|
10
|
-
export const DesktopMenu = ({menuItems} : {menuItems: MenuProps[]}) => {
|
|
11
|
-
|
|
12
|
-
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<>
|
|
16
|
-
<Box display={"flex"} mb={.5}>
|
|
17
|
-
{menuItems.filter(x => "type" in x ? x?.type != "icon" : true).map((item) => (
|
|
18
|
-
<HeaderItem
|
|
19
|
-
key={item.value}
|
|
20
|
-
{...item}
|
|
21
|
-
anchorEl={anchorEl}
|
|
22
|
-
setAnchor={(element) => {
|
|
23
|
-
setAnchorEl((anchorEl) => {
|
|
24
|
-
if(element == null) {
|
|
25
|
-
return element
|
|
26
|
-
}
|
|
27
|
-
if(anchorEl?.id == element.id) {
|
|
28
|
-
return null
|
|
29
|
-
}
|
|
30
|
-
return element
|
|
31
|
-
})
|
|
32
|
-
}}
|
|
33
|
-
/>
|
|
34
|
-
))}
|
|
35
|
-
</Box>
|
|
36
|
-
<Box marginLeft={"auto"}>
|
|
37
|
-
<Grid container spacing={1}>
|
|
38
|
-
{menuItems.filter(x => "type" in x ? x?.type == "icon" : false).map((item) => (
|
|
39
|
-
<Grid key={item.value} item>
|
|
40
|
-
<HeaderIconLink
|
|
41
|
-
{...item as HeaderLinkItem}
|
|
42
|
-
/>
|
|
43
|
-
</Grid>
|
|
44
|
-
))}
|
|
45
|
-
</Grid>
|
|
46
|
-
</Box>
|
|
47
|
-
</>
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import {useState, useEffect, ReactNode} from "react";
|
|
4
|
-
import {Box, Typography} from "@mui/material"
|
|
5
|
-
import styles from "../../../app/page.module.css"
|
|
6
|
-
import Link from "next/link";
|
|
7
|
-
|
|
8
|
-
import {MenuProps} from "./index.d";
|
|
9
|
-
import {BurgerMenu, DesktopMenu, ImageIcon} from "./index";
|
|
10
|
-
|
|
11
|
-
export interface HeaderProps {
|
|
12
|
-
icon: ReactNode,
|
|
13
|
-
title: string,
|
|
14
|
-
menuItems: MenuProps[]
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const Header = ({icon, title, menuItems}: HeaderProps) => {
|
|
18
|
-
|
|
19
|
-
// Scroll watcher for opacity
|
|
20
|
-
let [scrolledTop, setScrolledTop] = useState(true);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
setScrolledTop(window.scrollY < 50);
|
|
23
|
-
addEventListener("scroll", (event) => {
|
|
24
|
-
setScrolledTop(window.scrollY < 50);
|
|
25
|
-
});
|
|
26
|
-
}, [])
|
|
27
|
-
|
|
28
|
-
return (
|
|
29
|
-
<Box className={`${styles.header} ${scrolledTop ? styles.headerScrolled : ""}`} style={{
|
|
30
|
-
display: "flex",
|
|
31
|
-
justifyContent: "space-between",
|
|
32
|
-
padding: "1rem",
|
|
33
|
-
position: "fixed",
|
|
34
|
-
zIndex: "1",
|
|
35
|
-
width: "100%",
|
|
36
|
-
overflow: "hidden"
|
|
37
|
-
}}>
|
|
38
|
-
<Box display={"flex"} flexGrow={1}>
|
|
39
|
-
<Link href={"/"}>
|
|
40
|
-
<Box style={{display: "flex"}}>
|
|
41
|
-
{icon}
|
|
42
|
-
<Typography variant={"h5"} pl={1} my={"auto"}>{title}</Typography>
|
|
43
|
-
</Box>
|
|
44
|
-
</Link>
|
|
45
|
-
<Box sx={{display: {xs: "flex", "md": "none"}}} flexGrow={1}>
|
|
46
|
-
<BurgerMenu menuItems={menuItems}/>
|
|
47
|
-
</Box>
|
|
48
|
-
<Box sx={{display: {xs: "none", "md": "flex"}}} flexGrow={1}>
|
|
49
|
-
<DesktopMenu menuItems={menuItems}/>
|
|
50
|
-
</Box>
|
|
51
|
-
</Box>
|
|
52
|
-
</Box>
|
|
53
|
-
)
|
|
54
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import React, { ReactNode, useState } from "react";
|
|
4
|
-
import {Typography, ListItemButton, ListItemIcon, Collapse} from "@mui/material";
|
|
5
|
-
import Link, {LinkProps} from "next/link";
|
|
6
|
-
import { ExpandLess, ExpandMore} from "@mui/icons-material";
|
|
7
|
-
|
|
8
|
-
interface HeaderLinkProps extends LinkProps {
|
|
9
|
-
value: string
|
|
10
|
-
icon: ReactNode
|
|
11
|
-
target?: string
|
|
12
|
-
onClick: () => void
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const HeaderLink = ({ value, href, icon, target, onClick }: HeaderLinkProps) => {
|
|
16
|
-
return (
|
|
17
|
-
<ListItemButton
|
|
18
|
-
onClick={onClick}>
|
|
19
|
-
<ListItemIcon sx={{ marginRight: "-0.8em", fontSize:"1.5em", marginLeft: "1em" }}>
|
|
20
|
-
{icon}
|
|
21
|
-
</ListItemIcon>
|
|
22
|
-
<Typography variant="h6">
|
|
23
|
-
<Link href={href} target={target}>
|
|
24
|
-
{value}
|
|
25
|
-
</Link>
|
|
26
|
-
</Typography>
|
|
27
|
-
</ListItemButton>
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const HeaderMainLink = ({ value, href, icon, target, onClick }: HeaderLinkProps) => {
|
|
32
|
-
return (
|
|
33
|
-
<ListItemButton
|
|
34
|
-
onClick={onClick}
|
|
35
|
-
>
|
|
36
|
-
<ListItemIcon sx={{ marginRight: "-0.8em", fontSize: "2em" }}>
|
|
37
|
-
{icon}
|
|
38
|
-
</ListItemIcon>
|
|
39
|
-
<Typography variant="h5">
|
|
40
|
-
<Link href={href} target={target}>
|
|
41
|
-
{value}
|
|
42
|
-
</Link>
|
|
43
|
-
</Typography>
|
|
44
|
-
</ListItemButton>
|
|
45
|
-
)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export const HeaderDropdown = ({ value, children, icon }: { value: string, children: ReactNode, icon: ReactNode}) => {
|
|
49
|
-
const [openState, setOpenState] = useState(false);
|
|
50
|
-
const handleClick = () => {
|
|
51
|
-
setOpenState(!openState);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
-
<>
|
|
56
|
-
<ListItemButton onClick={handleClick}>
|
|
57
|
-
<ListItemIcon sx={{ marginRight: "-0.8em", fontSize: "2em" }}>
|
|
58
|
-
{icon}
|
|
59
|
-
</ListItemIcon>
|
|
60
|
-
<Typography variant="h5">
|
|
61
|
-
{value}
|
|
62
|
-
</Typography>
|
|
63
|
-
{openState ? <ExpandLess sx={{ marginLeft: "1em" }} /> : <ExpandMore sx={{ marginLeft: "0.5em" }} />}
|
|
64
|
-
</ListItemButton>
|
|
65
|
-
<Collapse in={openState} timeout="auto" unmountOnExit>
|
|
66
|
-
{children}
|
|
67
|
-
</Collapse>
|
|
68
|
-
</>
|
|
69
|
-
)
|
|
70
|
-
}
|
|
71
|
-
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import React, {useRef, useEffect, useState} from "react";
|
|
2
|
-
import Link from "next/link";
|
|
3
|
-
import {Box, Menu, MenuItem, Tooltip, Typography} from "@mui/material";
|
|
4
|
-
import {ArrowDropDown, ArrowDropUp} from "@mui/icons-material";
|
|
5
|
-
|
|
6
|
-
import type {HeaderLinkItem, HeaderMenuProps, MenuProps} from "./index";
|
|
7
|
-
|
|
8
|
-
export const HeaderItem = ({...props}: HeaderMenuProps | HeaderLinkItem) => {
|
|
9
|
-
if("menuItems" in props) {
|
|
10
|
-
return <HeaderMenu {...props} />
|
|
11
|
-
} else if(props.type == "text") {
|
|
12
|
-
return <HeaderLink {...props} />
|
|
13
|
-
} else {
|
|
14
|
-
return <HeaderIconLink {...props} />
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const HeaderMenu = ({icon, value, open, setAnchor, menuItems}: HeaderMenuProps) => {
|
|
19
|
-
|
|
20
|
-
const anchorRef = useRef<HTMLElement>(null)
|
|
21
|
-
|
|
22
|
-
// Effect to perform actions when ref changes
|
|
23
|
-
const [refChange, setRefChange] = useState<number>(0); // State to track ref changes
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
setRefChange(refChange + 1);
|
|
26
|
-
}, [anchorRef.current]); // Dependency on refChange state to trigger effect
|
|
27
|
-
|
|
28
|
-
return (
|
|
29
|
-
<>
|
|
30
|
-
<Box style={{display: "flex"}}
|
|
31
|
-
ref={anchorRef}
|
|
32
|
-
aria-controls={open ? `${value}-menu` : undefined}
|
|
33
|
-
aria-haspopup="true"
|
|
34
|
-
aria-expanded={open ? 'true' : undefined}
|
|
35
|
-
onClick={e => setAnchor(anchorRef.current)}
|
|
36
|
-
>
|
|
37
|
-
<Typography id={`${value}-header`} display={"flex"} my={"auto"} pl={2} lineHeight={1} variant={"h6"}>
|
|
38
|
-
<Box display={"inline"} my={"auto"}>
|
|
39
|
-
{value}
|
|
40
|
-
</Box>
|
|
41
|
-
{open ?
|
|
42
|
-
<ArrowDropUp /> :
|
|
43
|
-
<ArrowDropDown />
|
|
44
|
-
}
|
|
45
|
-
</Typography>
|
|
46
|
-
</Box>
|
|
47
|
-
<Menu
|
|
48
|
-
anchorEl={anchorRef.current}
|
|
49
|
-
open={open}
|
|
50
|
-
onClose={() => setAnchor(null)}
|
|
51
|
-
sx={{mt: 2}}
|
|
52
|
-
anchorOrigin={{
|
|
53
|
-
vertical: 'bottom',
|
|
54
|
-
horizontal: 'left',
|
|
55
|
-
}}
|
|
56
|
-
transformOrigin={{
|
|
57
|
-
vertical: 'top',
|
|
58
|
-
horizontal: 'left',
|
|
59
|
-
}}
|
|
60
|
-
>
|
|
61
|
-
{menuItems.map((item) => (
|
|
62
|
-
<Link key={item.value} {...item} style={{textDecoration: "none", ...item.style}}>
|
|
63
|
-
<MenuItem onClick={e => setAnchor(anchorRef.current)}>{item.value}</MenuItem>
|
|
64
|
-
</Link>
|
|
65
|
-
))}
|
|
66
|
-
</Menu>
|
|
67
|
-
</>
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const HeaderLink = ({...props} : HeaderLinkItem) => {
|
|
72
|
-
return (
|
|
73
|
-
<Link {...props} style={{display: "flex", textDecoration: "none", ...props.style}} >
|
|
74
|
-
<Typography my={"auto"} pl={2} lineHeight={1} variant={"h6"}>
|
|
75
|
-
{props.value}
|
|
76
|
-
</Typography>
|
|
77
|
-
</Link>
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const HeaderIconLink = ({...props} : HeaderLinkItem) => {
|
|
82
|
-
return (
|
|
83
|
-
<Link href={props.href} target={props.target}>
|
|
84
|
-
<Tooltip title={props.value}>
|
|
85
|
-
<Box
|
|
86
|
-
sx={{
|
|
87
|
-
":hover": {
|
|
88
|
-
transform: "scale(1.15)",
|
|
89
|
-
transition: "transform 0.3s",
|
|
90
|
-
},
|
|
91
|
-
marginTop: "2px"
|
|
92
|
-
}}
|
|
93
|
-
>
|
|
94
|
-
{
|
|
95
|
-
React.cloneElement(props.icon, {
|
|
96
|
-
fontSize: "large",
|
|
97
|
-
sx:{
|
|
98
|
-
":hover": {
|
|
99
|
-
transform: "scale(1.15)",
|
|
100
|
-
transition: "transform 0.3s",
|
|
101
|
-
},
|
|
102
|
-
marginTop: "2px"
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
}
|
|
106
|
-
</Box>
|
|
107
|
-
</Tooltip>
|
|
108
|
-
</Link>
|
|
109
|
-
)
|
|
110
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const ImageIcon = ({ src, alt }: { src: string, alt: string }) => <img src={src} alt={alt} style={{ width: '24px', height: '24px' }} />;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import {ReactNode} from "react";
|
|
2
|
-
import {LinkProps} from "next/link";
|
|
3
|
-
|
|
4
|
-
export type * from "./Header"
|
|
5
|
-
|
|
6
|
-
export type MenuProps = Omit<HeaderMenuProps, "setAnchor" | "anchorEl"> | HeaderLinkItem
|
|
7
|
-
|
|
8
|
-
interface HeaderMenuProps {
|
|
9
|
-
icon: ReactNode
|
|
10
|
-
value: string
|
|
11
|
-
anchorEl: HTMLElement | null
|
|
12
|
-
setAnchor: (x: HTMLElement | null) => void
|
|
13
|
-
menuItems: HeaderLinkItem[]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface HeaderLinkItem extends LinkProps {
|
|
17
|
-
icon: ReactNode
|
|
18
|
-
value: string
|
|
19
|
-
target?: "_self" | "_blank"
|
|
20
|
-
type?: "icon" | "text"
|
|
21
|
-
}
|
package/src/layout/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './Header/index';
|