@pdg/react-admin-layout 1.0.16 → 1.0.18

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