ece-docs-components 1.0.85 → 1.0.86
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/dist/cjs/components/Breadcrumb.js +103 -77
- package/dist/cjs/components/Breadcrumb.js.map +1 -1
- package/dist/cjs/node_modules/domhandler/lib/index.js +1 -1
- package/dist/cjs/node_modules/html-dom-parser/lib/index.js +1 -1
- package/dist/esm/_virtual/index8.js +2 -2
- package/dist/esm/_virtual/index9.js +2 -2
- package/dist/esm/components/Breadcrumb.d.ts +1 -1
- package/dist/esm/components/Breadcrumb.js +105 -79
- package/dist/esm/components/Breadcrumb.js.map +1 -1
- package/dist/esm/node_modules/domutils/lib/index.js +1 -1
- package/dist/esm/node_modules/style-to-object/cjs/index.js +1 -1
- package/package.json +1 -1
|
@@ -9,80 +9,106 @@ var iconsMaterial = require('@mui/icons-material');
|
|
|
9
9
|
const HomeButton = material.styled(material.IconButton)(({ theme }) => ({
|
|
10
10
|
width: 40,
|
|
11
11
|
height: 40,
|
|
12
|
-
borderRadius: (typeof theme.shape.borderRadius ===
|
|
12
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
13
13
|
? parseInt(theme.shape.borderRadius, 10)
|
|
14
14
|
: theme.shape.borderRadius || 4) * 2,
|
|
15
15
|
backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,
|
|
16
16
|
flexShrink: 0,
|
|
17
|
-
|
|
17
|
+
"&:hover": {
|
|
18
18
|
backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,
|
|
19
19
|
opacity: 0.8,
|
|
20
20
|
},
|
|
21
21
|
}));
|
|
22
|
-
const DropdownButton = material.styled(
|
|
23
|
-
display:
|
|
24
|
-
alignItems:
|
|
22
|
+
const DropdownButton = material.styled("button")(({ theme }) => ({
|
|
23
|
+
display: "flex",
|
|
24
|
+
alignItems: "center",
|
|
25
|
+
justifyContent: "space-between",
|
|
25
26
|
gap: theme.spacing(1),
|
|
26
27
|
padding: theme.spacing(0.75, 2),
|
|
27
|
-
borderRadius: (typeof theme.shape.borderRadius ===
|
|
28
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
28
29
|
? parseInt(theme.shape.borderRadius, 10)
|
|
29
30
|
: theme.shape.borderRadius || 4) * 2,
|
|
30
31
|
border: `1px solid ${theme.palette.dark.main}33`,
|
|
31
|
-
backgroundColor:
|
|
32
|
+
backgroundColor: "#fff",
|
|
32
33
|
color: theme.palette.dark.main,
|
|
33
34
|
fontWeight: 500,
|
|
34
|
-
whiteSpace:
|
|
35
|
-
cursor:
|
|
36
|
-
transition:
|
|
37
|
-
fontSize:
|
|
38
|
-
|
|
35
|
+
whiteSpace: "nowrap",
|
|
36
|
+
cursor: "pointer",
|
|
37
|
+
transition: "border-color 0.2s",
|
|
38
|
+
fontSize: "0.875rem",
|
|
39
|
+
"&:hover": {
|
|
39
40
|
borderColor: `${theme.palette.dark.main}4D`,
|
|
40
41
|
},
|
|
41
|
-
[theme.breakpoints.down(
|
|
42
|
+
[theme.breakpoints.down("sm")]: {
|
|
43
|
+
width: '100%',
|
|
42
44
|
padding: theme.spacing(0.75, 1),
|
|
43
45
|
gap: theme.spacing(0.5),
|
|
44
46
|
},
|
|
45
47
|
}));
|
|
46
48
|
const StyledMenu = material.styled(material.Menu)(({ theme }) => ({
|
|
47
|
-
|
|
49
|
+
"& .MuiPaper-root": {
|
|
48
50
|
marginTop: theme.spacing(1),
|
|
49
|
-
width:
|
|
50
|
-
|
|
51
|
+
width: "auto",
|
|
52
|
+
[theme.breakpoints.down("sm")]: {
|
|
53
|
+
width: "100%",
|
|
54
|
+
},
|
|
55
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
51
56
|
? parseInt(theme.shape.borderRadius, 10)
|
|
52
57
|
: theme.shape.borderRadius || 4) * 2,
|
|
53
58
|
border: `1px solid ${theme.palette.dark.main}33`,
|
|
54
|
-
boxShadow:
|
|
59
|
+
boxShadow: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",
|
|
55
60
|
},
|
|
56
61
|
}));
|
|
57
62
|
const StyledMenuItem = material.styled(material.MenuItem, {
|
|
58
|
-
shouldForwardProp: (prop) => prop !==
|
|
63
|
+
shouldForwardProp: (prop) => prop !== "isActive",
|
|
59
64
|
})(({ theme, isActive }) => ({
|
|
60
65
|
padding: theme.spacing(1.25, 2),
|
|
61
|
-
fontSize:
|
|
62
|
-
color: isActive ? theme.palette.primary.main :
|
|
66
|
+
fontSize: "0.875rem",
|
|
67
|
+
color: isActive ? theme.palette.primary.main : "#4D3019",
|
|
63
68
|
fontWeight: isActive ? 500 : 400,
|
|
64
|
-
backgroundColor: isActive ?
|
|
65
|
-
whiteSpace:
|
|
66
|
-
wordBreak:
|
|
67
|
-
display:
|
|
68
|
-
|
|
69
|
-
backgroundColor:
|
|
69
|
+
backgroundColor: isActive ? "#F5F1ED" : "transparent",
|
|
70
|
+
whiteSpace: "normal",
|
|
71
|
+
wordBreak: "break-word",
|
|
72
|
+
display: "block",
|
|
73
|
+
"&:hover": {
|
|
74
|
+
backgroundColor: "#F5F1ED",
|
|
70
75
|
},
|
|
71
76
|
}));
|
|
72
77
|
const DropdownMenu = ({ dropdownItems, currentItem, anchorEl, isDropdownOpen, handleDropdownToggle, handleClose, handleItemClick, }) => {
|
|
73
|
-
return dropdownItems.length > 0 ? (jsxRuntime.jsxs(material.Box, { sx: { position:
|
|
78
|
+
return dropdownItems.length > 0 ? (jsxRuntime.jsxs(material.Box, { sx: { position: "relative", flexShrink: 0 }, children: [jsxRuntime.jsxs(DropdownButton, { type: "button", onClick: handleDropdownToggle, children: ["In this section...", jsxRuntime.jsx(iconsMaterial.ExpandMoreRounded, { sx: {
|
|
74
79
|
fontSize: 20,
|
|
75
|
-
transition:
|
|
76
|
-
transform: isDropdownOpen ?
|
|
80
|
+
transition: "transform 0.2s",
|
|
81
|
+
transform: isDropdownOpen ? "rotate(180deg)" : "rotate(0deg)",
|
|
77
82
|
} })] }), jsxRuntime.jsx(StyledMenu, { anchorEl: anchorEl, open: isDropdownOpen, onClose: handleClose, disableScrollLock: true, children: dropdownItems.map((item, index) => (jsxRuntime.jsx(StyledMenuItem, { onClick: () => handleItemClick(item), isActive: item.label === currentItem, children: item.label }, index))) })] })) : null;
|
|
78
83
|
};
|
|
79
84
|
const Breadcrumb = ({ items, currentItem, dropdownItems = [], onItemSelect, onNavigate, }) => {
|
|
80
85
|
const theme = ThemeProvider.useTheme();
|
|
81
86
|
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
82
87
|
const isDropdownOpen = Boolean(anchorEl);
|
|
83
|
-
const isMobile = material.useMediaQuery(theme.breakpoints.down(
|
|
84
|
-
const
|
|
85
|
-
const
|
|
88
|
+
const isMobile = material.useMediaQuery(theme.breakpoints.down("sm"));
|
|
89
|
+
const scrollMask = React.useRef(null);
|
|
90
|
+
const endRef = React.useRef(null);
|
|
91
|
+
const updateMask = (el) => {
|
|
92
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
93
|
+
const atStart = scrollLeft === 0;
|
|
94
|
+
const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;
|
|
95
|
+
const left = atStart ? 'black' : 'transparent';
|
|
96
|
+
const right = atEnd ? 'black' : 'transparent';
|
|
97
|
+
const mask = `linear-gradient(to right, ${left}, black 30px, black calc(100% - 30px), ${right})`;
|
|
98
|
+
el.style.maskImage = mask;
|
|
99
|
+
el.style.webkitMaskImage = mask;
|
|
100
|
+
};
|
|
101
|
+
React.useEffect(() => {
|
|
102
|
+
const el = scrollMask.current;
|
|
103
|
+
if (!el)
|
|
104
|
+
return;
|
|
105
|
+
updateMask(el); // set on mount
|
|
106
|
+
el.addEventListener('scroll', () => updateMask(el));
|
|
107
|
+
return () => el.removeEventListener('scroll', () => updateMask(el));
|
|
108
|
+
}, []);
|
|
109
|
+
React.useEffect(() => {
|
|
110
|
+
endRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
111
|
+
}, [items]);
|
|
86
112
|
const handleNavigation = (path) => {
|
|
87
113
|
if (onNavigate) {
|
|
88
114
|
onNavigate(path);
|
|
@@ -95,63 +121,63 @@ const Breadcrumb = ({ items, currentItem, dropdownItems = [], onItemSelect, onNa
|
|
|
95
121
|
setAnchorEl(event.currentTarget);
|
|
96
122
|
};
|
|
97
123
|
const handleClose = () => setAnchorEl(null);
|
|
98
|
-
const
|
|
99
|
-
setPathAnchorEl(event.currentTarget);
|
|
100
|
-
};
|
|
101
|
-
const handlePathMenuClose = () => setPathAnchorEl(null);
|
|
102
|
-
const handleHomeClick = () => handleNavigation('/');
|
|
124
|
+
const handleHomeClick = () => handleNavigation("/");
|
|
103
125
|
const handleItemClick = (item) => {
|
|
104
126
|
onItemSelect?.(item);
|
|
105
127
|
handleClose();
|
|
106
|
-
handlePathMenuClose();
|
|
107
128
|
if (item.href)
|
|
108
129
|
handleNavigation(item.href);
|
|
109
130
|
};
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
if (items.length < 1) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (isMobile) {
|
|
135
|
+
return (jsxRuntime.jsxs(material.Box, { display: "flex", flexDirection: "column", gap: 2, children: [jsxRuntime.jsx(material.Box, { ref: scrollMask, component: "nav", sx: {
|
|
136
|
+
width: "100%",
|
|
137
|
+
display: "flex",
|
|
138
|
+
flexDirection: "row",
|
|
139
|
+
alignItems: "start",
|
|
140
|
+
flexWrap: "nowrap",
|
|
141
|
+
overflowX: "auto",
|
|
142
|
+
textOverflow: "ellipsis",
|
|
143
|
+
minWidth: 0,
|
|
144
|
+
scrollbarWidth: "none",
|
|
145
|
+
"&::-webkit-scrollbar": { display: "none" },
|
|
146
|
+
}, children: items.map((item) => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx(iconsMaterial.ChevronRightRounded, {}), jsxRuntime.jsx(material.Typography, { onClick: () => {
|
|
147
|
+
handleNavigation(item.href);
|
|
148
|
+
}, sx: {
|
|
149
|
+
fontWeight: 500,
|
|
150
|
+
color: theme.palette.dark.main,
|
|
151
|
+
whiteSpace: "nowrap",
|
|
152
|
+
}, children: item?.label ?? "" }), jsxRuntime.jsx("div", { ref: endRef })] }, item.label))) }), jsxRuntime.jsx(DropdownMenu, { dropdownItems: dropdownItems, currentItem: currentItem, anchorEl: anchorEl, isDropdownOpen: isDropdownOpen, handleDropdownToggle: handleDropdownToggle, handleClose: handleClose, handleItemClick: handleItemClick })] }));
|
|
129
153
|
}
|
|
130
154
|
return (jsxRuntime.jsxs(material.Box, { component: "nav", sx: {
|
|
131
|
-
display:
|
|
132
|
-
|
|
133
|
-
|
|
155
|
+
display: "inline-flex",
|
|
156
|
+
justifyContent: "start",
|
|
157
|
+
alignItems: "center",
|
|
158
|
+
// flexWrap: "nowrap",
|
|
134
159
|
gap: 1,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
160
|
+
scrollbarWidth: "none",
|
|
161
|
+
"&::-webkit-scrollbar": { display: "none" },
|
|
162
|
+
}, children: [jsxRuntime.jsx(HomeButton, { "aria-label": "Home", onClick: handleHomeClick, children: jsxRuntime.jsx(iconsMaterial.HomeRounded, { sx: { fontSize: 20, color: "#4D3019" } }) }), jsxRuntime.jsx(material.Breadcrumbs, { separator: "/", sx: {
|
|
163
|
+
display: "inline-flex",
|
|
164
|
+
flexDirection: "row",
|
|
165
|
+
flexWrap: "initial",
|
|
166
|
+
// width: "fit-content",
|
|
167
|
+
flexShrink: 2,
|
|
168
|
+
"& .MuiBreadcrumbs-separator": {
|
|
169
|
+
color: `${theme.palette.dark.main}66`,
|
|
170
|
+
},
|
|
171
|
+
}, children: items.map((item) => (jsxRuntime.jsx(material.Typography, { sx: {
|
|
146
172
|
color: theme.palette.dark.main,
|
|
147
173
|
fontWeight: 500,
|
|
148
174
|
px: { xs: 0.5, sm: 1 },
|
|
149
|
-
minWidth: 0,
|
|
150
|
-
whiteSpace:
|
|
151
|
-
overflow:
|
|
152
|
-
textOverflow:
|
|
153
|
-
cursor: item.href ?
|
|
154
|
-
}, onClick: () => item.href && handleNavigation(item.href), children: item.label },
|
|
175
|
+
// minWidth: 0,
|
|
176
|
+
whiteSpace: "nowrap",
|
|
177
|
+
// overflow: "hidden",
|
|
178
|
+
textOverflow: "ellipsis",
|
|
179
|
+
cursor: item.href ? "pointer" : "default",
|
|
180
|
+
}, onClick: () => item.href && handleNavigation(item.href), children: item.label }, item.label))) }), jsxRuntime.jsx(DropdownMenu, { dropdownItems: dropdownItems, currentItem: currentItem, anchorEl: anchorEl, isDropdownOpen: isDropdownOpen, handleDropdownToggle: handleDropdownToggle, handleClose: handleClose, handleItemClick: handleItemClick })] }));
|
|
155
181
|
};
|
|
156
182
|
|
|
157
183
|
exports.Breadcrumb = Breadcrumb;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport {\r\n Box,\r\n Breadcrumbs as MuiBreadcrumbs,\r\n Typography,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n styled,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport { useTheme } from '../ThemeProvider';\r\nimport { HomeRounded, ExpandMoreRounded, MoreHorizRounded } from '@mui/icons-material';\r\n\r\ninterface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\ninterface BreadcrumbProps {\r\n items: BreadcrumbItem[];\r\n currentItem: string;\r\n dropdownItems?: BreadcrumbItem[];\r\n onItemSelect?: (item: BreadcrumbItem) => void;\r\n onNavigate?: (path: string) => void;\r\n}\r\n\r\nconst HomeButton = styled(IconButton)(({ theme }) => ({\r\n width: 40,\r\n height: 40,\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n flexShrink: 0,\r\n '&:hover': {\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n opacity: 0.8,\r\n },\r\n}));\r\n\r\nconst DropdownButton = styled('button')(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.75, 2),\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n backgroundColor: '#fff',\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n whiteSpace: 'nowrap',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s',\r\n fontSize: '0.875rem',\r\n '&:hover': {\r\n borderColor: `${theme.palette.dark.main}4D`,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n padding: theme.spacing(0.75, 1),\r\n gap: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nconst StyledMenu = styled(Menu)(({ theme }) => ({\r\n '& .MuiPaper-root': {\r\n marginTop: theme.spacing(1),\r\n width: 'auto',\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n boxShadow:\r\n '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\r\n },\r\n}));\r\n\r\nconst StyledMenuItem = styled(MenuItem, {\r\n shouldForwardProp: (prop) => prop !== 'isActive',\r\n})<{ isActive?: boolean }>(({ theme, isActive }) => ({\r\n padding: theme.spacing(1.25, 2),\r\n fontSize: '0.875rem',\r\n color: isActive ? theme.palette.primary.main : '#4D3019',\r\n fontWeight: isActive ? 500 : 400,\r\n backgroundColor: isActive ? '#F5F1ED' : 'transparent',\r\n whiteSpace: 'normal',\r\n wordBreak: 'break-word',\r\n display: 'block',\r\n '&:hover': {\r\n backgroundColor: '#F5F1ED',\r\n },\r\n}));\r\n\r\n\r\nconst DropdownMenu = ({\r\n dropdownItems,\r\n currentItem,\r\n anchorEl,\r\n isDropdownOpen,\r\n handleDropdownToggle,\r\n handleClose,\r\n handleItemClick,\r\n}: {\r\n dropdownItems: BreadcrumbItem[];\r\n currentItem: string;\r\n anchorEl: HTMLElement | null;\r\n isDropdownOpen: boolean;\r\n handleDropdownToggle: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n handleClose: () => void;\r\n handleItemClick: (item: BreadcrumbItem) => void;\r\n}) => {\r\n return dropdownItems.length > 0 ? (\r\n <Box sx={{ position: 'relative', flexShrink: 0 }}>\r\n <DropdownButton type=\"button\" onClick={handleDropdownToggle}>\r\n <span>{currentItem}</span>\r\n <ExpandMoreRounded\r\n sx={{\r\n fontSize: 20,\r\n transition: 'transform 0.2s',\r\n transform: isDropdownOpen ? 'rotate(180deg)' : 'rotate(0deg)',\r\n }}\r\n />\r\n </DropdownButton>\r\n\r\n <StyledMenu anchorEl={anchorEl} open={isDropdownOpen} onClose={handleClose} disableScrollLock>\r\n {dropdownItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n </Box>\r\n ) : null;\r\n};\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n currentItem,\r\n dropdownItems = [],\r\n onItemSelect,\r\n onNavigate,\r\n}) => {\r\n const theme = useTheme();\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const isDropdownOpen = Boolean(anchorEl);\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n\r\n const [pathAnchorEl, setPathAnchorEl] = useState<null | HTMLElement>(null);\r\n const isPathMenuOpen = Boolean(pathAnchorEl);\r\n \r\n const handleNavigation = (path: string) => {\r\n if (onNavigate) {\r\n onNavigate(path);\r\n } else {\r\n window.location.href = path;\r\n }\r\n };\r\n\r\n const handleDropdownToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => setAnchorEl(null);\r\n\r\n const handlePathMenuOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setPathAnchorEl(event.currentTarget);\r\n };\r\n const handlePathMenuClose = () => setPathAnchorEl(null);\r\n\r\n const handleHomeClick = () => handleNavigation('/');\r\n const handleItemClick = (item: BreadcrumbItem) => {\r\n onItemSelect?.(item);\r\n handleClose();\r\n handlePathMenuClose();\r\n if (item.href) handleNavigation(item.href);\r\n };\r\n\r\n if (isMobile && items.length >= 2) {\r\n const last = items[items.length - 1];\r\n const middleItems = items.slice(0, -1);\r\n\r\n return (\r\n <Box component=\"nav\" sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n overflowX: 'auto',\r\n minWidth: 0,\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': { display: 'none' },\r\n }}>\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: '#4D3019' }} />\r\n </HomeButton>\r\n\r\n <IconButton size=\"small\" onClick={handlePathMenuOpen}>\r\n <MoreHorizRounded sx={{ color: theme.palette.dark.main }} />\r\n </IconButton>\r\n\r\n <Typography\r\n sx={{\r\n fontWeight: 500,\r\n color: theme.palette.dark.main,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '120px',\r\n }}\r\n >\r\n {last.label || currentItem}\r\n </Typography>\r\n\r\n <StyledMenu\r\n anchorEl={pathAnchorEl}\r\n open={isPathMenuOpen}\r\n onClose={handlePathMenuClose}\r\n disableScrollLock \r\n >\r\n {middleItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box component=\"nav\" sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n gap: 1,\r\n overflowX: 'auto',\r\n minWidth: 0,\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': { display: 'none' },\r\n }}>\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: '#4D3019' }} />\r\n </HomeButton>\r\n <MuiBreadcrumbs\r\n separator=\"/\"\r\n sx={{\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n overflowX: 'hidden',\r\n minWidth: 0,\r\n '& .MuiBreadcrumbs-separator': { color: `${theme.palette.dark.main}66` },\r\n }}\r\n >\r\n {items.map((item, index) => (\r\n <Typography\r\n key={index}\r\n sx={{\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n px: { xs: 0.5, sm: 1 },\r\n minWidth: 0,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n cursor: item.href ? 'pointer' : 'default',\r\n }}\r\n onClick={() => item.href && handleNavigation(item.href)}\r\n >\r\n {item.label}\r\n </Typography>\r\n ))}\r\n\r\n\r\n </MuiBreadcrumbs>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n};\r\n"],"names":["styled","IconButton","Menu","MenuItem","_jsxs","Box","_jsx","ExpandMoreRounded","useTheme","useState","useMediaQuery","HomeRounded","MoreHorizRounded","Typography","MuiBreadcrumbs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import React, { Fragment, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n Box,\r\n Breadcrumbs as MuiBreadcrumbs,\r\n Typography,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n styled,\r\n useMediaQuery,\r\n} from \"@mui/material\";\r\nimport { useTheme } from \"../ThemeProvider\";\r\nimport {\r\n HomeRounded,\r\n ExpandMoreRounded,\r\n ChevronRightRounded,\r\n} from \"@mui/icons-material\";\r\n\r\ninterface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\ninterface BreadcrumbProps {\r\n items: BreadcrumbItem[];\r\n currentItem: string;\r\n dropdownItems?: BreadcrumbItem[];\r\n onItemSelect?: (item: BreadcrumbItem) => void;\r\n onNavigate?: (path: string) => void;\r\n}\r\n\r\nconst HomeButton = styled(IconButton)(({ theme }) => ({\r\n width: 40,\r\n height: 40,\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n flexShrink: 0,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n opacity: 0.8,\r\n },\r\n}));\r\n\r\nconst DropdownButton = styled(\"button\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.75, 2),\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n backgroundColor: \"#fff\",\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n whiteSpace: \"nowrap\",\r\n cursor: \"pointer\",\r\n transition: \"border-color 0.2s\",\r\n fontSize: \"0.875rem\",\r\n \"&:hover\": {\r\n borderColor: `${theme.palette.dark.main}4D`,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: '100%',\r\n padding: theme.spacing(0.75, 1),\r\n gap: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nconst StyledMenu = styled(Menu)(({ theme }) => ({\r\n \"& .MuiPaper-root\": {\r\n marginTop: theme.spacing(1),\r\n width: \"auto\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n boxShadow:\r\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\r\n },\r\n}));\r\n\r\nconst StyledMenuItem = styled(MenuItem, {\r\n shouldForwardProp: (prop) => prop !== \"isActive\",\r\n})<{ isActive?: boolean }>(({ theme, isActive }) => ({\r\n padding: theme.spacing(1.25, 2),\r\n fontSize: \"0.875rem\",\r\n color: isActive ? theme.palette.primary.main : \"#4D3019\",\r\n fontWeight: isActive ? 500 : 400,\r\n backgroundColor: isActive ? \"#F5F1ED\" : \"transparent\",\r\n whiteSpace: \"normal\",\r\n wordBreak: \"break-word\",\r\n display: \"block\",\r\n \"&:hover\": {\r\n backgroundColor: \"#F5F1ED\",\r\n },\r\n}));\r\n\r\nconst DropdownMenu = ({\r\n dropdownItems,\r\n currentItem,\r\n anchorEl,\r\n isDropdownOpen,\r\n handleDropdownToggle,\r\n handleClose,\r\n handleItemClick,\r\n}: {\r\n dropdownItems: BreadcrumbItem[];\r\n currentItem: string;\r\n anchorEl: HTMLElement | null;\r\n isDropdownOpen: boolean;\r\n handleDropdownToggle: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n handleClose: () => void;\r\n handleItemClick: (item: BreadcrumbItem) => void;\r\n}) => {\r\n return dropdownItems.length > 0 ? (\r\n <Box sx={{ position: \"relative\", flexShrink: 0 }}>\r\n <DropdownButton type=\"button\" onClick={handleDropdownToggle}>\r\n In this section...\r\n <ExpandMoreRounded\r\n sx={{\r\n fontSize: 20,\r\n transition: \"transform 0.2s\",\r\n transform: isDropdownOpen ? \"rotate(180deg)\" : \"rotate(0deg)\",\r\n }}\r\n />\r\n </DropdownButton>\r\n\r\n <StyledMenu\r\n anchorEl={anchorEl}\r\n open={isDropdownOpen}\r\n onClose={handleClose}\r\n disableScrollLock\r\n >\r\n {dropdownItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n </Box>\r\n ) : null;\r\n};\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n currentItem,\r\n dropdownItems = [],\r\n onItemSelect,\r\n onNavigate,\r\n}) => {\r\n const theme = useTheme();\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const isDropdownOpen = Boolean(anchorEl);\r\n const isMobile = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const scrollMask = useRef<HTMLDivElement>(null);\r\n const endRef = useRef<HTMLDivElement>(null);\r\n \r\n const updateMask = (el: { style?: any; scrollLeft?: any; scrollWidth?: any; clientWidth?: any; }) => {\r\n const { scrollLeft, scrollWidth, clientWidth } = el;\r\n const atStart = scrollLeft === 0;\r\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\r\n\r\n const left = atStart ? 'black' : 'transparent';\r\n const right = atEnd ? 'black' : 'transparent';\r\n\r\n const mask = `linear-gradient(to right, ${left}, black 30px, black calc(100% - 30px), ${right})`;\r\n el.style.maskImage = mask;\r\n el.style.webkitMaskImage = mask;\r\n };\r\n\r\n useEffect(() => {\r\n const el = scrollMask.current;\r\n if (!el) return;\r\n updateMask(el); // set on mount\r\n el.addEventListener('scroll', () => updateMask(el));\r\n return () => el.removeEventListener('scroll', () => updateMask(el));\r\n }, []);\r\n\r\n useEffect(() => {\r\n endRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }, [items]);\r\n\r\n\r\n const handleNavigation = (path: string) => {\r\n if (onNavigate) {\r\n onNavigate(path);\r\n } else {\r\n window.location.href = path;\r\n }\r\n };\r\n\r\n const handleDropdownToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => setAnchorEl(null);\r\n\r\n const handleHomeClick = () => handleNavigation(\"/\");\r\n const handleItemClick = (item: BreadcrumbItem) => {\r\n onItemSelect?.(item);\r\n handleClose();\r\n if (item.href) handleNavigation(item.href);\r\n };\r\n \r\n if (items.length < 1) {\r\n return;\r\n }\r\n\r\n if (isMobile) {\r\n\r\n return (\r\n <Box\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={2}\r\n >\r\n <Box\r\n ref={scrollMask}\r\n component=\"nav\"\r\n sx={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"start\",\r\n flexWrap: \"nowrap\",\r\n overflowX: \"auto\",\r\n textOverflow: \"ellipsis\",\r\n minWidth: 0,\r\n scrollbarWidth: \"none\",\r\n \"&::-webkit-scrollbar\": { display: \"none\" },\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Fragment key={item.label}>\r\n <ChevronRightRounded />\r\n <Typography\r\n onClick={() => {\r\n handleNavigation(item.href as string);\r\n }}\r\n sx={{\r\n fontWeight: 500,\r\n color: theme.palette.dark.main,\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {item?.label ?? \"\"}\r\n </Typography>\r\n <div ref={endRef}/>\r\n </Fragment>\r\n ))}\r\n </Box>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n display: \"inline-flex\",\r\n justifyContent: \"start\",\r\n alignItems: \"center\",\r\n // flexWrap: \"nowrap\",\r\n gap: 1,\r\n scrollbarWidth: \"none\",\r\n \"&::-webkit-scrollbar\": { display: \"none\" },\r\n }}\r\n >\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: \"#4D3019\" }} />\r\n </HomeButton>\r\n <MuiBreadcrumbs\r\n separator=\"/\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexDirection: \"row\",\r\n flexWrap: \"initial\",\r\n // width: \"fit-content\",\r\n flexShrink: 2,\r\n \"& .MuiBreadcrumbs-separator\": {\r\n color: `${theme.palette.dark.main}66`,\r\n },\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Typography\r\n key={item.label}\r\n sx={{\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n px: { xs: 0.5, sm: 1 },\r\n // minWidth: 0,\r\n whiteSpace: \"nowrap\",\r\n // overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n cursor: item.href ? \"pointer\" : \"default\",\r\n }}\r\n onClick={() => item.href && handleNavigation(item.href)}\r\n >\r\n {item.label}\r\n </Typography>\r\n ))}\r\n </MuiBreadcrumbs>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n};\r\n"],"names":["styled","IconButton","Menu","MenuItem","_jsxs","Box","_jsx","ExpandMoreRounded","useTheme","useState","useMediaQuery","useRef","useEffect","Fragment","ChevronRightRounded","Typography","HomeRounded","MuiBreadcrumbs"],"mappings":"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"}
|
|
@@ -1,86 +1,112 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useState, useRef, useEffect, Fragment } from 'react';
|
|
3
3
|
import { styled, IconButton, Menu, MenuItem, useMediaQuery, Box, Typography, Breadcrumbs } from '@mui/material';
|
|
4
4
|
import { useTheme } from '../ThemeProvider.js';
|
|
5
|
-
import {
|
|
5
|
+
import { ChevronRightRounded, HomeRounded, ExpandMoreRounded } from '@mui/icons-material';
|
|
6
6
|
|
|
7
7
|
const HomeButton = styled(IconButton)(({ theme }) => ({
|
|
8
8
|
width: 40,
|
|
9
9
|
height: 40,
|
|
10
|
-
borderRadius: (typeof theme.shape.borderRadius ===
|
|
10
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
11
11
|
? parseInt(theme.shape.borderRadius, 10)
|
|
12
12
|
: theme.shape.borderRadius || 4) * 2,
|
|
13
13
|
backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,
|
|
14
14
|
flexShrink: 0,
|
|
15
|
-
|
|
15
|
+
"&:hover": {
|
|
16
16
|
backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,
|
|
17
17
|
opacity: 0.8,
|
|
18
18
|
},
|
|
19
19
|
}));
|
|
20
|
-
const DropdownButton = styled(
|
|
21
|
-
display:
|
|
22
|
-
alignItems:
|
|
20
|
+
const DropdownButton = styled("button")(({ theme }) => ({
|
|
21
|
+
display: "flex",
|
|
22
|
+
alignItems: "center",
|
|
23
|
+
justifyContent: "space-between",
|
|
23
24
|
gap: theme.spacing(1),
|
|
24
25
|
padding: theme.spacing(0.75, 2),
|
|
25
|
-
borderRadius: (typeof theme.shape.borderRadius ===
|
|
26
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
26
27
|
? parseInt(theme.shape.borderRadius, 10)
|
|
27
28
|
: theme.shape.borderRadius || 4) * 2,
|
|
28
29
|
border: `1px solid ${theme.palette.dark.main}33`,
|
|
29
|
-
backgroundColor:
|
|
30
|
+
backgroundColor: "#fff",
|
|
30
31
|
color: theme.palette.dark.main,
|
|
31
32
|
fontWeight: 500,
|
|
32
|
-
whiteSpace:
|
|
33
|
-
cursor:
|
|
34
|
-
transition:
|
|
35
|
-
fontSize:
|
|
36
|
-
|
|
33
|
+
whiteSpace: "nowrap",
|
|
34
|
+
cursor: "pointer",
|
|
35
|
+
transition: "border-color 0.2s",
|
|
36
|
+
fontSize: "0.875rem",
|
|
37
|
+
"&:hover": {
|
|
37
38
|
borderColor: `${theme.palette.dark.main}4D`,
|
|
38
39
|
},
|
|
39
|
-
[theme.breakpoints.down(
|
|
40
|
+
[theme.breakpoints.down("sm")]: {
|
|
41
|
+
width: '100%',
|
|
40
42
|
padding: theme.spacing(0.75, 1),
|
|
41
43
|
gap: theme.spacing(0.5),
|
|
42
44
|
},
|
|
43
45
|
}));
|
|
44
46
|
const StyledMenu = styled(Menu)(({ theme }) => ({
|
|
45
|
-
|
|
47
|
+
"& .MuiPaper-root": {
|
|
46
48
|
marginTop: theme.spacing(1),
|
|
47
|
-
width:
|
|
48
|
-
|
|
49
|
+
width: "auto",
|
|
50
|
+
[theme.breakpoints.down("sm")]: {
|
|
51
|
+
width: "100%",
|
|
52
|
+
},
|
|
53
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
49
54
|
? parseInt(theme.shape.borderRadius, 10)
|
|
50
55
|
: theme.shape.borderRadius || 4) * 2,
|
|
51
56
|
border: `1px solid ${theme.palette.dark.main}33`,
|
|
52
|
-
boxShadow:
|
|
57
|
+
boxShadow: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",
|
|
53
58
|
},
|
|
54
59
|
}));
|
|
55
60
|
const StyledMenuItem = styled(MenuItem, {
|
|
56
|
-
shouldForwardProp: (prop) => prop !==
|
|
61
|
+
shouldForwardProp: (prop) => prop !== "isActive",
|
|
57
62
|
})(({ theme, isActive }) => ({
|
|
58
63
|
padding: theme.spacing(1.25, 2),
|
|
59
|
-
fontSize:
|
|
60
|
-
color: isActive ? theme.palette.primary.main :
|
|
64
|
+
fontSize: "0.875rem",
|
|
65
|
+
color: isActive ? theme.palette.primary.main : "#4D3019",
|
|
61
66
|
fontWeight: isActive ? 500 : 400,
|
|
62
|
-
backgroundColor: isActive ?
|
|
63
|
-
whiteSpace:
|
|
64
|
-
wordBreak:
|
|
65
|
-
display:
|
|
66
|
-
|
|
67
|
-
backgroundColor:
|
|
67
|
+
backgroundColor: isActive ? "#F5F1ED" : "transparent",
|
|
68
|
+
whiteSpace: "normal",
|
|
69
|
+
wordBreak: "break-word",
|
|
70
|
+
display: "block",
|
|
71
|
+
"&:hover": {
|
|
72
|
+
backgroundColor: "#F5F1ED",
|
|
68
73
|
},
|
|
69
74
|
}));
|
|
70
75
|
const DropdownMenu = ({ dropdownItems, currentItem, anchorEl, isDropdownOpen, handleDropdownToggle, handleClose, handleItemClick, }) => {
|
|
71
|
-
return dropdownItems.length > 0 ? (jsxs(Box, { sx: { position:
|
|
76
|
+
return dropdownItems.length > 0 ? (jsxs(Box, { sx: { position: "relative", flexShrink: 0 }, children: [jsxs(DropdownButton, { type: "button", onClick: handleDropdownToggle, children: ["In this section...", jsx(ExpandMoreRounded, { sx: {
|
|
72
77
|
fontSize: 20,
|
|
73
|
-
transition:
|
|
74
|
-
transform: isDropdownOpen ?
|
|
78
|
+
transition: "transform 0.2s",
|
|
79
|
+
transform: isDropdownOpen ? "rotate(180deg)" : "rotate(0deg)",
|
|
75
80
|
} })] }), jsx(StyledMenu, { anchorEl: anchorEl, open: isDropdownOpen, onClose: handleClose, disableScrollLock: true, children: dropdownItems.map((item, index) => (jsx(StyledMenuItem, { onClick: () => handleItemClick(item), isActive: item.label === currentItem, children: item.label }, index))) })] })) : null;
|
|
76
81
|
};
|
|
77
82
|
const Breadcrumb = ({ items, currentItem, dropdownItems = [], onItemSelect, onNavigate, }) => {
|
|
78
83
|
const theme = useTheme();
|
|
79
84
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
80
85
|
const isDropdownOpen = Boolean(anchorEl);
|
|
81
|
-
const isMobile = useMediaQuery(theme.breakpoints.down(
|
|
82
|
-
const
|
|
83
|
-
const
|
|
86
|
+
const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
|
|
87
|
+
const scrollMask = useRef(null);
|
|
88
|
+
const endRef = useRef(null);
|
|
89
|
+
const updateMask = (el) => {
|
|
90
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
91
|
+
const atStart = scrollLeft === 0;
|
|
92
|
+
const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;
|
|
93
|
+
const left = atStart ? 'black' : 'transparent';
|
|
94
|
+
const right = atEnd ? 'black' : 'transparent';
|
|
95
|
+
const mask = `linear-gradient(to right, ${left}, black 30px, black calc(100% - 30px), ${right})`;
|
|
96
|
+
el.style.maskImage = mask;
|
|
97
|
+
el.style.webkitMaskImage = mask;
|
|
98
|
+
};
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
const el = scrollMask.current;
|
|
101
|
+
if (!el)
|
|
102
|
+
return;
|
|
103
|
+
updateMask(el); // set on mount
|
|
104
|
+
el.addEventListener('scroll', () => updateMask(el));
|
|
105
|
+
return () => el.removeEventListener('scroll', () => updateMask(el));
|
|
106
|
+
}, []);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
endRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
109
|
+
}, [items]);
|
|
84
110
|
const handleNavigation = (path) => {
|
|
85
111
|
if (onNavigate) {
|
|
86
112
|
onNavigate(path);
|
|
@@ -93,63 +119,63 @@ const Breadcrumb = ({ items, currentItem, dropdownItems = [], onItemSelect, onNa
|
|
|
93
119
|
setAnchorEl(event.currentTarget);
|
|
94
120
|
};
|
|
95
121
|
const handleClose = () => setAnchorEl(null);
|
|
96
|
-
const
|
|
97
|
-
setPathAnchorEl(event.currentTarget);
|
|
98
|
-
};
|
|
99
|
-
const handlePathMenuClose = () => setPathAnchorEl(null);
|
|
100
|
-
const handleHomeClick = () => handleNavigation('/');
|
|
122
|
+
const handleHomeClick = () => handleNavigation("/");
|
|
101
123
|
const handleItemClick = (item) => {
|
|
102
124
|
onItemSelect?.(item);
|
|
103
125
|
handleClose();
|
|
104
|
-
handlePathMenuClose();
|
|
105
126
|
if (item.href)
|
|
106
127
|
handleNavigation(item.href);
|
|
107
128
|
};
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
if (items.length < 1) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (isMobile) {
|
|
133
|
+
return (jsxs(Box, { display: "flex", flexDirection: "column", gap: 2, children: [jsx(Box, { ref: scrollMask, component: "nav", sx: {
|
|
134
|
+
width: "100%",
|
|
135
|
+
display: "flex",
|
|
136
|
+
flexDirection: "row",
|
|
137
|
+
alignItems: "start",
|
|
138
|
+
flexWrap: "nowrap",
|
|
139
|
+
overflowX: "auto",
|
|
140
|
+
textOverflow: "ellipsis",
|
|
141
|
+
minWidth: 0,
|
|
142
|
+
scrollbarWidth: "none",
|
|
143
|
+
"&::-webkit-scrollbar": { display: "none" },
|
|
144
|
+
}, children: items.map((item) => (jsxs(Fragment, { children: [jsx(ChevronRightRounded, {}), jsx(Typography, { onClick: () => {
|
|
145
|
+
handleNavigation(item.href);
|
|
146
|
+
}, sx: {
|
|
147
|
+
fontWeight: 500,
|
|
148
|
+
color: theme.palette.dark.main,
|
|
149
|
+
whiteSpace: "nowrap",
|
|
150
|
+
}, children: item?.label ?? "" }), jsx("div", { ref: endRef })] }, item.label))) }), jsx(DropdownMenu, { dropdownItems: dropdownItems, currentItem: currentItem, anchorEl: anchorEl, isDropdownOpen: isDropdownOpen, handleDropdownToggle: handleDropdownToggle, handleClose: handleClose, handleItemClick: handleItemClick })] }));
|
|
127
151
|
}
|
|
128
152
|
return (jsxs(Box, { component: "nav", sx: {
|
|
129
|
-
display:
|
|
130
|
-
|
|
131
|
-
|
|
153
|
+
display: "inline-flex",
|
|
154
|
+
justifyContent: "start",
|
|
155
|
+
alignItems: "center",
|
|
156
|
+
// flexWrap: "nowrap",
|
|
132
157
|
gap: 1,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
158
|
+
scrollbarWidth: "none",
|
|
159
|
+
"&::-webkit-scrollbar": { display: "none" },
|
|
160
|
+
}, children: [jsx(HomeButton, { "aria-label": "Home", onClick: handleHomeClick, children: jsx(HomeRounded, { sx: { fontSize: 20, color: "#4D3019" } }) }), jsx(Breadcrumbs, { separator: "/", sx: {
|
|
161
|
+
display: "inline-flex",
|
|
162
|
+
flexDirection: "row",
|
|
163
|
+
flexWrap: "initial",
|
|
164
|
+
// width: "fit-content",
|
|
165
|
+
flexShrink: 2,
|
|
166
|
+
"& .MuiBreadcrumbs-separator": {
|
|
167
|
+
color: `${theme.palette.dark.main}66`,
|
|
168
|
+
},
|
|
169
|
+
}, children: items.map((item) => (jsx(Typography, { sx: {
|
|
144
170
|
color: theme.palette.dark.main,
|
|
145
171
|
fontWeight: 500,
|
|
146
172
|
px: { xs: 0.5, sm: 1 },
|
|
147
|
-
minWidth: 0,
|
|
148
|
-
whiteSpace:
|
|
149
|
-
overflow:
|
|
150
|
-
textOverflow:
|
|
151
|
-
cursor: item.href ?
|
|
152
|
-
}, onClick: () => item.href && handleNavigation(item.href), children: item.label },
|
|
173
|
+
// minWidth: 0,
|
|
174
|
+
whiteSpace: "nowrap",
|
|
175
|
+
// overflow: "hidden",
|
|
176
|
+
textOverflow: "ellipsis",
|
|
177
|
+
cursor: item.href ? "pointer" : "default",
|
|
178
|
+
}, onClick: () => item.href && handleNavigation(item.href), children: item.label }, item.label))) }), jsx(DropdownMenu, { dropdownItems: dropdownItems, currentItem: currentItem, anchorEl: anchorEl, isDropdownOpen: isDropdownOpen, handleDropdownToggle: handleDropdownToggle, handleClose: handleClose, handleItemClick: handleItemClick })] }));
|
|
153
179
|
};
|
|
154
180
|
|
|
155
181
|
export { Breadcrumb };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport {\r\n Box,\r\n Breadcrumbs as MuiBreadcrumbs,\r\n Typography,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n styled,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport { useTheme } from '../ThemeProvider';\r\nimport { HomeRounded, ExpandMoreRounded, MoreHorizRounded } from '@mui/icons-material';\r\n\r\ninterface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\ninterface BreadcrumbProps {\r\n items: BreadcrumbItem[];\r\n currentItem: string;\r\n dropdownItems?: BreadcrumbItem[];\r\n onItemSelect?: (item: BreadcrumbItem) => void;\r\n onNavigate?: (path: string) => void;\r\n}\r\n\r\nconst HomeButton = styled(IconButton)(({ theme }) => ({\r\n width: 40,\r\n height: 40,\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n flexShrink: 0,\r\n '&:hover': {\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n opacity: 0.8,\r\n },\r\n}));\r\n\r\nconst DropdownButton = styled('button')(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.75, 2),\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n backgroundColor: '#fff',\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n whiteSpace: 'nowrap',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s',\r\n fontSize: '0.875rem',\r\n '&:hover': {\r\n borderColor: `${theme.palette.dark.main}4D`,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n padding: theme.spacing(0.75, 1),\r\n gap: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nconst StyledMenu = styled(Menu)(({ theme }) => ({\r\n '& .MuiPaper-root': {\r\n marginTop: theme.spacing(1),\r\n width: 'auto',\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === 'string'\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n boxShadow:\r\n '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\r\n },\r\n}));\r\n\r\nconst StyledMenuItem = styled(MenuItem, {\r\n shouldForwardProp: (prop) => prop !== 'isActive',\r\n})<{ isActive?: boolean }>(({ theme, isActive }) => ({\r\n padding: theme.spacing(1.25, 2),\r\n fontSize: '0.875rem',\r\n color: isActive ? theme.palette.primary.main : '#4D3019',\r\n fontWeight: isActive ? 500 : 400,\r\n backgroundColor: isActive ? '#F5F1ED' : 'transparent',\r\n whiteSpace: 'normal',\r\n wordBreak: 'break-word',\r\n display: 'block',\r\n '&:hover': {\r\n backgroundColor: '#F5F1ED',\r\n },\r\n}));\r\n\r\n\r\nconst DropdownMenu = ({\r\n dropdownItems,\r\n currentItem,\r\n anchorEl,\r\n isDropdownOpen,\r\n handleDropdownToggle,\r\n handleClose,\r\n handleItemClick,\r\n}: {\r\n dropdownItems: BreadcrumbItem[];\r\n currentItem: string;\r\n anchorEl: HTMLElement | null;\r\n isDropdownOpen: boolean;\r\n handleDropdownToggle: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n handleClose: () => void;\r\n handleItemClick: (item: BreadcrumbItem) => void;\r\n}) => {\r\n return dropdownItems.length > 0 ? (\r\n <Box sx={{ position: 'relative', flexShrink: 0 }}>\r\n <DropdownButton type=\"button\" onClick={handleDropdownToggle}>\r\n <span>{currentItem}</span>\r\n <ExpandMoreRounded\r\n sx={{\r\n fontSize: 20,\r\n transition: 'transform 0.2s',\r\n transform: isDropdownOpen ? 'rotate(180deg)' : 'rotate(0deg)',\r\n }}\r\n />\r\n </DropdownButton>\r\n\r\n <StyledMenu anchorEl={anchorEl} open={isDropdownOpen} onClose={handleClose} disableScrollLock>\r\n {dropdownItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n </Box>\r\n ) : null;\r\n};\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n currentItem,\r\n dropdownItems = [],\r\n onItemSelect,\r\n onNavigate,\r\n}) => {\r\n const theme = useTheme();\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const isDropdownOpen = Boolean(anchorEl);\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n\r\n const [pathAnchorEl, setPathAnchorEl] = useState<null | HTMLElement>(null);\r\n const isPathMenuOpen = Boolean(pathAnchorEl);\r\n \r\n const handleNavigation = (path: string) => {\r\n if (onNavigate) {\r\n onNavigate(path);\r\n } else {\r\n window.location.href = path;\r\n }\r\n };\r\n\r\n const handleDropdownToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => setAnchorEl(null);\r\n\r\n const handlePathMenuOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setPathAnchorEl(event.currentTarget);\r\n };\r\n const handlePathMenuClose = () => setPathAnchorEl(null);\r\n\r\n const handleHomeClick = () => handleNavigation('/');\r\n const handleItemClick = (item: BreadcrumbItem) => {\r\n onItemSelect?.(item);\r\n handleClose();\r\n handlePathMenuClose();\r\n if (item.href) handleNavigation(item.href);\r\n };\r\n\r\n if (isMobile && items.length >= 2) {\r\n const last = items[items.length - 1];\r\n const middleItems = items.slice(0, -1);\r\n\r\n return (\r\n <Box component=\"nav\" sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n overflowX: 'auto',\r\n minWidth: 0,\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': { display: 'none' },\r\n }}>\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: '#4D3019' }} />\r\n </HomeButton>\r\n\r\n <IconButton size=\"small\" onClick={handlePathMenuOpen}>\r\n <MoreHorizRounded sx={{ color: theme.palette.dark.main }} />\r\n </IconButton>\r\n\r\n <Typography\r\n sx={{\r\n fontWeight: 500,\r\n color: theme.palette.dark.main,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '120px',\r\n }}\r\n >\r\n {last.label || currentItem}\r\n </Typography>\r\n\r\n <StyledMenu\r\n anchorEl={pathAnchorEl}\r\n open={isPathMenuOpen}\r\n onClose={handlePathMenuClose}\r\n disableScrollLock \r\n >\r\n {middleItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box component=\"nav\" sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n gap: 1,\r\n overflowX: 'auto',\r\n minWidth: 0,\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': { display: 'none' },\r\n }}>\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: '#4D3019' }} />\r\n </HomeButton>\r\n <MuiBreadcrumbs\r\n separator=\"/\"\r\n sx={{\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n overflowX: 'hidden',\r\n minWidth: 0,\r\n '& .MuiBreadcrumbs-separator': { color: `${theme.palette.dark.main}66` },\r\n }}\r\n >\r\n {items.map((item, index) => (\r\n <Typography\r\n key={index}\r\n sx={{\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n px: { xs: 0.5, sm: 1 },\r\n minWidth: 0,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n cursor: item.href ? 'pointer' : 'default',\r\n }}\r\n onClick={() => item.href && handleNavigation(item.href)}\r\n >\r\n {item.label}\r\n </Typography>\r\n ))}\r\n\r\n\r\n </MuiBreadcrumbs>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n};\r\n"],"names":["_jsxs","_jsx","MuiBreadcrumbs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import React, { Fragment, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n Box,\r\n Breadcrumbs as MuiBreadcrumbs,\r\n Typography,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n styled,\r\n useMediaQuery,\r\n} from \"@mui/material\";\r\nimport { useTheme } from \"../ThemeProvider\";\r\nimport {\r\n HomeRounded,\r\n ExpandMoreRounded,\r\n ChevronRightRounded,\r\n} from \"@mui/icons-material\";\r\n\r\ninterface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\ninterface BreadcrumbProps {\r\n items: BreadcrumbItem[];\r\n currentItem: string;\r\n dropdownItems?: BreadcrumbItem[];\r\n onItemSelect?: (item: BreadcrumbItem) => void;\r\n onNavigate?: (path: string) => void;\r\n}\r\n\r\nconst HomeButton = styled(IconButton)(({ theme }) => ({\r\n width: 40,\r\n height: 40,\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n flexShrink: 0,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.main || theme.palette.accent.main,\r\n opacity: 0.8,\r\n },\r\n}));\r\n\r\nconst DropdownButton = styled(\"button\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.75, 2),\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n backgroundColor: \"#fff\",\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n whiteSpace: \"nowrap\",\r\n cursor: \"pointer\",\r\n transition: \"border-color 0.2s\",\r\n fontSize: \"0.875rem\",\r\n \"&:hover\": {\r\n borderColor: `${theme.palette.dark.main}4D`,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: '100%',\r\n padding: theme.spacing(0.75, 1),\r\n gap: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nconst StyledMenu = styled(Menu)(({ theme }) => ({\r\n \"& .MuiPaper-root\": {\r\n marginTop: theme.spacing(1),\r\n width: \"auto\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n borderRadius:\r\n (typeof theme.shape.borderRadius === \"string\"\r\n ? parseInt(theme.shape.borderRadius, 10)\r\n : theme.shape.borderRadius || 4) * 2,\r\n border: `1px solid ${theme.palette.dark.main}33`,\r\n boxShadow:\r\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\r\n },\r\n}));\r\n\r\nconst StyledMenuItem = styled(MenuItem, {\r\n shouldForwardProp: (prop) => prop !== \"isActive\",\r\n})<{ isActive?: boolean }>(({ theme, isActive }) => ({\r\n padding: theme.spacing(1.25, 2),\r\n fontSize: \"0.875rem\",\r\n color: isActive ? theme.palette.primary.main : \"#4D3019\",\r\n fontWeight: isActive ? 500 : 400,\r\n backgroundColor: isActive ? \"#F5F1ED\" : \"transparent\",\r\n whiteSpace: \"normal\",\r\n wordBreak: \"break-word\",\r\n display: \"block\",\r\n \"&:hover\": {\r\n backgroundColor: \"#F5F1ED\",\r\n },\r\n}));\r\n\r\nconst DropdownMenu = ({\r\n dropdownItems,\r\n currentItem,\r\n anchorEl,\r\n isDropdownOpen,\r\n handleDropdownToggle,\r\n handleClose,\r\n handleItemClick,\r\n}: {\r\n dropdownItems: BreadcrumbItem[];\r\n currentItem: string;\r\n anchorEl: HTMLElement | null;\r\n isDropdownOpen: boolean;\r\n handleDropdownToggle: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n handleClose: () => void;\r\n handleItemClick: (item: BreadcrumbItem) => void;\r\n}) => {\r\n return dropdownItems.length > 0 ? (\r\n <Box sx={{ position: \"relative\", flexShrink: 0 }}>\r\n <DropdownButton type=\"button\" onClick={handleDropdownToggle}>\r\n In this section...\r\n <ExpandMoreRounded\r\n sx={{\r\n fontSize: 20,\r\n transition: \"transform 0.2s\",\r\n transform: isDropdownOpen ? \"rotate(180deg)\" : \"rotate(0deg)\",\r\n }}\r\n />\r\n </DropdownButton>\r\n\r\n <StyledMenu\r\n anchorEl={anchorEl}\r\n open={isDropdownOpen}\r\n onClose={handleClose}\r\n disableScrollLock\r\n >\r\n {dropdownItems.map((item, index) => (\r\n <StyledMenuItem\r\n key={index}\r\n onClick={() => handleItemClick(item)}\r\n isActive={item.label === currentItem}\r\n >\r\n {item.label}\r\n </StyledMenuItem>\r\n ))}\r\n </StyledMenu>\r\n </Box>\r\n ) : null;\r\n};\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n currentItem,\r\n dropdownItems = [],\r\n onItemSelect,\r\n onNavigate,\r\n}) => {\r\n const theme = useTheme();\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const isDropdownOpen = Boolean(anchorEl);\r\n const isMobile = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const scrollMask = useRef<HTMLDivElement>(null);\r\n const endRef = useRef<HTMLDivElement>(null);\r\n \r\n const updateMask = (el: { style?: any; scrollLeft?: any; scrollWidth?: any; clientWidth?: any; }) => {\r\n const { scrollLeft, scrollWidth, clientWidth } = el;\r\n const atStart = scrollLeft === 0;\r\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\r\n\r\n const left = atStart ? 'black' : 'transparent';\r\n const right = atEnd ? 'black' : 'transparent';\r\n\r\n const mask = `linear-gradient(to right, ${left}, black 30px, black calc(100% - 30px), ${right})`;\r\n el.style.maskImage = mask;\r\n el.style.webkitMaskImage = mask;\r\n };\r\n\r\n useEffect(() => {\r\n const el = scrollMask.current;\r\n if (!el) return;\r\n updateMask(el); // set on mount\r\n el.addEventListener('scroll', () => updateMask(el));\r\n return () => el.removeEventListener('scroll', () => updateMask(el));\r\n }, []);\r\n\r\n useEffect(() => {\r\n endRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }, [items]);\r\n\r\n\r\n const handleNavigation = (path: string) => {\r\n if (onNavigate) {\r\n onNavigate(path);\r\n } else {\r\n window.location.href = path;\r\n }\r\n };\r\n\r\n const handleDropdownToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => setAnchorEl(null);\r\n\r\n const handleHomeClick = () => handleNavigation(\"/\");\r\n const handleItemClick = (item: BreadcrumbItem) => {\r\n onItemSelect?.(item);\r\n handleClose();\r\n if (item.href) handleNavigation(item.href);\r\n };\r\n \r\n if (items.length < 1) {\r\n return;\r\n }\r\n\r\n if (isMobile) {\r\n\r\n return (\r\n <Box\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={2}\r\n >\r\n <Box\r\n ref={scrollMask}\r\n component=\"nav\"\r\n sx={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"start\",\r\n flexWrap: \"nowrap\",\r\n overflowX: \"auto\",\r\n textOverflow: \"ellipsis\",\r\n minWidth: 0,\r\n scrollbarWidth: \"none\",\r\n \"&::-webkit-scrollbar\": { display: \"none\" },\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Fragment key={item.label}>\r\n <ChevronRightRounded />\r\n <Typography\r\n onClick={() => {\r\n handleNavigation(item.href as string);\r\n }}\r\n sx={{\r\n fontWeight: 500,\r\n color: theme.palette.dark.main,\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {item?.label ?? \"\"}\r\n </Typography>\r\n <div ref={endRef}/>\r\n </Fragment>\r\n ))}\r\n </Box>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n display: \"inline-flex\",\r\n justifyContent: \"start\",\r\n alignItems: \"center\",\r\n // flexWrap: \"nowrap\",\r\n gap: 1,\r\n scrollbarWidth: \"none\",\r\n \"&::-webkit-scrollbar\": { display: \"none\" },\r\n }}\r\n >\r\n <HomeButton aria-label=\"Home\" onClick={handleHomeClick}>\r\n <HomeRounded sx={{ fontSize: 20, color: \"#4D3019\" }} />\r\n </HomeButton>\r\n <MuiBreadcrumbs\r\n separator=\"/\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexDirection: \"row\",\r\n flexWrap: \"initial\",\r\n // width: \"fit-content\",\r\n flexShrink: 2,\r\n \"& .MuiBreadcrumbs-separator\": {\r\n color: `${theme.palette.dark.main}66`,\r\n },\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Typography\r\n key={item.label}\r\n sx={{\r\n color: theme.palette.dark.main,\r\n fontWeight: 500,\r\n px: { xs: 0.5, sm: 1 },\r\n // minWidth: 0,\r\n whiteSpace: \"nowrap\",\r\n // overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n cursor: item.href ? \"pointer\" : \"default\",\r\n }}\r\n onClick={() => item.href && handleNavigation(item.href)}\r\n >\r\n {item.label}\r\n </Typography>\r\n ))}\r\n </MuiBreadcrumbs>\r\n <DropdownMenu\r\n dropdownItems={dropdownItems}\r\n currentItem={currentItem}\r\n anchorEl={anchorEl}\r\n isDropdownOpen={isDropdownOpen}\r\n handleDropdownToggle={handleDropdownToggle}\r\n handleClose={handleClose}\r\n handleItemClick={handleItemClick}\r\n />\r\n </Box>\r\n );\r\n};\r\n"],"names":["_jsxs","_jsx","MuiBreadcrumbs"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as lib } from '../../../_virtual/
|
|
1
|
+
import { __exports as lib } from '../../../_virtual/index8.js';
|
|
2
2
|
import { __require as requireStringify } from './stringify.js';
|
|
3
3
|
import { __require as requireTraversal } from './traversal.js';
|
|
4
4
|
import { __require as requireManipulation } from './manipulation.js';
|