@codeplex-sac/utils 0.0.4 → 0.0.7

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,93 +1,243 @@
1
1
  # @codeplex-sac/utils
2
2
 
3
- Utilidades de bajo nivel y componentes auxiliares para la construcción de interfaces complejas.
3
+ Paquete de utilidades transversales y componentes lógicos esenciales para el ecosistema **Codeplex-SAC**. Incluye herramientas para gestión de modales, portales, animaciones y detección de eventos DOM, todas optimizadas para un rendimiento superior y una API en **Español**.
4
4
 
5
- ## 📦 Instalación
5
+ ## 🚀 Instalación
6
+
7
+ Se recomienda el uso de [bun](https://bun.sh) para una gestión de dependencias óptima.
6
8
 
7
9
  ```bash
8
- pnpm add @mui/material @codeplex-sac/utils
10
+ bun add @codeplex-sac/utils @mui/material @emotion/react @emotion/styled
9
11
  ```
10
12
 
11
13
  ---
12
14
 
13
- ## 🛠️ Utilidades de Comportamiento
15
+ ## 🏗️ Utilidades y Componentes Lógicos
16
+
17
+ ### 🪟 Grupo 1: Estructura y Capas
14
18
 
15
- ### `<CodeplexDetectorClickFuera />` (Click Away Listener)
16
- Detecta clics fuera del elemento hijo. Ideal para cerrar menús o dropdowns customizados.
19
+ #### CodeplexModal
20
+ Componente de diálogo avanzado con soporte para arrastre (Drag), redimensionamiento (Resize) y modo sin bloqueo (Modeless).
17
21
 
22
+ **Ejemplo de Uso:**
18
23
  ```tsx
19
- <CodeplexDetectorClickFuera alHacerClickFuera={() => setAbierto(false)}>
20
- <div className="menu-dropdown">
21
- ...
22
- </div>
23
- </CodeplexDetectorClickFuera>
24
+ import { CodeplexModal } from '@codeplex-sac/utils';
25
+ import { CodeplexBoton } from '@codeplex-sac/ui';
26
+
27
+ export const MiModal = () => (
28
+ <CodeplexModal
29
+ open={true}
30
+ title="Configuración Avanzada"
31
+ subtitle="Ajuste los parámetros del sistema"
32
+ draggable
33
+ resizable
34
+ footer={<CodeplexBoton texto="Guardar" />}
35
+ >
36
+ Contenido del modal aquí...
37
+ </CodeplexModal>
38
+ );
24
39
  ```
25
- | Propiedad | Descripción |
26
- | :--- | :--- |
27
- | `alHacerClickFuera` | Callback ejecutado al detectar clic fuera. |
28
40
 
29
- ### `<CodeplexPortal />`
30
- Renderiza hijos en un nodo DOM diferente (react portals).
41
+ **Propiedades (Props):**
42
+ | Propiedad | Tipo | Por Defecto | Descripción |
43
+ | :--- | :--- | :--- | :--- |
44
+ | `open` | `boolean` | - | Controla la visibilidad. |
45
+ | `onClose` | `Function` | - | Evento al cerrar (X, Esc, Click fuera). |
46
+ | `title` | `ReactNode` | - | Título superior. |
47
+ | `subtitle` | `string` | - | Texto informativo bajo el título. |
48
+ | `footer` | `ReactNode` | - | Acciones en la parte inferior. |
49
+ | `draggable` | `boolean` | `false` | Permite mover el modal arrastrando el encabezado. |
50
+ | `resizable` | `boolean` | `false` | Permite cambiar el tamaño desde la esquina inferior. |
51
+ | `locked` | `boolean` | `false` | Impide cerrar al hacer clic fuera o presionar ESC. |
52
+ | `modeless` | `boolean` | `false` | Modal sin fondo oscuro que permite interactuar con lo de atrás. |
53
+ | `maxWidth` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'sm'` | Ancho máximo predefinido. |
31
54
 
32
- | Propiedad | Descripción |
33
- | :--- | :--- |
34
- | `containerId` | ID del elemento DOM destino. |
35
- | `container` | Referencia directa al nodo DOM (opcional). |
55
+ ---
56
+
57
+ #### CodeplexPortal
58
+ Permite renderizar contenido en un nodo DOM fuera de la jerarquía actual, ideal para romper el flujo de capas (z-index).
59
+
60
+ **Ejemplo de Uso:**
61
+ ```tsx
62
+ import { CodeplexPortal } from '@codeplex-sac/utils';
63
+
64
+ export const Ejemplo = () => (
65
+ <CodeplexPortal idContenedor="capa-notificaciones">
66
+ <div>Este contenido se renderiza fuera de su padre.</div>
67
+ </CodeplexPortal>
68
+ );
69
+ ```
70
+
71
+ **Propiedades (Props):**
72
+ | Propiedad | Tipo | Por Defecto | Descripción |
73
+ | :--- | :--- | :--- | :--- |
74
+ | `idContenedor`| `string` | - | ID del elemento DOM donde se insertará el contenido. |
75
+ | `contenedor` | `Element` | `document.body` | Referencia directa al nodo DOM. |
76
+ | `deshabilitarPortal` | `boolean` | `false` | Si es true, renderiza el contenido en su posición original. |
36
77
 
37
78
  ---
38
79
 
39
- ## 🪟 Ventanas y Capas
40
-
41
- ### `<CodeplexModal />`
42
- Wrapper simplificado para Modales.
43
- | Propiedad | Descripción |
44
- | :--- | :--- |
45
- | `titulo` | Título pre-estilizado en la cabecera. |
46
- | `descripcion` | Texto descriptivo (`aria-describedby`). |
47
- | `ancho` | Ancho del modal (default: 400). |
48
- | `mostrarIconoCierre` | `boolean`. Botón "X" en la esquina. |
49
-
50
- ### `<CodeplexPopover />`
51
- Popups anclados a elementos.
52
- | Propiedad | Descripción |
53
- | :--- | :--- |
54
- | `title` | Título del popover. |
55
- | `showCloseIcon` | Muestra botón de cierre. |
56
- | `anchorEl` | Elemento al que se ancla. |
57
-
58
- ### `<CodeplexPopper />`
59
- Posicionamiento avanzado (base de Tooltips/Popovers) usando Popper.js.
60
- | Propiedad | Descripción |
61
- | :--- | :--- |
62
- | `withPaper` | `boolean`. Envuelve el contenido en un Paper elevado. |
63
- | `closeOnClickAway` | `boolean`. Cierra al hacer clic fuera. |
80
+ #### CodeplexTransiciones
81
+ Suite de componentes para animar la entrada y salida de elementos con una API simplificada.
82
+
83
+ **Componentes Disponibles:**
84
+ - `CodeplexColapso` (Collapse): Anima la altura.
85
+ - `CodeplexDesvanecimiento` (Fade): Anima la opacidad.
86
+ - `CodeplexCrecimiento` (Grow): Anima escala y opacidad.
87
+ - `CodeplexZoom` (Zoom): Anima escala desde el centro.
88
+ - `CodeplexDeslizamiento` (Slide): Desplaza desde un borde.
89
+
90
+ **Ejemplo (Deslizamiento):**
91
+ ```tsx
92
+ import { CodeplexDeslizamiento } from '@codeplex-sac/utils';
93
+
94
+ export const Ejemplo = ({ mostrar }) => (
95
+ <CodeplexDeslizamiento visible={mostrar} direccion="arriba">
96
+ <div>Contenido animado</div>
97
+ </CodeplexDeslizamiento>
98
+ );
99
+ ```
100
+
101
+ **Propiedades Comunes:**
102
+ | Propiedad | Tipo | Por Defecto | Descripción |
103
+ | :--- | :--- | :--- | :--- |
104
+ | `visible` | `boolean` | - | Activa la animación de entrada. |
105
+ | `duracion` | `number \| {enter, exit}` | `300/200` | Tiempo en milisegundos. |
106
+ | `entrada` | `number` | - | Duración específica de entrada. |
107
+ | `salida` | `number` | - | Duración específica de salida. |
108
+ | `direccion`| `'arriba' \| 'abajo' \| 'izquierda' \| 'derecha'` | `'arriba'` | (Solo Slide) Origen del movimiento. |
64
109
 
65
110
  ---
66
111
 
67
- ## 📝 Entradas Especiales
112
+ ### 🛠️ Grupo 2: Comportamiento y Posicionamiento
68
113
 
69
- ### `<CodeplexTextareaAutosize />`
70
- Textarea que crece con el contenido pero mantiene el estilo visual de los Inputs de Material UI.
71
- | Propiedad | Descripción |
72
- | :--- | :--- |
73
- | `variant` | `'outlined' \| 'filled' \| 'standard'`. |
74
- | `minRows` | Filas mínimas iniciales. |
75
- | `error` | Estado visual de error (borde rojo). |
114
+ #### CodeplexDetectorClicFuera
115
+ Componente invisible que detecta cuando el usuario hace clic o toca fuera de su elemento hijo.
116
+
117
+ **Ejemplo de Uso:**
118
+ ```tsx
119
+ import { CodeplexDetectorClicFuera } from '@codeplex-sac/utils';
120
+
121
+ export const MenuDesplegable = ({ abierto, alCerrar }) => (
122
+ <CodeplexDetectorClicFuera alClicFuera={alCerrar}>
123
+ <div style={{ display: abierto ? 'block' : 'none' }}>
124
+ Contenido del Menú
125
+ </div>
126
+ </CodeplexDetectorClicFuera>
127
+ );
128
+ ```
129
+
130
+ **Propiedades (Props):**
131
+ | Propiedad | Tipo | Por Defecto | Descripción |
132
+ | :--- | :--- | :--- | :--- |
133
+ | `alClicFuera` | `Function` | - | Función que se ejecuta al detectar el clic fuera. |
134
+ | `eventoMouse` | `'onClick' \| 'onMouseDown' \| 'onMouseUp' \| false` | `'onClick'` | Evento de ratón a escuchar. |
135
+ | `deshabilitarArbolReact` | `boolean` | `false` | Si es true, ignora si el clic fue dentro del árbol de React. |
76
136
 
77
137
  ---
78
138
 
79
- ## 🎞️ Transiciones
139
+ #### CodeplexVentanaEmergente (Popover)
140
+ Muestra contenido flotante anclado a un elemento. A diferencia del posicionador, este bloquea la interacción con el fondo.
141
+
142
+ **Ejemplo de Uso:**
143
+ ```tsx
144
+ import { CodeplexVentanaEmergente, CodeplexBoton } from '@codeplex-sac/ui';
145
+
146
+ export const Ejemplo = () => {
147
+ const [ancla, setAncla] = useState(null);
148
+ return (
149
+ <>
150
+ <CodeplexBoton texto="Abrir Popover" alHacerClick={(e) => setAncla(e.currentTarget)} />
151
+ <CodeplexVentanaEmergente
152
+ abierto={Boolean(ancla)}
153
+ elementoAncla={ancla}
154
+ alCerrar={() => setAncla(null)}
155
+ titulo="Detalles de Usuario"
156
+ mostrarIconoCierre
157
+ >
158
+ Información detallada aquí...
159
+ </CodeplexVentanaEmergente>
160
+ </>
161
+ );
162
+ };
163
+ ```
164
+
165
+ **Propiedades (Props):**
166
+ | Propiedad | Tipo | Por Defecto | Descripción |
167
+ | :--- | :--- | :--- | :--- |
168
+ | `abierto` | `boolean` | - | Visibilidad de la ventana. |
169
+ | `elementoAncla`| `HTMLElement` | - | Elemento que sirve de referencia para la posición. |
170
+ | `titulo` | `ReactNode` | - | Cabecera de la ventana. |
171
+ | `mostrarIconoCierre`| `boolean` | `false` | Muestra la 'X' en la esquina superior. |
172
+ | `alCerrar` | `Function` | - | Callback de cierre. |
80
173
 
81
- Wrappers con timeouts por defecto suavizados para animaciones consistentes. Use las props estándar de MUI como `in`, `mountOnEnter`, `unmountOnExit`.
174
+ ---
82
175
 
83
- * `CodeplexColapso` (Collapse)
84
- * `CodeplexDesvanecimiento` (Fade)
85
- * `CodeplexCrecimiento` (Grow)
86
- * `CodeplexZoom`
87
- * `CodeplexDeslizamiento` (Slide) - Prop extra: `direction` ('up', 'down', 'left', 'right').
176
+ #### CodeplexPosicionador (Popper)
177
+ Coloca contenido flotante relativo a otro elemento sin bloquear el fondo. Ideal para tooltips personalizados o menús contextuales.
88
178
 
179
+ **Ejemplo de Uso:**
89
180
  ```tsx
90
- <CodeplexDesvanecimiento in={visible}>
91
- <div>Contenido animado</div>
92
- </CodeplexDesvanecimiento>
181
+ import { CodeplexPosicionador } from '@codeplex-sac/utils';
182
+
183
+ export const Ejemplo = ({ ancla, abierto }) => (
184
+ <CodeplexPosicionador
185
+ abierto={abierto}
186
+ elementoAncla={ancla}
187
+ colocacion="right-start"
188
+ distancia={10}
189
+ conFondo
190
+ >
191
+ Texto informativo flotante.
192
+ </CodeplexPosicionador>
193
+ );
93
194
  ```
195
+
196
+ **Propiedades (Props):**
197
+ | Propiedad | Tipo | Por Defecto | Descripción |
198
+ | :--- | :--- | :--- | :--- |
199
+ | `abierto` | `boolean` | - | Visibilidad. |
200
+ | `elementoAncla`| `HTMLElement` | - | Referencia de posición. |
201
+ | `colocacion` | `string` | `'bottom-start'`| Posición relativa (top, bottom, left, right + start/end). |
202
+ | `conFondo` | `boolean` | `true` | Aplica sombra y fondo blanco (estilo Paper). |
203
+ | `cerrarAlClicFuera` | `boolean` | `false` | Activa detector de clic fuera automáticamente. |
204
+ | `distancia` | `number` | `4` | Separación en píxeles del ancla. |
205
+
206
+ ---
207
+
208
+ #### CodeplexAreaTextoAjustable
209
+ Área de texto (Textarea) que ajusta su altura automáticamente según el contenido.
210
+
211
+ **Ejemplo de Uso:**
212
+ ```tsx
213
+ import { CodeplexAreaTextoAjustable } from '@codeplex-sac/utils';
214
+
215
+ export const Comentario = () => (
216
+ <CodeplexAreaTextoAjustable
217
+ etiqueta="Comentarios"
218
+ marcador="Escriba aquí..."
219
+ filasMinimas={3}
220
+ filasMaximas={10}
221
+ />
222
+ );
223
+ ```
224
+
225
+ **Propiedades (Props):**
226
+ | Propiedad | Tipo | Por Defecto | Descripción |
227
+ | :--- | :--- | :--- | :--- |
228
+ | `variante` | `'contorneado' \| 'relleno' \| 'estandar'` | `'contorneado'` | Estilo visual del campo. |
229
+ | `etiqueta` | `ReactNode` | - | Label superior. |
230
+ | `filasMinimas` | `number` | `3` | Altura inicial. |
231
+ | `filasMaximas` | `number` | - | Altura máxima antes de scroll. |
232
+ | `error` | `boolean` | `false` | Activa estado de error visual. |
233
+ | `mensajeError` | `ReactNode` | - | Texto informativo de error. |
234
+
235
+ ---
236
+
237
+ ## 🎨 Personalización
238
+
239
+ Los componentes de `@codeplex-sac/utils` están diseñados para integrarse fluidamente con el sistema de temas de **Codeplex-SAC**, heredando colores y tipografías globales.
240
+
241
+ ## 📄 Licencia
242
+
243
+ Este proyecto es propiedad privada de **Codeplex SAC**. Todos los derechos reservados.
package/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export * from './lib/click-away-listener/click-away-listener';
1
+ export * from './lib/detector-clic-fuera/detector-clic-fuera';
2
2
  export * from './lib/modal/modal';
3
- export * from './lib/popover/popover';
4
- export * from './lib/popper/popper';
3
+ export * from './lib/ventana-emergente/ventana-emergente';
4
+ export * from './lib/posicionador/posicionador';
5
5
  export * from './lib/portal/portal';
6
- export * from './lib/textarea-autosize/textarea-autosize';
7
- export * from './lib/transitions/transitions';
6
+ export * from './lib/area-texto-ajustable/area-texto-ajustable';
7
+ export * from './lib/transiciones/transiciones';