@codeplex-sac/navigation 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,155 +1,314 @@
1
1
  # @codeplex-sac/navigation
2
2
 
3
- Colección de componentes de navegación diseñada para cubrir todas las necesidades de movimiento dentro de las aplicaciones Codeplex, desde menús simples hasta complejos flujos de pasos.
3
+ Paquete de componentes de navegación avanzados para el ecosistema **Codeplex-SAC**. Ofrece soluciones completas para la gestión de rutas, jerarquías, menús y estructuras de paneles laterales, optimizadas para una experiencia de usuario premium y con una API nativa en **Español**.
4
4
 
5
- ## 📦 Instalación
5
+ ## 🚀 Instalación
6
6
 
7
7
  ```bash
8
- pnpm add @mui/material @emotion/react @emotion/styled @mui/icons-material @codeplex-sac/navigation
8
+ bun add @codeplex-sac/navigation @mui/material @emotion/react @emotion/styled
9
9
  ```
10
10
 
11
11
  ---
12
12
 
13
- ## 🧭 Menús y Barras
13
+ ## 🏗️ Componentes de Estructura y Flujo
14
14
 
15
- ### `<CodeplexCajonLateral />` (Drawer)
16
- Panel deslizante para menús principales o filtros. Soporta modo "Deslizable" (Swipeable) para móviles.
15
+ ### 🗄️ Grupo 1: Contenedores y Pasos
17
16
 
18
- | Propiedad | Tipo | Descripción |
19
- | :--- | :--- | :--- |
20
- | `abierto` | `boolean` | Controla la visibilidad. |
21
- | `anclaje` | `'left' \| 'right'` | Lado de aparición. |
22
- | `deslizable` | `boolean` | Activa soporte táctil (SwipeableDrawer). |
23
- | `ancho` | `number \| string` | Ancho del panel (default: 280). |
24
- | `cabecera` | `ReactNode` | Contenido superior fijo (Logo, Título). |
25
- | `pie` | `ReactNode` | Contenido inferior fijo. |
17
+ #### CodeplexCajonLateral (Drawer)
18
+ Panel complementario que se desliza desde los bordes de la pantalla. Ideal para menús de navegación móvil o paneles de filtrado.
26
19
 
20
+ **Ejemplo de Uso:**
27
21
  ```tsx
28
- <CodeplexCajonLateral
29
- abierto={open}
30
- anclaje="left"
31
- cabecera={<Logo />}
32
- pie={<LogOutButton />}
33
- >
34
- <ListaMenu />
35
- </CodeplexCajonLateral>
22
+ import { CodeplexCajonLateral } from '@codeplex-sac/navigation';
23
+
24
+ export const MiCajon = ({ abierto, alCerrar }) => (
25
+ <CodeplexCajonLateral
26
+ abierto={abierto}
27
+ alCerrar={alCerrar}
28
+ ancho={320}
29
+ cabecera={<h2>Menu Principal</h2>}
30
+ mostrarIconoCierre
31
+ >
32
+ {/* Enlaces o navegación aquí */}
33
+ </CodeplexCajonLateral>
34
+ );
36
35
  ```
37
36
 
38
- ### `<CodeplexNavegacionInferior />` (Bottom Nav)
39
- Barra de pestañas inferior, el estándar para apps móviles.
40
-
41
- | Propiedad | Descripción |
42
- | :--- | :--- |
43
- | `elementos` | Array `{ etiqueta, icono, valor }`. |
44
- | `fijo` | `boolean`. Fija la barra al fondo de la pantalla (`position: fixed`). |
45
- | `conPapel` | `boolean`. Añade elevación y fondo (Paper). |
37
+ **Propiedades (Props):**
38
+ | Propiedad | Tipo | Por Defecto | Descripción |
39
+ | :--- | :--- | :--- | :--- |
40
+ | `abierto` | `boolean` | `false` | Indica si el cajón es visible. |
41
+ | `alCerrar` | `Function` | - | Callback al cerrar (clic fuera, ESC o 'X'). |
42
+ | `ancho` | `number \| string` | `280` | Ancho del panel (en px o %). |
43
+ | `anclaje` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Lado por el que aparece el panel. |
44
+ | `cabecera` | `ReactNode` | - | Contenido fijo superior. |
45
+ | `pie` | `ReactNode` | - | Contenido fijo inferior. |
46
+ | `deslizable` | `boolean` | `false` | Permite abrir/cerrar con gestos (touch). |
47
+ | `mostrarIconoCierre` | `boolean` | `false` | Muestra la 'X' en la cabecera. |
46
48
 
