@codeplex-sac/formularios 0.1.2 → 0.1.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.
- package/README.md +442 -0
- package/index.js +3065 -3053
- package/lib/selector/selector.d.ts +4 -2
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
# @codeplex-sac/formularios
|
|
2
|
+
|
|
3
|
+
Biblioteca de componentes de formulario para aplicaciones React, basada en **Material UI**. Todos los inputs siguen la API en **Español** de la suite `@codeplex-sac/*`.
|
|
4
|
+
|
|
5
|
+
## Instalación
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add @codeplex-sac/formularios @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
|
+
### CodeplexCampoTexto
|
|
21
|
+
|
|
22
|
+
Entrada de texto con iconos, validación visual y soporte multilinea.
|
|
23
|
+
|
|
24
|
+
**Ejemplo:**
|
|
25
|
+
```tsx
|
|
26
|
+
import { CodeplexCampoTexto } from '@codeplex-sac/formularios';
|
|
27
|
+
|
|
28
|
+
export const Ejemplo = () => (
|
|
29
|
+
<CodeplexCampoTexto
|
|
30
|
+
etiqueta="Correo electrónico"
|
|
31
|
+
marcador="usuario@empresa.com"
|
|
32
|
+
tipo="email"
|
|
33
|
+
anchoCompleto
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Props:**
|
|
39
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
40
|
+
| :--- | :--- | :--- | :--- |
|
|
41
|
+
| `etiqueta` | `ReactNode` | — | Texto de la etiqueta superior. |
|
|
42
|
+
| `valor` | `string \| number` | — | Valor controlado del input. |
|
|
43
|
+
| `alCambiar` | `ChangeEventHandler` | — | Evento al cambiar el valor. |
|
|
44
|
+
| `marcador` | `string` | — | Texto placeholder. |
|
|
45
|
+
| `tipo` | `string` | `'text'` | Tipo HTML del input (`email`, `password`, `number`…). |
|
|
46
|
+
| `multilinea` | `boolean` | `false` | Activa modo textarea. |
|
|
47
|
+
| `filas` | `number` | — | Número fijo de filas en multilinea. |
|
|
48
|
+
| `filasMinimas` | `number` | — | Mínimo de filas en multilinea autoajustable. |
|
|
49
|
+
| `filasMaximas` | `number` | — | Máximo de filas en multilinea autoajustable. |
|
|
50
|
+
| `iconoInicio` | `ReactNode` | — | Icono al inicio del campo. |
|
|
51
|
+
| `iconoFin` | `ReactNode` | — | Icono al final del campo. |
|
|
52
|
+
| `error` | `boolean` | `false` | Activa estado de error. |
|
|
53
|
+
| `mensajeError` | `ReactNode` | — | Texto de error informativo. |
|
|
54
|
+
| `textoAyuda` | `ReactNode` | — | Texto de ayuda bajo el campo. |
|
|
55
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la interacción. |
|
|
56
|
+
| `soloLectura` | `boolean` | `false` | Permite visualizar sin editar. |
|
|
57
|
+
| `anchoCompleto` | `boolean` | `false` | Ocupa el 100% del contenedor. |
|
|
58
|
+
| `alEnfocar` | `FocusEventHandler` | — | Evento al enfocar el campo. |
|
|
59
|
+
| `alDesenfocar` | `FocusEventHandler` | — | Evento al perder el foco. |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### CodeplexCampoNumero
|
|
64
|
+
|
|
65
|
+
Campo numérico con botones de incremento/decremento integrados.
|
|
66
|
+
|
|
67
|
+
**Ejemplo:**
|
|
68
|
+
```tsx
|
|
69
|
+
import { CodeplexCampoNumero } from '@codeplex-sac/formularios';
|
|
70
|
+
|
|
71
|
+
export const Ejemplo = () => (
|
|
72
|
+
<CodeplexCampoNumero
|
|
73
|
+
etiqueta="Cantidad"
|
|
74
|
+
minimo={1}
|
|
75
|
+
maximo={100}
|
|
76
|
+
paso={1}
|
|
77
|
+
valor={5}
|
|
78
|
+
alCambiar={(val) => console.log(val)}
|
|
79
|
+
/>
|
|
80
|
+
);
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Props:**
|
|
84
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
85
|
+
| :--- | :--- | :--- | :--- |
|
|
86
|
+
| `etiqueta` | `string` | — | Texto descriptivo del campo. |
|
|
87
|
+
| `valor` | `number` | — | Valor controlado. |
|
|
88
|
+
| `alCambiar` | `(val: number) => void` | — | Callback al cambiar. |
|
|
89
|
+
| `minimo` | `number` | — | Valor mínimo permitido. |
|
|
90
|
+
| `maximo` | `number` | — | Valor máximo permitido. |
|
|
91
|
+
| `paso` | `number` | `1` | Incremento por clic en los controles. |
|
|
92
|
+
| `mostrarControles` | `boolean` | `true` | Muestra botones +/−. |
|
|
93
|
+
| `alineacion` | `'izquierda' \| 'centro' \| 'derecha'` | `'centro'` | Alineación del texto. |
|
|
94
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita el campo. |
|
|
95
|
+
| `anchoCompleto` | `boolean` | `false` | Ocupa el 100% del contenedor. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### CodeplexSelector
|
|
100
|
+
|
|
101
|
+
Dropdown con búsqueda, selección múltiple y opción de crear nuevo elemento.
|
|
102
|
+
|
|
103
|
+
**Ejemplo:**
|
|
104
|
+
```tsx
|
|
105
|
+
import { CodeplexSelector } from '@codeplex-sac/formularios';
|
|
106
|
+
|
|
107
|
+
const roles = [
|
|
108
|
+
{ valor: 'admin', etiqueta: 'Administrador' },
|
|
109
|
+
{ valor: 'usuario', etiqueta: 'Usuario' },
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
export const Ejemplo = () => (
|
|
113
|
+
<CodeplexSelector
|
|
114
|
+
etiqueta="Rol"
|
|
115
|
+
opciones={roles}
|
|
116
|
+
buscable
|
|
117
|
+
alCambiar={(val) => console.log(val)}
|
|
118
|
+
/>
|
|
119
|
+
);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Props:**
|
|
123
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
124
|
+
| :--- | :--- | :--- | :--- |
|
|
125
|
+
| `etiqueta` | `string` | — | Label del selector. |
|
|
126
|
+
| `opciones` | `{ valor, etiqueta, deshabilitado? }[]` | `[]` | Lista de opciones. |
|
|
127
|
+
| `valor` | `string \| number` | — | Valor seleccionado. |
|
|
128
|
+
| `alCambiar` | `SelectChangeEvent handler` | — | Evento de selección. |
|
|
129
|
+
| `buscable` | `boolean` | `false` | Activa filtro de búsqueda. |
|
|
130
|
+
| `marcador` | `string` | — | Placeholder del buscador. |
|
|
131
|
+
| `textoAyuda` | `ReactNode` | — | Texto informativo bajo el selector. |
|
|
132
|
+
| `mensajeError` | `string` | — | Texto de error. |
|
|
133
|
+
| `alCrearNuevo` | `() => void` | — | Muestra botón "Crear nuevo" al final. |
|
|
134
|
+
| `textoCrearNuevo` | `string` | `'Crear nuevo'` | Texto del botón de creación. |
|
|
135
|
+
| `anchoCompleto` | `boolean` | `false` | Ocupa el 100% del contenedor. |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### CodeplexAutocompletado
|
|
140
|
+
|
|
141
|
+
Selector con búsqueda en tiempo real y soporte para opciones asíncronas.
|
|
142
|
+
|
|
143
|
+
**Ejemplo:**
|
|
144
|
+
```tsx
|
|
145
|
+
import { CodeplexAutocompletado } from '@codeplex-sac/formularios';
|
|
146
|
+
|
|
147
|
+
const paises = [
|
|
148
|
+
{ etiqueta: 'Perú', valor: 'PE' },
|
|
149
|
+
{ etiqueta: 'Chile', valor: 'CL' },
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
export const Ejemplo = () => (
|
|
153
|
+
<CodeplexAutocompletado
|
|
154
|
+
etiqueta="País"
|
|
155
|
+
opciones={paises}
|
|
156
|
+
alCambiar={(val) => console.log(val)}
|
|
157
|
+
/>
|
|
158
|
+
);
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Props:**
|
|
162
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
163
|
+
| :--- | :--- | :--- | :--- |
|
|
164
|
+
| `opciones` | `any[]` | `[]` | Opciones disponibles. |
|
|
165
|
+
| `etiqueta` | `string` | — | Label del campo. |
|
|
166
|
+
| `valor` | `any` | — | Valor seleccionado. |
|
|
167
|
+
| `alCambiar` | `(valor: any) => void` | — | Evento al seleccionar. |
|
|
168
|
+
| `buscable` | `boolean` | `true` | Activa filtrado de opciones. |
|
|
169
|
+
| `multiple` | `boolean` | `false` | Permite selección múltiple. |
|
|
170
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita el campo. |
|
|
171
|
+
| `anchoCompleto` | `boolean` | `false` | Ocupa el 100% del contenedor. |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### CodeplexCasilla
|
|
176
|
+
|
|
177
|
+
Checkbox personalizado con estados indeterminado y múltiples variantes visuales.
|
|
178
|
+
|
|
179
|
+
**Ejemplo:**
|
|
180
|
+
```tsx
|
|
181
|
+
import { CodeplexCasilla } from '@codeplex-sac/formularios';
|
|
182
|
+
|
|
183
|
+
export const Ejemplo = () => (
|
|
184
|
+
<CodeplexCasilla
|
|
185
|
+
etiqueta="Acepto los términos y condiciones"
|
|
186
|
+
seleccionado={false}
|
|
187
|
+
alCambiar={(_, val) => console.log(val)}
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Props:**
|
|
193
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
194
|
+
| :--- | :--- | :--- | :--- |
|
|
195
|
+
| `etiqueta` | `ReactNode` | — | Texto lateral del checkbox. |
|
|
196
|
+
| `seleccionado` | `boolean` | — | Estado marcado. |
|
|
197
|
+
| `indeterminado` | `boolean` | `false` | Estado parcial (listas padre/hijo). |
|
|
198
|
+
| `tamano` | `'pequeno' \| 'mediano' \| 'grande'` | `'mediano'` | Tamaño visual. |
|
|
199
|
+
| `color` | `'primario' \| 'secundario' \| 'exito' \| 'error' \| 'info' \| 'advertencia'` | `'primario'` | Color al estar marcado. |
|
|
200
|
+
| `variante` | `'estandar' \| 'suave' \| 'borde'` | `'estandar'` | Estilo visual del cuadro. |
|
|
201
|
+
| `posicionEtiqueta` | `'derecha' \| 'izquierda' \| 'arriba' \| 'abajo'` | `'derecha'` | Posición del texto. |
|
|
202
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la interacción. |
|
|
203
|
+
| `error` | `boolean` | `false` | Muestra estado de error. |
|
|
204
|
+
| `alCambiar` | `(e, seleccionado: boolean) => void` | — | Callback al cambiar. |
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
### CodeplexGrupoRadio
|
|
209
|
+
|
|
210
|
+
Conjunto de opciones mutuamente excluyentes con diseño personalizado.
|
|
211
|
+
|
|
212
|
+
**Ejemplo:**
|
|
213
|
+
```tsx
|
|
214
|
+
import { CodeplexGrupoRadio } from '@codeplex-sac/formularios';
|
|
215
|
+
|
|
216
|
+
const opciones = [
|
|
217
|
+
{ valor: 'mensual', etiqueta: 'Mensual' },
|
|
218
|
+
{ valor: 'anual', etiqueta: 'Anual' },
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
export const Ejemplo = () => (
|
|
222
|
+
<CodeplexGrupoRadio
|
|
223
|
+
etiqueta="Facturación"
|
|
224
|
+
opciones={opciones}
|
|
225
|
+
valor="mensual"
|
|
226
|
+
alCambiar={(val) => console.log(val)}
|
|
227
|
+
/>
|
|
228
|
+
);
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Props:**
|
|
232
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
233
|
+
| :--- | :--- | :--- | :--- |
|
|
234
|
+
| `etiqueta` | `string` | — | Título del grupo. |
|
|
235
|
+
| `opciones` | `{ valor, etiqueta, deshabilitado? }[]` | `[]` | Lista de radios. |
|
|
236
|
+
| `valor` | `any` | — | Valor seleccionado. |
|
|
237
|
+
| `alCambiar` | `(valor: any) => void` | — | Callback al cambiar. |
|
|
238
|
+
| `orientacion` | `'horizontal' \| 'vertical'` | `'vertical'` | Disposición de los radios. |
|
|
239
|
+
| `color` | `'primario' \| 'secundario' \| 'error' \| 'exito' \| 'advertencia' \| 'info'` | `'primario'` | Color del radio activo. |
|
|
240
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita todo el grupo. |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### CodeplexInterruptor
|
|
245
|
+
|
|
246
|
+
Control de encendido/apagado (Switch) con soporte de etiquetas y colores semánticos.
|
|
247
|
+
|
|
248
|
+
**Ejemplo:**
|
|
249
|
+
```tsx
|
|
250
|
+
import { CodeplexInterruptor } from '@codeplex-sac/formularios';
|
|
251
|
+
|
|
252
|
+
export const Ejemplo = () => (
|
|
253
|
+
<CodeplexInterruptor
|
|
254
|
+
etiqueta="Notificaciones activas"
|
|
255
|
+
seleccionado={true}
|
|
256
|
+
color="exito"
|
|
257
|
+
alCambiar={(_, val) => console.log(val)}
|
|
258
|
+
/>
|
|
259
|
+
);
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Props:**
|
|
263
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
264
|
+
| :--- | :--- | :--- | :--- |
|
|
265
|
+
| `etiqueta` | `ReactNode` | — | Texto o elemento lateral. |
|
|
266
|
+
| `seleccionado` | `boolean` | — | Estado activo/inactivo. |
|
|
267
|
+
| `tamano` | `'pequeno' \| 'mediano'` | `'mediano'` | Tamaño visual. |
|
|
268
|
+
| `color` | `'primario' \| 'secundario' \| 'exito' \| 'error' \| 'advertencia' \| 'info'` | `'primario'` | Color al estar activo. |
|
|
269
|
+
| `posicionEtiqueta` | `'inicio' \| 'fin' \| 'arriba' \| 'abajo'` | `'fin'` | Posición de la etiqueta. |
|
|
270
|
+
| `alCambiar` | `(e, checked: boolean) => void` | — | Callback al cambiar estado. |
|
|
271
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita el interruptor. |
|
|
272
|
+
| `error` | `boolean` | `false` | Muestra estado de error. |
|
|
273
|
+
| `mensajeError` | `string` | — | Texto de error bajo el control. |
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### CodeplexDeslizador
|
|
278
|
+
|
|
279
|
+
Selector de valor o rango numérico con etiqueta de valor flotante.
|
|
280
|
+
|
|
281
|
+
**Ejemplo:**
|
|
282
|
+
```tsx
|
|
283
|
+
import { CodeplexDeslizador } from '@codeplex-sac/formularios';
|
|
284
|
+
|
|
285
|
+
export const Ejemplo = () => (
|
|
286
|
+
<CodeplexDeslizador
|
|
287
|
+
etiqueta="Porcentaje de descuento"
|
|
288
|
+
minimo={0}
|
|
289
|
+
maximo={100}
|
|
290
|
+
paso={5}
|
|
291
|
+
valor={25}
|
|
292
|
+
/>
|
|
293
|
+
);
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Props:**
|
|
297
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
298
|
+
| :--- | :--- | :--- | :--- |
|
|
299
|
+
| `etiqueta` | `string` | — | Título descriptivo del control. |
|
|
300
|
+
| `valor` | `number \| number[]` | — | Valor actual. |
|
|
301
|
+
| `alCambiar` | `(val: number \| number[]) => void` | — | Callback al mover el control. |
|
|
302
|
+
| `minimo` | `number` | `0` | Límite inferior del rango. |
|
|
303
|
+
| `maximo` | `number` | `100` | Límite superior del rango. |
|
|
304
|
+
| `paso` | `number` | `1` | Incremento mínimo. |
|
|
305
|
+
| `mostrarEtiquetaValor` | `'auto' \| 'siempre' \| 'nunca'` | `'auto'` | Control del globo de valor. |
|
|
306
|
+
| `orientacion` | `'horizontal' \| 'vertical'` | `'horizontal'` | Dirección del slider. |
|
|
307
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la interacción. |
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
### CodeplexListaTransferencia
|
|
312
|
+
|
|
313
|
+
Dos columnas que permiten mover elementos entre listas con búsqueda integrada.
|
|
314
|
+
|
|
315
|
+
**Ejemplo:**
|
|
316
|
+
```tsx
|
|
317
|
+
import { CodeplexListaTransferencia } from '@codeplex-sac/formularios';
|
|
318
|
+
|
|
319
|
+
const empleados = [
|
|
320
|
+
{ id: 1, texto: 'Ana García' },
|
|
321
|
+
{ id: 2, texto: 'Carlos López' },
|
|
322
|
+
];
|
|
323
|
+
|
|
324
|
+
export const Ejemplo = () => (
|
|
325
|
+
<CodeplexListaTransferencia
|
|
326
|
+
izquierda={empleados}
|
|
327
|
+
tituloIzquierda="Disponibles"
|
|
328
|
+
tituloDerecha="Asignados al proyecto"
|
|
329
|
+
buscable
|
|
330
|
+
alCambiar={(izq, der) => console.log(izq, der)}
|
|
331
|
+
/>
|
|
332
|
+
);
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Props:**
|
|
336
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
337
|
+
| :--- | :--- | :--- | :--- |
|
|
338
|
+
| `izquierda` | `any[]` | `[]` | Elementos de la columna origen. |
|
|
339
|
+
| `derecha` | `any[]` | `[]` | Elementos de la columna destino. |
|
|
340
|
+
| `tituloIzquierda` | `string` | `'Izquierda'` | Cabecera de la lista origen. |
|
|
341
|
+
| `tituloDerecha` | `string` | `'Derecha'` | Cabecera de la lista destino. |
|
|
342
|
+
| `buscable` | `boolean` | `false` | Muestra filtro de búsqueda en ambas listas. |
|
|
343
|
+
| `alCambiar` | `(izq: any[], der: any[]) => void` | — | Se ejecuta al mover elementos. |
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
### CodeplexAreaTextoAjustable
|
|
348
|
+
|
|
349
|
+
Textarea que crece automáticamente con el contenido.
|
|
350
|
+
|
|
351
|
+
**Ejemplo:**
|
|
352
|
+
```tsx
|
|
353
|
+
import { CodeplexAreaTextoAjustable } from '@codeplex-sac/formularios';
|
|
354
|
+
|
|
355
|
+
export const Ejemplo = () => (
|
|
356
|
+
<CodeplexAreaTextoAjustable
|
|
357
|
+
etiqueta="Descripción"
|
|
358
|
+
filasMinimas={3}
|
|
359
|
+
filasMaximas={8}
|
|
360
|
+
anchoCompleto
|
|
361
|
+
/>
|
|
362
|
+
);
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**Props:**
|
|
366
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
367
|
+
| :--- | :--- | :--- | :--- |
|
|
368
|
+
| `etiqueta` | `string` | — | Label del campo. |
|
|
369
|
+
| `valor` | `string` | — | Valor controlado. |
|
|
370
|
+
| `alCambiar` | `ChangeEventHandler` | — | Evento al cambiar. |
|
|
371
|
+
| `filasMinimas` | `number` | `3` | Altura mínima en filas. |
|
|
372
|
+
| `filasMaximas` | `number` | — | Altura máxima antes de hacer scroll. |
|
|
373
|
+
| `marcador` | `string` | — | Texto placeholder. |
|
|
374
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la edición. |
|
|
375
|
+
| `anchoCompleto` | `boolean` | `false` | Ocupa el 100% del contenedor. |
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### CodeplexCargadorArchivos
|
|
380
|
+
|
|
381
|
+
Zona de carga de archivos con drag & drop, validación de tipo y tamaño, y lista de archivos cargados.
|
|
382
|
+
|
|
383
|
+
**Ejemplo:**
|
|
384
|
+
```tsx
|
|
385
|
+
import { CodeplexCargadorArchivos } from '@codeplex-sac/formularios';
|
|
386
|
+
|
|
387
|
+
export const Ejemplo = () => (
|
|
388
|
+
<CodeplexCargadorArchivos
|
|
389
|
+
tiposAceptados={['image/*', '.pdf']}
|
|
390
|
+
tamanoMaximoMb={5}
|
|
391
|
+
multiple
|
|
392
|
+
alCargar={(archivos) => console.log(archivos)}
|
|
393
|
+
/>
|
|
394
|
+
);
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Props:**
|
|
398
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
399
|
+
| :--- | :--- | :--- | :--- |
|
|
400
|
+
| `tiposAceptados` | `string[]` | — | MIME types o extensiones permitidas. |
|
|
401
|
+
| `tamanoMaximoMb` | `number` | — | Tamaño máximo por archivo en MB. |
|
|
402
|
+
| `multiple` | `boolean` | `false` | Permite cargar múltiples archivos. |
|
|
403
|
+
| `variante` | `'zona' \| 'compacto' \| 'boton'` | `'zona'` | Presentación del componente. |
|
|
404
|
+
| `alCargar` | `(archivos: File[]) => void` | — | Callback con los archivos validados. |
|
|
405
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la zona de carga. |
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
### CodeplexSelectorColor
|
|
410
|
+
|
|
411
|
+
Selector de color con paleta de swatches, input hex y selector nativo del navegador.
|
|
412
|
+
|
|
413
|
+
**Ejemplo:**
|
|
414
|
+
```tsx
|
|
415
|
+
import { CodeplexSelectorColor } from '@codeplex-sac/formularios';
|
|
416
|
+
|
|
417
|
+
export const Ejemplo = () => (
|
|
418
|
+
<CodeplexSelectorColor
|
|
419
|
+
valor="#3B82F6"
|
|
420
|
+
alCambiar={(color) => console.log(color)}
|
|
421
|
+
/>
|
|
422
|
+
);
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Props:**
|
|
426
|
+
| Propiedad | Tipo | Por defecto | Descripción |
|
|
427
|
+
| :--- | :--- | :--- | :--- |
|
|
428
|
+
| `valor` | `string` | `'#000000'` | Color en formato hex. |
|
|
429
|
+
| `alCambiar` | `(color: string) => void` | — | Callback con el nuevo color. |
|
|
430
|
+
| `paleta` | `string[]` | — | Swatches predefinidos. |
|
|
431
|
+
| `variante` | `'emergente' \| 'fija'` | `'emergente'` | Muestra el panel inline o en popup. |
|
|
432
|
+
| `deshabilitado` | `boolean` | `false` | Deshabilita la selección. |
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Personalización
|
|
437
|
+
|
|
438
|
+
Todos los componentes heredan la configuración de `CodeplexProveedorTema`. Los colores, radios y sombras se toman del tema activo.
|
|
439
|
+
|
|
440
|
+
## Licencia
|
|
441
|
+
|
|
442
|
+
Propiedad privada de **Codeplex SAC**. Todos los derechos reservados.
|