@sistemas-ucol-mx/ucol-dynamic 1.0.0 → 1.0.1

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,445 +1,451 @@
1
- # ucol-dynamic
2
-
3
- <div align="center">
4
-
5
- ![Version](https://img.shields.io/badge/version-0.1.23-blue.svg)
6
- ![React](https://img.shields.io/badge/react-19.0.0-61dafb.svg)
7
- ![TypeScript](https://img.shields.io/badge/typescript-5.7.3-blue.svg)
8
- ![Ant Design](https://img.shields.io/badge/antd-5.24.0-1890ff.svg)
9
- ![TailwindCSS](https://img.shields.io/badge/tailwindcss-4.1.11-38bdf8.svg)
10
-
11
- **Una librería completa de componentes React para crear interfaces de usuario modernas y dinámicas**
12
-
13
- [Demo en vivo](https://ucol-dynamic.netlify.app/) | [Documentación](https://github.com/8Wada/ucol-dynamic) | [Reportar un error](https://github.com/8Wada/ucol-dynamic/issues)
14
-
15
- </div>
16
-
17
- ---
18
-
19
- ## 📋 Tabla de Contenidos
20
-
21
- - [Características](#-características)
22
- - [Instalación](#-instalación)
23
- - [Componentes Principales](#-componentes-principales)
24
- - [Guía de Inicio Rápido](#-guía-de-inicio-rápido)
25
- - [Documentación de Componentes](#-documentación-de-componentes)
26
- - [Hooks Personalizados](#-hooks-personalizados)
27
- - [API y Configuración](#-api-y-configuración)
28
- - [Desarrollo](#-desarrollo)
29
- - [Scripts Disponibles](#-scripts-disponibles)
30
- - [Tecnologías](#-tecnologías)
31
- - [Contribuir](#-contribuir)
32
- - [Licencia](#-licencia)
33
-
34
- ## ✨ Características
35
-
36
- - 🎨 **Componentes Dinámicos**: Formularios, tablas y CRUD completamente configurables
37
- - 🔐 **Sistema de Permisos**: Control granular de acceso basado en roles
38
- - 📊 **Exportación de Datos**: Soporte para Excel y PDF
39
- - 📤 **Carga Masiva**: Importación de datos mediante archivos Excel/CSV
40
- - 🎯 **TypeScript First**: Totalmente tipado para mejor experiencia de desarrollo
41
- - 🚀 **React Query**: Gestión de estado del servidor integrada
42
- - 💅 **Estilos Modernos**: Combinación de Ant Design y Tailwind CSS
43
- - 📱 **Responsive**: Diseño adaptable a todos los dispositivos
44
- - 🎭 **Storybook**: Documentación interactiva de componentes
45
- - ⚡ **Optimizado**: Bundle optimizado con Vite
46
-
47
- ## 📦 Instalación
48
-
49
- ### Usando npm
50
-
51
- ```bash
52
- npm install @sistemas-ucol-mx/ucol-dynamic
53
- ```
54
-
55
- ### Usando pnpm
56
-
57
- ```bash
58
- pnpm install @sistemas-ucol-mx/ucol-dynamic
59
- ```
60
-
61
- o
62
-
63
- ```bash
64
- pnpm add @sistemas-ucol-mx/ucol-dynamic
65
- ```
66
-
67
- ### Usando yarn
68
-
69
- ```bash
70
- yarn add @sistemas-ucol-mx/ucol-dynamic
71
- ```
72
-
73
- ## 📚 Peer Dependencies
74
-
75
- La librería requiere las siguientes dependencias instaladas en tu proyecto:
76
-
77
- ```json
78
- {
79
- "antd": "^5.24.0",
80
- "axios": "^1.7.9",
81
- "dayjs": "^1.11.13",
82
- "react": "19.0.0",
83
- "react-dom": "19.0.0"
84
- }
85
- ```
86
-
87
- ### Instalación de Peer Dependencies
88
-
89
- ```bash
90
- npm install antd axios dayjs react react-dom
91
- ```
92
-
93
- ### Importar estilos
94
-
95
- No olvides importar los estilos CSS en tu aplicación:
96
-
97
- ```tsx
98
- import '@sistemas-ucol-mx/ucol-dynamic/dist/style.css';
99
- ```
100
-
101
- ## 🧩 Componentes Principales
102
-
103
- ### 🎯 DynamicCrud
104
-
105
- Componente completo CRUD con tabla, formulario modal y acciones personalizables.
106
-
107
- ```tsx
108
- import { DynamicCrud } from '@sistemas-ucol-mx/ucol-dynamic';
109
-
110
- <DynamicCrud
111
- title="Gestión de Usuarios"
112
- description="Administra los usuarios del sistema"
113
- columns={[
114
- { title: 'Nombre', dataIndex: 'name', key: 'name' },
115
- { title: 'Email', dataIndex: 'email', key: 'email' },
116
- ]}
117
- fields={[
118
- { name: 'name', label: 'Nombre', type: 'text', required: true },
119
- { name: 'email', label: 'Email', type: 'email', required: true },
120
- ]}
121
- data={users}
122
- onCreate={handleCreate}
123
- onEdit={handleEdit}
124
- onDelete={handleDelete}
125
- />
126
- ```
127
-
128
- ### 📝 DynamicForm
129
-
130
- Formulario dinámico generado a partir de configuración JSON.
131
-
132
- ```tsx
133
- import { DynamicForm } from '@sistemas-ucol-mx/ucol-dynamic';
134
-
135
- <DynamicForm
136
- mode="create"
137
- title="Nuevo Usuario"
138
- layout="vertical"
139
- cols={2}
140
- fields={[
141
- { name: 'name', label: 'Nombre', type: 'text', required: true },
142
- { name: 'email', label: 'Email', type: 'email', required: true },
143
- { name: 'age', label: 'Edad', type: 'number' },
144
- { name: 'active', label: 'Activo', type: 'switch' },
145
- ]}
146
- onSubmit={handleSubmit}
147
- />
148
- ```
149
-
150
- ### 📊 DynamicTable
151
-
152
- Tabla configurable con búsqueda, filtros, paginación y exportación.
153
-
154
- ```tsx
155
- import { DynamicTable } from '@sistemas-ucol-mx/ucol-dynamic';
156
-
157
- <DynamicTable
158
- title="Lista de Productos"
159
- columns={columns}
160
- data={products}
161
- loading={isLoading}
162
- showCreateButton
163
- onCreate={handleCreate}
164
- onEdit={handleEdit}
165
- onDelete={handleDelete}
166
- exportToExcel={{
167
- fileName: 'productos',
168
- sheetName: 'Productos',
169
- data: products,
170
- columns: columns
171
- }}
172
- searchConfig={{
173
- searchableFields: ['name', 'category', 'price']
174
- }}
175
- />
176
- ```
177
-
178
- ### 🔘 Btn (Button)
179
-
180
- Botón versátil con presets, variantes de color e iconos.
181
-
182
- ```tsx
183
- import { Btn } from '@sistemas-ucol-mx/ucol-dynamic';
184
-
185
- // Botón con preset
186
- <Btn preset="save" variant="success">Guardar</Btn>
187
- <Btn preset="delete" variant="danger">Eliminar</Btn>
188
- <Btn preset="edit" variant="info">Editar</Btn>
189
-
190
- // Botón personalizado
191
- <Btn
192
- icon={<CustomIcon />}
193
- variant="warning"
194
- size="large"
195
- >
196
- Acción Personalizada
197
- </Btn>
198
-
199
- // Solo icono
200
- <Btn preset="add" iconOnly />
201
- ```
202
-
203
- ### 🔐 PermissionsProvider
204
-
205
- Sistema de gestión de permisos basado en roles.
206
-
207
- ```tsx
208
- import { PermissionsProvider, usePermissions } from '@sistemas-ucol-mx/ucol-dynamic';
209
-
210
- // Configurar permisos
211
- const permissionsConfig = {
212
- users: {
213
- admin: ['create', 'read', 'update', 'delete'],
214
- user: ['read'],
215
- }
216
- };
217
-
218
- // Envolver tu aplicación
219
- <PermissionsProvider role="admin" config={permissionsConfig}>
220
- <App />
221
- </PermissionsProvider>
222
-
223
- // Usar en componentes
224
- function UserActions() {
225
- const { canCreate, canDelete } = usePermissions('users');
226
-
227
- return (
228
- <>
229
- {canCreate && <Btn preset="add">Crear</Btn>}
230
- {canDelete && <Btn preset="delete">Eliminar</Btn>}
231
- </>
232
- );
233
- }
234
- ```
235
-
236
- ### 📤 BulkUploadModal
237
-
238
- Modal para carga masiva de datos con validación.
239
-
240
- ```tsx
241
- import { BulkUploadModal } from '@sistemas-ucol-mx/ucol-dynamic';
242
-
243
- <BulkUploadModal
244
- title="Importar Usuarios"
245
- visible={showModal}
246
- config={{
247
- allowedFormats: ['xlsx', 'csv'],
248
- maxFileSize: 5,
249
- templateFields: [
250
- { name: 'name', label: 'Nombre', required: true },
251
- { name: 'email', label: 'Email', required: true },
252
- ]
253
- }}
254
- onValidateData={validateUsers}
255
- onFinish={importUsers}
256
- onCancel={() => setShowModal(false)}
257
- />
258
- ```
259
-
260
- ### 🔍 SharedField
261
-
262
- Campo de formulario compartido con validación y tipos múltiples.
263
-
264
- ```tsx
265
- import { SharedField } from '@sistemas-ucol-mx/ucol-dynamic';
266
-
267
- <SharedField
268
- name="username"
269
- label="Usuario"
270
- type="text"
271
- required={true}
272
- placeholder="Ingresa tu usuario"
273
- validations={{
274
- minLength: 3,
275
- maxLength: 20,
276
- pattern: /^[a-zA-Z0-9]+$/
277
- }}
278
- />
279
- ```
280
-
281
- ## 🎣 Hooks Personalizados
282
-
283
- ### useCrudOperations
284
-
285
- Hook para operaciones CRUD con React Query integrado.
286
-
287
- ```tsx
288
- import { useCrudOperations } from '@sistemas-ucol-mx/ucol-dynamic';
289
-
290
- function UserManagement() {
291
- const {
292
- data: users,
293
- isLoading,
294
- createItemAsync,
295
- updateItemAsync,
296
- deleteItemAsync,
297
- refetch
298
- } = useCrudOperations({
299
- getAll: () => api.getUsers(),
300
- create: (user) => api.createUser(user),
301
- update: (user) => api.updateUser(user),
302
- delete: (user) => api.deleteUser(user.id),
303
- idField: 'id',
304
- entityName: 'usuario'
305
- });
306
-
307
- const handleCreate = async (values) => {
308
- await createItemAsync(values);
309
- };
310
-
311
- return <DynamicTable data={users} loading={isLoading} />;
312
- }
313
- ```
314
-
315
- ### useFetchQuery
316
-
317
- Hook wrapper de React Query con configuración predeterminada.
318
-
319
- ```tsx
320
- import { useFetchQuery } from '@sistemas-ucol-mx/ucol-dynamic';
321
-
322
- const { data, isLoading, error } = useFetchQuery({
323
- queryKey: ['users'],
324
- queryFn: fetchUsers,
325
- config: {
326
- onSuccess: (data) => console.log('Datos cargados:', data),
327
- onError: (error) => console.error('Error:', error)
328
- }
329
- });
330
- ```
331
-
332
- ### useNotification
333
-
334
- Hook para mostrar notificaciones del sistema.
335
-
336
- ```tsx
337
- import { openNotification } from '@sistemas-ucol-mx/ucol-dynamic';
338
-
339
- openNotification('success', 'Operación exitosa', 'Los datos se guardaron correctamente');
340
- openNotification('error', 'Error', 'No se pudo completar la operación');
341
- openNotification('warning', 'Advertencia', 'Revisa los datos ingresados');
342
- openNotification('info', 'Información', 'Proceso en curso');
343
- ```
344
-
345
- ### useAsync
346
-
347
- Hook para manejar operaciones asíncronas.
348
-
349
- ```tsx
350
- import { useAsync } from '@sistemas-ucol-mx/ucol-dynamic';
351
-
352
- function DataDisplay() {
353
- const { data, loading, error } = useAsync(
354
- async () => await fetchData(),
355
- [dependency]
356
- );
357
-
358
- if (loading) return <Spin />;
359
- if (error) return <Alert type="error" message={error.message} />;
360
-
361
- return <div>{JSON.stringify(data)}</div>;
362
- }
363
- ```
364
-
365
- ## ⚙️ API y Configuración
366
-
367
- ### Configuración de API en DynamicForm
368
-
369
- ```tsx
370
- <DynamicForm
371
- apiConfig={{
372
- url: 'https://api.example.com/users',
373
- method: 'POST',
374
- headers: {
375
- 'Authorization': 'Bearer token',
376
- 'Content-Type': 'application/json'
377
- },
378
- responseDataPath: 'data.user'
379
- }}
380
- />
381
- ```
382
-
383
- ### Tipos de Campos de Formulario
384
-
385
- - `text` - Campo de texto
386
- - `textarea` - Área de texto
387
- - `number` - Número
388
- - `email` - Email
389
- - `password` - Contraseña
390
- - `select` - Lista desplegable
391
- - `multiselect` - Selección múltiple
392
- - `checkbox` - Casilla de verificación
393
- - `radio` - Botones de radio
394
- - `switch` - Interruptor
395
- - `date` - Selector de fecha
396
- - `daterange` - Rango de fechas
397
- - `time` - Selector de hora
398
- - `upload` - Carga de archivos
399
- - `slider` - Deslizador
400
- - `color` - Selector de color
401
-
402
- ### Validaciones
403
-
404
- ```tsx
405
- {
406
- required: true,
407
- minLength: 5,
408
- maxLength: 50,
409
- min: 0,
410
- max: 100,
411
- pattern: /^[A-Z]/,
412
- email: true,
413
- url: true,
414
- customValidator: (value) => value !== 'admin' || 'No se permite este valor'
415
- }
416
- ```
417
-
418
- ## 🚀 Tecnologías
419
-
420
- - **React 19** - Librería de UI
421
- - **TypeScript 5.7** - Tipado estático
422
- - **Vite 6** - Build tool y dev server
423
- - **Ant Design 5** - Framework de componentes UI
424
- - **Tailwind CSS 4** - Framework de utilidades CSS
425
- - **TanStack Query (React Query)** - Gestión de estado del servidor
426
- - **Storybook 8** - Desarrollo y documentación de componentes
427
- - **React Icons** - Iconos
428
- - **Axios** - Cliente HTTP
429
- - **Day.js** - Manejo de fechas
430
- - **jsPDF & jsPDF-AutoTable** - Generación de PDFs
431
- - **XLSX** - Manejo de archivos Excel
432
- - **AJV** - Validación de esquemas JSON
433
-
434
- ## 👥 Autores
435
-
436
- - **@RKamey** - *Colaborador*
437
- - **@8Wada** - *Colaborador*
438
-
439
- ---
440
-
441
- <div align="center">
442
-
443
- **Hecho con ❤️ por el equipo de Innovardix**
444
-
445
- </div>
1
+ # ucol-dynamic
2
+
3
+ <div align="center">
4
+
5
+ ![Version](https://img.shields.io/badge/version-0.1.23-blue.svg)
6
+ ![React](https://img.shields.io/badge/react-19.0.0-61dafb.svg)
7
+ ![TypeScript](https://img.shields.io/badge/typescript-5.7.3-blue.svg)
8
+ ![Ant Design](https://img.shields.io/badge/antd-5.24.0-1890ff.svg)
9
+ ![TailwindCSS](https://img.shields.io/badge/tailwindcss-4.1.11-38bdf8.svg)
10
+
11
+ **Una librería completa de componentes React para crear interfaces de usuario modernas y dinámicas**
12
+
13
+ [Demo en vivo](https://ucol-dynamic.netlify.app/) | [Documentación](https://github.com/8Wada/ucol-dynamic) | [Reportar un error](https://github.com/8Wada/ucol-dynamic/issues)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## 📋 Tabla de Contenidos
20
+
21
+ - [Características](#-características)
22
+ - [Instalación](#-instalación)
23
+ - [Componentes Principales](#-componentes-principales)
24
+ - [Guía de Inicio Rápido](#-guía-de-inicio-rápido)
25
+ - [Documentación de Componentes](#-documentación-de-componentes)
26
+ - [Hooks Personalizados](#-hooks-personalizados)
27
+ - [API y Configuración](#-api-y-configuración)
28
+ - [Desarrollo](#-desarrollo)
29
+ - [Scripts Disponibles](#-scripts-disponibles)
30
+ - [Tecnologías](#-tecnologías)
31
+ - [Contribuir](#-contribuir)
32
+ - [Licencia](#-licencia)
33
+
34
+ ## ✨ Características
35
+
36
+ - 🎨 **Componentes Dinámicos**: Formularios, tablas y CRUD completamente configurables
37
+ - 🔐 **Sistema de Permisos**: Control granular de acceso basado en roles
38
+ - 📊 **Exportación de Datos**: Soporte para Excel y PDF
39
+ - 📤 **Carga Masiva**: Importación de datos mediante archivos Excel/CSV
40
+ - 🎯 **TypeScript First**: Totalmente tipado para mejor experiencia de desarrollo
41
+ - 🚀 **React Query**: Gestión de estado del servidor integrada
42
+ - 💅 **Estilos Modernos**: Combinación de Ant Design y Tailwind CSS
43
+ - 📱 **Responsive**: Diseño adaptable a todos los dispositivos
44
+ - 🎭 **Storybook**: Documentación interactiva de componentes
45
+ - ⚡ **Optimizado**: Bundle optimizado con Vite
46
+
47
+ ## 📦 Instalación
48
+
49
+ ### Usando npm
50
+
51
+ ```bash
52
+ npm install @sistemas-ucol-mx/ucol-dynamic
53
+ ```
54
+
55
+ ### Usando bun
56
+
57
+ ```bash
58
+ bun add @sistemas-ucol-mx/ucol-dynamic
59
+
60
+ ### Usando pnpm
61
+
62
+ ```bash
63
+ pnpm install @sistemas-ucol-mx/ucol-dynamic
64
+ ```
65
+
66
+
67
+ o
68
+
69
+ ```bash
70
+ pnpm add @sistemas-ucol-mx/ucol-dynamic
71
+ ```
72
+
73
+ ### Usando yarn
74
+
75
+ ```bash
76
+ yarn add @sistemas-ucol-mx/ucol-dynamic
77
+ ```
78
+
79
+ ## 📚 Peer Dependencies
80
+
81
+ La librería requiere las siguientes dependencias instaladas en tu proyecto:
82
+
83
+ ```json
84
+ {
85
+ "antd": "^5.24.0",
86
+ "axios": "^1.7.9",
87
+ "dayjs": "^1.11.13",
88
+ "react": "19.0.0",
89
+ "react-dom": "19.0.0"
90
+ }
91
+ ```
92
+
93
+ ### Instalación de Peer Dependencies
94
+
95
+ ```bash
96
+ npm install antd axios dayjs react react-dom
97
+ ```
98
+
99
+ ### Importar estilos
100
+
101
+ No olvides importar los estilos CSS en tu aplicación:
102
+
103
+ ```tsx
104
+ import '@sistemas-ucol-mx/ucol-dynamic/dist/style.css';
105
+ ```
106
+
107
+ ## 🧩 Componentes Principales
108
+
109
+ ### 🎯 DynamicCrud
110
+
111
+ Componente completo CRUD con tabla, formulario modal y acciones personalizables.
112
+
113
+ ```tsx
114
+ import { DynamicCrud } from '@sistemas-ucol-mx/ucol-dynamic';
115
+
116
+ <DynamicCrud
117
+ title="Gestión de Usuarios"
118
+ description="Administra los usuarios del sistema"
119
+ columns={[
120
+ { title: 'Nombre', dataIndex: 'name', key: 'name' },
121
+ { title: 'Email', dataIndex: 'email', key: 'email' },
122
+ ]}
123
+ fields={[
124
+ { name: 'name', label: 'Nombre', type: 'text', required: true },
125
+ { name: 'email', label: 'Email', type: 'email', required: true },
126
+ ]}
127
+ data={users}
128
+ onCreate={handleCreate}
129
+ onEdit={handleEdit}
130
+ onDelete={handleDelete}
131
+ />
132
+ ```
133
+
134
+ ### 📝 DynamicForm
135
+
136
+ Formulario dinámico generado a partir de configuración JSON.
137
+
138
+ ```tsx
139
+ import { DynamicForm } from '@sistemas-ucol-mx/ucol-dynamic';
140
+
141
+ <DynamicForm
142
+ mode="create"
143
+ title="Nuevo Usuario"
144
+ layout="vertical"
145
+ cols={2}
146
+ fields={[
147
+ { name: 'name', label: 'Nombre', type: 'text', required: true },
148
+ { name: 'email', label: 'Email', type: 'email', required: true },
149
+ { name: 'age', label: 'Edad', type: 'number' },
150
+ { name: 'active', label: 'Activo', type: 'switch' },
151
+ ]}
152
+ onSubmit={handleSubmit}
153
+ />
154
+ ```
155
+
156
+ ### 📊 DynamicTable
157
+
158
+ Tabla configurable con búsqueda, filtros, paginación y exportación.
159
+
160
+ ```tsx
161
+ import { DynamicTable } from '@sistemas-ucol-mx/ucol-dynamic';
162
+
163
+ <DynamicTable
164
+ title="Lista de Productos"
165
+ columns={columns}
166
+ data={products}
167
+ loading={isLoading}
168
+ showCreateButton
169
+ onCreate={handleCreate}
170
+ onEdit={handleEdit}
171
+ onDelete={handleDelete}
172
+ exportToExcel={{
173
+ fileName: 'productos',
174
+ sheetName: 'Productos',
175
+ data: products,
176
+ columns: columns
177
+ }}
178
+ searchConfig={{
179
+ searchableFields: ['name', 'category', 'price']
180
+ }}
181
+ />
182
+ ```
183
+
184
+ ### 🔘 Btn (Button)
185
+
186
+ Botón versátil con presets, variantes de color e iconos.
187
+
188
+ ```tsx
189
+ import { Btn } from '@sistemas-ucol-mx/ucol-dynamic';
190
+
191
+ // Botón con preset
192
+ <Btn preset="save" variant="success">Guardar</Btn>
193
+ <Btn preset="delete" variant="danger">Eliminar</Btn>
194
+ <Btn preset="edit" variant="info">Editar</Btn>
195
+
196
+ // Botón personalizado
197
+ <Btn
198
+ icon={<CustomIcon />}
199
+ variant="warning"
200
+ size="large"
201
+ >
202
+ Acción Personalizada
203
+ </Btn>
204
+
205
+ // Solo icono
206
+ <Btn preset="add" iconOnly />
207
+ ```
208
+
209
+ ### 🔐 PermissionsProvider
210
+
211
+ Sistema de gestión de permisos basado en roles.
212
+
213
+ ```tsx
214
+ import { PermissionsProvider, usePermissions } from '@sistemas-ucol-mx/ucol-dynamic';
215
+
216
+ // Configurar permisos
217
+ const permissionsConfig = {
218
+ users: {
219
+ admin: ['create', 'read', 'update', 'delete'],
220
+ user: ['read'],
221
+ }
222
+ };
223
+
224
+ // Envolver tu aplicación
225
+ <PermissionsProvider role="admin" config={permissionsConfig}>
226
+ <App />
227
+ </PermissionsProvider>
228
+
229
+ // Usar en componentes
230
+ function UserActions() {
231
+ const { canCreate, canDelete } = usePermissions('users');
232
+
233
+ return (
234
+ <>
235
+ {canCreate && <Btn preset="add">Crear</Btn>}
236
+ {canDelete && <Btn preset="delete">Eliminar</Btn>}
237
+ </>
238
+ );
239
+ }
240
+ ```
241
+
242
+ ### 📤 BulkUploadModal
243
+
244
+ Modal para carga masiva de datos con validación.
245
+
246
+ ```tsx
247
+ import { BulkUploadModal } from '@sistemas-ucol-mx/ucol-dynamic';
248
+
249
+ <BulkUploadModal
250
+ title="Importar Usuarios"
251
+ visible={showModal}
252
+ config={{
253
+ allowedFormats: ['xlsx', 'csv'],
254
+ maxFileSize: 5,
255
+ templateFields: [
256
+ { name: 'name', label: 'Nombre', required: true },
257
+ { name: 'email', label: 'Email', required: true },
258
+ ]
259
+ }}
260
+ onValidateData={validateUsers}
261
+ onFinish={importUsers}
262
+ onCancel={() => setShowModal(false)}
263
+ />
264
+ ```
265
+
266
+ ### 🔍 SharedField
267
+
268
+ Campo de formulario compartido con validación y tipos múltiples.
269
+
270
+ ```tsx
271
+ import { SharedField } from '@sistemas-ucol-mx/ucol-dynamic';
272
+
273
+ <SharedField
274
+ name="username"
275
+ label="Usuario"
276
+ type="text"
277
+ required={true}
278
+ placeholder="Ingresa tu usuario"
279
+ validations={{
280
+ minLength: 3,
281
+ maxLength: 20,
282
+ pattern: /^[a-zA-Z0-9]+$/
283
+ }}
284
+ />
285
+ ```
286
+
287
+ ## 🎣 Hooks Personalizados
288
+
289
+ ### useCrudOperations
290
+
291
+ Hook para operaciones CRUD con React Query integrado.
292
+
293
+ ```tsx
294
+ import { useCrudOperations } from '@sistemas-ucol-mx/ucol-dynamic';
295
+
296
+ function UserManagement() {
297
+ const {
298
+ data: users,
299
+ isLoading,
300
+ createItemAsync,
301
+ updateItemAsync,
302
+ deleteItemAsync,
303
+ refetch
304
+ } = useCrudOperations({
305
+ getAll: () => api.getUsers(),
306
+ create: (user) => api.createUser(user),
307
+ update: (user) => api.updateUser(user),
308
+ delete: (user) => api.deleteUser(user.id),
309
+ idField: 'id',
310
+ entityName: 'usuario'
311
+ });
312
+
313
+ const handleCreate = async (values) => {
314
+ await createItemAsync(values);
315
+ };
316
+
317
+ return <DynamicTable data={users} loading={isLoading} />;
318
+ }
319
+ ```
320
+
321
+ ### useFetchQuery
322
+
323
+ Hook wrapper de React Query con configuración predeterminada.
324
+
325
+ ```tsx
326
+ import { useFetchQuery } from '@sistemas-ucol-mx/ucol-dynamic';
327
+
328
+ const { data, isLoading, error } = useFetchQuery({
329
+ queryKey: ['users'],
330
+ queryFn: fetchUsers,
331
+ config: {
332
+ onSuccess: (data) => console.log('Datos cargados:', data),
333
+ onError: (error) => console.error('Error:', error)
334
+ }
335
+ });
336
+ ```
337
+
338
+ ### useNotification
339
+
340
+ Hook para mostrar notificaciones del sistema.
341
+
342
+ ```tsx
343
+ import { openNotification } from '@sistemas-ucol-mx/ucol-dynamic';
344
+
345
+ openNotification('success', 'Operación exitosa', 'Los datos se guardaron correctamente');
346
+ openNotification('error', 'Error', 'No se pudo completar la operación');
347
+ openNotification('warning', 'Advertencia', 'Revisa los datos ingresados');
348
+ openNotification('info', 'Información', 'Proceso en curso');
349
+ ```
350
+
351
+ ### useAsync
352
+
353
+ Hook para manejar operaciones asíncronas.
354
+
355
+ ```tsx
356
+ import { useAsync } from '@sistemas-ucol-mx/ucol-dynamic';
357
+
358
+ function DataDisplay() {
359
+ const { data, loading, error } = useAsync(
360
+ async () => await fetchData(),
361
+ [dependency]
362
+ );
363
+
364
+ if (loading) return <Spin />;
365
+ if (error) return <Alert type="error" message={error.message} />;
366
+
367
+ return <div>{JSON.stringify(data)}</div>;
368
+ }
369
+ ```
370
+
371
+ ## ⚙️ API y Configuración
372
+
373
+ ### Configuración de API en DynamicForm
374
+
375
+ ```tsx
376
+ <DynamicForm
377
+ apiConfig={{
378
+ url: 'https://api.example.com/users',
379
+ method: 'POST',
380
+ headers: {
381
+ 'Authorization': 'Bearer token',
382
+ 'Content-Type': 'application/json'
383
+ },
384
+ responseDataPath: 'data.user'
385
+ }}
386
+ />
387
+ ```
388
+
389
+ ### Tipos de Campos de Formulario
390
+
391
+ - `text` - Campo de texto
392
+ - `textarea` - Área de texto
393
+ - `number` - Número
394
+ - `email` - Email
395
+ - `password` - Contraseña
396
+ - `select` - Lista desplegable
397
+ - `multiselect` - Selección múltiple
398
+ - `checkbox` - Casilla de verificación
399
+ - `radio` - Botones de radio
400
+ - `switch` - Interruptor
401
+ - `date` - Selector de fecha
402
+ - `daterange` - Rango de fechas
403
+ - `time` - Selector de hora
404
+ - `upload` - Carga de archivos
405
+ - `slider` - Deslizador
406
+ - `color` - Selector de color
407
+
408
+ ### Validaciones
409
+
410
+ ```tsx
411
+ {
412
+ required: true,
413
+ minLength: 5,
414
+ maxLength: 50,
415
+ min: 0,
416
+ max: 100,
417
+ pattern: /^[A-Z]/,
418
+ email: true,
419
+ url: true,
420
+ customValidator: (value) => value !== 'admin' || 'No se permite este valor'
421
+ }
422
+ ```
423
+
424
+ ## 🚀 Tecnologías
425
+
426
+ - **React 19** - Librería de UI
427
+ - **TypeScript 5.7** - Tipado estático
428
+ - **Vite 6** - Build tool y dev server
429
+ - **Ant Design 5** - Framework de componentes UI
430
+ - **Tailwind CSS 4** - Framework de utilidades CSS
431
+ - **TanStack Query (React Query)** - Gestión de estado del servidor
432
+ - **Storybook 8** - Desarrollo y documentación de componentes
433
+ - **React Icons** - Iconos
434
+ - **Axios** - Cliente HTTP
435
+ - **Day.js** - Manejo de fechas
436
+ - **jsPDF & jsPDF-AutoTable** - Generación de PDFs
437
+ - **XLSX** - Manejo de archivos Excel
438
+ - **AJV** - Validación de esquemas JSON
439
+
440
+ ## 👥 Autores
441
+
442
+ - **@RKamey** - *Colaborador*
443
+ - **@8Wada** - *Colaborador*
444
+
445
+ ---
446
+
447
+ <div align="center">
448
+
449
+ **Hecho con ❤️ por el equipo de Innovardix**
450
+
451
+ </div>