@pipelinesolucoes/menu 1.0.0-beta.0

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 (79) hide show
  1. package/LICENSE +78 -0
  2. package/README.md +166 -0
  3. package/dist/app/layout.d.ts +6 -0
  4. package/dist/app/layout.js +19 -0
  5. package/dist/app/layout.js.map +1 -0
  6. package/dist/app/page.d.ts +1 -0
  7. package/dist/app/page.js +6 -0
  8. package/dist/app/page.js.map +1 -0
  9. package/dist/components/BarraFerramentas.d.ts +13 -0
  10. package/dist/components/BarraFerramentas.js +31 -0
  11. package/dist/components/BarraFerramentas.js.map +1 -0
  12. package/dist/components/BarraFerramentasHamburguer.d.ts +16 -0
  13. package/dist/components/BarraFerramentasHamburguer.js +42 -0
  14. package/dist/components/BarraFerramentasHamburguer.js.map +1 -0
  15. package/dist/components/BarraFerramentasSaaS.d.ts +10 -0
  16. package/dist/components/BarraFerramentasSaaS.js +18 -0
  17. package/dist/components/BarraFerramentasSaaS.js.map +1 -0
  18. package/dist/components/BarraFerramentasStyled.d.ts +14 -0
  19. package/dist/components/BarraFerramentasStyled.js +61 -0
  20. package/dist/components/BarraFerramentasStyled.js.map +1 -0
  21. package/dist/components/ItemMenu.d.ts +30 -0
  22. package/dist/components/ItemMenu.js +86 -0
  23. package/dist/components/ItemMenu.js.map +1 -0
  24. package/dist/components/MenuHamburguer.d.ts +12 -0
  25. package/dist/components/MenuHamburguer.js +36 -0
  26. package/dist/components/MenuHamburguer.js.map +1 -0
  27. package/dist/components/MenuHorizontal.d.ts +34 -0
  28. package/dist/components/MenuHorizontal.js +52 -0
  29. package/dist/components/MenuHorizontal.js.map +1 -0
  30. package/dist/components/MenuVertical.d.ts +35 -0
  31. package/dist/components/MenuVertical.js +53 -0
  32. package/dist/components/MenuVertical.js.map +1 -0
  33. package/dist/components/SideNav.d.ts +83 -0
  34. package/dist/components/SideNav.js +55 -0
  35. package/dist/components/SideNav.js.map +1 -0
  36. package/dist/components/drawer/DesktopDrawer.d.ts +64 -0
  37. package/dist/components/drawer/DesktopDrawer.js +198 -0
  38. package/dist/components/drawer/DesktopDrawer.js.map +1 -0
  39. package/dist/components/drawer/DrawerResponsive.d.ts +74 -0
  40. package/dist/components/drawer/DrawerResponsive.js +96 -0
  41. package/dist/components/drawer/DrawerResponsive.js.map +1 -0
  42. package/dist/components/drawer/IconDrawerTrigger.d.ts +85 -0
  43. package/dist/components/drawer/IconDrawerTrigger.js +137 -0
  44. package/dist/components/drawer/IconDrawerTrigger.js.map +1 -0
  45. package/dist/components/drawer/LogoutIcon.d.ts +4 -0
  46. package/dist/components/drawer/LogoutIcon.js +10 -0
  47. package/dist/components/drawer/LogoutIcon.js.map +1 -0
  48. package/dist/components/drawer/MobileDrawer.d.ts +64 -0
  49. package/dist/components/drawer/MobileDrawer.js +158 -0
  50. package/dist/components/drawer/MobileDrawer.js.map +1 -0
  51. package/dist/components/drawer/UserAvatarMenu.d.ts +77 -0
  52. package/dist/components/drawer/UserAvatarMenu.js +103 -0
  53. package/dist/components/drawer/UserAvatarMenu.js.map +1 -0
  54. package/dist/index.d.ts +13 -0
  55. package/dist/index.js +11 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/pages/_app.d.ts +2 -0
  58. package/dist/pages/_app.js +20 -0
  59. package/dist/pages/_app.js.map +1 -0
  60. package/dist/pages/_document.d.ts +9 -0
  61. package/dist/pages/_document.js +33 -0
  62. package/dist/pages/_document.js.map +1 -0
  63. package/dist/theme.d.ts +35 -0
  64. package/dist/theme.js +142 -0
  65. package/dist/theme.js.map +1 -0
  66. package/dist/tsconfig.tsbuildinfo +1 -0
  67. package/dist/types/Drawer.d.ts +66 -0
  68. package/dist/types/Drawer.js +2 -0
  69. package/dist/types/Drawer.js.map +1 -0
  70. package/dist/types/ItemMenuConfig.d.ts +6 -0
  71. package/dist/types/ItemMenuConfig.js +2 -0
  72. package/dist/types/ItemMenuConfig.js.map +1 -0
  73. package/dist/types/NavItem.d.ts +5 -0
  74. package/dist/types/NavItem.js +2 -0
  75. package/dist/types/NavItem.js.map +1 -0
  76. package/dist/types/RotaMenuConfig.d.ts +4 -0
  77. package/dist/types/RotaMenuConfig.js +2 -0
  78. package/dist/types/RotaMenuConfig.js.map +1 -0
  79. package/package.json +60 -0
