@codeplex-sac/feedback 0.1.2 → 0.1.5

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 (2) hide show
  1. package/README.md +227 -0
  2. package/package.json +1 -1
package/README.md ADDED
@@ -0,0 +1,227 @@
1
+ # @codeplex-sac/feedback
2
+
3
+ Componentes de retroalimentación para aplicaciones React: notificaciones, diálogos, modales y tooltips avanzados. Basado en **Material UI** con estilos premium (glassmorphism, animaciones).
4
+
5
+ ## Instalación
6
+
7
+ ```bash
8
+ bun add @codeplex-sac/feedback @codeplex-sac/tema @mui/material @emotion/react @emotion/styled
9
+ ```
10
+
11
+ > [!IMPORTANT]
12
+ > Envuelve la aplicación con `CodeplexProveedorTema` de `@codeplex-sac/tema` para que los estilos funcionen correctamente.
13
+
14
+ ---
15
+
16
+ ## Componentes
17
+
18
+ ---
19
+
20
+ ### CodeplexNotificacion
21
+
22
+ Toast / Snackbar con barra de progreso animada y múltiples estilos visuales.
23
+
24
+ **Ejemplo:**
25
+ ```tsx
26
+ import { CodeplexNotificacion } from '@codeplex-sac/feedback';
27
+ import { useState } from 'react';
28
+
29
+ export const Ejemplo = () => {
30
+ const [abierto, setAbierto] = useState(false);
31
+
32
+ return (
33
+ <>
34
+ <button onClick={() => setAbierto(true)}>Mostrar notificación</button>
35
+ <CodeplexNotificacion
36
+ abierto={abierto}
37
+ mensaje="Cambios guardados correctamente."
38
+ variante="exito"
39
+ estilo="cristal"
40
+ mostrarProgreso
41
+ alCerrar={() => setAbierto(false)}
42
+ />
43
+ </>
44
+ );
45
+ };
46
+ ```
47
+
48
+ **Props:**
49
+ | Propiedad | Tipo | Por defecto | Descripción |
50
+ | :--- | :--- | :--- | :--- |
51
+ | `abierto` | `boolean` | — | Controla la visibilidad. |
52
+ | `mensaje` | `string \| ReactNode` | — | Texto de la notificación. |
53
+ | `titulo` | `string` | — | Título en negrita sobre el mensaje. |
54
+ | `variante` | `'info' \| 'exito' \| 'advertencia' \| 'error'` | `'info'` | Color e icono. |
55
+ | `estilo` | `'solido' \| 'suave' \| 'cristal' \| 'contorno'` | `'suave'` | Acabado visual. |
56
+ | `posicion` | `'arriba-izquierda' \| 'arriba-centro' \| 'arriba-derecha' \| 'abajo-izquierda' \| 'abajo-centro' \| 'abajo-derecha'` | `'abajo-izquierda'` | Posición en pantalla. |
57
+ | `animacion` | `'deslizar' \| 'crecer' \| 'desvanecer'` | `'deslizar'` | Tipo de animación de entrada. |
58
+ | `duracion` | `number \| null` | `6000` | Tiempo en ms antes del auto-cierre. `null` desactiva el auto-cierre. |
59
+ | `mostrarProgreso` | `boolean` | `false` | Muestra barra de tiempo restante. |
60
+ | `cerrable` | `boolean` | `true` | Muestra botón de cierre. |
61
+ | `accion` | `ReactNode` | — | Slot para botón de acción personalizado. |
62
+ | `mostrarIcono` | `boolean` | `true` | Muestra el icono de variante. |
63
+ | `alCerrar` | `() => void` | — | Callback al cerrarse. |
64
+
65
+ ---
66
+
67
+ ### CodeplexDialogo
68
+
69
+ Ventana modal para confirmaciones y formularios, con subcomponentes de composición.
70
+
71
+ **Componentes incluidos:** `CodeplexDialogo`, `CodeplexDialogoTitulo`, `CodeplexDialogoContenido`, `CodeplexDialogoTexto`, `CodeplexDialogoAcciones`
72
+
73
+ **Ejemplo:**
74
+ ```tsx
75
+ import {
76
+ CodeplexDialogo,
77
+ CodeplexDialogoTitulo,
78
+ CodeplexDialogoContenido,
79
+ CodeplexDialogoTexto,
80
+ CodeplexDialogoAcciones,
81
+ } from '@codeplex-sac/feedback';
82
+ import { CodeplexBoton } from '@codeplex-sac/ui';
83
+
84
+ export const Ejemplo = () => (
85
+ <CodeplexDialogo abierto={true} alCerrar={() => {}}>
86
+ <CodeplexDialogoTitulo>Confirmar eliminación</CodeplexDialogoTitulo>
87
+ <CodeplexDialogoContenido>
88
+ <CodeplexDialogoTexto>
89
+ ¿Estás seguro de que deseas eliminar este registro? Esta acción no se puede deshacer.
90
+ </CodeplexDialogoTexto>
91
+ </CodeplexDialogoContenido>
92
+ <CodeplexDialogoAcciones>
93
+ <CodeplexBoton variante="fantasma" texto="Cancelar" alHacerClick={() => {}} />
94
+ <CodeplexBoton variante="peligro" texto="Eliminar" alHacerClick={() => {}} />
95
+ </CodeplexDialogoAcciones>
96
+ </CodeplexDialogo>
97
+ );
98
+ ```
99
+
100
+ **Props de `CodeplexDialogo`:**
101
+ | Propiedad | Tipo | Por defecto | Descripción |
102
+ | :--- | :--- | :--- | :--- |
103
+ | `abierto` | `boolean` | — | Controla la visibilidad del diálogo. |
104
+ | `alCerrar` | `() => void` | — | Callback al cerrar (clic en fondo o Esc). |
105
+ | `anchoMaximo` | `'diminuto' \| 'pequeno' \| 'mediano' \| 'grande' \| 'enorme'` | `'pequeno'` | Ancho máximo del panel. |
106
+ | `anchoCompleto` | `boolean` | `false` | Ocupa el ancho máximo definido. |
107
+ | `pantallaCompleta` | `boolean` | `false` | Ocupa toda la pantalla. |
108
+
109
+ ---
110
+
111
+ ### CodeplexModal
112
+
113
+ Contenedor modal de propósito general con cabecera y botón de cierre integrados.
114
+
115
+ **Ejemplo:**
116
+ ```tsx
117
+ import { CodeplexModal } from '@codeplex-sac/feedback';
118
+ import { useState } from 'react';
119
+
120
+ export const Ejemplo = () => {
121
+ const [abierto, setAbierto] = useState(false);
122
+
123
+ return (
124
+ <>
125
+ <button onClick={() => setAbierto(true)}>Abrir modal</button>
126
+ <CodeplexModal
127
+ abierto={abierto}
128
+ titulo="Detalles del pedido"
129
+ alCerrar={() => setAbierto(false)}
130
+ >
131
+ <p>Contenido del modal</p>
132
+ </CodeplexModal>
133
+ </>
134
+ );
135
+ };
136
+ ```
137
+
138
+ **Props:**
139
+ | Propiedad | Tipo | Por defecto | Descripción |
140
+ | :--- | :--- | :--- | :--- |
141
+ | `abierto` | `boolean` | — | Controla la visibilidad. |
142
+ | `titulo` | `ReactNode` | — | Título de la cabecera. |
143
+ | `alCerrar` | `() => void` | — | Callback al cerrar. |
144
+ | `anchoMaximo` | `'diminuto' \| 'pequeno' \| 'mediano' \| 'grande' \| 'enorme'` | `'pequeno'` | Ancho máximo del panel. |
145
+ | `anchoCompleto` | `boolean` | `true` | Ocupa el ancho máximo. |
146
+ | `children` | `ReactNode` | — | Contenido interno del modal. |
147
+
148
+ ---
149
+
150
+ ### CodeplexMensajeEmergente
151
+
152
+ Tooltip avanzado con estilos cristal y múltiples animaciones (Zoom, Fade, Grow).
153
+
154
+ **Ejemplo:**
155
+ ```tsx
156
+ import { CodeplexMensajeEmergente } from '@codeplex-sac/feedback';
157
+ import { CodeplexBoton } from '@codeplex-sac/ui';
158
+
159
+ export const Ejemplo = () => (
160
+ <CodeplexMensajeEmergente
161
+ contenido="Guarda los cambios del formulario"
162
+ lado="arriba"
163
+ color="oscuro"
164
+ >
165
+ <CodeplexBoton texto="Guardar" variante="primario" />
166
+ </CodeplexMensajeEmergente>
167
+ );
168
+ ```
169
+
170
+ **Props:**
171
+ | Propiedad | Tipo | Por defecto | Descripción |
172
+ | :--- | :--- | :--- | :--- |
173
+ | `contenido` | `ReactNode` | — | Texto o elemento dentro del tooltip. |
174
+ | `lado` | `'arriba' \| 'abajo' \| 'izquierda' \| 'derecha'` | `'arriba'` | Posición relativa al hijo. |
175
+ | `color` | `'oscuro' \| 'claro' \| 'primario' \| 'azul'` | `'oscuro'` | Esquema de color del globo. |
176
+ | `distancia` | `number` | `8` | Separación en px del elemento base. |
177
+ | `children` | `ReactNode` | — | Elemento que activa el tooltip. |
178
+
179
+ ---
180
+
181
+ ### CodeplexVentanaEmergente
182
+
183
+ Popover completo con cabecera, contenido libre y control de posicionamiento.
184
+
185
+ **Ejemplo:**
186
+ ```tsx
187
+ import { CodeplexVentanaEmergente } from '@codeplex-sac/feedback';
188
+ import { useState } from 'react';
189
+
190
+ export const Ejemplo = () => {
191
+ const [ancla, setAncla] = useState<HTMLButtonElement | null>(null);
192
+
193
+ return (
194
+ <>
195
+ <button onClick={(e) => setAncla(e.currentTarget)}>Abrir</button>
196
+ <CodeplexVentanaEmergente
197
+ abierto={Boolean(ancla)}
198
+ elementoAncla={ancla}
199
+ titulo="Filtros avanzados"
200
+ alCerrar={() => setAncla(null)}
201
+ >
202
+ <p>Opciones de filtro aquí</p>
203
+ </CodeplexVentanaEmergente>
204
+ </>
205
+ );
206
+ };
207
+ ```
208
+
209
+ **Props:**
210
+ | Propiedad | Tipo | Por defecto | Descripción |
211
+ | :--- | :--- | :--- | :--- |
212
+ | `abierto` | `boolean` | — | Controla la visibilidad. |
213
+ | `elementoAncla` | `HTMLElement \| null` | — | Elemento de referencia para posicionarse. |
214
+ | `titulo` | `ReactNode` | — | Cabecera del panel. |
215
+ | `alCerrar` | `() => void` | — | Callback al cerrar. |
216
+ | `colocacion` | `'arriba' \| 'arriba-inicio' \| 'arriba-fin' \| 'abajo' \| 'abajo-inicio' \| 'abajo-fin' \| 'izquierda' \| 'derecha'` | `'abajo-inicio'` | Posición relativa al ancla. |
217
+ | `children` | `ReactNode` | — | Contenido del panel. |
218
+
219
+ ---
220
+
221
+ ## Personalización
222
+
223
+ Todos los componentes heredan la configuración de `CodeplexProveedorTema`. El estilo `cristal` usa `backdropFilter` y se adapta automáticamente al modo oscuro.
224
+
225
+ ## Licencia
226
+
227
+ Propiedad privada de **Codeplex SAC**. Todos los derechos reservados.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeplex-sac/feedback",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "module": "./index.js",