47
49
  ---
48
50
 
49
- ## 📍 Ubicación y Flujo
51
+ #### CodeplexPasos (Stepper)
52
+ Guía a los usuarios a través de una serie de pasos consecutivos en un proceso.
53
+
54
+ **Ejemplo de Uso:**
55
+ ```tsx
56
+ import { CodeplexPasos } from '@codeplex-sac/navigation';
57
+
58
+ const MIS_PASOS = [
59
+ { etiqueta: 'Identificación', descripcion: 'Datos personales' },
60
+ { etiqueta: 'Pago', descripcion: 'Método de facturación' },
61
+ { etiqueta: 'Resumen', opcional: true }
62
+ ];
63
+
64
+ export const Ejemplo = () => (
65
+ <CodeplexPasos
66
+ pasos={MIS_PASOS}
67
+ pasoActivo={1}
68
+ orientacion="horizontal"
69
+ />
70
+ );
71
+ ```
72
+
73
+ **Propiedades (Props):**
74
+ | Propiedad | Tipo | Por Defecto | Descripción |
75
+ | :--- | :--- | :--- | :--- |
76
+ | `pasos` | `Array<CodeplexPaso>`| - | Lista de objetos con `etiqueta` y `descripcion`. |
77
+ | `pasoActivo` | `number` | - | Índice del paso actual (0-base). |
78
+ | `orientacion`| `'horizontal' \| 'vertical'` | `'horizontal'` | Dirección del flujo. |
79
+ | `etiquetasAlternativas`| `boolean` | `false` | Coloca etiquetas bajo los iconos. |
80
+ | `noLineal` | `boolean` | `false` | Permite navegación libre entre pasos. |
81
+
82
+ ---
50
83
 
51
- ### `<CodeplexMigasPan />` (Breadcrumbs)
52
- Muestra la ruta actual. Añade automáticamente un icono de "Inicio" si se define `rutaInicio`.
84
+ #### CodeplexPestanas (Tabs)
85
+ Organiza contenido en diferentes vistas accesibles mediante pestañas superiores o integradas.
53
86
 
87
+ **Ejemplo de Uso:**
54
88
  ```tsx
55
- <CodeplexMigasPan
56
- rutaInicio="/"
57
- elementos={[
58
- { etiqueta: 'Configuración', href: '/settings' },
59
- { etiqueta: 'Perfil', href: '/settings/profile' }, // Último activo
60
- ]}
61
- />
89
+ import { CodeplexPestanas } from '@codeplex-sac/navigation';
90
+
91
+ const ITEMS = [
92
+ { etiqueta: 'General', valor: 'v1' },
93
+ { etiqueta: 'Seguridad', valor: 'v2', icono: <LockIcon /> }
94
+ ];
95
+
96
+ export const MiSeccion = () => (
97
+ <CodeplexPestanas
98
+ elementos={ITEMS}
99
+ valor="v1"
100
+ alCambiar={(_, val) => console.log(val)}
101
+ centrado
102
+ />
103
+ );
62
104
  ```
63
105
 
64
- ### `<CodeplexPasos />` (Stepper)
65
- Ideal para wizards o formularios largos.
106
+ **Propiedades (Props):**
107
+ | Propiedad | Tipo | Por Defecto | Descripción |
108
+ | :--- | :--- | :--- | :--- |
109
+ | `elementos` | `Array<Item>` | - | Lista con `etiqueta`, `valor` e `icono`. |
110
+ | `valor` | `any` | - | Valor de la pestaña seleccionada. |
111
+ | `alCambiar` | `Function` | - | Evento al seleccionar una pestaña. |
112
+ | `centrado` | `boolean` | `false` | Centra las pestañas horizontalmente. |
113
+ | `posicionIcono`| `'top' \| 'bottom' \| 'start' \| 'end'` | `'top'` | Posición del icono respecto al texto. |
66
114
 