@@ -0,0 +1,64 @@
1
+ import * as React from 'react';
2
+ import { DrawerProps } from '@/types/Drawer';
3
+ /**
4
+ * Layout mobile responsável por exibir:
5
+ * - AppBar fixo com avatar e nome do usuário;
6
+ * - Conteúdo principal com scroll interno;
7
+ * - BottomNavigation fixo na parte inferior.
8
+ *
9
+ * Também suporta um estado de carregamento (`loading`) que exibe um overlay
10
+ * escurecido com um spinner centralizado, desabilitando a interação com a página.
11
+ *
12
+ * Exibido apenas em `xs` e `sm`.
13
+ *
14
+ * @param {string} backgroundHeader Cor de fundo do AppBar.
15
+ * @param {string} backgroundMenuAvatar Cor de fundo do menu Avatar.
16
+ * @param {string} colorItemMenu Cor do ícone do menu e dos itens de menu.
17
+ * @param {string} colorItemMenuSelected Cor do item de menu selecionado.
18
+ * @param {number | string | null} idUsuarioLogado Id do usuário logado.
19
+ * @param {string} nomeUsuarioLogado Nome do usuário logado.
20
+ * @param {string} emailUsuario Email do usuário logado.
21
+ * @param {Array<any>} menuItems Itens exibidos no Drawer.
22
+ * @param {Array<any>} avatarMenuItems Itens exibidos no menu do avatar.
23
+ * @param {string} profileImage URL final da imagem de avatar já tratada.
24
+ * @param {number} selectedIndex Índice do item selecionado.
25
+ * @param {(index: number) => void} onChangeIndex Callback chamado ao alterar o item selecionado.
26
+ * @param {() => void} [onUnauthenticated] Callback chamado se não tiver usuário logado.
27
+ * @param {React.ReactNode} [toolbarContent] Conteúdos genéricos exibidos na barra de ferramentas (texto, ícones, imagens etc.).
28
+ * @param {boolean} [loading=false] Indica se o overlay de loading deve ser exibido sobre toda a tela.
29
+ * @param {string} [loadingBackgroundColor='rgba(0, 0, 0, 0.4)'] Cor de fundo do overlay de loading.
30
+ * @param {number} [loadingSpinnerSize=48] Tamanho do spinner de loading.
31
+ * @param {string} [loadingMessage] Texto opcional exibido abaixo do spinner de loading.
32
+ * @param {string} [loadingColor='#ffffff'] Cor do spinner e do texto da mensagem de loading.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * import MobileDrawer from '@/components/MobileDrawer';
37
+ *
38
+ * const Example = () => {
39
+ * return (
40
+ * <MobileDrawer
41
+ * backgroundHeader="#ffffff"
42
+ * backgroundMenuAvatar="#f5f5f5"
43
+ * colorItemMenu="#999999"
44
+ * colorItemMenuSelected="#1976d2"
45
+ * idUsuarioLogado={1}
46
+ * nomeUsuarioLogado="John Doe"
47
+ * emailUsuario="john.doe@email.com"
48
+ * profileImage="/images/default-avatar.png"
49
+ * menuItems={menuItems}
50
+ * avatarMenuItems={avatarMenuItems}
51
+ * selectedIndex={0}
52
+ * onChangeIndex={(index) => console.log(index)}
53
+ * loading={true}
54
+ * loadingBackgroundColor="rgba(0, 0, 0, 0.6)"
55
+ * loadingSpinnerSize={64}
56
+ * loadingMessage="Carregando dados..."
57
+ * loadingColor="#ffffff"
58
+ * />
59
+ * );
60
+ * };
61
+ * ```
62
+ */
63
+ declare const MobileDrawer: React.FC<DrawerProps>;
64
+ export default MobileDrawer;
@@ -0,0 +1,158 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { styled } from '@mui/material/styles';
4
+ import { Avatar, BottomNavigation, BottomNavigationAction, Box, Toolbar, Typography, CircularProgress, } from '@mui/material';
5
+ import MuiAppBar from '@mui/material/AppBar';
6
+ import IconDrawerTrigger from './IconDrawerTrigger';
7
+ import UserAvatarMenu from './UserAvatarMenu';
8
+ const StyledHeader = styled(MuiAppBar, {
9
+ shouldForwardProp: (prop) => prop !== 'backgroundHeader',
10
+ })(({ theme, backgroundHeader }) => ({
11
+ backgroundColor: backgroundHeader || '#ffffff',
12
+ color: theme.palette.text.primary,
13
+ boxShadow: 'none',
14
+ borderBottom: `1px solid ${theme.palette.divider}`,
15
+ }));
16
+ const StyledBottomBar = styled(BottomNavigation, {
17
+ shouldForwardProp: (prop) => !['background', 'color', 'colorSelected'].includes(prop),
18
+ })(({ theme, background, color, colorSelected }) => {
19
+ var _a, _b, _c, _d, _e;
20
+ return ({
21
+ position: 'fixed',
22
+ bottom: 0,
23
+ left: 0,
24
+ right: 0,
25
+ backgroundColor: background,
26
+ borderTop: `1px solid ${theme.palette.divider}`,
27
+ fontFamily: theme.typography.fontFamily,
28
+ fontWeight: (_a = theme.typography.caption) === null || _a === void 0 ? void 0 : _a.fontWeight,
29
+ fontStyle: (_b = theme.typography.caption) === null || _b === void 0 ? void 0 : _b.fontStyle,
30
+ lineHeight: (_c = theme.typography.caption) === null || _c === void 0 ? void 0 : _c.lineHeight,
31
+ letterSpacing: (_d = theme.typography.caption) === null || _d === void 0 ? void 0 : _d.letterSpacing,
32
+ fontSize: (_e = theme.typography.caption) === null || _e === void 0 ? void 0 : _e.fontSize,
33
+ '& .MuiBottomNavigationAction-root': {
34
+ color: color,
35
+ minWidth: 56,
36
+ },
37
+ '& .Mui-selected': {
38
+ color: colorSelected,
39
+ },
40
+ });
41
+ });
42
+ const ToolbarContent = styled('div')(() => ({
43
+ display: 'flex',
44
+ flexDirection: 'row',
45
+ alignItems: 'center',
46
+ justifyContent: 'end',
47
+ width: '100%',
48
+ gap: '16px',
49
+ }));
50
+ const LoadingOverlay = styled('div', {
51
+ shouldForwardProp: (prop) => !['overlayBackground', 'overlayColor'].includes(prop),
52
+ })(({ overlayBackground, overlayColor, theme }) => ({
53
+ position: 'fixed',
54
+ inset: 0,
55
+ zIndex: theme.zIndex.modal + 1,
56
+ backgroundColor: overlayBackground || 'rgba(0, 0, 0, 0.4)',
57
+ display: 'flex',
58
+ flexDirection: 'column',
59
+ alignItems: 'center',
60
+ justifyContent: 'center',
61
+ pointerEvents: 'auto',
62
+ color: overlayColor || '#ffffff',
63
+ }));
64
+ /**
65
+ * Layout mobile responsável por exibir:
66
+ * - AppBar fixo com avatar e nome do usuário;
67
+ * - Conteúdo principal com scroll interno;
68
+ * - BottomNavigation fixo na parte inferior.
69
+ *
70
+ * Também suporta um estado de carregamento (`loading`) que exibe um overlay
71
+ * escurecido com um spinner centralizado, desabilitando a interação com a página.
72
+ *
73
+ * Exibido apenas em `xs` e `sm`.
74
+ *
75
+ * @param {string} backgroundHeader Cor de fundo do AppBar.
76
+ * @param {string} backgroundMenuAvatar Cor de fundo do menu Avatar.
77
+ * @param {string} colorItemMenu Cor do ícone do menu e dos itens de menu.
78
+ * @param {string} colorItemMenuSelected Cor do item de menu selecionado.
79
+ * @param {number | string | null} idUsuarioLogado Id do usuário logado.
80
+ * @param {string} nomeUsuarioLogado Nome do usuário logado.
81
+ * @param {string} emailUsuario Email do usuário logado.
82
+ * @param {Array<any>} menuItems Itens exibidos no Drawer.
83
+ * @param {Array<any>} avatarMenuItems Itens exibidos no menu do avatar.
84
+ * @param {string} profileImage URL final da imagem de avatar já tratada.
85
+ * @param {number} selectedIndex Índice do item selecionado.
86
+ * @param {(index: number) => void} onChangeIndex Callback chamado ao alterar o item selecionado.
87
+ * @param {() => void} [onUnauthenticated] Callback chamado se não tiver usuário logado.
88
+ * @param {React.ReactNode} [toolbarContent] Conteúdos genéricos exibidos na barra de ferramentas (texto, ícones, imagens etc.).
89
+ * @param {boolean} [loading=false] Indica se o overlay de loading deve ser exibido sobre toda a tela.
90
+ * @param {string} [loadingBackgroundColor='rgba(0, 0, 0, 0.4)'] Cor de fundo do overlay de loading.
91
+ * @param {number} [loadingSpinnerSize=48] Tamanho do spinner de loading.
92
+ * @param {string} [loadingMessage] Texto opcional exibido abaixo do spinner de loading.
93
+ * @param {string} [loadingColor='#ffffff'] Cor do spinner e do texto da mensagem de loading.
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * import MobileDrawer from '@/components/MobileDrawer';
98
+ *
99
+ * const Example = () => {
100
+ * return (
101
+ * <MobileDrawer
102
+ * backgroundHeader="#ffffff"
103
+ * backgroundMenuAvatar="#f5f5f5"
104
+ * colorItemMenu="#999999"
105
+ * colorItemMenuSelected="#1976d2"
106
+ * idUsuarioLogado={1}
107
+ * nomeUsuarioLogado="John Doe"
108
+ * emailUsuario="john.doe@email.com"
109
+ * profileImage="/images/default-avatar.png"
110
+ * menuItems={menuItems}
111
+ * avatarMenuItems={avatarMenuItems}
112
+ * selectedIndex={0}
113
+ * onChangeIndex={(index) => console.log(index)}
114
+ * loading={true}
115
+ * loadingBackgroundColor="rgba(0, 0, 0, 0.6)"
116
+ * loadingSpinnerSize={64}
117
+ * loadingMessage="Carregando dados..."
118
+ * loadingColor="#ffffff"
119
+ * />
120
+ * );
121
+ * };
122
+ * ```
123
+ */
124
+ const MobileDrawer = ({ endPointLogout, backgroundHeader, backgroundMenuAvatar, colorItemMenu, colorItemMenuSelected, idUsuarioLogado, nomeUsuarioLogado, profileImage, emailUsuario, menuItems, avatarMenuItems, selectedIndex, onChangeIndex, onUnauthenticated, toolbarContent, loading = false, loadingBackgroundColor = 'rgba(0, 0, 0, 0.4)', loadingSpinnerSize = 48, loadingMessage, loadingColor = '#ffffff', }) => {
125
+ var _a, _b;
126
+ //garante que só chamamos onUnauthenticated uma única vez
127
+ const hasFiredUnauth = React.useRef(false);
128
+ React.useEffect(() => {
129
+ // só dispara quando já terminou o loading
130
+ if (!hasFiredUnauth.current &&
131
+ loading === false &&
132
+ idUsuarioLogado === null) {
133
+ hasFiredUnauth.current = true;
134
+ onUnauthenticated === null || onUnauthenticated === void 0 ? void 0 : onUnauthenticated();
135
+ }
136
+ }, [loading, idUsuarioLogado]);
137
+ if (loading === false && idUsuarioLogado === null) {
138
+ // enquanto o pai decide o que fazer (redirect, etc.), você não renderiza nada
139
+ return null;
140
+ }
141
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
142
+ height: '100vh', // trava o layout na altura da viewport
143
+ overflow: 'hidden', // evita scroll no container inteiro
144
+ display: 'flex',
145
+ flexDirection: 'column',
146
+ }, children: [_jsx(StyledHeader, { position: "fixed", backgroundHeader: backgroundHeader, children: _jsxs(Toolbar, { sx: { display: 'flex', justifyContent: 'space-between' }, children: [_jsx(Typography, { variant: "h6", component: "div" }), _jsxs(ToolbarContent, { children: [toolbarContent && toolbarContent, _jsx(IconDrawerTrigger, { background: backgroundMenuAvatar, icon: _jsx(Avatar, { src: profileImage, alt: `foto do perfil de ${nomeUsuarioLogado}`, sx: { width: 48, height: 48, cursor: 'pointer' } }), children: _jsx(UserAvatarMenu, { userName: nomeUsuarioLogado, userEmail: emailUsuario, menuItems: avatarMenuItems, endPointLogout: endPointLogout }) })] })] }) }), _jsx(Toolbar, {}), _jsx(Box, { component: "main", sx: {
147
+ flex: 1,
148
+ p: 3,
149
+ mb: '74px', // espaço para o BottomNavigation
150
+ overflowY: 'auto', // <- scroll fica só aqui
151
+ }, children: (_b = (_a = menuItems[selectedIndex]) === null || _a === void 0 ? void 0 : _a.component) !== null && _b !== void 0 ? _b : (_jsx(Typography, { variant: "body1", children: "Selecione um item do menu." })) }), _jsx(StyledBottomBar, { background: backgroundHeader, color: colorItemMenu, colorSelected: colorItemMenuSelected, showLabels: true, value: selectedIndex, onChange: (_, newValue) => onChangeIndex(newValue), children: menuItems.map((item, idx) => {
152
+ var _a;
153
+ return (_jsx(BottomNavigationAction, { label: item.text, icon: item.icon }, (_a = item.text) !== null && _a !== void 0 ? _a : idx));
154
+ }) })] }), loading && (_jsxs(LoadingOverlay, { overlayBackground: loadingBackgroundColor, overlayColor: loadingColor, children: [_jsx(CircularProgress, { size: loadingSpinnerSize, sx: { color: loadingColor, mb: loadingMessage ? 2 : 0 } }), loadingMessage && (_jsx(Typography, { sx: { mt: 2, color: loadingColor }, children: loadingMessage }))] }))] }));
155
+ };
156
+ MobileDrawer.displayName = 'MobileDrawer';
157
+ export default MobileDrawer;
158
+ //# sourceMappingURL=MobileDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MobileDrawer.js","sourceRoot":"","sources":["../../../src/components/drawer/MobileDrawer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import React from 'react';
2
+ import { AvatarMenuItem } from '@/types/Drawer';
3
+ export interface UserAvatarMenuProps {
4
+ userName?: string;
5
+ userEmail?: string;
6
+ menuItems?: AvatarMenuItem[];
7
+ endPointLogout: string;
8
+ noUserLabel?: string;
9
+ noEmailLabel?: string;
10
+ }
11
+ /**
12
+ * Componente que renderiza um bloco de informações do usuário (nome e e-mail)
13
+ * seguido por itens de menu opcionais e um item fixo de logout.
14
+ *
15
+ * Ele é ideal para ser usado dentro de um Menu, Popover ou Drawer quando o usuário
16
+ * clica no avatar da aplicação.
17
+ *
18
+ * @param {string} [userName] Nome do usuário logado. Quando não informado, exibe `noUserLabel`. @default undefined
19
+ * @param {string} [userEmail] E-mail do usuário logado. Quando não informado, exibe `noEmailLabel`. @default undefined
20
+ * @param {AvatarMenuItem[]} [menuItems] Lista de itens de menu adicionais exibidos acima do item "Sair". @default undefined
21
+ * @param {string} [endPointLogout] endpoint do Logout da secao.
22
+ * @param {string} [noUserLabel="Nenhum usuário logado"] Texto exibido quando não há usuário logado. @default "Nenhum usuário logado"
23
+ * @param {string} [noEmailLabel="Email não cadastrado"] Texto exibido quando não há e-mail cadastrado. @default "Email não cadastrado"
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * import React from 'react';
28
+ * import { Menu, IconButton } from '@mui/material';
29
+ * import AccountCircleIcon from '@mui/icons-material/AccountCircle';
30
+ * import { UserAvatarMenu, AvatarMenuItem } from '@/components/UserAvatarMenu';
31
+ *
32
+ * const avatarMenuItems: AvatarMenuItem[] = [
33
+ * { label: 'Meu Perfil', onClick: () => console.log('Ir para Meu Perfil') },
34
+ * { label: 'Configurações', onClick: () => console.log('Ir para Configurações') },
35
+ * ];
36
+ *
37
+ * const Example = () => {
38
+ * const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
39
+ *
40
+ * const handleOpen = (event: React.MouseEvent<HTMLElement>) => {
41
+ * setAnchorEl(event.currentTarget);
42
+ * };
43
+ *
44
+ * const handleClose = () => {
45
+ * setAnchorEl(null);
46
+ * };
47
+ *
48
+ * const handleLogout = () => {
49
+ * console.log('Logout acionado');
50
+ * handleClose();
51
+ * };
52
+ *
53
+ * return (
54
+ * <>
55
+ * <IconButton onClick={handleOpen}>
56
+ * <AccountCircleIcon />
57
+ * </IconButton>
58
+ *
59
+ * <Menu
60
+ * anchorEl={anchorEl}
61
+ * open={Boolean(anchorEl)}
62
+ * onClose={handleClose}
63
+ * >
64
+ * <UserAvatarMenu
65
+ * userName="Usuário Logado"
66
+ * userEmail="usuario@exemplo.com"
67
+ * menuItems={avatarMenuItems}
68
+ * onLogout={handleLogout}
69
+ * />
70
+ * </Menu>
71
+ * </>
72
+ * );
73
+ * };
74
+ * ```
75
+ */
76
+ declare const UserAvatarMenu: React.FC<UserAvatarMenuProps>;
77
+ export default UserAvatarMenu;
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // UserAvatarMenu.tsx
3
+ import React from 'react';
4
+ import { Box, MenuItem } from '@mui/material';
5
+ import { styled } from '@mui/material/styles';
6
+ import { LogoutIcon } from './LogoutIcon';
7
+ const Root = styled(Box, {
8
+ shouldForwardProp: (prop) => prop !== 'hasMenuItems',
9
+ })(({ hasMenuItems }) => ({
10
+ display: 'flex',
11
+ flexDirection: 'column',
12
+ gap: hasMenuItems ? 16 : 12,
13
+ }));
14
+ const UserInfoWrapper = styled(Box)(() => ({
15
+ padding: '16px 16px 24px 16px',
16
+ }));
17
+ const InfoText = styled('div')(({ theme }) => (Object.assign({ color: theme.palette.text.primary }, theme.typography.caption)));
18
+ /**
19
+ * Componente que renderiza um bloco de informações do usuário (nome e e-mail)
20
+ * seguido por itens de menu opcionais e um item fixo de logout.
21
+ *
22
+ * Ele é ideal para ser usado dentro de um Menu, Popover ou Drawer quando o usuário
23
+ * clica no avatar da aplicação.
24
+ *
25
+ * @param {string} [userName] Nome do usuário logado. Quando não informado, exibe `noUserLabel`. @default undefined
26
+ * @param {string} [userEmail] E-mail do usuário logado. Quando não informado, exibe `noEmailLabel`. @default undefined
27
+ * @param {AvatarMenuItem[]} [menuItems] Lista de itens de menu adicionais exibidos acima do item "Sair". @default undefined
28
+ * @param {string} [endPointLogout] endpoint do Logout da secao.
29
+ * @param {string} [noUserLabel="Nenhum usuário logado"] Texto exibido quando não há usuário logado. @default "Nenhum usuário logado"
30
+ * @param {string} [noEmailLabel="Email não cadastrado"] Texto exibido quando não há e-mail cadastrado. @default "Email não cadastrado"
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * import React from 'react';
35
+ * import { Menu, IconButton } from '@mui/material';
36
+ * import AccountCircleIcon from '@mui/icons-material/AccountCircle';
37
+ * import { UserAvatarMenu, AvatarMenuItem } from '@/components/UserAvatarMenu';
38
+ *
39
+ * const avatarMenuItems: AvatarMenuItem[] = [
40
+ * { label: 'Meu Perfil', onClick: () => console.log('Ir para Meu Perfil') },
41
+ * { label: 'Configurações', onClick: () => console.log('Ir para Configurações') },
42
+ * ];
43
+ *
44
+ * const Example = () => {
45
+ * const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
46
+ *
47
+ * const handleOpen = (event: React.MouseEvent<HTMLElement>) => {
48
+ * setAnchorEl(event.currentTarget);
49
+ * };
50
+ *
51
+ * const handleClose = () => {
52
+ * setAnchorEl(null);
53
+ * };
54
+ *
55
+ * const handleLogout = () => {
56
+ * console.log('Logout acionado');
57
+ * handleClose();
58
+ * };
59
+ *
60
+ * return (
61
+ * <>
62
+ * <IconButton onClick={handleOpen}>
63
+ * <AccountCircleIcon />
64
+ * </IconButton>
65
+ *
66
+ * <Menu
67
+ * anchorEl={anchorEl}
68
+ * open={Boolean(anchorEl)}
69
+ * onClose={handleClose}
70
+ * >
71
+ * <UserAvatarMenu
72
+ * userName="Usuário Logado"
73
+ * userEmail="usuario@exemplo.com"
74
+ * menuItems={avatarMenuItems}
75
+ * onLogout={handleLogout}
76
+ * />
77
+ * </Menu>
78
+ * </>
79
+ * );
80
+ * };
81
+ * ```
82
+ */
83
+ const UserAvatarMenu = ({ userName, userEmail, menuItems, endPointLogout, noUserLabel = 'Nenhum usuário logado', noEmailLabel = 'Email não cadastrado', }) => {
84
+ const hasMenuItems = Boolean(menuItems && menuItems.length > 0);
85
+ const [errorMsg, setErrorMsg] = React.useState(null);
86
+ const handleClickLogout = async () => {
87
+ setErrorMsg(null);
88
+ try {
89
+ window.location.href = endPointLogout;
90
+ }
91
+ catch (e) {
92
+ setErrorMsg('Ocorreu um erro no logout.');
93
+ }
94
+ };
95
+ return (_jsxs(Root, { hasMenuItems: hasMenuItems, children: [_jsxs(UserInfoWrapper, { children: [_jsx(InfoText, { children: userName !== null && userName !== void 0 ? userName : noUserLabel }), _jsx(InfoText, { children: userEmail !== null && userEmail !== void 0 ? userEmail : noEmailLabel })] }), hasMenuItems &&
96
+ menuItems.map((item) => (_jsx(MenuItem, { onClick: () => {
97
+ var _a;
98
+ (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item);
99
+ }, children: item.label }, item.label))), _jsxs(MenuItem, { onClick: handleClickLogout, sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [_jsx(LogoutIcon, { sx: { fontSize: 20 } }), " Sair"] }, "user-avatar-menu-logout")] }));
100
+ };
101
+ UserAvatarMenu.displayName = 'UserAvatarMenu';
102
+ export default UserAvatarMenu;
103
+ //# sourceMappingURL=UserAvatarMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserAvatarMenu.js","sourceRoot":"","sources":["../../../src/components/drawer/UserAvatarMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { default as BarraFerramentas } from './components/BarraFerramentas';
2
+ export { default as BarraFerramentasSaaS } from './components/BarraFerramentasSaaS';
3
+ export { default as BarraFerramentasHamburguer } from './components/BarraFerramentasHamburguer';
4
+ export { default as MenuHorizontal } from './components/MenuHorizontal';
5
+ export { default as MenuHamburguer } from './components/MenuHamburguer';
6
+ export { default as ItemMenu } from './components/ItemMenu';
7
+ export { default as MenuVertical } from './components/MenuVertical';
8
+ export { default as SideNav } from './components/SideNav';
9
+ export { default as DrawerResponsive } from './components/drawer/DrawerResponsive';
10
+ export { default as IconDrawerTrigger } from './components/drawer/IconDrawerTrigger';
11
+ export type { ItemMenuConfig } from './types/ItemMenuConfig';
12
+ export type { RotaMenuConfig } from './types/RotaMenuConfig';
13
+ export type { NavItem } from './types/NavItem';
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { default as BarraFerramentas } from './components/BarraFerramentas';
2
+ export { default as BarraFerramentasSaaS } from './components/BarraFerramentasSaaS';
3
+ export { default as BarraFerramentasHamburguer } from './components/BarraFerramentasHamburguer';
4
+ export { default as MenuHorizontal } from './components/MenuHorizontal';
5
+ export { default as MenuHamburguer } from './components/MenuHamburguer';
6
+ export { default as ItemMenu } from './components/ItemMenu';
7
+ export { default as MenuVertical } from './components/MenuVertical';
8
+ export { default as SideNav } from './components/SideNav';
9
+ export { default as DrawerResponsive } from './components/drawer/DrawerResponsive';
10
+ export { default as IconDrawerTrigger } from './components/drawer/IconDrawerTrigger';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAC,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAC,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAC,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { AppProps } from 'next/app';
2
+ export default function MyApp({ Component, pageProps }: AppProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { ThemeProvider as MuiThemeProvider } from '@mui/material/styles';
4
+ import CssBaseline from '@mui/material/CssBaseline';
5
+ import { CacheProvider } from '@emotion/react';
6
+ import createCache from '@emotion/cache';
7
+ import { theme } from '@/theme';
8
+ // Crie uma instância de cache para o Emotion
9
+ const cache = createCache({ key: 'css', prepend: true });
10
+ export default function MyApp({ Component, pageProps }) {
11
+ React.useEffect(() => {
12
+ // Remove o CSS injetado pelo servidor, se existir
13
+ const jssStyles = document.querySelector('#jss-server-side');
14
+ if (jssStyles && jssStyles.parentElement) {
15
+ jssStyles.parentElement.removeChild(jssStyles);
16
+ }
17
+ }, []);
18
+ return (_jsx(CacheProvider, { value: cache, children: _jsxs(MuiThemeProvider, { theme: theme, children: [_jsx(CssBaseline, {}), _jsx(Component, Object.assign({}, pageProps))] }) }));
19
+ }
20
+ //# sourceMappingURL=_app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_app.js","sourceRoot":"","sources":["../../src/pages/_app.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,6CAA6C;AAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAY;IAC9D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,kDAAkD;QAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC7D,IAAI,SAAS,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YACzC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,YACzB,MAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,aAC5B,KAAC,WAAW,KAAe,EAC3B,KAAC,SAAS,oBAAK,SAAS,EAAe,IACtB,GACL,CACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import Document, { DocumentContext } from "next/document";
2
+ export default class MyDocument extends Document {
3
+ static getInitialProps(ctx: DocumentContext): Promise<{
4
+ styles: import("react/jsx-runtime").JSX.Element;
5
+ html: string;
6
+ head?: Array<import("react").JSX.Element | null>;
7
+ }>;
8
+ render(): import("react/jsx-runtime").JSX.Element;
9
+ }
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Document, { Html, Head, Main, NextScript } from "next/document";
3
+ import createCache from "@emotion/cache";
4
+ import createEmotionServer from "@emotion/server/create-instance";
5
+ import { CacheProvider } from "@emotion/react";
6
+ // Função para criar o cache do Emotion
7
+ const createEmotionCache = () => {
8
+ return createCache({ key: "css", prepend: true });
9
+ };
10
+ export default class MyDocument extends Document {
11
+ static async getInitialProps(ctx) {
12
+ const cache = createEmotionCache();
13
+ const { extractCriticalToChunks } = createEmotionServer(cache);
14
+ const originalRenderPage = ctx.renderPage;
15
+ try {
16
+ ctx.renderPage = () => originalRenderPage({
17
+ enhanceApp: (App) => (props) => (_jsx(CacheProvider, { value: cache, children: _jsx(App, Object.assign({}, props)) })),
18
+ });
19
+ const initialProps = await Document.getInitialProps(ctx);
20
+ // Extrai os estilos críticos para renderização no lado do servidor
21
+ const emotionStyles = extractCriticalToChunks(initialProps.html);
22
+ const emotionStyleTags = emotionStyles.styles.map((style) => (_jsx("style", { "data-emotion": `${style.key} ${style.ids.join(" ")}`, dangerouslySetInnerHTML: { __html: style.css } }, style.key)));
23
+ return Object.assign(Object.assign({}, initialProps), { styles: (_jsxs(_Fragment, { children: [initialProps.styles, emotionStyleTags] })) });
24
+ }
25
+ finally {
26
+ // Nada a liberar como no caso do styled-components
27
+ }
28
+ }
29
+ render() {
30
+ return (_jsxs(Html, { lang: "pt", children: [_jsx(Head, {}), _jsxs("body", { children: [_jsx(Main, {}), _jsx(NextScript, {})] })] }));
31
+ }
32
+ }
33
+ //# sourceMappingURL=_document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_document.js","sourceRoot":"","sources":["../../src/pages/_document.tsx"],"names":[],"mappings":";AAAA,OAAO,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AACxF,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,mBAAmB,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,uCAAuC;AACvC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC9B,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,QAAQ;IAC9C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAoB;QAC/C,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;QACnC,MAAM,EAAE,uBAAuB,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE/D,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAAU,CAAC;QAE1C,IAAI,CAAC;YACH,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CACpB,kBAAkB,CAAC;gBACjB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,CACE,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,YACzB,KAAC,GAAG,oBAAK,KAAK,EAAI,GACJ,CACjB;aACJ,CAAC,CAAC;YAEL,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEzD,mEAAmE;YACnE,MAAM,aAAa,GAAG,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3D,gCAEgB,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACnD,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,IAFzC,KAAK,CAAC,GAAG,CAGd,CACH,CAAC,CAAC;YAEH,uCACK,YAAY,KACf,MAAM,EAAE,CACN,8BACG,YAAY,CAAC,MAAM,EACnB,gBAAgB,IAChB,CACJ,IACD;QACJ,CAAC;gBAAS,CAAC;YACT,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,CACL,MAAC,IAAI,IAAC,IAAI,EAAC,IAAI,aACb,KAAC,IAAI,KACE,EACP,2BACE,KAAC,IAAI,KAAG,EACR,KAAC,UAAU,KAAG,IACT,IACF,CACR,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ declare module '@mui/material/styles' {
2
+ interface Palette {
3
+ custom: {
4
+ transparent: string;
5
+ backgroundSectionMain: string;
6
+ backgroundSectionAlternative: string;
7
+ backgroundSectionHighlight?: string;
8
+ colorSectionMain: string;
9
+ backgroundButtonCTA: string;
10
+ backgroundHoverButtonCTA: string;
11
+ colorButtonCTA: string;
12
+ colorHoverButtonCTA: string;
13
+ borderRadiusButtonCTA: string;
14
+ carouselColorIndicators: string;
15
+ carouselColorFocus: string;
16
+ };
17
+ }
18
+ interface PaletteOptions {
19
+ custom?: {
20
+ transparent: string;
21
+ backgroundSectionMain: string;
22
+ backgroundSectionAlternative: string;
23
+ backgroundSectionHighlight?: string;
24
+ backgroundButtonCTA: string;
25
+ backgroundHoverButtonCTA: string;
26
+ colorButtonCTA: string;
27
+ colorHoverButtonCTA: string;
28
+ borderRadiusButtonCTA: string;
29
+ carouselColorIndicators: string;
30
+ carouselColorFocus: string;
31
+ };
32
+ }
33
+ }
34
+ declare const theme: import("@mui/material/styles").Theme;
35
+ export { theme };