@codeplex-sac/utils 0.0.3 → 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,7 +1,243 @@
1
- # utils
1
+ # @codeplex-sac/utils
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
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
- ## Running unit tests
5
+ ## 🚀 Instalación
6
6
 
7
- Run `nx test utils` to execute the unit tests via [Vitest](https://vitest.dev/).
7
+ Se recomienda el uso de [bun](https://bun.sh) para una gestión de dependencias óptima.
8
+
9
+ ```bash
10
+ bun add @codeplex-sac/utils @mui/material @emotion/react @emotion/styled
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 🏗️ Utilidades y Componentes Lógicos
16
+
17
+ ### 🪟 Grupo 1: Estructura y Capas
18
+
19
+ #### CodeplexModal
20
+ Componente de diálogo avanzado con soporte para arrastre (Drag), redimensionamiento (Resize) y modo sin bloqueo (Modeless).
21
+
22
+ **Ejemplo de Uso:**
23
+ ```tsx
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
+ );
39
+ ```
40
+
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. |
54
+
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. |
77
+
78
+ ---
79
+
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. |
109
+
110
+ ---
111
+
112
+ ### 🛠️ Grupo 2: Comportamiento y Posicionamiento
113
+
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. |
136
+
137
+ ---
138
+
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. |
173
+
174
+ ---
175
+
176
+ #### CodeplexPosicionador (Popper)
177
+ Coloca contenido flotante relativo a otro elemento sin bloquear el fondo. Ideal para tooltips personalizados o menús contextuales.
178
+
179
+ **Ejemplo de Uso:**
180
+ ```tsx
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
+ );
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';