@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.
- package/README.md +498 -0
- package/package.json +112 -0
package/README.md
ADDED
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
# capi-ui
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+

|
|
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
|
+
}
|