67
- | Propiedad | Descripción |
68
- | :--- | :--- |
69
- | `pasos` | Array `{ etiqueta, leyenda, opcional, error, completado }`. |
70
- | `pasoActivo` | Índice del paso actual (0-based). |
71
- | `noLineal` | `boolean`. Permite saltar entre pasos haciendo clic. |
72
- | `etiquetaAlternativa` | `boolean`. Pone los textos debajo de los círculos. |
115
+ ### 🗺️ Grupo 2: Rutas y Jerarquía
73
116
 
74
- ### `<CodeplexPaginacion />`
75
- Navegación entre páginas de datos.
117
+ #### CodeplexMigasPan (Breadcrumbs)
118
+ Ayuda a los usuarios a visualizar su ubicación actual y volver a niveles superiores en la jerarquía de la aplicación.
76
119
 
77
- | Propiedad | Descripción |
78
- | :--- | :--- |
79
- | `total` | Número total de páginas (`count`). |
80
- | `pagina` | Página actual. |
81
- | `centrado` | `boolean`. Centra horizontalmente el paginador. |
120
+ **Ejemplo de Uso:**
121
+ ```tsx
122
+ import { CodeplexMigasPan } from '@codeplex-sac/navigation';
123
+
124
+ const RUTA = [
125
+ { etiqueta: 'Artículos', href: '/blog' },
126
+ { etiqueta: 'Tecnología', href: '/blog/tech' },
127
+ { etiqueta: 'Componentes UI' } // Último elemento sin link
128
+ ];
129
+
130
+ export const Navegacion = () => (
131
+ <CodeplexMigasPan
132
+ elementos={RUTA}
133
+ rutaInicio="/"
134
+ colorActivo="primary.main"
135
+ />
136
+ );
137
+ ```
138
+
139
+ **Propiedades (Props):**
140
+ | Propiedad | Tipo | Por Defecto | Descripción |
141
+ | :--- | :--- | :--- | :--- |
142
+ | `elementos` | `Array<Miga>` | - | Lista con `etiqueta`, `href` e `icono`. |
143
+ | `rutaInicio`| `string` | - | Activa botón "Inicio" redirigiendo a esta ruta. |
144
+ | `colorActivo`| `string` | `'text.primary'`| Color del texto del último elemento. |
145
+ | `separador` | `ReactNode` | `NavigateNext` | Icono o carácter divisor entre elementos. |
82
146
 
83
147
  ---
84
148
 
85
- ## 🔗 Interacción
149
+ #### CodeplexEnlace (Link)
150
+ Simplifica la creación de vínculos de navegación con estilos consistentes y soporte para polimorfismo.
86
151
 
87
- ### `<CodeplexPestanas />` (Tabs)
88
- Organización de contenido en pestañas.
152
+ **Ejemplo de Uso:**
153
+ ```tsx
154
+ import { CodeplexEnlace } from '@codeplex-sac/navigation';
155
+
156
+ export const MiEnlace = () => (
157
+ <CodeplexEnlace
158
+ hijos="Ver documentación"
159
+ href="https://google.com"
160
+ subrayado="hover"
161
+ target="_blank"
162
+ />
163
+ );
164
+ ```
89
165
 
90
- | Propiedad | Descripción |
91
- | :--- | :--- |
92
- | `elementos` | Array `{ etiqueta, valor, icono, disabled }`. |
93
- | `valor` | Valor de la pestaña activa. |
94
- | `centrado` | `boolean`. Centra las pestañas en el contenedor. |
166
+ **Propiedades (Props):**
167
+ | Propiedad | Tipo | Por Defecto | Descripción |
168
+ | :--- | :--- | :--- | :--- |
169
+ | `hijos` | `ReactNode` | - | Contenido del enlace (texto/iconos). |
170
+ | `href` | `string` | - | Dirección de destino. |
171
+ | `subrayado` | `'none' \| 'hover' \| 'always'` | `'hover'` | Controla la visualización del subrayado. |
172
+ | `componente` | `ElementType`| `'a'` | Etiqueta base (útil para `Link` de React Router). |
95
173
 
96
- ### `<CodeplexEnlace />` (Link)
97
- Enlace estilizado estándar.
174
+ ---
98
175
 
99
- | Propiedad | Descripción |
100
- | :--- | :--- |
101
- | `subrayado` | `'none' \| 'hover' \| 'always'`. |
102
- | `componente` | Permite cambiar el nodo raíz (útil para `react-router-dom Link`). |
176
+ #### CodeplexPaginacion (Pagination)
177
+ Componente de selección de páginas para listas extensas de datos.
103
178
 
