@pdg/react-admin-layout 1.0.15 → 1.0.17

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.
Files changed (31) hide show
  1. package/dist/@types/index.d.ts +1 -1
  2. package/dist/@types/types.d.ts +13 -13
  3. package/dist/@util/compare.d.ts +4 -4
  4. package/dist/@util/index.d.ts +4 -4
  5. package/dist/CardLayout/CardLayout.d.ts +4 -4
  6. package/dist/CardLayout/CardLayout.types.d.ts +7 -7
  7. package/dist/CardLayout/index.d.ts +3 -3
  8. package/dist/DefaultLayout/DefaultLayout.d.ts +4 -4
  9. package/dist/DefaultLayout/DefaultLayout.style.d.ts +17 -17
  10. package/dist/DefaultLayout/DefaultLayout.types.d.ts +29 -29
  11. package/dist/DefaultLayout/DefaultLayout.types.private.d.ts +9 -9
  12. package/dist/DefaultLayout/SideMenu/SideMenu.d.ts +4 -4
  13. package/dist/DefaultLayout/SideMenu/SideMenu.style.d.ts +5 -5
  14. package/dist/DefaultLayout/SideMenu/SideMenu.types.d.ts +5 -5
  15. package/dist/DefaultLayout/SideMenu/index.d.ts +4 -4
  16. package/dist/DefaultLayout/SideMenuList/SideMenuList.d.ts +4 -4
  17. package/dist/DefaultLayout/SideMenuList/SideMenuList.style.d.ts +4 -4
  18. package/dist/DefaultLayout/SideMenuList/SideMenuList.types.d.ts +7 -7
  19. package/dist/DefaultLayout/SideMenuList/index.d.ts +4 -4
  20. package/dist/DefaultLayout/SideMenuListItem/SideMenuListItem.d.ts +4 -4
  21. package/dist/DefaultLayout/SideMenuListItem/SideMenuListItem.types.d.ts +7 -7
  22. package/dist/DefaultLayout/SideMenuListItem/index.d.ts +4 -4
  23. package/dist/DefaultLayout/Title.d.ts +9 -9
  24. package/dist/DefaultLayout/Title.style.d.ts +18 -18
  25. package/dist/DefaultLayout/index.d.ts +4 -4
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.esm.js +345 -345
  28. package/dist/index.js +345 -345
  29. package/package.json +2 -2
  30. package/dist/index.esm.js.map +0 -1
  31. package/dist/index.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- 'use strict';var material=require('@mui/material'),React=require('react'),reactRouterDom=require('react-router-dom'),iconsMaterial=require('@mui/icons-material'),SimpleBar=require('simplebar-react');var CardLayoutDefaultProps = {
2
- backgroundColor: '#eff3f8',
3
- };var CardLayout = function (_a) {
4
- var children = _a.children, backgroundColor = _a.backgroundColor;
5
- return (React.createElement(material.Grid, { container: true, direction: 'column', alignItems: 'center', justifyContent: 'center', style: { minHeight: '100vh', backgroundColor: backgroundColor } },
6
- React.createElement(material.Grid, { item: true, xs: 12 }, children)));
7
- };
1
+ 'use strict';var material=require('@mui/material'),React=require('react'),reactRouterDom=require('react-router-dom'),iconsMaterial=require('@mui/icons-material'),SimpleBar=require('simplebar-react');var CardLayoutDefaultProps = {
2
+ backgroundColor: '#eff3f8',
3
+ };var CardLayout = function (_a) {
4
+ var children = _a.children, backgroundColor = _a.backgroundColor;
5
+ return (React.createElement(material.Grid, { container: true, direction: 'column', alignItems: 'center', justifyContent: 'center', style: { minHeight: '100vh', backgroundColor: backgroundColor } },
6
+ React.createElement(material.Grid, { item: true, xs: 12 }, children)));
7
+ };
8
8
  CardLayout.defaultProps = CardLayoutDefaultProps;/******************************************************************************
9
9
  Copyright (c) Microsoft Corporation.
10
10
 
@@ -29,341 +29,341 @@ function __makeTemplateObject(cooked, raw) {
29
29
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
30
30
  var e = new Error(message);
31
31
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
32
- };var empty = function (v) {
33
- var result = false;
34
- if (v == null) {
35
- result = true;
36
- }
37
- else if (typeof v === 'string') {
38
- result = v === '';
39
- }
40
- else if (typeof v === 'object') {
41
- if (Array.isArray(v)) {
42
- result = v.length === 0;
43
- }
44
- else if (!(v instanceof Date)) {
45
- result = Object.entries(v).length === 0;
46
- }
47
- }
48
- return result;
49
- };
50
- var notEmpty = function (v) {
51
- return !empty(v);
52
- };var SideMenuListItem = function (_a) {
53
- var info = _a.info, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
54
- var theme = material.useTheme();
55
- var location = reactRouterDom.useLocation();
56
- // -------------------------------------------------------------------------------------------------------------------
57
- var _b = React.useState(false), isExpandable = _b[0], setIsExpandable = _b[1];
58
- var _c = React.useState(false), isExpand = _c[0], setIsExpand = _c[1];
59
- // -------------------------------------------------------------------------------------------------------------------
60
- React.useEffect(function () {
61
- setIsExpandable(!!info && notEmpty(info.items));
62
- if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
63
- setIsExpand(true);
64
- }
65
- // eslint-disable-next-line react-hooks/exhaustive-deps
66
- }, [info]);
67
- React.useEffect(function () {
68
- if (isExpandable && isExpand != null) {
69
- if (info.uri !== location.pathname) {
70
- if (info.items && !info.items.find(function (info) { return location.pathname === info.uri; })) {
71
- if (isExpand) {
72
- setIsExpand(false);
73
- }
74
- }
75
- }
76
- }
77
- if (isExpandable && !isExpand) {
78
- if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
79
- setIsExpand(true);
80
- }
81
- }
82
- // eslint-disable-next-line react-hooks/exhaustive-deps
83
- }, [location]);
84
- // -------------------------------------------------------------------------------------------------------------------
85
- var toggleIsExpand = React.useCallback(function () {
86
- setIsExpand(function (isExpand) { return !isExpand; });
87
- }, []);
88
- // -------------------------------------------------------------------------------------------------------------------
89
- var icon = React.useMemo(function () {
90
- return info.icon
91
- ? info.icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
92
- : undefined;
93
- }, [info]);
94
- // -------------------------------------------------------------------------------------------------------------------
95
- var containerStyle = React.useMemo(function () { return ({
96
- backgroundColor: isExpandable && isExpand
97
- ? material.alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
98
- : undefined,
99
- }); }, [isExpand, isExpandable, theme]);
100
- var expandIconSx = React.useMemo(function () {
101
- return isExpandable && isExpand != null
102
- ? {
103
- marginTop: 'auto',
104
- marginBottom: 'auto',
105
- animation: "".concat(isExpand ? 'open' : 'close', " 0.1s linear"),
106
- transform: "rotate(".concat(isExpand ? 180 : 0, "deg)"),
107
- '@keyframes open': {
108
- '0%': {
109
- transform: "rotate(0deg)",
110
- },
111
- '100%': {
112
- transform: "rotate(180deg)",
113
- },
114
- },
115
- '@keyframes close': {
116
- '0%': {
117
- transform: "rotate(180deg)",
118
- },
119
- '100%': {
120
- transform: "rotate(0deg)",
121
- },
122
- },
123
- }
124
- : {
125
- marginTop: 'auto',
126
- marginBottom: 'auto',
127
- };
128
- }, [isExpandable, isExpand]);
129
- var collapseStyle = React.useMemo(function () { return ({
130
- backgroundColor: isExpand
131
- ? material.alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
132
- : undefined,
133
- }); }, [isExpand, theme]);
134
- var primaryTypographyProps = React.useMemo(function () { return ({ sx: { fontWeight: info.depth === 1 ? 600 : null } }); }, [info]);
135
- // -------------------------------------------------------------------------------------------------------------------
136
- return (React.createElement(React.Fragment, null,
137
- React.createElement(material.ListItemButton, { onClick: isExpandable
138
- ? toggleIsExpand
139
- : function () {
140
- if (onClick)
141
- onClick(info);
142
- }, selected: isExpandable ? false : info.uri === location.pathname, style: containerStyle },
143
- React.createElement(material.ListItemIcon, { sx: { minWidth: 30 } }, icon && React.createElement(material.Icon, { fontSize: 'small' }, icon)),
144
- React.createElement(material.ListItemText, { primaryTypographyProps: primaryTypographyProps }, info.badge ? (React.createElement(material.Badge, { badgeContent: info.badge, color: 'error', variant: badgeVariant !== undefined ? badgeVariant : info.badgeVariant, anchorOrigin: { horizontal: 'left', vertical: 'top' }, slotProps: {
145
- badge: { style: { left: '100%', top: '50%', transform: 'scale(.8) translate(10px, -50%)' } },
146
- } },
147
- React.createElement("div", null, info.name))) : (info.name)),
148
- isExpandable && React.createElement(iconsMaterial.ExpandMore, { sx: expandIconSx })),
149
- React.createElement(material.Collapse, { in: isExpand, style: collapseStyle }, isExpandable &&
150
- info.items &&
151
- info.items.map(function (subInfo, idx) { return (React.createElement(SideMenuListItem, { key: idx, badgeVariant: badgeVariant, info: subInfo, onClick: onClick })); }))));
152
- };var StyledList = material.styled(material.List)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"])));
153
- var templateObject_1$3;var SideMenuList = function (_a) {
154
- var list = _a.list, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
155
- return (React.createElement(StyledList, null, list.map(function (info, idx) { return (React.createElement(SideMenuListItem, { key: idx, info: info, badgeVariant: badgeVariant, onClick: onClick })); })));
156
- };var StyledSimpleBar = material.styled(SimpleBar)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-height: 100%;\n"], ["\n max-height: 100%;\n"])));
157
- var StyledLogoContainerBox = material.styled(material.Box)(function (_a) {
158
- var theme = _a.theme;
159
- return theme.unstable_sx({
160
- borderBottom: 'thin solid #f5f5f5',
161
- color: 'text.primary',
162
- });
163
- });
164
- var templateObject_1$2;var SideMenu = function (_a) {
165
- var logo = _a.logo, badgeVariant = _a.badgeVariant, list = _a.list, onClick = _a.onClick;
166
- return (React.createElement(StyledSimpleBar, null,
167
- React.createElement(StyledLogoContainerBox, null,
168
- React.createElement(material.Toolbar, null, logo)),
169
- list && React.createElement(SideMenuList, { badgeVariant: badgeVariant, list: list, onClick: onClick })));
170
- };var StyledContainerBox$1 = material.styled(material.Box)(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
171
- var StyledHeadContainerBox = material.styled(material.Box)(function (_a) {
172
- var theme = _a.theme;
173
- return theme.unstable_sx({
174
- display: { xs: 'none', sm: 'flex' },
175
- alignItems: 'center',
176
- opacity: 0.5,
177
- });
178
- });
179
- var StyledHeadIconContainerBox = material.styled(material.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"])));
180
- var StyledHeadIcon = material.styled(material.Icon)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n font-size: 1rem;\n"], ["\n font-size: 1rem;\n"])));
181
- var StyledHeadTitleTypography = material.styled(material.Typography)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n font-size: 0.7rem;\n"], ["\n font-size: 0.7rem;\n"])));
182
- var StyledTitleContainerDiv = material.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"])));
183
- var StyledTitleIconContainerDiv = material.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"])));
184
- var templateObject_1$1, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6;var Title = function (_a) {
185
- var title = _a.title, icon = _a.icon, headTitle = _a.headTitle, headIcon = _a.headIcon;
186
- var finalHeadIcon = React.useMemo(function () {
187
- return headIcon
188
- ? headIcon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
189
- : undefined;
190
- }, [headIcon]);
191
- var finalIcon = React.useMemo(function () { return (icon ? icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }) : undefined); }, [icon]);
192
- return (React.createElement(StyledContainerBox$1, null,
193
- headTitle && (React.createElement(StyledHeadContainerBox, null,
194
- finalHeadIcon && (React.createElement(StyledHeadIconContainerBox, null,
195
- React.createElement(StyledHeadIcon, null, finalHeadIcon))),
196
- React.createElement(StyledHeadTitleTypography, null, headTitle))),
197
- React.createElement(StyledTitleContainerDiv, null,
198
- finalIcon && (React.createElement(StyledTitleIconContainerDiv, null,
199
- React.createElement(material.Icon, { fontSize: 'small' }, finalIcon))),
200
- React.createElement("div", null, title))));
201
- };var SIDE_MENU_WIDTH = 220;
202
- var StyledContainerBox = material.styled(material.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n height: 100%;\n"], ["\n display: flex;\n height: 100%;\n"])));
203
- var StyledAppBar = material.styled(material.AppBar)(function (_a) {
204
- var theme = _a.theme;
205
- return theme.unstable_sx({
206
- backdropFilter: 'blur(20px)',
207
- backgroundColor: 'rgba(255, 255, 255, 0.7)',
208
- color: 'text.primary',
209
- borderBottom: 'thin solid #f5f5f5',
210
- });
211
- });
212
- var StyledSideMenuContainerBox = material.styled(material.Box)(function (_a) {
213
- var theme = _a.theme;
214
- return theme.unstable_sx({});
215
- });
216
- var StyledSideMenuTemporaryDrawer = material.styled(material.Drawer)(function (_a) {
217
- var theme = _a.theme;
218
- return theme.unstable_sx({
219
- '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
220
- });
221
- });
222
- var StyledSideMenuPermanentDrawer = material.styled(material.Drawer)(function (_a) {
223
- var theme = _a.theme;
224
- return theme.unstable_sx({
225
- '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
226
- });
227
- });
228
- var StyledMainBox = material.styled(material.Box)(function (_a) {
229
- var theme = _a.theme;
230
- return theme.unstable_sx({
231
- flexGrow: 1,
232
- p: 2,
233
- display: 'flex',
234
- flexDirection: 'column',
235
- minHeight: '100vh',
236
- });
237
- });
238
- var StyledMainContentDiv = material.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"])));
239
- var templateObject_1, templateObject_2;var _screens = ['xs', 'sm', 'md', 'lg', 'xl'];
240
- var _getNextScreen = function (screen) {
241
- if (screen === 'xs')
242
- return 'sm';
243
- else if (screen === 'sm')
244
- return 'md';
245
- else if (screen === 'md')
246
- return 'lg';
247
- else
248
- return 'xl';
249
- };
250
- var DefaultLayout = function (_a) {
251
- // -------------------------------------------------------------------------------------------------------------------
252
- var children = _a.children, logo = _a.logo, badgeVariant = _a.badgeVariant, menu = _a.menu, initMenuHideScreen = _a.menuHideScreen, appBarControl = _a.appBarControl, onMenuClick = _a.onMenuClick;
253
- var location = reactRouterDom.useLocation();
254
- // -------------------------------------------------------------------------------------------------------------------
255
- var _b = React.useState(false), isMobileOpen = _b[0], setIsMobileOpen = _b[1];
256
- var _c = React.useState({}), menuTitles = _c[0], setMenuTitles = _c[1];
257
- var _d = React.useState(), title = _d[0], setTitle = _d[1];
258
- var _e = React.useState(initMenuHideScreen || 'sm'), menuHideScreen = _e[0], setMenuHideScreen = _e[1];
259
- //--------------------------------------------------------------------------------------------------------------------
260
- React.useEffect(function () {
261
- var menuTitles = {};
262
- if (menu) {
263
- menu.forEach(function (info) {
264
- if (empty(info.uri) && info.items && info.items.length > 0) {
265
- info.items.map(function (subInfo) {
266
- menuTitles[subInfo.uri] = { name: subInfo.name, parentName: info.name, parentIcon: info.icon };
267
- });
268
- }
269
- else if (info.uri) {
270
- menuTitles[info.uri] = { name: info.name, icon: info.icon };
271
- }
272
- });
273
- }
274
- setMenuTitles(menuTitles);
275
- }, [menu]);
276
- React.useEffect(function () {
277
- setMenuHideScreen(initMenuHideScreen || 'sm');
278
- }, [initMenuHideScreen]);
279
- React.useEffect(function () {
280
- if (menuTitles) {
281
- var titleData = menuTitles[location.pathname];
282
- if (titleData) {
283
- setTitle(React.createElement(Title, { title: titleData.name, icon: titleData.icon, headTitle: titleData.parentName, headIcon: titleData.parentIcon }));
284
- }
285
- else {
286
- setTitle(undefined);
287
- }
288
- }
289
- }, [location, menuTitles]);
290
- // -------------------------------------------------------------------------------------------------------------------
291
- var toggleIsMobileOpen = React.useCallback(function () {
292
- setIsMobileOpen(function (isMobileOpen) { return !isMobileOpen; });
293
- }, []);
294
- //--------------------------------------------------------------------------------------------------------------------
295
- var appBarSx = React.useMemo(function () {
296
- var width = {};
297
- var ml = {};
298
- width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
299
- ml[_getNextScreen(menuHideScreen)] = "".concat(SIDE_MENU_WIDTH, "px");
300
- return { width: width, ml: ml };
301
- }, [menuHideScreen]);
302
- var appBarIconButtonSx = React.useMemo(function () {
303
- var display = {};
304
- display[_getNextScreen(menuHideScreen)] = 'none';
305
- return { mr: 2, display: display };
306
- }, [menuHideScreen]);
307
- var sideMenuContainerBoxSx = React.useMemo(function () {
308
- var width = {};
309
- var flexShrink = {};
310
- width[_getNextScreen(menuHideScreen)] = SIDE_MENU_WIDTH;
311
- flexShrink[_getNextScreen(menuHideScreen)] = 0;
312
- return { width: width, flexShrink: flexShrink };
313
- }, [menuHideScreen]);
314
- var sideMenuTemporaryDrawerSx = React.useMemo(function () {
315
- var found = false;
316
- return {
317
- display: _screens.reduce(function (res, screen) {
318
- if (screen === menuHideScreen) {
319
- found = true;
320
- res[screen] = 'block';
321
- }
322
- else {
323
- res[screen] = found ? 'none' : 'block';
324
- }
325
- return res;
326
- }, {}),
327
- };
328
- }, [menuHideScreen]);
329
- var sideMenuPermanentDrawerSx = React.useMemo(function () {
330
- var found = false;
331
- return {
332
- display: _screens.reduce(function (res, screen) {
333
- if (screen === menuHideScreen) {
334
- found = true;
335
- res[screen] = 'none';
336
- }
337
- else {
338
- res[screen] = found ? 'block' : 'none';
339
- }
340
- return res;
341
- }, {}),
342
- };
343
- }, [menuHideScreen]);
344
- var mainBoxSx = React.useMemo(function () {
345
- var width = {};
346
- width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
347
- return { width: width };
348
- }, [menuHideScreen]);
349
- // -------------------------------------------------------------------------------------------------------------------
350
- return (React.createElement(StyledContainerBox, null,
351
- React.createElement(StyledAppBar, { position: 'fixed', elevation: 0, sx: appBarSx },
352
- React.createElement(material.Toolbar, null,
353
- React.createElement(material.IconButton, { color: 'inherit', "aria-label": 'open drawer', edge: 'start', onClick: toggleIsMobileOpen, sx: appBarIconButtonSx },
354
- React.createElement(iconsMaterial.Menu, null)),
355
- React.createElement(material.Typography, { variant: 'h6', noWrap: true, component: 'div', sx: { flexGrow: 1 } }, title),
356
- appBarControl)),
357
- React.createElement(StyledSideMenuContainerBox, { component: 'nav', "aria-label": 'mailbox folders', sx: sideMenuContainerBoxSx },
358
- React.createElement(StyledSideMenuTemporaryDrawer, { variant: 'temporary', open: isMobileOpen, onClose: toggleIsMobileOpen, sx: sideMenuTemporaryDrawerSx, ModalProps: {
359
- keepMounted: true, // Better open performance on mobile.
360
- } }, menu && (React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: function (menuItem) {
361
- toggleIsMobileOpen();
362
- if (onMenuClick)
363
- onMenuClick(menuItem);
364
- } }))),
365
- React.createElement(StyledSideMenuPermanentDrawer, { variant: 'permanent', open: true, sx: sideMenuPermanentDrawerSx }, menu && React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: onMenuClick }))),
366
- React.createElement(StyledMainBox, { component: 'main', sx: mainBoxSx },
367
- React.createElement(material.Toolbar, null),
368
- React.createElement(StyledMainContentDiv, null, children))));
369
- };exports.CardLayout=CardLayout;exports.DefaultLayout=DefaultLayout;//# sourceMappingURL=index.js.map
32
+ };var empty = function (v) {
33
+ var result = false;
34
+ if (v == null) {
35
+ result = true;
36
+ }
37
+ else if (typeof v === 'string') {
38
+ result = v === '';
39
+ }
40
+ else if (typeof v === 'object') {
41
+ if (Array.isArray(v)) {
42
+ result = v.length === 0;
43
+ }
44
+ else if (!(v instanceof Date)) {
45
+ result = Object.entries(v).length === 0;
46
+ }
47
+ }
48
+ return result;
49
+ };
50
+ var notEmpty = function (v) {
51
+ return !empty(v);
52
+ };var SideMenuListItem = function (_a) {
53
+ var info = _a.info, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
54
+ var theme = material.useTheme();
55
+ var location = reactRouterDom.useLocation();
56
+ // -------------------------------------------------------------------------------------------------------------------
57
+ var _b = React.useState(false), isExpandable = _b[0], setIsExpandable = _b[1];
58
+ var _c = React.useState(false), isExpand = _c[0], setIsExpand = _c[1];
59
+ // -------------------------------------------------------------------------------------------------------------------
60
+ React.useEffect(function () {
61
+ setIsExpandable(!!info && notEmpty(info.items));
62
+ if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
63
+ setIsExpand(true);
64
+ }
65
+ // eslint-disable-next-line react-hooks/exhaustive-deps
66
+ }, [info]);
67
+ React.useEffect(function () {
68
+ if (isExpandable && isExpand != null) {
69
+ if (info.uri !== location.pathname) {
70
+ if (info.items && !info.items.find(function (info) { return location.pathname === info.uri; })) {
71
+ if (isExpand) {
72
+ setIsExpand(false);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ if (isExpandable && !isExpand) {
78
+ if (info.items && info.items.find(function (info) { return location.pathname === info.uri; })) {
79
+ setIsExpand(true);
80
+ }
81
+ }
82
+ // eslint-disable-next-line react-hooks/exhaustive-deps
83
+ }, [location]);
84
+ // -------------------------------------------------------------------------------------------------------------------
85
+ var toggleIsExpand = React.useCallback(function () {
86
+ setIsExpand(function (isExpand) { return !isExpand; });
87
+ }, []);
88
+ // -------------------------------------------------------------------------------------------------------------------
89
+ var icon = React.useMemo(function () {
90
+ return info.icon
91
+ ? info.icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
92
+ : undefined;
93
+ }, [info]);
94
+ // -------------------------------------------------------------------------------------------------------------------
95
+ var containerStyle = React.useMemo(function () { return ({
96
+ backgroundColor: isExpandable && isExpand
97
+ ? material.alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
98
+ : undefined,
99
+ }); }, [isExpand, isExpandable, theme]);
100
+ var expandIconSx = React.useMemo(function () {
101
+ return isExpandable && isExpand != null
102
+ ? {
103
+ marginTop: 'auto',
104
+ marginBottom: 'auto',
105
+ animation: "".concat(isExpand ? 'open' : 'close', " 0.1s linear"),
106
+ transform: "rotate(".concat(isExpand ? 180 : 0, "deg)"),
107
+ '@keyframes open': {
108
+ '0%': {
109
+ transform: "rotate(0deg)",
110
+ },
111
+ '100%': {
112
+ transform: "rotate(180deg)",
113
+ },
114
+ },
115
+ '@keyframes close': {
116
+ '0%': {
117
+ transform: "rotate(180deg)",
118
+ },
119
+ '100%': {
120
+ transform: "rotate(0deg)",
121
+ },
122
+ },
123
+ }
124
+ : {
125
+ marginTop: 'auto',
126
+ marginBottom: 'auto',
127
+ };
128
+ }, [isExpandable, isExpand]);
129
+ var collapseStyle = React.useMemo(function () { return ({
130
+ backgroundColor: isExpand
131
+ ? material.alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity / 2)
132
+ : undefined,
133
+ }); }, [isExpand, theme]);
134
+ var primaryTypographyProps = React.useMemo(function () { return ({ sx: { fontWeight: info.depth === 1 ? 600 : null } }); }, [info]);
135
+ // -------------------------------------------------------------------------------------------------------------------
136
+ return (React.createElement(React.Fragment, null,
137
+ React.createElement(material.ListItemButton, { onClick: isExpandable
138
+ ? toggleIsExpand
139
+ : function () {
140
+ if (onClick)
141
+ onClick(info);
142
+ }, selected: isExpandable ? false : info.uri === location.pathname, style: containerStyle },
143
+ React.createElement(material.ListItemIcon, { sx: { minWidth: 30 } }, icon && React.createElement(material.Icon, { fontSize: 'small' }, icon)),
144
+ React.createElement(material.ListItemText, { primaryTypographyProps: primaryTypographyProps }, info.badge ? (React.createElement(material.Badge, { badgeContent: info.badge, color: 'error', variant: badgeVariant !== undefined ? badgeVariant : info.badgeVariant, anchorOrigin: { horizontal: 'left', vertical: 'top' }, slotProps: {
145
+ badge: { style: { left: '100%', top: '50%', transform: 'scale(.8) translate(10px, -50%)' } },
146
+ } },
147
+ React.createElement("div", null, info.name))) : (info.name)),
148
+ isExpandable && React.createElement(iconsMaterial.ExpandMore, { sx: expandIconSx })),
149
+ React.createElement(material.Collapse, { in: isExpand, style: collapseStyle }, isExpandable &&
150
+ info.items &&
151
+ info.items.map(function (subInfo, idx) { return (React.createElement(SideMenuListItem, { key: idx, badgeVariant: badgeVariant, info: subInfo, onClick: onClick })); }))));
152
+ };var StyledList = material.styled(material.List)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"])));
153
+ var templateObject_1$3;var SideMenuList = function (_a) {
154
+ var list = _a.list, badgeVariant = _a.badgeVariant, onClick = _a.onClick;
155
+ return (React.createElement(StyledList, null, list.map(function (info, idx) { return (React.createElement(SideMenuListItem, { key: idx, info: info, badgeVariant: badgeVariant, onClick: onClick })); })));
156
+ };var StyledSimpleBar = material.styled(SimpleBar)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-height: 100%;\n"], ["\n max-height: 100%;\n"])));
157
+ var StyledLogoContainerBox = material.styled(material.Box)(function (_a) {
158
+ var theme = _a.theme;
159
+ return theme.unstable_sx({
160
+ borderBottom: 'thin solid #f5f5f5',
161
+ color: 'text.primary',
162
+ });
163
+ });
164
+ var templateObject_1$2;var SideMenu = function (_a) {
165
+ var logo = _a.logo, badgeVariant = _a.badgeVariant, list = _a.list, onClick = _a.onClick;
166
+ return (React.createElement(StyledSimpleBar, null,
167
+ React.createElement(StyledLogoContainerBox, null,
168
+ React.createElement(material.Toolbar, null, logo)),
169
+ list && React.createElement(SideMenuList, { badgeVariant: badgeVariant, list: list, onClick: onClick })));
170
+ };var StyledContainerBox$1 = material.styled(material.Box)(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n"], ["\n position: relative;\n"])));
171
+ var StyledHeadContainerBox = material.styled(material.Box)(function (_a) {
172
+ var theme = _a.theme;
173
+ return theme.unstable_sx({
174
+ display: { xs: 'none', sm: 'flex' },
175
+ alignItems: 'center',
176
+ opacity: 0.5,
177
+ });
178
+ });
179
+ var StyledHeadIconContainerBox = material.styled(material.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"])));
180
+ var StyledHeadIcon = material.styled(material.Icon)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n font-size: 1rem;\n"], ["\n font-size: 1rem;\n"])));
181
+ var StyledHeadTitleTypography = material.styled(material.Typography)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n font-size: 0.7rem;\n"], ["\n font-size: 0.7rem;\n"])));
182
+ var StyledTitleContainerDiv = material.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"])));
183
+ var StyledTitleIconContainerDiv = material.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"])));
184
+ var templateObject_1$1, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6;var Title = function (_a) {
185
+ var title = _a.title, icon = _a.icon, headTitle = _a.headTitle, headIcon = _a.headIcon;
186
+ var finalHeadIcon = React.useMemo(function () {
187
+ return headIcon
188
+ ? headIcon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); })
189
+ : undefined;
190
+ }, [headIcon]);
191
+ var finalIcon = React.useMemo(function () { return (icon ? icon.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }) : undefined); }, [icon]);
192
+ return (React.createElement(StyledContainerBox$1, null,
193
+ headTitle && (React.createElement(StyledHeadContainerBox, null,
194
+ finalHeadIcon && (React.createElement(StyledHeadIconContainerBox, null,
195
+ React.createElement(StyledHeadIcon, null, finalHeadIcon))),
196
+ React.createElement(StyledHeadTitleTypography, null, headTitle))),
197
+ React.createElement(StyledTitleContainerDiv, null,
198
+ finalIcon && (React.createElement(StyledTitleIconContainerDiv, null,
199
+ React.createElement(material.Icon, { fontSize: 'small' }, finalIcon))),
200
+ React.createElement("div", null, title))));
201
+ };var SIDE_MENU_WIDTH = 220;
202
+ var StyledContainerBox = material.styled(material.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n height: 100%;\n"], ["\n display: flex;\n height: 100%;\n"])));
203
+ var StyledAppBar = material.styled(material.AppBar)(function (_a) {
204
+ var theme = _a.theme;
205
+ return theme.unstable_sx({
206
+ backdropFilter: 'blur(20px)',
207
+ backgroundColor: 'rgba(255, 255, 255, 0.7)',
208
+ color: 'text.primary',
209
+ borderBottom: 'thin solid #f5f5f5',
210
+ });
211
+ });
212
+ var StyledSideMenuContainerBox = material.styled(material.Box)(function (_a) {
213
+ var theme = _a.theme;
214
+ return theme.unstable_sx({});
215
+ });
216
+ var StyledSideMenuTemporaryDrawer = material.styled(material.Drawer)(function (_a) {
217
+ var theme = _a.theme;
218
+ return theme.unstable_sx({
219
+ '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
220
+ });
221
+ });
222
+ var StyledSideMenuPermanentDrawer = material.styled(material.Drawer)(function (_a) {
223
+ var theme = _a.theme;
224
+ return theme.unstable_sx({
225
+ '& .MuiDrawer-paper': { boxSizing: 'border-box', width: SIDE_MENU_WIDTH },
226
+ });
227
+ });
228
+ var StyledMainBox = material.styled(material.Box)(function (_a) {
229
+ var theme = _a.theme;
230
+ return theme.unstable_sx({
231
+ flexGrow: 1,
232
+ p: 2,
233
+ display: 'flex',
234
+ flexDirection: 'column',
235
+ minHeight: '100vh',
236
+ });
237
+ });
238
+ var StyledMainContentDiv = material.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"])));
239
+ var templateObject_1, templateObject_2;var _screens = ['xs', 'sm', 'md', 'lg', 'xl'];
240
+ var _getNextScreen = function (screen) {
241
+ if (screen === 'xs')
242
+ return 'sm';
243
+ else if (screen === 'sm')
244
+ return 'md';
245
+ else if (screen === 'md')
246
+ return 'lg';
247
+ else
248
+ return 'xl';
249
+ };
250
+ var DefaultLayout = function (_a) {
251
+ // -------------------------------------------------------------------------------------------------------------------
252
+ var children = _a.children, logo = _a.logo, badgeVariant = _a.badgeVariant, menu = _a.menu, initMenuHideScreen = _a.menuHideScreen, appBarControl = _a.appBarControl, onMenuClick = _a.onMenuClick;
253
+ var location = reactRouterDom.useLocation();
254
+ // -------------------------------------------------------------------------------------------------------------------
255
+ var _b = React.useState(false), isMobileOpen = _b[0], setIsMobileOpen = _b[1];
256
+ var _c = React.useState({}), menuTitles = _c[0], setMenuTitles = _c[1];
257
+ var _d = React.useState(), title = _d[0], setTitle = _d[1];
258
+ var _e = React.useState(initMenuHideScreen || 'sm'), menuHideScreen = _e[0], setMenuHideScreen = _e[1];
259
+ //--------------------------------------------------------------------------------------------------------------------
260
+ React.useEffect(function () {
261
+ var menuTitles = {};
262
+ if (menu) {
263
+ menu.forEach(function (info) {
264
+ if (empty(info.uri) && info.items && info.items.length > 0) {
265
+ info.items.map(function (subInfo) {
266
+ menuTitles[subInfo.uri] = { name: subInfo.name, parentName: info.name, parentIcon: info.icon };
267
+ });
268
+ }
269
+ else if (info.uri) {
270
+ menuTitles[info.uri] = { name: info.name, icon: info.icon };
271
+ }
272
+ });
273
+ }
274
+ setMenuTitles(menuTitles);
275
+ }, [menu]);
276
+ React.useEffect(function () {
277
+ setMenuHideScreen(initMenuHideScreen || 'sm');
278
+ }, [initMenuHideScreen]);
279
+ React.useEffect(function () {
280
+ if (menuTitles) {
281
+ var titleData = menuTitles[location.pathname];
282
+ if (titleData) {
283
+ setTitle(React.createElement(Title, { title: titleData.name, icon: titleData.icon, headTitle: titleData.parentName, headIcon: titleData.parentIcon }));
284
+ }
285
+ else {
286
+ setTitle(undefined);
287
+ }
288
+ }
289
+ }, [location, menuTitles]);
290
+ // -------------------------------------------------------------------------------------------------------------------
291
+ var toggleIsMobileOpen = React.useCallback(function () {
292
+ setIsMobileOpen(function (isMobileOpen) { return !isMobileOpen; });
293
+ }, []);
294
+ //--------------------------------------------------------------------------------------------------------------------
295
+ var appBarSx = React.useMemo(function () {
296
+ var width = {};
297
+ var ml = {};
298
+ width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
299
+ ml[_getNextScreen(menuHideScreen)] = "".concat(SIDE_MENU_WIDTH, "px");
300
+ return { width: width, ml: ml };
301
+ }, [menuHideScreen]);
302
+ var appBarIconButtonSx = React.useMemo(function () {
303
+ var display = {};
304
+ display[_getNextScreen(menuHideScreen)] = 'none';
305
+ return { mr: 2, display: display };
306
+ }, [menuHideScreen]);
307
+ var sideMenuContainerBoxSx = React.useMemo(function () {
308
+ var width = {};
309
+ var flexShrink = {};
310
+ width[_getNextScreen(menuHideScreen)] = SIDE_MENU_WIDTH;
311
+ flexShrink[_getNextScreen(menuHideScreen)] = 0;
312
+ return { width: width, flexShrink: flexShrink };
313
+ }, [menuHideScreen]);
314
+ var sideMenuTemporaryDrawerSx = React.useMemo(function () {
315
+ var found = false;
316
+ return {
317
+ display: _screens.reduce(function (res, screen) {
318
+ if (screen === menuHideScreen) {
319
+ found = true;
320
+ res[screen] = 'block';
321
+ }
322
+ else {
323
+ res[screen] = found ? 'none' : 'block';
324
+ }
325
+ return res;
326
+ }, {}),
327
+ };
328
+ }, [menuHideScreen]);
329
+ var sideMenuPermanentDrawerSx = React.useMemo(function () {
330
+ var found = false;
331
+ return {
332
+ display: _screens.reduce(function (res, screen) {
333
+ if (screen === menuHideScreen) {
334
+ found = true;
335
+ res[screen] = 'none';
336
+ }
337
+ else {
338
+ res[screen] = found ? 'block' : 'none';
339
+ }
340
+ return res;
341
+ }, {}),
342
+ };
343
+ }, [menuHideScreen]);
344
+ var mainBoxSx = React.useMemo(function () {
345
+ var width = {};
346
+ width[_getNextScreen(menuHideScreen)] = "calc(100% - ".concat(SIDE_MENU_WIDTH, "px)");
347
+ return { width: width };
348
+ }, [menuHideScreen]);
349
+ // -------------------------------------------------------------------------------------------------------------------
350
+ return (React.createElement(StyledContainerBox, null,
351
+ React.createElement(StyledAppBar, { position: 'fixed', elevation: 0, sx: appBarSx },
352
+ React.createElement(material.Toolbar, null,
353
+ React.createElement(material.IconButton, { color: 'inherit', "aria-label": 'open drawer', edge: 'start', onClick: toggleIsMobileOpen, sx: appBarIconButtonSx },
354
+ React.createElement(iconsMaterial.Menu, null)),
355
+ React.createElement(material.Typography, { variant: 'h6', noWrap: true, component: 'div', sx: { flexGrow: 1 } }, title),
356
+ appBarControl)),
357
+ React.createElement(StyledSideMenuContainerBox, { component: 'nav', "aria-label": 'mailbox folders', sx: sideMenuContainerBoxSx },
358
+ React.createElement(StyledSideMenuTemporaryDrawer, { variant: 'temporary', open: isMobileOpen, onClose: toggleIsMobileOpen, sx: sideMenuTemporaryDrawerSx, ModalProps: {
359
+ keepMounted: true, // Better open performance on mobile.
360
+ } }, menu && (React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: function (menuItem) {
361
+ toggleIsMobileOpen();
362
+ if (onMenuClick)
363
+ onMenuClick(menuItem);
364
+ } }))),
365
+ React.createElement(StyledSideMenuPermanentDrawer, { variant: 'permanent', open: true, sx: sideMenuPermanentDrawerSx }, menu && React.createElement(SideMenu, { logo: logo, badgeVariant: badgeVariant, list: menu, onClick: onMenuClick }))),
366
+ React.createElement(StyledMainBox, { component: 'main', sx: mainBoxSx },
367
+ React.createElement(material.Toolbar, null),
368
+ React.createElement(StyledMainContentDiv, null, children))));
369
+ };exports.CardLayout=CardLayout;exports.DefaultLayout=DefaultLayout;