@pdg/react-admin-layout 1.0.31 → 1.0.33

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/index.esm.js CHANGED
@@ -1,8 +1,8 @@
1
- import {Grid,useTheme,alpha,ListItemButton,ListItemIcon,Icon,ListItemText,Badge,Collapse,styled,List,Box,Toolbar,Typography,AppBar,Drawer,IconButton}from'@mui/material';import React,{useState,useEffect,useCallback,useMemo}from'react';import {useLocation}from'react-router-dom';import {ExpandMore,Menu}from'@mui/icons-material';import {notEmpty,empty}from'@pdg/util';import SimpleBar from'simplebar-react';function styleInject(css, ref) {
1
+ import {Grid,styled,ListItemIcon,ListItemButton,Icon,ListItemText,Badge,Collapse,List,useTheme,alpha,Box,Toolbar,Typography,AppBar,Drawer,IconButton}from'@mui/material';import React,{useState,useEffect,useMemo}from'react';import {useLocation,useNavigate}from'react-router-dom';import {ExpandMore,Menu}from'@mui/icons-material';import {notEmpty,empty}from'@pdg/util';import SimpleBar from'simplebar-react';function styleInject(css, ref) {
2
2
  if ( ref === void 0 ) ref = {};
3
3
  var insertAt = ref.insertAt;
4
4
 
5
- if (!css || typeof document === 'undefined') { return; }
5
+ if (typeof document === 'undefined') { return; }
6
6
 
7
7
  var head = document.head || document.getElementsByTagName('head')[0];
8
8
  var style = document.createElement('style');
@@ -24,122 +24,10 @@ import {Grid,useTheme,alpha,ListItemButton,ListItemIcon,Icon,ListItemText,Badge,
24
24
  style.appendChild(document.createTextNode(css));
25
25
  }
26
26
  }var css_248z = ".simplebar-track.simplebar-vertical {\n width: 8px !important;\n}\n.simplebar-track.simplebar-vertical .simplebar-scrollbar.simplebar-visible:before {\n opacity: 0.3 !important;\n}\n\n.MuiButtonBase-root.MuiButton-root.MuiButton-outlined {\n padding: 5px 15px 4px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-outlined.MuiButton-sizeLarge {\n padding: 7px 21px 6px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-outlined.MuiButton-sizeSmall {\n padding: 3px 9px 2px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-contained {\n padding: 6px 16px 5px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-contained.MuiButton-sizeLarge {\n padding: 8px 22px 7px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-contained.MuiButton-sizeSmall {\n padding: 4px 10px 3px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-text {\n padding: 6px 8px 5px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-text.MuiButton-sizeLarge {\n padding: 8px 11px 7px;\n}\n.MuiButtonBase-root.MuiButton-root.MuiButton-text.MuiButton-sizeSmall {\n padding: 4px 5px 3px;\n}\n\nhtml,\nbody,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo,\nmain,\ninput,\nbutton,\ntextarea,\npre,\nselect,\na {\n font-family: \"Pretendard\", \"Apple Gothic\", \"Dotum\", sans-serif;\n margin: 0;\n padding: 0;\n border: 0;\n vertical-align: top;\n box-sizing: border-box;\n word-break: keep-all;\n line-height: unset;\n}\n\n*:before,\n*:after {\n box-sizing: border-box;\n}";
27
- styleInject(css_248z);var CardLayout = function (_a) {
28
- var children = _a.children, _b = _a.backgroundColor, backgroundColor = _b === void 0 ? '#eff3f8' : _b;
29
- return (React.createElement(Grid, { container: true, direction: 'column', alignItems: 'center', justifyContent: 'center', style: { minHeight: '100vh', backgroundColor: backgroundColor } },
30
- React.createElement(Grid, { item: true, xs: 12 }, children)));
31
- };var SideMenuListItem = function (_a) {
32
- /********************************************************************************************************************
33
- * Use
34
- * ******************************************************************************************************************/
35
- var info = _a.info, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
36
- var theme = useTheme();
37
- var location = useLocation();
38
- /********************************************************************************************************************
39
- * State
40
- * ******************************************************************************************************************/
41
- var _b = useState(false), isExpandable = _b[0], setIsExpandable = _b[1];
42
- var _c = useState(false), isExpand = _c[0], setIsExpand = _c[1];
43
- /********************************************************************************************************************
44
- * Effect
45
- * ******************************************************************************************************************/
46
- useEffect(function () {
47
- setIsExpandable(!!info && notEmpty(info.items));
48
- if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
49
- setIsExpand(true);
50
- }
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
- }, [info]);
53
- useEffect(function () {
54
- if (isExpandable && isExpand != null) {
55
- if (info.uri !== location.pathname) {
56
- if (info.items && !info.items.find(function (info) { return location.pathname === info.uri; })) {
57
- if (isExpand) {
58
- setIsExpand(false);
59
- }
60
- }
61
- }
62
- }
63
- if (isExpandable && !isExpand) {
64
- if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
65
- setIsExpand(true);
66
- }
67
- }
68
- // eslint-disable-next-line react-hooks/exhaustive-deps
69
- }, [location]);
70
- /********************************************************************************************************************
71
- * Function
72
- * ******************************************************************************************************************/
73
- var toggleIsExpand = useCallback(function () {
74
- setIsExpand(function (isExpand) { return !isExpand; });
75
- }, []);
76
- /********************************************************************************************************************
77
- * Memo
78
- * ******************************************************************************************************************/
79
- var icon = useMemo(function () {
80
- return info.icon
81
- ? info.icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
82
- : undefined;
83
- }, [info]);
84
- var containerStyle = useMemo(function () { return ({
85
- backgroundColor: isExpandable && isExpand
86
- ? alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
87
- : undefined,
88
- }); }, [isExpand, isExpandable, theme]);
89
- var expandIconSx = useMemo(function () {
90
- return isExpandable && isExpand != null
91
- ? {
92
- marginTop: 'auto',
93
- marginBottom: 'auto',
94
- animation: "".concat(isExpand ? 'open' : 'close', " 0.1s linear"),
95
- transform: "rotate(".concat(isExpand ? 180 : 0, "deg)"),
96
- '@keyframes open': {
97
- '0%': {
98
- transform: "rotate(0deg)",
99
- },
100
- '100%': {
101
- transform: "rotate(180deg)",
102
- },
103
- },
104
- '@keyframes close': {
105
- '0%': {
106
- transform: "rotate(180deg)",
107
- },
108
- '100%': {
109
- transform: "rotate(0deg)",
110
- },
111
- },
112
- }
113
- : {
114
- marginTop: 'auto',
115
- marginBottom: 'auto',
116
- };
117
- }, [isExpandable, isExpand]);
118
- var collapseStyle = useMemo(function () { return ({
119
- backgroundColor: isExpand
120
- ? alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
121
- : undefined,
122
- }); }, [isExpand, theme]);
123
- var primaryTypographyProps = useMemo(function () { return ({ sx: { fontWeight: info.depth === 1 ? 600 : null } }); }, [info]);
124
- /********************************************************************************************************************
125
- * Render
126
- * ******************************************************************************************************************/
127
- return (React.createElement(React.Fragment, null,
128
- React.createElement(ListItemButton, { onClick: isExpandable
129
- ? toggleIsExpand
130
- : function () {
131
- if (onClick)
132
- onClick(info);
133
- }, selected: isExpandable ? false : info.uri === location.pathname, style: containerStyle },
134
- React.createElement(ListItemIcon, { sx: { minWidth: 30 } }, icon && React.createElement(Icon, { fontSize: 'small' }, icon)),
135
- React.createElement(ListItemText, { primaryTypographyProps: primaryTypographyProps }, info.badge ? (React.createElement(Badge, { badgeContent: info.badge, color: 'error', variant: badgeVariant !== undefined ? badgeVariant : info.badgeVariant, anchorOrigin: { horizontal: 'left', vertical: 'top' }, slotProps: {
136
- badge: { style: { left: '100%', top: '50%', transform: 'scale(.8) translate(10px, -50%)' } },
137
- } },
138
- React.createElement("div", null, info.name))) : (info.name)),
139
- isExpandable && React.createElement(ExpandMore, { sx: expandIconSx })),
140
- React.createElement(Collapse, { in: isExpand, style: collapseStyle }, isExpandable &&
141
- info.items &&
142
- info.items.map(function (subInfo, idx) { return (React.createElement(SideMenuListItem, { key: idx, badgeVariant: badgeVariant, info: subInfo, onClick: onClick })); }))));
27
+ styleInject(css_248z);var CardLayout = function (_a) {
28
+ var children = _a.children, _b = _a.backgroundColor, backgroundColor = _b === void 0 ? '#eff3f8' : _b;
29
+ return (React.createElement(Grid, { container: true, direction: 'column', alignItems: 'center', justifyContent: 'center', style: { minHeight: '100vh', backgroundColor: backgroundColor } },
30
+ React.createElement(Grid, { item: true, xs: 12 }, children)));
143
31
  };/******************************************************************************
144
32
  Copyright (c) Microsoft Corporation.
145
33
 
@@ -157,6 +45,17 @@ PERFORMANCE OF THIS SOFTWARE.
157
45
  /* global Reflect, Promise, SuppressedError, Symbol */