179
+ **Ejemplo de Uso:**
104
180
  ```tsx
105
- <CodeplexEnlace componente={RouterLink} to="/home">
106
- Ir al Inicio
107
- </CodeplexEnlace>
181
+ import { CodeplexPaginacion } from '@codeplex-sac/navigation';
182
+
183
+ export const Listado = () => (
184
+ <CodeplexPaginacion
185
+ total={25}
186
+ pagina={1}
187
+ alCambiar={(e, p) => console.log('Nueva página:', p)}
188
+ centrado
189
+ color="primary"
190
+ />
191
+ );
108
192
  ```
109
193
 
110
- ### `<CodeplexMarcacionRapida />` (Speed Dial)
111
- Botón flotante (FAB) que despliega acciones secundarias.
194
+ **Propiedades (Props):**
195
+ | Propiedad | Tipo | Por Defecto | Descripción |
196
+ | :--- | :--- | :--- | :--- |
197
+ | `total` | `number` | - | Número total de páginas. |
198
+ | `pagina` | `number` | - | Página actual seleccionada. |
199
+ | `alCambiar` | `Function` | - | Evento disparado al seleccionar otra página. |
200
+ | `centrado` | `boolean` | `false` | Centra el componente en su contenedor. |
201
+ | `variante` | `'outlined' \| 'text'` | `'text'`| Estilo visual de los botones. |
112
202
 
113
- | Propiedad | Descripción |
114
- | :--- | :--- |
115
- | `acciones` | Array `{ icono, tituloTooltip, alHacerClick }`. |
116
- | `direction` | Dirección de apertura (`up`, `down`, `left`, `right`). |
203
+ ### 🖱️ Grupo 3: Menús y Acciones Flotantes
117
204
 
118
- ### `<CodeplexMenu />`
119
- Menú emergente estándar (Dropdown).
205
+ #### CodeplexMenu
206
+ Muestra una lista de opciones en una superficie temporal anclada a un componente de referencia.
120
207
 
121
- | Propiedad | Descripción |
122
- | :--- | :--- |
123
- | `elementos` | Array `{ etiqueta, icono, alHacerClick }`. |
124
- | `elementoAnclaje` | Elemento HTML al que se pega el menú. |
208
+ **Ejemplo de Uso:**
209
+ ```tsx
210
+ import { CodeplexMenu, CodeplexBoton } from '@codeplex-sac/ui';
211
+
212
+ export const Ejemplo = () => {
213
+ const [ancla, setAncla] = useState(null);
214
+ const ACCIONES = [
215
+ { etiqueta: 'Editar', icono: <EditIcon />, alHacerClick: () => alert('Editando...') },
216
+ { etiqueta: 'Eliminar', icono: <DeleteIcon />, sx: { color: 'error.main' } }
217
+ ];
218
+
219
+ return (
220
+ <>
221
+ <CodeplexBoton texto="Opciones" alHacerClick={(e) => setAncla(e.currentTarget)} />
222
+ <CodeplexMenu
223
+ abierto={Boolean(ancla)}
224
+ elementoAnclaje={ancla}
225
+ alCerrar={() => setAncla(null)}
226
+ elementos={ACCIONES}
227
+ />
228
+ </>
229
+ );
230
+ };
231
+ ```
232
+
233
+ **Propiedades (Props):**
234
+ | Propiedad | Tipo | Por Defecto | Descripción |
235
+ | :--- | :--- | :--- | :--- |
236
+ | `abierto` | `boolean` | - | Controla la visibilidad del menú. |
237
+ | `elementoAnclaje`| `HTMLElement` | - | Elemento que sirve de referencia para la posición. |
238
+ | `elementos` | `Array<Item>` | - | Lista de opciones con `etiqueta`, `icono` y callback. |
239
+ | `alCerrar` | `Function` | - | Evento disparado al cerrar el menú. |
125
240
 
126
241
  ---
127
242
 
128
- ## 🎨 Patrones Comunes
243
+ #### CodeplexMarcacionRapida (Speed Dial)
244
+ Botón flotante (FAB) que despliega una ráfaga de acciones relacionadas al interactuar con él.
129
245
 
