@innovardix-com-mx/capi-ui 0.1.0

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 +498 -0
  2. package/package.json +112 -0
package/README.md ADDED
@@ -0,0 +1,498 @@
1
+ # capi-ui
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://capi-ui.netlify.app/) | [Documentación](https://github.com/8Wada/capi-ui) | [Reportar un error](https://github.com/8Wada/capi-ui/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 capi-ui
53
+ ```
54
+
55
+ ### Usando pnpm
56
+
57
+ ```bash
58
+ pnpm install capi-ui
59
+ ```
60
+
61
+ ### Usando yarn
62
+
63
+ ```bash
64
+ yarn add capi-ui
65
+ ```
66
+
67
+ ## 📚 Peer Dependencies
68
+
69
+ La librería requiere las siguientes dependencias instaladas en tu proyecto:
70
+
71
+ ```json
72
+ {
73
+ "antd": "^5.24.0",
74
+ "axios": "^1.7.9",
75
+ "dayjs": "^1.11.13",
76
+ "react": "19.0.0",
77
+ "react-dom": "19.0.0"
78
+ }
79
+ ```
80
+
81
+ ### Instalación de Peer Dependencies
82
+
83
+ ```bash
84
+ npm install antd axios dayjs react react-dom
85
+ ```
86
+
87
+ ### Importar estilos
88
+
89
+ No olvides importar los estilos CSS en tu aplicación:
90
+
91
+ ```tsx
92
+ import 'capi-ui/dist/style.css';
93
+ ```
94
+
95
+ ## 🧩 Componentes Principales
96
+
97
+ ### 🎯 DynamicCrud
98
+
99
+ Componente completo CRUD con tabla, formulario modal y acciones personalizables.
100
+
101
+ ```tsx
102
+ import { DynamicCrud } from 'capi-ui';
103
+
104
+ <DynamicCrud
105
+ title="Gestión de Usuarios"
106
+ description="Administra los usuarios del sistema"
107
+ columns={[
108
+ { title: 'Nombre', dataIndex: 'name', key: 'name' },
109
+ { title: 'Email', dataIndex: 'email', key: 'email' },
110
+ ]}
111
+ fields={[
112
+ { name: 'name', label: 'Nombre', type: 'text', required: true },
113
+ { name: 'email', label: 'Email', type: 'email', required: true },
114
+ ]}
115
+ data={users}
116
+ onCreate={handleCreate}
117
+ onEdit={handleEdit}
118
+ onDelete={handleDelete}
119
+ />
120
+ ```
121
+
122
+ ### 📝 DynamicForm
123
+
124
+ Formulario dinámico generado a partir de configuración JSON.
125
+
126
+ ```tsx
127
+ import { DynamicForm } from 'capi-ui';
128
+
129
+ <DynamicForm
130
+ mode="create"
131
+ title="Nuevo Usuario"
132
+ layout="vertical"
133
+ cols={2}
134
+ fields={[
135
+ { name: 'name', label: 'Nombre', type: 'text', required: true },
136
+ { name: 'email', label: 'Email', type: 'email', required: true },
137
+ { name: 'age', label: 'Edad', type: 'number' },
138
+ { name: 'active', label: 'Activo', type: 'switch' },
139
+ ]}
140
+ onSubmit={handleSubmit}
141
+ />
142
+ ```
143
+
144
+ ### 📊 DynamicTable
145
+
146
+ Tabla configurable con búsqueda, filtros, paginación y exportación.
147
+
148
+ ```tsx
149
+ import { DynamicTable } from 'capi-ui';
150
+
151
+ <DynamicTable
152
+ title="Lista de Productos"
153
+ columns={columns}
154
+ data={products}
155
+ loading={isLoading}
156
+ showCreateButton
157
+ onCreate={handleCreate}
158
+ onEdit={handleEdit}
159
+ onDelete={handleDelete}
160
+ exportToExcel={{
161
+ fileName: 'productos',
162
+ sheetName: 'Productos',
163
+ data: products,
164
+ columns: columns
165
+ }}
166
+ searchConfig={{
167
+ searchableFields: ['name', 'category', 'price']
168
+ }}
169
+ />
170
+ ```
171
+
172
+ ### 🔘 Btn (Button)
173
+
174
+ Botón versátil con presets, variantes de color e iconos.
175
+
176
+ ```tsx
177
+ import { Btn } from 'capi-ui';
178
+
179
+ // Botón con preset
180
+ <Btn preset="save" variant="success">Guardar</Btn>
181
+ <Btn preset="delete" variant="danger">Eliminar</Btn>
182
+ <Btn preset="edit" variant="info">Editar</Btn>
183
+
184
+ // Botón personalizado
185
+ <Btn
186
+ icon={<CustomIcon />}
187
+ variant="warning"
188
+ size="large"
189
+ >
190
+ Acción Personalizada
191
+ </Btn>
192
+
193
+ // Solo icono
194
+ <Btn preset="add" iconOnly />
195
+ ```
196
+
197
+ ### 🔐 PermissionsProvider
198
+
199
+ Sistema de gestión de permisos basado en roles.
200
+
201
+ ```tsx
202
+ import { PermissionsProvider, usePermissions } from 'capi-ui';
203
+
204
+ // Configurar permisos
205
+ const permissionsConfig = {
206
+ users: {
207
+ admin: ['create', 'read', 'update', 'delete'],
208
+ user: ['read'],
209
+ }
210
+ };
211
+
212
+ // Envolver tu aplicación
213
+ <PermissionsProvider role="admin" config={permissionsConfig}>
214
+ <App />
215
+ </PermissionsProvider>
216
+
217
+ // Usar en componentes
218
+ function UserActions() {
219
+ const { canCreate, canDelete } = usePermissions('users');
220
+
221
+ return (
222
+ <>
223
+ {canCreate && <Btn preset="add">Crear</Btn>}
224
+ {canDelete && <Btn preset="delete">Eliminar</Btn>}
225
+ </>
226
+ );
227
+ }
228
+ ```
229
+
230
+ ### 📤 BulkUploadModal
231
+
232
+ Modal para carga masiva de datos con validación.
233
+
234
+ ```tsx
235
+ import { BulkUploadModal } from 'capi-ui';
236
+
237
+ <BulkUploadModal
238
+ title="Importar Usuarios"
239
+ visible={showModal}
240
+ config={{
241
+ allowedFormats: ['xlsx', 'csv'],
242
+ maxFileSize: 5,
243
+ templateFields: [
244
+ { name: 'name', label: 'Nombre', required: true },
245
+ { name: 'email', label: 'Email', required: true },
246
+ ]
247
+ }}
248
+ onValidateData={validateUsers}
249
+ onFinish={importUsers}
250
+ onCancel={() => setShowModal(false)}
251
+ />
252
+ ```
253
+
254
+ ### 🔍 SharedField
255
+
256
+ Campo de formulario compartido con validación y tipos múltiples.
257
+
258
+ ```tsx
259
+ import { SharedField } from 'capi-ui';
260
+
261
+ <SharedField
262
+ name="username"
263
+ label="Usuario"
264
+ type="text"
265
+ required={true}
266
+ placeholder="Ingresa tu usuario"
267
+ validations={{
268
+ minLength: 3,
269
+ maxLength: 20,
270
+ pattern: /^[a-zA-Z0-9]+$/
271
+ }}
272
+ />
273
+ ```
274
+
275
+ ## 🎣 Hooks Personalizados
276
+
277
+ ### useCrudOperations
278
+
279
+ Hook para operaciones CRUD con React Query integrado.
280
+
281
+ ```tsx
282
+ import { useCrudOperations } from 'capi-ui';
283
+
284
+ function UserManagement() {
285
+ const {
286
+ data: users,
287
+ isLoading,
288
+ createItemAsync,
289
+ updateItemAsync,
290
+ deleteItemAsync,
291
+ refetch
292
+ } = useCrudOperations({
293
+ getAll: () => api.getUsers(),
294
+ create: (user) => api.createUser(user),
295
+ update: (user) => api.updateUser(user),
296
+ delete: (user) => api.deleteUser(user.id),
297
+ idField: 'id',
298
+ entityName: 'usuario'
299
+ });
300
+
301
+ const handleCreate = async (values) => {
302
+ await createItemAsync(values);
303
+ };
304
+
305
+ return <DynamicTable data={users} loading={isLoading} />;
306
+ }
307
+ ```
308
+
309
+ ### useFetchQuery
310
+
311
+ Hook wrapper de React Query con configuración predeterminada.
312
+
313
+ ```tsx
314
+ import { useFetchQuery } from 'capi-ui';
315
+
316
+ const { data, isLoading, error } = useFetchQuery({
317
+ queryKey: ['users'],
318
+ queryFn: fetchUsers,
319
+ config: {
320
+ onSuccess: (data) => console.log('Datos cargados:', data),
321
+ onError: (error) => console.error('Error:', error)
322
+ }
323
+ });
324
+ ```
325
+
326
+ ### useNotification
327
+
328
+ Hook para mostrar notificaciones del sistema.
329
+
330
+ ```tsx
331
+ import { openNotification } from 'capi-ui';
332
+
333
+ openNotification('success', 'Operación exitosa', 'Los datos se guardaron correctamente');
334
+ openNotification('error', 'Error', 'No se pudo completar la operación');
335
+ openNotification('warning', 'Advertencia', 'Revisa los datos ingresados');
336
+ openNotification('info', 'Información', 'Proceso en curso');
337
+ ```
338
+
339
+ ### useAsync
340
+
341
+ Hook para manejar operaciones asíncronas.
342
+
343
+ ```tsx
344
+ import { useAsync } from 'capi-ui';
345
+
346
+ function DataDisplay() {
347
+ const { data, loading, error } = useAsync(
348
+ async () => await fetchData(),
349
+ [dependency]
350
+ );
351
+
352
+ if (loading) return <Spin />;
353
+ if (error) return <Alert type="error" message={error.message} />;
354
+
355
+ return <div>{JSON.stringify(data)}</div>;
356
+ }
357
+ ```
358
+
359
+ ## ⚙️ API y Configuración
360
+
361
+ ### Configuración de API en DynamicForm
362
+
363
+ ```tsx
364
+ <DynamicForm
365
+ apiConfig={{
366
+ url: 'https://api.example.com/users',
367
+ method: 'POST',
368
+ headers: {
369
+ 'Authorization': 'Bearer token',
370
+ 'Content-Type': 'application/json'
371
+ },
372
+ responseDataPath: 'data.user'
373
+ }}
374
+ />
375
+ ```
376
+
377
+ ### Tipos de Campos de Formulario
378
+
379
+ - `text` - Campo de texto
380
+ - `textarea` - Área de texto
381
+ - `number` - Número
382
+ - `email` - Email
383
+ - `password` - Contraseña
384
+ - `select` - Lista desplegable
385
+ - `multiselect` - Selección múltiple
386
+ - `checkbox` - Casilla de verificación
387
+ - `radio` - Botones de radio
388
+ - `switch` - Interruptor
389
+ - `date` - Selector de fecha
390
+ - `daterange` - Rango de fechas
391
+ - `time` - Selector de hora
392
+ - `upload` - Carga de archivos
393
+ - `slider` - Deslizador
394
+ - `color` - Selector de color
395
+
396
+ ### Validaciones
397
+
398
+ ```tsx
399
+ {
400
+ required: true,
401
+ minLength: 5,
402
+ maxLength: 50,
403
+ min: 0,
404
+ max: 100,
405
+ pattern: /^[A-Z]/,
406
+ email: true,
407
+ url: true,
408
+ customValidator: (value) => value !== 'admin' || 'No se permite este valor'
409
+ }
410
+ ```
411
+
412
+ ## 🛠️ Desarrollo
413
+
414
+ ### Clonar el repositorio
415
+
416
+ ```bash
417
+ git clone https://github.com/8Wada/capi-ui.git
418
+ cd capi-ui
419
+ ```
420
+
421
+ ### Instalar dependencias
422
+
423
+ ```bash
424
+ pnpm install
425
+ ```
426
+
427
+ ### Iniciar el entorno de desarrollo
428
+
429
+ ```bash
430
+ pnpm dev
431
+ ```
432
+
433
+ ### Ejecutar Storybook
434
+
435
+ ```bash
436
+ pnpm storybook
437
+ ```
438
+
439
+ ## 📜 Scripts Disponibles
440
+
441
+ | Script | Descripción |
442
+ |--------|-------------|
443
+ | `pnpm dev` | Inicia el servidor de desarrollo con Vite |
444
+ | `pnpm build` | Construye la librería para producción |
445
+ | `pnpm lint` | Ejecuta ESLint para revisar el código |
446
+ | `pnpm preview` | Previsualiza la build de producción |
447
+ | `pnpm storybook` | Inicia Storybook en el puerto 6006 |
448
+ | `pnpm build-storybook` | Construye Storybook para producción |
449
+
450
+ ## 🚀 Tecnologías
451
+
452
+ - **React 19** - Librería de UI
453
+ - **TypeScript 5.7** - Tipado estático
454
+ - **Vite 6** - Build tool y dev server
455
+ - **Ant Design 5** - Framework de componentes UI
456
+ - **Tailwind CSS 4** - Framework de utilidades CSS
457
+ - **TanStack Query (React Query)** - Gestión de estado del servidor
458
+ - **Storybook 8** - Desarrollo y documentación de componentes
459
+ - **React Icons** - Iconos
460
+ - **Axios** - Cliente HTTP
461
+ - **Day.js** - Manejo de fechas
462
+ - **jsPDF & jsPDF-AutoTable** - Generación de PDFs
463
+ - **XLSX** - Manejo de archivos Excel
464
+ - **AJV** - Validación de esquemas JSON
465
+
466
+ ## 🤝 Contribuir
467
+
468
+ Las contribuciones son bienvenidas. Por favor:
469
+
470
+ 1. Fork el proyecto
471
+ 2. Crea tu rama de características (`git checkout -b feature/AmazingFeature`)
472
+ 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
473
+ 4. Push a la rama (`git push origin feature/AmazingFeature`)
474
+ 5. Abre un Pull Request
475
+
476
+ ## 📄 Licencia
477
+
478
+ Este proyecto está bajo la licencia que especifique el repositorio.
479
+
480
+ ## 👥 Autores
481
+
482
+ - **@RKamey** - *Colaborador*
483
+ - **@8Wada** - *Colaborador*
484
+
485
+ ## 🔗 Enlaces
486
+
487
+ - [Repositorio en GitHub](https://github.com/8Wada/capi-ui)
488
+ - [Demo en vivo](https://capi-ui.netlify.app/)
489
+ - [Reportar Issues](https://github.com/8Wada/capi-ui/issues)
490
+ - [NPM Package](https://www.npmjs.com/package/capi-ui)
491
+
492
+ ---
493
+
494
+ <div align="center">
495
+
496
+ **Hecho con ❤️ por el equipo de capi-ui**
497
+
498
+ </div>
package/package.json ADDED
@@ -0,0 +1,112 @@
1
+ {
2
+ "name": "@innovardix-com-mx/capi-ui",
3
+ "version": "0.1.0",
4
+ "description": "Biblioteca de componentes React con Ant Design y Tailwind CSS",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "./dist/capi-ui.umd.cjs",
10
+ "module": "./dist/capi-ui.js",
11
+ "types": "./dist/capi-ui.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/capi-ui.js",
15
+ "require": "./dist/capi-ui.umd.cjs",
16
+ "types": "./dist/capi-ui.d.ts"
17
+ },
18
+ "./style.css": "./dist/style.css"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/innovardix-com-mx/capi_ui.git"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/innovardix-com-mx/capi_ui/issues"
26
+ },
27
+ "homepage": "https://capi-ui.netlify.app/",
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "registry": "https://registry.npmjs.org/"
31
+ },
32
+ "keywords": [
33
+ "react",
34
+ "typescript",
35
+ "vite",
36
+ "tailwindcss",
37
+ "antd",
38
+ "components",
39
+ "ui-library"
40
+ ],
41
+ "author": "Innovardix",
42
+ "license": "MIT",
43
+ "scripts": {
44
+ "dev": "vite",
45
+ "build": "tsc -b && vite build",
46
+ "lint": "eslint .",
47
+ "preview": "vite preview",
48
+ "storybook": "storybook dev -p 6006",
49
+ "build-storybook": "storybook build"
50
+ },
51
+ "peerDependencies": {
52
+ "antd": "^5.24.0",
53
+ "axios": "^1.7.9",
54
+ "dayjs": "^1.11.13",
55
+ "react": "19.0.0",
56
+ "react-dom": "19.0.0"
57
+ },
58
+ "dependencies": {
59
+ "@ant-design/icons": "^6.1.0",
60
+ "@tailwindcss/vite": "^4.1.11",
61
+ "@tanstack/react-query": "^5.67.3",
62
+ "ajv": "^8.17.1",
63
+ "clsx": "^2.1.1",
64
+ "jspdf": "^2.5.2",
65
+ "jspdf-autotable": "^3.8.4",
66
+ "react-icons": "^5.4.0",
67
+ "xlsx": "^0.18.5"
68
+ },
69
+ "devDependencies": {
70
+ "@chromatic-com/storybook": "^3.2.6",
71
+ "@eslint/js": "^9.17.0",
72
+ "@storybook/addon-docs": "^8.6.14",
73
+ "@storybook/addon-essentials": "^8.6.14",
74
+ "@storybook/addon-interactions": "^8.6.14",
75
+ "@storybook/addon-onboarding": "^8.6.14",
76
+ "@storybook/addon-storysource": "^8.6.14",
77
+ "@storybook/addon-styling-webpack": "^1.0.1",
78
+ "@storybook/blocks": "^8.6.14",
79
+ "@storybook/react": "^8.6.14",
80
+ "@storybook/react-vite": "^8.6.14",
81
+ "@storybook/test": "^8.6.14",
82
+ "@tailwindcss/postcss": "^4.0.0",
83
+ "@types/react": "19.0.8",
84
+ "@types/react-dom": "19.0.3",
85
+ "@vitejs/plugin-react": "^4.3.4",
86
+ "antd": "^6.1.0",
87
+ "autoprefixer": "^10.4.20",
88
+ "axios": "^1.7.9",
89
+ "dayjs": "^1.11.19",
90
+ "eslint": "^9.17.0",
91
+ "eslint-plugin-react-hooks": "^5.0.0",
92
+ "eslint-plugin-react-refresh": "^0.4.16",
93
+ "eslint-plugin-storybook": "^0.11.6",
94
+ "globals": "^15.14.0",
95
+ "postcss": "^8.4.49",
96
+ "react": "19.2.1",
97
+ "react-dom": "19.2.1",
98
+ "storybook": "^8.6.14",
99
+ "storybook-addon-customize-antd-theme": "^1.1.0",
100
+ "tailwindcss": "^4.1.11",
101
+ "terser": "^5.37.0",
102
+ "typescript": "^5.7.3",
103
+ "typescript-eslint": "^8.18.2",
104
+ "vite": "^7.2.7",
105
+ "vite-plugin-dts": "^4.5.0"
106
+ },
107
+ "eslintConfig": {
108
+ "extends": [
109
+ "plugin:storybook/recommended"
110
+ ]
111
+ }
112
+ }