158
46
 
159
47
 
48
+ var __assign = function() {
49
+ __assign = Object.assign || function __assign(t) {
50
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
51
+ s = arguments[i];
52
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
53
+ }
54
+ return t;
55
+ };
56
+ return __assign.apply(this, arguments);
57
+ };
58
+
160
59
  function __makeTemplateObject(cooked, raw) {
161
60
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
162
61
  return cooked;
@@ -164,233 +63,296 @@ function __makeTemplateObject(cooked, raw) {
164
63
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
165
64
  var e = new Error(message);
166
65
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
167
- };var StyledList = styled(List)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"])));
168
- var templateObject_1$3;var SideMenuList = function (_a) {
169
- var list = _a.list, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
170
- return (React.createElement(StyledList, null, list.map(function (info, idx) { return (React.createElement(SideMenuListItem, { key: idx, info: info, badgeVariant: badgeVariant, onClick: onClick })); })));
171
- };var StyledSimpleBar = styled(SimpleBar)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-height: 100%;\n"], ["\n max-height: 100%;\n"])));
172
- var StyledLogoContainerBox = styled(Box)(function (_a) {
173
- var theme = _a.theme;
174
- return theme.unstable_sx({
175
- borderBottom: 'thin solid #f5f5f5',
176
- color: 'text.primary',
177
- });
178
- });
179
- var templateObject_1$2;var SideMenu = function (_a) {
180
- var logo = _a.logo, badgeVariant = _a.badgeVariant, list = _a.list, onClick = _a.onClick;
181
- return (React.createElement(StyledSimpleBar, null,
182
- React.createElement(StyledLogoContainerBox, null,
183
- React.createElement(Toolbar, null, logo)),
184
- list && React.createElement(SideMenuList, { badgeVariant: badgeVariant, list: list, onClick: onClick })));
185
- };var StyledContainerBox$1 = styled(Box)(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
186
- var StyledHeadContainerBox = styled(Box)(function (_a) {
187
- var theme = _a.theme;
188
- return theme.unstable_sx({
189
- display: { xs: 'none', sm: 'flex' },
190
- alignItems: 'center',
191
- opacity: 0.5,
192
- });
193
- });
194
- var StyledHeadIconContainerBox = styled(Box)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n margin-right: 0.25rem;\n line-height: 0;\n"], ["\n margin-right: 0.25rem;\n line-height: 0;\n"])));
195
- var StyledHeadIcon = styled(Icon)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n font-size: 1rem;\n"], ["\n font-size: 1rem;\n"])));
196
- var StyledHeadTitleTypography = styled(Typography)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n font-size: 0.7rem;\n"], ["\n font-size: 0.7rem;\n"])));
197
- var StyledTitleContainerDiv = styled('div')(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n font-size: 1rem;\n"], ["\n display: flex;\n align-items: center;\n font-size: 1rem;\n"])));
198
- var StyledTitleIconContainerDiv = styled('div')(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n flex-shrink: 0;\n display: inline-flex;\n margin-right: 0.3rem;\n"], ["\n flex-shrink: 0;\n display: inline-flex;\n margin-right: 0.3rem;\n"])));
199
- var templateObject_1$1, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6;var Title = function (_a) {
200
- var title = _a.title, icon = _a.icon, headTitle = _a.headTitle, headIcon = _a.headIcon;
201
- var finalHeadIcon = useMemo(function () {
202
- return headIcon
203
- ? headIcon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
204
- : undefined;
205
- }, [headIcon]);
206
- var finalIcon = useMemo(function () { return (icon ? icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }) : undefined); }, [icon]);
207
- return (React.createElement(StyledContainerBox$1, null,
208
- headTitle && (React.createElement(StyledHeadContainerBox, null,
209
- finalHeadIcon && (React.createElement(StyledHeadIconContainerBox, null,
210
- React.createElement(StyledHeadIcon, null, finalHeadIcon))),
211
- React.createElement(StyledHeadTitleTypography, null, headTitle))),
212
- React.createElement(StyledTitleContainerDiv, null,
213
- finalIcon && (React.createElement(StyledTitleIconContainerDiv, null,
214
- React.createElement(Icon, { fontSize: 'small' }, finalIcon))),
215
- React.createElement("div", null, title))));
216
- };var SIDE_MENU_WIDTH = 220;
217
- var StyledContainerBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n height: 100%;\n"], ["\n display: flex;\n height: 100%;\n"])));
218
- var StyledAppBar = styled(AppBar)(function (_a) {
219
- var theme = _a.theme;
220
- return theme.unstable_sx({
221
- backdropFilter: 'blur(20px)',
222
- backgroundColor: 'rgba(255, 255, 255, 0.7)',
223
- color: 'text.primary',
224
- borderBottom: 'thin solid #f5f5f5',
225
- });
226
- });
227
- var StyledSideMenuContainerBox = styled(Box)(function (_a) {
228
- var theme = _a.theme;
229
- return theme.unstable_sx({});
230
- });
231
- var StyledSideMenuTemporaryDrawer = styled(Drawer)(function (_a) {
232
- var theme = _a.theme;
233
- return theme.unstable_sx({
234
- '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
235
- });
236
- });
237
- var StyledSideMenuPermanentDrawer = styled(Drawer)(function (_a) {
238
- var theme = _a.theme;
239
- return theme.unstable_sx({
240
- '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
241
- });
242
- });
243
- var StyledMainBox = styled(Box)(function (_a) {
244
- var theme = _a.theme;
245
- return theme.unstable_sx({
246
- flexGrow: 1,
247
- p: 2,
248
- display: 'flex',
249
- flexDirection: 'column',
250
- minHeight: '100vh',
251
- });
252
- });
253
- var StyledMainContentDiv = styled('div')(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n flex: 1;\n"], ["\n display: flex;\n flex-direction: column;\n flex: 1;\n"])));
254
- var templateObject_1, templateObject_2;var _screens = ['xs', 'sm', 'md', 'lg', 'xl'];
255
- var _getNextScreen = function (screen) {
256
- if (screen === 'xs')
257
- return 'sm';
258
- else if (screen === 'sm')
259
- return 'md';
260
- else if (screen === 'md')
261
- return 'lg';
262
- else
263
- return 'xl';
264
- };
265
- var DefaultLayout = function (_a) {
266
- /********************************************************************************************************************
267
- * Use
268
- * ******************************************************************************************************************/
269
- var children = _a.children, logo = _a.logo, badgeVariant = _a.badgeVariant, menu = _a.menu, initMenuHideScreen = _a.menuHideScreen, appBarControl = _a.appBarControl, onMenuClick = _a.onMenuClick;
270
- var location = useLocation();
271
- /********************************************************************************************************************
272
- * State
273
- * ******************************************************************************************************************/
274
- var _b = useState(false), isMobileOpen = _b[0], setIsMobileOpen = _b[1];
275
- var _c = useState({}), menuTitles = _c[0], setMenuTitles = _c[1];
276
- var _d = useState(), title = _d[0], setTitle = _d[1];
277
- var _e = useState(initMenuHideScreen || 'sm'), menuHideScreen = _e[0], setMenuHideScreen = _e[1];
278
- /********************************************************************************************************************
279
- * Effect
280
- * ******************************************************************************************************************/
281
- useEffect(function () {
282
- var menuTitles = {};
283
- if (menu) {
284
- menu.forEach(function (info) {
285
- if (empty(info.uri) && info.items && info.items.length > 0) {
286
- info.items.map(function (subInfo) {
287
- menuTitles[subInfo.uri] = { name: subInfo.name, parentName: info.name, parentIcon: info.icon };
288
- });
289
- }
290
- else if (info.uri) {
291
- menuTitles[info.uri] = { name: info.name, icon: info.icon };
292
- }
293
- });
294
- }
295
- setMenuTitles(menuTitles);
296
- }, [menu]);
297
- useEffect(function () {
298
- setMenuHideScreen(initMenuHideScreen || 'sm');
299
- }, [initMenuHideScreen]);
300
- useEffect(function () {
301
- if (menuTitles) {
302
- var titleData = menuTitles[location.pathname];
303
- if (titleData) {
304
- setTitle(React.createElement(Title, { title: titleData.name, icon: titleData.icon, headTitle: titleData.parentName, headIcon: titleData.parentIcon }));
305
- }
306
- else {
307
- setTitle(undefined);
308
- }
309
- }
310
- }, [location, menuTitles]);
311
- /********************************************************************************************************************
312
- * Function
313
- * ******************************************************************************************************************/
314
- var toggleIsMobileOpen = useCallback(function () {
315
- setIsMobileOpen(function (isMobileOpen) { return !isMobileOpen; });
316
- }, []);
317
- /********************************************************************************************************************
318
- * Memo
319
- * ******************************************************************************************************************/
320
- var appBarSx = useMemo(function () {
321
- var width = {};
322
- var ml = {};
323
- width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
324
- ml[_getNextScreen(menuHideScreen)] = "".concat(SIDE_MENU_WIDTH, "px");
325
- return { width: width, ml: ml };
326
- }, [menuHideScreen]);
327
- var appBarIconButtonSx = useMemo(function () {
328
- var display = {};
329
- display[_getNextScreen(menuHideScreen)] = 'none';
330
- return { mr: 2, display: display };
331
- }, [menuHideScreen]);
332
- var sideMenuContainerBoxSx = useMemo(function () {
333
- var width = {};
334
- var flexShrink = {};
335
- width[_getNextScreen(menuHideScreen)] = SIDE_MENU_WIDTH;
336
- flexShrink[_getNextScreen(menuHideScreen)] = 0;
337
- return { width: width, flexShrink: flexShrink };
338
- }, [menuHideScreen]);
339
- var sideMenuTemporaryDrawerSx = useMemo(function () {
340
- var found = false;
341
- return {
342
- display: _screens.reduce(function (res, screen) {
343
- if (screen === menuHideScreen) {
344
- found = true;
345
- res[screen] = 'block';
346
- }
347
- else {
348
- res[screen] = found ? 'none' : 'block';
349
- }
350
- return res;
351
- }, {}),
352
- };
353
- }, [menuHideScreen]);
354
- var sideMenuPermanentDrawerSx = useMemo(function () {
355
- var found = false;
356
- return {
357
- display: _screens.reduce(function (res, screen) {
358
- if (screen === menuHideScreen) {
359
- found = true;
360
- res[screen] = 'none';
361
- }
362
- else {
363
- res[screen] = found ? 'block' : 'none';
364
- }
365
- return res;
366
- }, {}),
367
- };
368
- }, [menuHideScreen]);
369
- var mainBoxSx = useMemo(function () {
370
- var width = {};
371
- width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
372
- return { width: width };
373
- }, [menuHideScreen]);
374
- /********************************************************************************************************************
375
- * Render
376
- * ******************************************************************************************************************/
377
- return (React.createElement(StyledContainerBox, null,
378
- React.createElement(StyledAppBar, { position: 'fixed', elevation: 0, sx: appBarSx },
379
- React.createElement(Toolbar, null,
380
- React.createElement(IconButton, { color: 'inherit', "aria-label": 'open drawer', edge: 'start', onClick: toggleIsMobileOpen, sx: appBarIconButtonSx },
381
- React.createElement(Menu, null)),
382
- React.createElement(Typography, { variant: 'h6', noWrap: true, component: 'div', sx: { flexGrow: 1 } }, title),
383
- appBarControl)),
384
- React.createElement(StyledSideMenuContainerBox, { component: 'nav', "aria-label": 'mailbox folders', sx: sideMenuContainerBoxSx },
385
- React.createElement(StyledSideMenuTemporaryDrawer, { variant: 'temporary', open: isMobileOpen, onClose: toggleIsMobileOpen, sx: sideMenuTemporaryDrawerSx, ModalProps: {
386
- keepMounted: true, // Better open performance on mobile.
387
- } }, menu && (React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: function (menuItem) {
388
- toggleIsMobileOpen();
389
- if (onMenuClick)
390
- onMenuClick(menuItem);
391
- } }))),
392
- React.createElement(StyledSideMenuPermanentDrawer, { variant: 'permanent', open: true, sx: sideMenuPermanentDrawerSx }, menu && React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: onMenuClick }))),
393
- React.createElement(StyledMainBox, { component: 'main', sx: mainBoxSx },
394
- React.createElement(Toolbar, null),
395
- React.createElement(StyledMainContentDiv, null, children))));
66
+ };var StyledExpandMore = styled(ExpandMore)(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n margin-top: auto;\n margin-bottom: auto;\n @keyframes open {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(180deg);\n }\n }\n @keyframes close {\n 0% {\n transform: rotate(180deg);\n }\n 100% {\n transform: rotate(0deg);\n }\n }\n"], ["\n margin-top: auto;\n margin-bottom: auto;\n @keyframes open {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(180deg);\n }\n }\n @keyframes close {\n 0% {\n transform: rotate(180deg);\n }\n 100% {\n transform: rotate(0deg);\n }\n }\n"])));
67
+ var StyledListItemIcon = styled(ListItemIcon)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n min-width: 30px;\n"], ["\n min-width: 30px;\n"])));
68
+ var templateObject_1$4, templateObject_2$2;var SideMenuListItem = function (_a) {
69
+ /********************************************************************************************************************
70
+ * Use
71
+ * ******************************************************************************************************************/
72
+ var info = _a.info, badgeVariant = _a.badgeVariant, expandedBackgroundColor = _a.expandedBackgroundColor;
73
+ var location = useLocation();
74
+ var navigate = useNavigate();
75
+ /********************************************************************************************************************
76
+ * State
77
+ * ******************************************************************************************************************/
78
+ var _b = useState(false), isExpandable = _b[0], setIsExpandable = _b[1];
79
+ var _c = useState(false), isExpand = _c[0], setIsExpand = _c[1];
80
+ /********************************************************************************************************************
81
+ * Effect
82
+ * ******************************************************************************************************************/
83
+ useEffect(function () {
84
+ setIsExpandable(notEmpty(info.items));
85
+ if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
86
+ setIsExpand(true);
87
+ }
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [info]);
90
+ useEffect(function () {
91
+ if (isExpandable && isExpand != null) {
92
+ if (info.uri !== location.pathname) {
93
+ if (info.items && !info.items.find(function (info) { return location.pathname === info.uri; })) {
94
+ if (isExpand) {
95
+ setIsExpand(false);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ if (isExpandable && !isExpand) {
101
+ if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
102
+ setIsExpand(true);
103
+ }
104
+ }
105
+ // eslint-disable-next-line react-hooks/exhaustive-deps
106
+ }, [location]);
107
+ /********************************************************************************************************************
108
+ * Render
109
+ * ******************************************************************************************************************/
110
+ return (React.createElement(React.Fragment, null,
111
+ React.createElement(ListItemButton, { onClick: isExpandable ? function () { return setIsExpand(function (old) { return !old; }); } : function () { return info.uri && navigate(info.uri); }, selected: isExpandable ? false : info.uri === location.pathname, style: {
112
+ backgroundColor: isExpandable && isExpand ? expandedBackgroundColor : undefined,
113
+ } },
114
+ React.createElement(StyledListItemIcon, null, info.icon && React.createElement(Icon, { fontSize: 'small' }, info.icon)),
115
+ React.createElement(ListItemText, { primaryTypographyProps: { style: { fontWeight: info.depth === 1 ? 600 : undefined } } }, info.badge ? (React.createElement(Badge, { badgeContent: info.badge, color: 'error', variant: badgeVariant !== undefined ? badgeVariant : info.badgeVariant, anchorOrigin: { horizontal: 'left', vertical: 'top' }, slotProps: {
116
+ badge: { style: { left: '100%', top: '50%', transform: 'scale(.8) translate(10px, -50%)' } },
117
+ } },
118
+ React.createElement("div", null, info.name))) : (info.name)),
119
+ isExpandable && (React.createElement(StyledExpandMore, { sx: {
120
+ animation: "".concat(isExpand ? 'open' : 'close', " 0.1s linear"),
121
+ transform: "rotate(".concat(isExpand ? 180 : 0, "deg)"),
122
+ } }))),
123
+ isExpandable && (React.createElement(Collapse, { in: isExpand, style: { backgroundColor: isExpand ? expandedBackgroundColor : undefined } }, info.items &&
124
+ info.items.map(function (subInfo, idx) { return React.createElement(SideMenuListItem, { key: idx, badgeVariant: badgeVariant, info: subInfo }); })))));
125
+ };var StyledList = styled(List)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"])));
126
+ var templateObject_1$3;var SideMenuList = function (_a) {
127
+ /********************************************************************************************************************
128
+ * Use
129
+ * ******************************************************************************************************************/
130
+ var list = _a.list, badgeVariant = _a.badgeVariant;
131
+ var theme = useTheme();
132
+ /********************************************************************************************************************
133
+ * Variable
134
+ * ******************************************************************************************************************/
135
+ var finalList = list.map(function (item) { return (__assign(__assign({}, item), { icon: item.icon
136
+ ? item.icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
137
+ : undefined })); });
138
+ var expandedBackgroundColor = alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2);
139
+ /********************************************************************************************************************
140
+ * Render
141
+ * ******************************************************************************************************************/
142
+ return (React.createElement(StyledList, null, finalList.map(function (info, idx) { return (React.createElement(SideMenuListItem, { key: idx, info: info, badgeVariant: badgeVariant, expandedBackgroundColor: expandedBackgroundColor })); })));
143
+ };
144
+ var SideMenuList$1 = React.memo(SideMenuList);var StyledSimpleBar = styled(SimpleBar)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-height: 100%;\n"], ["\n max-height: 100%;\n"])));
145
+ var StyledLogoContainerBox = styled(Box)(function (_a) {
146
+ var theme = _a.theme;
147
+ return theme.unstable_sx({
148
+ borderBottom: 'thin solid #f5f5f5',
149
+ color: 'text.primary',
150
+ });
151
+ });
152
+ var templateObject_1$2;var SideMenu = function (_a) {
153
+ var logo = _a.logo, badgeVariant = _a.badgeVariant, list = _a.list;
154
+ return (React.createElement(StyledSimpleBar, null,
155
+ React.createElement(StyledLogoContainerBox, null,
156
+ React.createElement(Toolbar, null, logo)),
157
+ list && React.createElement(SideMenuList$1, { badgeVariant: badgeVariant, list: list })));
158
+ };
159
+ var SideMenu$1 = React.memo(SideMenu);var StyledContainerBox$1 = styled(Box)(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
160
+ var StyledHeadContainerBox = styled(Box)(function (_a) {
161
+ var theme = _a.theme;
162
+ return theme.unstable_sx({
163
+ display: { xs: 'none', sm: 'flex' },
164
+ alignItems: 'center',
165
+ opacity: 0.5,
166
+ });
167
+ });
168
+ var StyledHeadIconContainerBox = styled(Box)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n margin-right: 0.25rem;\n line-height: 0;\n"], ["\n margin-right: 0.25rem;\n line-height: 0;\n"])));
169
+ var StyledHeadIcon = styled(Icon)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n font-size: 1rem;\n"], ["\n font-size: 1rem;\n"])));
170
+ var StyledHeadTitleTypography = styled(Typography)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n font-size: 0.7rem;\n"], ["\n font-size: 0.7rem;\n"])));
171
+ var StyledTitleContainerDiv = styled('div')(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n font-size: 1rem;\n"], ["\n display: flex;\n align-items: center;\n font-size: 1rem;\n"])));
172
+ var StyledTitleIconContainerDiv = styled('div')(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n flex-shrink: 0;\n display: inline-flex;\n margin-right: 0.3rem;\n"], ["\n flex-shrink: 0;\n display: inline-flex;\n margin-right: 0.3rem;\n"])));
173
+ var templateObject_1$1, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6;var Title = function (_a) {
174
+ var title = _a.title, icon = _a.icon, headTitle = _a.headTitle, headIcon = _a.headIcon;
175
+ var finalHeadIcon = useMemo(function () {
176
+ return headIcon
177
+ ? headIcon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
178
+ : undefined;
179
+ }, [headIcon]);
180
+ var finalIcon = useMemo(function () { return (icon ? icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }) : undefined); }, [icon]);
181
+ return (React.createElement(StyledContainerBox$1, null,
182
+ headTitle && (React.createElement(StyledHeadContainerBox, null,
183
+ finalHeadIcon && (React.createElement(StyledHeadIconContainerBox, null,
184
+ React.createElement(StyledHeadIcon, null, finalHeadIcon))),
185
+ React.createElement(StyledHeadTitleTypography, null, headTitle))),
186
+ React.createElement(StyledTitleContainerDiv, null,
187
+ finalIcon && (React.createElement(StyledTitleIconContainerDiv, null,
188
+ React.createElement(Icon, { fontSize: 'small' }, finalIcon))),
189
+ React.createElement("div", null, title))));
190
+ };var SIDE_MENU_WIDTH = 220;
191
+ var StyledContainerBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n height: 100%;\n"], ["\n display: flex;\n height: 100%;\n"])));
192
+ var StyledAppBar = styled(AppBar)(function (_a) {
193
+ var theme = _a.theme;
194
+ return theme.unstable_sx({
195
+ backdropFilter: 'blur(20px)',
196
+ backgroundColor: 'rgba(255, 255, 255, 0.7)',
197
+ color: 'text.primary',
198
+ borderBottom: 'thin solid #f5f5f5',
199
+ });
200
+ });
201
+ var StyledSideMenuContainerBox = styled(Box)(function (_a) {
202
+ var theme = _a.theme;
203
+ return theme.unstable_sx({});
204
+ });
205
+ var StyledSideMenuTemporaryDrawer = styled(Drawer)(function (_a) {
206
+ var theme = _a.theme;
207
+ return theme.unstable_sx({
208
+ '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
209
+ });
210
+ });
211
+ var StyledSideMenuPermanentDrawer = styled(Drawer)(function (_a) {
212
+ var theme = _a.theme;
213
+ return theme.unstable_sx({
214
+ '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
215
+ });
216
+ });
217
+ var StyledMainBox = styled(Box)(function (_a) {
218
+ var theme = _a.theme;
219
+ return theme.unstable_sx({
220
+ flexGrow: 1,
221
+ p: 2,
222
+ display: 'flex',
223
+ flexDirection: 'column',
224
+ minHeight: '100vh',
225
+ });
226
+ });
227
+ var StyledMainContentDiv = styled('div')(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n flex: 1;\n"], ["\n display: flex;\n flex-direction: column;\n flex: 1;\n"])));
228
+ var templateObject_1, templateObject_2;var SCREENS = ['xs', 'sm', 'md', 'lg', 'xl'];
229
+ var _getNextScreen = function (screen) {
230
+ if (screen === 'xs')
231
+ return 'sm';
232
+ else if (screen === 'sm')
233
+ return 'md';
234
+ else if (screen === 'md')
235
+ return 'lg';
236
+ else
237
+ return 'xl';
238
+ };
239
+ var DefaultLayout = function (_a) {
240
+ /********************************************************************************************************************
241
+ * Use
242
+ * ******************************************************************************************************************/
243
+ var _b, _c, _d, _e, _f, _g;
244
+ var children = _a.children, logo = _a.logo, badgeVariant = _a.badgeVariant, menu = _a.menu, initMenuHideScreen = _a.menuHideScreen, appBarControl = _a.appBarControl;
245
+ var location = useLocation();
246
+ /********************************************************************************************************************
247
+ * State
248
+ * ******************************************************************************************************************/
249
+ var _h = useState(false), isMobileOpen = _h[0], setIsMobileOpen = _h[1];
250
+ var _j = useState({}), menuTitles = _j[0], setMenuTitles = _j[1];
251
+ var _k = useState(), title = _k[0], setTitle = _k[1];
252
+ var _l = useState(initMenuHideScreen || 'sm'), menuHideScreen = _l[0], setMenuHideScreen = _l[1];
253
+ /********************************************************************************************************************
254
+ * Effect
255
+ * ******************************************************************************************************************/
256
+ useEffect(function () {
257
+ var menuTitles = {};
258
+ if (menu) {
259
+ menu.forEach(function (info) {
260
+ if (empty(info.uri) && info.items && info.items.length > 0) {
261
+ info.items.map(function (subInfo) {
262
+ menuTitles[subInfo.uri] = { name: subInfo.name, parentName: info.name, parentIcon: info.icon };
263
+ });
264
+ }
265
+ else if (info.uri) {
266
+ menuTitles[info.uri] = { name: info.name, icon: info.icon };
267
+ }
268
+ });
269
+ }
270
+ setMenuTitles(menuTitles);
271
+ }, [menu]);
272
+ useEffect(function () {
273
+ setMenuHideScreen(initMenuHideScreen || 'sm');
274
+ }, [initMenuHideScreen]);
275
+ useEffect(function () {
276
+ setIsMobileOpen(false);
277
+ }, [location]);
278
+ useEffect(function () {
279
+ if (menuTitles) {
280
+ var titleData = menuTitles[location.pathname];
281
+ if (titleData) {
282
+ setTitle(React.createElement(Title, { title: titleData.name, icon: titleData.icon, headTitle: titleData.parentName, headIcon: titleData.parentIcon }));
283
+ }
284
+ else {
285
+ setTitle(undefined);
286
+ }
287
+ }
288
+ }, [location, menuTitles]);
289
+ /********************************************************************************************************************
290
+ * Function
291
+ * ******************************************************************************************************************/
292
+ var toggleIsMobileOpen = function () { return setIsMobileOpen(function (isMobileOpen) { return !isMobileOpen; }); };
293
+ /********************************************************************************************************************
294
+ * Memo
295
+ * ******************************************************************************************************************/
296
+ var sideMenuTemporaryDrawerSx = useMemo(function () {
297
+ var found = false;
298
+ return {
299
+ display: SCREENS.reduce(function (res, screen) {
300
+ if (screen === menuHideScreen) {
301
+ found = true;
302
+ res[screen] = 'block';
303
+ }
304
+ else {
305
+ res[screen] = found ? 'none' : 'block';
306
+ }
307
+ return res;
308
+ }, {}),
309
+ };
310
+ }, [menuHideScreen]);
311
+ var sideMenuPermanentDrawerSx = useMemo(function () {
312
+ var found = false;
313
+ return {
314
+ display: SCREENS.reduce(function (res, screen) {
315
+ if (screen === menuHideScreen) {
316
+ found = true;
317
+ res[screen] = 'none';
318
+ }
319
+ else {
320
+ res[screen] = found ? 'block' : 'none';
321
+ }
322
+ return res;
323
+ }, {}),
324
+ };
325
+ }, [menuHideScreen]);
326
+ /********************************************************************************************************************
327
+ * Variable
328
+ * ******************************************************************************************************************/
329
+ var nextMenuScreen = _getNextScreen(menuHideScreen);
330
+ var appBarSx = {
331
+ width: (_b = {}, _b[nextMenuScreen] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)"), _b),
332
+ ml: (_c = {}, _c[nextMenuScreen] = "".concat(SIDE_MENU_WIDTH, "px"), _c),
333
+ };
334
+ var appBarIconButtonSx = { mr: 2, display: (_d = {}, _d[nextMenuScreen] = 'none', _d) };
335
+ var sideMenuContainerBoxSx = {
336
+ width: (_e = {}, _e[nextMenuScreen] = SIDE_MENU_WIDTH, _e),
337
+ flexShrink: (_f = {}, _f[nextMenuScreen] = 0, _f),
338
+ };
339
+ var mainBoxSx = { width: (_g = {}, _g[nextMenuScreen] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)"), _g) };
340
+ /********************************************************************************************************************
341
+ * Render
342
+ * ******************************************************************************************************************/
343
+ return (React.createElement(StyledContainerBox, null,
344
+ React.createElement(StyledAppBar, { position: 'fixed', elevation: 0, sx: appBarSx },
345
+ React.createElement(Toolbar, null,
346
+ React.createElement(IconButton, { color: 'inherit', "aria-label": 'open drawer', edge: 'start', onClick: toggleIsMobileOpen, sx: appBarIconButtonSx },
347
+ React.createElement(Menu, null)),
348
+ React.createElement(Typography, { variant: 'h6', noWrap: true, component: 'div', sx: { flexGrow: 1 } }, title),
349
+ appBarControl)),
350
+ React.createElement(StyledSideMenuContainerBox, { component: 'nav', "aria-label": 'mailbox folders', sx: sideMenuContainerBoxSx },
351
+ React.createElement(StyledSideMenuTemporaryDrawer, { variant: 'temporary', open: isMobileOpen, onClose: toggleIsMobileOpen, sx: sideMenuTemporaryDrawerSx, ModalProps: {
352
+ keepMounted: true, // Better open performance on mobile.
353
+ } }, menu && React.createElement(SideMenu$1, { logo: logo, badgeVariant: badgeVariant, list: menu })),
354
+ React.createElement(StyledSideMenuPermanentDrawer, { variant: 'permanent', open: true, sx: sideMenuPermanentDrawerSx }, menu && React.createElement(SideMenu$1, { logo: logo, badgeVariant: badgeVariant, list: menu }))),
355
+ React.createElement(StyledMainBox, { component: 'main', sx: mainBoxSx },
356
+ React.createElement(Toolbar, null),
357
+ React.createElement(StyledMainContentDiv, null, children))));
396
358
  };export{CardLayout,DefaultLayout};