130
- ### Navegación Móvil Fija
131
- Para crear una app móvil con barra inferior fija:
246
+ **Ejemplo de Uso:**
132
247
  ```tsx
133
- <CodeplexNavegacionInferior
134
- fijo
135
- valor={pestana}
136
- alCambiar={(_, v) => setPestana(v)}
137
- elementos={[
138
- { label: 'Inicio', valor: 'home', icon: <HomeIcon /> },
139
- { label: 'Perfil', valor: 'profile', icon: <PersonIcon /> }
140
- ]}
141
- />
248
+ import { CodeplexMarcacionRapida } from '@codeplex-sac/navigation';
249
+
250
+ const ACCIONES = [
251
+ { icono: <SaveIcon />, tituloTooltip: 'Guardar', alHacerClick: () => save() },
252
+ { icono: <PrintIcon />, tituloTooltip: 'Imprimir' }
253
+ ];
254
+
255
+ export const MiApp = () => (
256
+ <CodeplexMarcacionRapida
257
+ etiquetaAria="Acciones de archivo"
258
+ icono={<EditIcon />}
259
+ acciones={ACCIONES}
260
+ direction="up"
261
+ />
262
+ );
142
263
  ```
143
264
 
144
- ### Wizard de Registro
265
+ **Propiedades (Props):**
266
+ | Propiedad | Tipo | Por Defecto | Descripción |
267
+ | :--- | :--- | :--- | :--- |
268
+ | `acciones` | `Array<Accion>`| - | Lista de botones internos con `icono` y `tituloTooltip`. |
269
+ | `etiquetaAria` | `string` | - | Texto de accesibilidad (obligatorio). |
270
+ | `icono` | `ReactNode` | - | Icono del botón principal. |
271
+ | `direction` | `string` | `'up'` | Dirección de despliegue (up, down, left, right). |
272
+
273
+ ---
274
+
275
+ #### CodeplexNavegacionInferior (Bottom Navigation)
276
+ Navegación principal fija en la base de la pantalla, optimizada para aplicaciones móviles.
277
+
278
+ **Ejemplo de Uso:**
145
279
  ```tsx
146
- <CodeplexPasos
147
- pasoActivo={paso}
148
- etiquetaAlternativa
149
- pasos={[
150
- { etiqueta: 'Cuenta', leyenda: 'Datos de acceso' },
151
- { etiqueta: 'Perfil', opcional: true },
152
- { etiqueta: 'Confirmación' }
153
- ]}
154
- />
280
+ import { CodeplexNavegacionInferior } from '@codeplex-sac/navigation';
281
+
282
+ const NAV_ITEMS = [
283
+ { etiqueta: 'Inicio', valor: 'inicio', icono: <HomeIcon /> },
284
+ { etiqueta: 'Favoritos', valor: 'favs', icono: <FavoriteIcon /> },
285
+ { etiqueta: 'Perfil', valor: 'perfil', icono: <PersonIcon /> }
286
+ ];
287
+
288
+ export const AppMovil = () => (
289
+ <CodeplexNavegacionInferior
290
+ elementos={NAV_ITEMS}
291
+ valor="inicio"
292
+ fijo
293
+ conPapel
294
+ />
295
+ );
155
296
  ```
297
+
298
+ **Propiedades (Props):**
299
+ | Propiedad | Tipo | Por Defecto | Descripción |
300
+ | :--- | :--- | :--- | :--- |
301
+ | `elementos` | `Array<Item>` | - | Lista de pestañas con `etiqueta`, `icono` y `valor`. |
302
+ | `valor` | `any` | - | Valor del elemento activo. |
303
+ | `fijo` | `boolean` | `false` | Ancla la barra al final de la ventana (fixed). |
304
+ | `conPapel`| `boolean` | `true` | Aplica sombra y elevación estilo Material Design. |
305
+
306
+ ---
307
+
308
+ ## 🎨 Integración y Diseño
309
+
310
+ Todos los componentes de `@codeplex-sac/navigation` están diseñados para heredar automáticamente la identidad visual definida en `@codeplex-sac/theme`, respetando los modos claro/oscuro y utilizando la tipografía **Poppins**.
311
+
312
+ ## 📄 Licencia
313
+
314
+ Este proyecto es propiedad privada de **Codeplex SAC**. Todos los derechos reservados.