@pipelinesolucoes/menu 1.0.3-beta.3 → 1.0.3-beta.4
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.
|
@@ -4,7 +4,7 @@ import { NavItem } from "../types/NavItem";
|
|
|
4
4
|
interface SideNavProps {
|
|
5
5
|
items: NavItem[];
|
|
6
6
|
indexItemSelecionado?: number;
|
|
7
|
-
menuWidth?: number;
|
|
7
|
+
menuWidth?: number | string;
|
|
8
8
|
itemMenuBackgroundColorSemContent?: string;
|
|
9
9
|
itemMenuColorSemContent?: string;
|
|
10
10
|
itemMenuVariantSemContent?: TypographyVariant;
|
|
@@ -22,202 +22,9 @@ interface SideNavProps {
|
|
|
22
22
|
renderTopMenu?: ReactNode;
|
|
23
23
|
renderBottomMenu?: ReactNode;
|
|
24
24
|
contentGap?: number | string;
|
|
25
|
+
marginDivider?: string | number;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
* Componente de navegação lateral com área de conteúdo associada.
|
|
28
|
-
*
|
|
29
|
-
* Permite alternar entre diferentes seções de conteúdo através de um menu
|
|
30
|
-
* vertical. Cada item do menu pode possuir um conteúdo associado que será
|
|
31
|
-
* exibido na área principal ao ser selecionado.
|
|
32
|
-
*
|
|
33
|
-
* O componente também suporta:
|
|
34
|
-
* - Itens estáticos sem conteúdo
|
|
35
|
-
* - Divisores visuais no menu
|
|
36
|
-
* - Conteúdo customizado no topo e na base do menu
|
|
37
|
-
* - Animação de transição entre conteúdos com `framer-motion`
|
|
38
|
-
*
|
|
39
|
-
* ---
|
|
40
|
-
*
|
|
41
|
-
* Funcionalidades principais
|
|
42
|
-
*
|
|
43
|
-
* - Navegação lateral baseada em lista de itens (`items`)
|
|
44
|
-
* - Controle interno de item ativo
|
|
45
|
-
* - Suporte a itens sem conteúdo
|
|
46
|
-
* - Suporte a divisores no menu (`label === "DIVIDER"`)
|
|
47
|
-
* - Área de conteúdo com transição animada
|
|
48
|
-
* - Customização completa de cores, tipografia e layout
|
|
49
|
-
* - Suporte a conteúdo customizado no topo e rodapé do menu
|
|
50
|
-
*
|
|
51
|
-
* ---
|
|
52
|
-
*
|
|
53
|
-
* Tokens de estilo (ordem de prioridade)
|
|
54
|
-
*
|
|
55
|
-
* Menu lateral:
|
|
56
|
-
* `prop` → `theme.pipelinesolucoes.forms.field` → fallback interno
|
|
57
|
-
*
|
|
58
|
-
* - menuWidth → 180
|
|
59
|
-
* - menuBackground → transparent
|
|
60
|
-
* - borderRadius → 0
|
|
61
|
-
* - height → 500px
|
|
62
|
-
*
|
|
63
|
-
* Itens com conteúdo:
|
|
64
|
-
*
|
|
65
|
-
* - itemMenuBackgroundColor → transparent
|
|
66
|
-
* - itemMenuBackgroundColorHover → grey.300
|
|
67
|
-
* - itemMenuBackgroundColorSelected → primary.main
|
|
68
|
-
* - itemMenuColor → black
|
|
69
|
-
* - itemMenuColorSelected → black
|
|
70
|
-
* - itemMenuBorderRadius → 16px
|
|
71
|
-
*
|
|
72
|
-
* Itens sem conteúdo:
|
|
73
|
-
*
|
|
74
|
-
* - itemMenuBackgroundColorSemContent → transparent
|
|
75
|
-
* - itemMenuColorSemContent → black
|
|
76
|
-
*
|
|
77
|
-
* Área de conteúdo:
|
|
78
|
-
*
|
|
79
|
-
* - contentBackground → grey.50
|
|
80
|
-
* - contentGap → 2
|
|
81
|
-
* - borderRadius → 0
|
|
82
|
-
* - height → 500px
|
|
83
|
-
*
|
|
84
|
-
* ---
|
|
85
|
-
*
|
|
86
|
-
* Tipografia
|
|
87
|
-
*
|
|
88
|
-
* O componente utiliza variantes tipográficas do Material UI através das props:
|
|
89
|
-
*
|
|
90
|
-
* - `itemMenuVariant`
|
|
91
|
-
* - `itemMenuVariantSemContent`
|
|
92
|
-
*
|
|
93
|
-
* Ordem de prioridade:
|
|
94
|
-
*
|
|
95
|
-
* `prop` → `theme.typography[variant]` → `theme.typography.body1`
|
|
96
|
-
*
|
|
97
|
-
* Quando informada, a variante é aplicada diretamente utilizando os estilos
|
|
98
|
-
* definidos em `theme.typography`.
|
|
99
|
-
*
|
|
100
|
-
* ---
|
|
101
|
-
*
|
|
102
|
-
* @param {import("../types/NavItem").NavItem[]} items
|
|
103
|
-
* Lista de itens exibidos no menu lateral.
|
|
104
|
-
*
|
|
105
|
-
* Cada item pode conter:
|
|
106
|
-
*
|
|
107
|
-
* - `label` → texto exibido no menu
|
|
108
|
-
* - `content` → conteúdo renderizado na área principal
|
|
109
|
-
*
|
|
110
|
-
* Regras especiais:
|
|
111
|
-
*
|
|
112
|
-
* - Itens sem `content` são renderizados como rótulos estáticos
|
|
113
|
-
* - Quando `label === "DIVIDER"` será renderizado um divisor visual
|
|
114
|
-
*
|
|
115
|
-
* ---
|
|
116
|
-
*
|
|
117
|
-
* @param {number} [indexItemSelecionado=0]
|
|
118
|
-
* Índice do item inicialmente selecionado.
|
|
119
|
-
*
|
|
120
|
-
* Caso o valor informado esteja fora do intervalo válido da lista de `items`,
|
|
121
|
-
* o componente utiliza automaticamente o índice `0`.
|
|
122
|
-
*
|
|
123
|
-
* @param {number} [menuWidth=180]
|
|
124
|
-
* Largura do menu lateral.
|
|
125
|
-
*
|
|
126
|
-
* @param {string} [itemMenuBackgroundColorSemContent="transparent"]
|
|
127
|
-
* Cor de fundo aplicada aos itens do menu que não possuem conteúdo.
|
|
128
|
-
*
|
|
129
|
-
* @param {string} [itemMenuColorSemContent="black"]
|
|
130
|
-
* Cor de texto aplicada aos itens do menu que não possuem conteúdo.
|
|
131
|
-
*
|
|
132
|
-
* @param {import("@mui/material").TypographyVariant} [itemMenuVariantSemContent="body1"]
|
|
133
|
-
* Variante tipográfica aplicada aos itens do menu sem conteúdo.
|
|
134
|
-
*
|
|
135
|
-
* @param {string} [menuBackground="transparent"]
|
|
136
|
-
* Cor de fundo do container do menu lateral.
|
|
137
|
-
*
|
|
138
|
-
* @param {string} [itemMenuBackgroundColor="transparent"]
|
|
139
|
-
* Cor de fundo padrão dos itens do menu que possuem conteúdo.
|
|
140
|
-
*
|
|
141
|
-
* @param {string} [itemMenuBackgroundColorSelected="primary.main"]
|
|
142
|
-
* Cor de fundo aplicada ao item atualmente selecionado.
|
|
143
|
-
*
|
|
144
|
-
* @param {string} [itemMenuBackgroundColorHover="grey.300"]
|
|
145
|
-
* Cor de fundo aplicada ao passar o cursor sobre itens não selecionados.
|
|
146
|
-
*
|
|
147
|
-
* @param {string} [itemMenuColor="black"]
|
|
148
|
-
* Cor de texto padrão dos itens selecionáveis.
|
|
149
|
-
*
|
|
150
|
-
* @param {string} [itemMenuColorSelected="black"]
|
|
151
|
-
* Cor de texto aplicada ao item atualmente selecionado.
|
|
152
|
-
*
|
|
153
|
-
* @param {import("@mui/material").TypographyVariant} [itemMenuVariant="body1"]
|
|
154
|
-
* Variante tipográfica aplicada aos itens selecionáveis do menu.
|
|
155
|
-
*
|
|
156
|
-
* @param {string | number} [borderRadius="0"]
|
|
157
|
-
* Raio de borda aplicado ao menu lateral e à área de conteúdo.
|
|
158
|
-
*
|
|
159
|
-
* @param {string | number} [itemMenuBorderRadius="16px"]
|
|
160
|
-
* Raio de borda aplicado individualmente aos itens do menu.
|
|
161
|
-
*
|
|
162
|
-
* @param {string} [contentBackground="grey.50"]
|
|
163
|
-
* Cor de fundo da área onde o conteúdo do item selecionado é exibido.
|
|
164
|
-
*
|
|
165
|
-
* @param {string | number} [height="500px"]
|
|
166
|
-
* Altura do componente aplicada tanto ao menu quanto à área de conteúdo.
|
|
167
|
-
*
|
|
168
|
-
* @param {React.ReactNode} [renderTopMenu]
|
|
169
|
-
* Conteúdo opcional renderizado no topo do menu lateral.
|
|
170
|
-
*
|
|
171
|
-
* Pode ser utilizado para:
|
|
172
|
-
*
|
|
173
|
-
* - Títulos
|
|
174
|
-
* - Botões
|
|
175
|
-
* - Filtros
|
|
176
|
-
* - Informações adicionais
|
|
177
|
-
*
|
|
178
|
-
* @param {React.ReactNode} [renderBottomMenu]
|
|
179
|
-
* Conteúdo opcional renderizado no rodapé do menu lateral.
|
|
180
|
-
*
|
|
181
|
-
* Útil para:
|
|
182
|
-
*
|
|
183
|
-
* - Ações secundárias
|
|
184
|
-
* - Informações complementares
|
|
185
|
-
* - Links auxiliares
|
|
186
|
-
*
|
|
187
|
-
* @param {number | string} [contentGap=2]
|
|
188
|
-
* Espaçamento horizontal entre o menu lateral e a área de conteúdo.
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* Uso básico
|
|
192
|
-
*
|
|
193
|
-
* ```tsx
|
|
194
|
-
* const items = [
|
|
195
|
-
* { label: "Visão geral", content: <div>Conteúdo da visão geral</div> },
|
|
196
|
-
* { label: "Configurações", content: <div>Conteúdo de configurações</div> },
|
|
197
|
-
* { label: "DIVIDER" },
|
|
198
|
-
* { label: "Informações" },
|
|
199
|
-
* { label: "Usuários", content: <div>Conteúdo de usuários</div> }
|
|
200
|
-
* ]
|
|
201
|
-
*
|
|
202
|
-
* <SideNav
|
|
203
|
-
* items={items}
|
|
204
|
-
* menuWidth={220}
|
|
205
|
-
* contentBackground="white"
|
|
206
|
-
* itemMenuBackgroundColorSelected="primary.main"
|
|
207
|
-
* />
|
|
208
|
-
*
|
|
209
|
-
* @example
|
|
210
|
-
* Uso com conteúdo customizado no menu
|
|
211
|
-
*
|
|
212
|
-
* ```tsx
|
|
213
|
-
* <SideNav
|
|
214
|
-
* items={items}
|
|
215
|
-
* renderTopMenu={<Box p={2}>Menu</Box>}
|
|
216
|
-
* renderBottomMenu={<Box p={2}>Rodapé</Box>}
|
|
217
|
-
* />
|
|
218
|
-
* ```
|
|
219
|
-
*/
|
|
220
|
-
declare function SideNav({ items, indexItemSelecionado, menuWidth, itemMenuBackgroundColorSemContent, itemMenuColorSemContent, itemMenuVariantSemContent, menuBackground, borderRadius, itemMenuBorderRadius, itemMenuBackgroundColor, itemMenuBackgroundColorHover, itemMenuBackgroundColorSelected, itemMenuColor, itemMenuColorSelected, itemMenuVariant, contentBackground, renderTopMenu, renderBottomMenu, height, contentGap, }: SideNavProps): import("react/jsx-runtime").JSX.Element | null;
|
|
27
|
+
declare function SideNav({ items, indexItemSelecionado, menuWidth, itemMenuBackgroundColorSemContent, itemMenuColorSemContent, itemMenuVariantSemContent, menuBackground, borderRadius, itemMenuBorderRadius, itemMenuBackgroundColor, itemMenuBackgroundColorHover, itemMenuBackgroundColorSelected, itemMenuColor, itemMenuColorSelected, itemMenuVariant, contentBackground, renderTopMenu, renderBottomMenu, height, contentGap, marginDivider, }: SideNavProps): import("react/jsx-runtime").JSX.Element | null;
|
|
221
28
|
declare namespace SideNav {
|
|
222
29
|
var displayName: string;
|
|
223
30
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from "react";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
4
3
|
import { Box, Divider, styled } from "@mui/material";
|
|
5
4
|
import { motion, AnimatePresence } from "framer-motion";
|
|
6
5
|
const Container = styled("div")(() => ({
|
|
@@ -16,7 +15,7 @@ const SideNavContainer = styled(Box, {
|
|
|
16
15
|
minHeight: height,
|
|
17
16
|
maxHeight: height,
|
|
18
17
|
backgroundColor: menuBackground,
|
|
19
|
-
borderRadius
|
|
18
|
+
borderRadius,
|
|
20
19
|
display: "flex",
|
|
21
20
|
flexDirection: "column",
|
|
22
21
|
justifyContent: "space-between",
|
|
@@ -42,226 +41,37 @@ const MenuItemBox = styled(Box, {
|
|
|
42
41
|
} })));
|
|
43
42
|
const SideNavContent = styled(Box, {
|
|
44
43
|
shouldForwardProp: (prop) => !["contentGap", "contentBackground", "borderRadius", "height"].includes(prop),
|
|
45
|
-
})(({ contentGap = 2, contentBackground = "transparent", borderRadius = 2, height = "100%" }) => ({
|
|
44
|
+
})(({ contentGap = 2, contentBackground = "transparent", borderRadius = 2, height = "100%", }) => ({
|
|
46
45
|
width: "auto",
|
|
47
46
|
flex: 1,
|
|
48
47
|
marginLeft: contentGap,
|
|
49
48
|
padding: 16,
|
|
50
49
|
backgroundColor: contentBackground,
|
|
51
|
-
borderRadius
|
|
50
|
+
borderRadius,
|
|
52
51
|
minHeight: height,
|
|
53
52
|
maxHeight: height,
|
|
54
53
|
position: "relative",
|
|
55
54
|
overflowY: "auto",
|
|
56
55
|
}));
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*
|
|
64
|
-
* O componente também suporta:
|
|
65
|
-
* - Itens estáticos sem conteúdo
|
|
66
|
-
* - Divisores visuais no menu
|
|
67
|
-
* - Conteúdo customizado no topo e na base do menu
|
|
68
|
-
* - Animação de transição entre conteúdos com `framer-motion`
|
|
69
|
-
*
|
|
70
|
-
* ---
|
|
71
|
-
*
|
|
72
|
-
* Funcionalidades principais
|
|
73
|
-
*
|
|
74
|
-
* - Navegação lateral baseada em lista de itens (`items`)
|
|
75
|
-
* - Controle interno de item ativo
|
|
76
|
-
* - Suporte a itens sem conteúdo
|
|
77
|
-
* - Suporte a divisores no menu (`label === "DIVIDER"`)
|
|
78
|
-
* - Área de conteúdo com transição animada
|
|
79
|
-
* - Customização completa de cores, tipografia e layout
|
|
80
|
-
* - Suporte a conteúdo customizado no topo e rodapé do menu
|
|
81
|
-
*
|
|
82
|
-
* ---
|
|
83
|
-
*
|
|
84
|
-
* Tokens de estilo (ordem de prioridade)
|
|
85
|
-
*
|
|
86
|
-
* Menu lateral:
|
|
87
|
-
* `prop` → `theme.pipelinesolucoes.forms.field` → fallback interno
|
|
88
|
-
*
|
|
89
|
-
* - menuWidth → 180
|
|
90
|
-
* - menuBackground → transparent
|
|
91
|
-
* - borderRadius → 0
|
|
92
|
-
* - height → 500px
|
|
93
|
-
*
|
|
94
|
-
* Itens com conteúdo:
|
|
95
|
-
*
|
|
96
|
-
* - itemMenuBackgroundColor → transparent
|
|
97
|
-
* - itemMenuBackgroundColorHover → grey.300
|
|
98
|
-
* - itemMenuBackgroundColorSelected → primary.main
|
|
99
|
-
* - itemMenuColor → black
|
|
100
|
-
* - itemMenuColorSelected → black
|
|
101
|
-
* - itemMenuBorderRadius → 16px
|
|
102
|
-
*
|
|
103
|
-
* Itens sem conteúdo:
|
|
104
|
-
*
|
|
105
|
-
* - itemMenuBackgroundColorSemContent → transparent
|
|
106
|
-
* - itemMenuColorSemContent → black
|
|
107
|
-
*
|
|
108
|
-
* Área de conteúdo:
|
|
109
|
-
*
|
|
110
|
-
* - contentBackground → grey.50
|
|
111
|
-
* - contentGap → 2
|
|
112
|
-
* - borderRadius → 0
|
|
113
|
-
* - height → 500px
|
|
114
|
-
*
|
|
115
|
-
* ---
|
|
116
|
-
*
|
|
117
|
-
* Tipografia
|
|
118
|
-
*
|
|
119
|
-
* O componente utiliza variantes tipográficas do Material UI através das props:
|
|
120
|
-
*
|
|
121
|
-
* - `itemMenuVariant`
|
|
122
|
-
* - `itemMenuVariantSemContent`
|
|
123
|
-
*
|
|
124
|
-
* Ordem de prioridade:
|
|
125
|
-
*
|
|
126
|
-
* `prop` → `theme.typography[variant]` → `theme.typography.body1`
|
|
127
|
-
*
|
|
128
|
-
* Quando informada, a variante é aplicada diretamente utilizando os estilos
|
|
129
|
-
* definidos em `theme.typography`.
|
|
130
|
-
*
|
|
131
|
-
* ---
|
|
132
|
-
*
|
|
133
|
-
* @param {import("../types/NavItem").NavItem[]} items
|
|
134
|
-
* Lista de itens exibidos no menu lateral.
|
|
135
|
-
*
|
|
136
|
-
* Cada item pode conter:
|
|
137
|
-
*
|
|
138
|
-
* - `label` → texto exibido no menu
|
|
139
|
-
* - `content` → conteúdo renderizado na área principal
|
|
140
|
-
*
|
|
141
|
-
* Regras especiais:
|
|
142
|
-
*
|
|
143
|
-
* - Itens sem `content` são renderizados como rótulos estáticos
|
|
144
|
-
* - Quando `label === "DIVIDER"` será renderizado um divisor visual
|
|
145
|
-
*
|
|
146
|
-
* ---
|
|
147
|
-
*
|
|
148
|
-
* @param {number} [indexItemSelecionado=0]
|
|
149
|
-
* Índice do item inicialmente selecionado.
|
|
150
|
-
*
|
|
151
|
-
* Caso o valor informado esteja fora do intervalo válido da lista de `items`,
|
|
152
|
-
* o componente utiliza automaticamente o índice `0`.
|
|
153
|
-
*
|
|
154
|
-
* @param {number} [menuWidth=180]
|
|
155
|
-
* Largura do menu lateral.
|
|
156
|
-
*
|
|
157
|
-
* @param {string} [itemMenuBackgroundColorSemContent="transparent"]
|
|
158
|
-
* Cor de fundo aplicada aos itens do menu que não possuem conteúdo.
|
|
159
|
-
*
|
|
160
|
-
* @param {string} [itemMenuColorSemContent="black"]
|
|
161
|
-
* Cor de texto aplicada aos itens do menu que não possuem conteúdo.
|
|
162
|
-
*
|
|
163
|
-
* @param {import("@mui/material").TypographyVariant} [itemMenuVariantSemContent="body1"]
|
|
164
|
-
* Variante tipográfica aplicada aos itens do menu sem conteúdo.
|
|
165
|
-
*
|
|
166
|
-
* @param {string} [menuBackground="transparent"]
|
|
167
|
-
* Cor de fundo do container do menu lateral.
|
|
168
|
-
*
|
|
169
|
-
* @param {string} [itemMenuBackgroundColor="transparent"]
|
|
170
|
-
* Cor de fundo padrão dos itens do menu que possuem conteúdo.
|
|
171
|
-
*
|
|
172
|
-
* @param {string} [itemMenuBackgroundColorSelected="primary.main"]
|
|
173
|
-
* Cor de fundo aplicada ao item atualmente selecionado.
|
|
174
|
-
*
|
|
175
|
-
* @param {string} [itemMenuBackgroundColorHover="grey.300"]
|
|
176
|
-
* Cor de fundo aplicada ao passar o cursor sobre itens não selecionados.
|
|
177
|
-
*
|
|
178
|
-
* @param {string} [itemMenuColor="black"]
|
|
179
|
-
* Cor de texto padrão dos itens selecionáveis.
|
|
180
|
-
*
|
|
181
|
-
* @param {string} [itemMenuColorSelected="black"]
|
|
182
|
-
* Cor de texto aplicada ao item atualmente selecionado.
|
|
183
|
-
*
|
|
184
|
-
* @param {import("@mui/material").TypographyVariant} [itemMenuVariant="body1"]
|
|
185
|
-
* Variante tipográfica aplicada aos itens selecionáveis do menu.
|
|
186
|
-
*
|
|
187
|
-
* @param {string | number} [borderRadius="0"]
|
|
188
|
-
* Raio de borda aplicado ao menu lateral e à área de conteúdo.
|
|
189
|
-
*
|
|
190
|
-
* @param {string | number} [itemMenuBorderRadius="16px"]
|
|
191
|
-
* Raio de borda aplicado individualmente aos itens do menu.
|
|
192
|
-
*
|
|
193
|
-
* @param {string} [contentBackground="grey.50"]
|
|
194
|
-
* Cor de fundo da área onde o conteúdo do item selecionado é exibido.
|
|
195
|
-
*
|
|
196
|
-
* @param {string | number} [height="500px"]
|
|
197
|
-
* Altura do componente aplicada tanto ao menu quanto à área de conteúdo.
|
|
198
|
-
*
|
|
199
|
-
* @param {React.ReactNode} [renderTopMenu]
|
|
200
|
-
* Conteúdo opcional renderizado no topo do menu lateral.
|
|
201
|
-
*
|
|
202
|
-
* Pode ser utilizado para:
|
|
203
|
-
*
|
|
204
|
-
* - Títulos
|
|
205
|
-
* - Botões
|
|
206
|
-
* - Filtros
|
|
207
|
-
* - Informações adicionais
|
|
208
|
-
*
|
|
209
|
-
* @param {React.ReactNode} [renderBottomMenu]
|
|
210
|
-
* Conteúdo opcional renderizado no rodapé do menu lateral.
|
|
211
|
-
*
|
|
212
|
-
* Útil para:
|
|
213
|
-
*
|
|
214
|
-
* - Ações secundárias
|
|
215
|
-
* - Informações complementares
|
|
216
|
-
* - Links auxiliares
|
|
217
|
-
*
|
|
218
|
-
* @param {number | string} [contentGap=2]
|
|
219
|
-
* Espaçamento horizontal entre o menu lateral e a área de conteúdo.
|
|
220
|
-
*
|
|
221
|
-
* @example
|
|
222
|
-
* Uso básico
|
|
223
|
-
*
|
|
224
|
-
* ```tsx
|
|
225
|
-
* const items = [
|
|
226
|
-
* { label: "Visão geral", content: <div>Conteúdo da visão geral</div> },
|
|
227
|
-
* { label: "Configurações", content: <div>Conteúdo de configurações</div> },
|
|
228
|
-
* { label: "DIVIDER" },
|
|
229
|
-
* { label: "Informações" },
|
|
230
|
-
* { label: "Usuários", content: <div>Conteúdo de usuários</div> }
|
|
231
|
-
* ]
|
|
232
|
-
*
|
|
233
|
-
* <SideNav
|
|
234
|
-
* items={items}
|
|
235
|
-
* menuWidth={220}
|
|
236
|
-
* contentBackground="white"
|
|
237
|
-
* itemMenuBackgroundColorSelected="primary.main"
|
|
238
|
-
* />
|
|
239
|
-
*
|
|
240
|
-
* @example
|
|
241
|
-
* Uso com conteúdo customizado no menu
|
|
242
|
-
*
|
|
243
|
-
* ```tsx
|
|
244
|
-
* <SideNav
|
|
245
|
-
* items={items}
|
|
246
|
-
* renderTopMenu={<Box p={2}>Menu</Box>}
|
|
247
|
-
* renderBottomMenu={<Box p={2}>Rodapé</Box>}
|
|
248
|
-
* />
|
|
249
|
-
* ```
|
|
250
|
-
*/
|
|
251
|
-
export default function SideNav({ items, indexItemSelecionado = 0, menuWidth = 180, itemMenuBackgroundColorSemContent = "transparent", itemMenuColorSemContent = "black", itemMenuVariantSemContent = "body1", menuBackground = "transparent", borderRadius = "0", itemMenuBorderRadius = "16px", itemMenuBackgroundColor = "transparent", itemMenuBackgroundColorHover = "grey.300", itemMenuBackgroundColorSelected = "primary.main", itemMenuColor = "black", itemMenuColorSelected = "black", itemMenuVariant = "body1", contentBackground = "grey.50", renderTopMenu, renderBottomMenu, height = "500px", contentGap = 2, }) {
|
|
56
|
+
const getValidIndex = (index, itemsLength) => {
|
|
57
|
+
if (index >= 0 && index < itemsLength)
|
|
58
|
+
return index;
|
|
59
|
+
return 0;
|
|
60
|
+
};
|
|
61
|
+
export default function SideNav({ items, indexItemSelecionado = 0, menuWidth = 180, itemMenuBackgroundColorSemContent = "transparent", itemMenuColorSemContent = "black", itemMenuVariantSemContent = "body1", menuBackground = "transparent", borderRadius = "0", itemMenuBorderRadius = "16px", itemMenuBackgroundColor = "transparent", itemMenuBackgroundColorHover = "grey.300", itemMenuBackgroundColorSelected = "primary.main", itemMenuColor = "black", itemMenuColorSelected = "black", itemMenuVariant = "body1", contentBackground = "grey.50", renderTopMenu, renderBottomMenu, height = "500px", contentGap = 2, marginDivider = "8px 0", }) {
|
|
252
62
|
var _a;
|
|
253
63
|
if (!items || items.length === 0) {
|
|
254
64
|
return null;
|
|
255
65
|
}
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
66
|
+
const [activeIndex, setActiveIndex] = useState(getValidIndex(indexItemSelecionado, items.length));
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
setActiveIndex(getValidIndex(indexItemSelecionado, items.length));
|
|
69
|
+
}, [indexItemSelecionado, items.length]);
|
|
260
70
|
return (_jsxs(Container, { children: [_jsxs(SideNavContainer, { height: height, menuWidth: menuWidth, menuBackground: menuBackground, borderRadius: borderRadius, children: [_jsxs(Box, { children: [renderTopMenu && _jsx(Box, { children: renderTopMenu }), _jsx(Box, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: items.map((item, idx) => {
|
|
261
71
|
var _a;
|
|
262
72
|
if (!item.content) {
|
|
263
73
|
if (((_a = item.label) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === "DIVIDER") {
|
|
264
|
-
return _jsx(Divider, {}, `divider-${idx}`);
|
|
74
|
+
return (_jsx(Divider, { sx: { margin: marginDivider } }, `divider-${idx}`));
|
|
265
75
|
}
|
|
266
76
|
return (_jsx(MenuItemBox, { typographyVariant: itemMenuVariantSemContent, itemMenuBorderRadius: itemMenuBorderRadius, itemMenuBackgroundColor: itemMenuBackgroundColorSemContent, itemMenuColor: itemMenuColorSemContent, sx: { cursor: "default" }, children: item.label }, `${item.label}-${idx}`));
|
|
267
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNav.js","sourceRoot":"","sources":["../../src/components/SideNav.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"SideNav.js","sourceRoot":"","sources":["../../src/components/SideNav.tsx"],"names":[],"mappings":"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"}
|