flysoft-react-ui 1.2.9 → 1.3.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/AI_CONTEXT.md +1518 -1400
- package/AI_INTEGRATION_GUIDE.md +357 -343
- package/README.md +484 -464
- package/dist/components/form-controls/Button.d.ts.map +1 -1
- package/dist/components/form-controls/Checkbox.d.ts.map +1 -1
- package/dist/components/form-controls/DatePicker.d.ts.map +1 -1
- package/dist/components/form-controls/Input.d.ts.map +1 -1
- package/dist/components/form-controls/LinkButton.d.ts.map +1 -1
- package/dist/components/form-controls/Pagination.d.ts.map +1 -1
- package/dist/components/form-controls/RadioButtonGroup.d.ts.map +1 -1
- package/dist/components/layout/Accordion.d.ts.map +1 -1
- package/dist/components/layout/Card.d.ts +5 -0
- package/dist/components/layout/Card.d.ts.map +1 -1
- package/dist/components/layout/Collection.d.ts +17 -1
- package/dist/components/layout/Collection.d.ts.map +1 -1
- package/dist/components/layout/DataField.d.ts +19 -0
- package/dist/components/layout/DataField.d.ts.map +1 -1
- package/dist/components/layout/DataTable.d.ts.map +1 -1
- package/dist/components/layout/DropdownMenu.d.ts.map +1 -1
- package/dist/components/layout/DropdownPanel.d.ts.map +1 -1
- package/dist/components/layout/Filter.d.ts.map +1 -1
- package/dist/components/layout/Menu.d.ts.map +1 -1
- package/dist/components/layout/TabsGroup.d.ts.map +1 -1
- package/dist/components/utils/Avatar.d.ts.map +1 -1
- package/dist/components/utils/Badge.d.ts.map +1 -1
- package/dist/components/utils/Dialog.d.ts +1 -0
- package/dist/components/utils/Dialog.d.ts.map +1 -1
- package/dist/components/utils/Loader.d.ts.map +1 -1
- package/dist/components/utils/RoadMap.d.ts.map +1 -1
- package/dist/components/utils/Snackbar.d.ts.map +1 -1
- package/dist/contexts/AppLayoutContext.d.ts +5 -1
- package/dist/contexts/AppLayoutContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.d.ts +11 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/index.d.ts +2 -2
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/contexts/presets.d.ts +5 -1
- package/dist/contexts/presets.d.ts.map +1 -1
- package/dist/contexts/types.d.ts +51 -0
- package/dist/contexts/types.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +4922 -4379
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,464 +1,484 @@
|
|
|
1
|
-
# Flysoft React UI
|
|
2
|
-
|
|
3
|
-
Una biblioteca de componentes React moderna y accesible construida con TypeScript, Tailwind CSS y FontAwesome 5. Incluye formularios, layouts, temas y templates para desarrollo rápido.
|
|
4
|
-
|
|
5
|
-
## 🚀 Características
|
|
6
|
-
|
|
7
|
-
- **TypeScript First**: Completamente tipado con TypeScript
|
|
8
|
-
- **Tailwind CSS**: Utiliza Tailwind CSS para estilos consistentes y personalizables
|
|
9
|
-
- **FontAwesome 5**: Iconos vectoriales de alta calidad integrados
|
|
10
|
-
- **Accesible**: Componentes que siguen las mejores prácticas de accesibilidad
|
|
11
|
-
- **Personalizable**: Fácil de personalizar con clases de Tailwind
|
|
12
|
-
- **Tree-shakable**: Solo importa los componentes que uses
|
|
13
|
-
- **🎨 Sistema de Temas**: Sistema completo de temas personalizables con Context API
|
|
14
|
-
- **📋 Templates Listos**: Formularios y layouts pre-construidos
|
|
15
|
-
- **🤖 Cursor AI Ready**: Optimizado para uso con Cursor AI
|
|
16
|
-
- **📦 Publicación limpia**: Los archivos de `src/docs` son solo para demo local y no forman parte de la API pública
|
|
17
|
-
|
|
18
|
-
## 📦 Instalación
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm install flysoft-react-ui
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## ⚡ Quick Start
|
|
25
|
-
|
|
26
|
-
### 1. Configuración Básica
|
|
27
|
-
|
|
28
|
-
```tsx
|
|
29
|
-
import { ThemeProvider } from "flysoft-react-ui";
|
|
30
|
-
import "flysoft-react-ui/styles";
|
|
31
|
-
|
|
32
|
-
function App() {
|
|
33
|
-
return (
|
|
34
|
-
<ThemeProvider initialTheme="light">
|
|
35
|
-
{/* Tu aplicación aquí */}
|
|
36
|
-
</ThemeProvider>
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 2. Formulario de Login Rápido
|
|
42
|
-
|
|
43
|
-
```tsx
|
|
44
|
-
import { LoginForm } from "flysoft-react-ui";
|
|
45
|
-
|
|
46
|
-
function LoginPage() {
|
|
47
|
-
const handleLogin = (data) => {
|
|
48
|
-
console.log("Login data:", data);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
return <LoginForm onSubmit={handleLogin} />;
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 3. Dashboard Básico
|
|
56
|
-
|
|
57
|
-
```tsx
|
|
58
|
-
import { DashboardLayout } from "flysoft-react-ui";
|
|
59
|
-
|
|
60
|
-
function Dashboard() {
|
|
61
|
-
const stats = [
|
|
62
|
-
{
|
|
63
|
-
title: "Usuarios",
|
|
64
|
-
value: "1,234",
|
|
65
|
-
change: "+12%",
|
|
66
|
-
changeType: "positive",
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
title: "Ventas",
|
|
70
|
-
value: "$45,678",
|
|
71
|
-
change: "+8%",
|
|
72
|
-
changeType: "positive",
|
|
73
|
-
},
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
return (
|
|
77
|
-
<DashboardLayout title="Mi Dashboard" stats={stats}>
|
|
78
|
-
<div>Contenido del dashboard</div>
|
|
79
|
-
</DashboardLayout>
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 4. Integración con IA (proyectos cliente)
|
|
85
|
-
|
|
86
|
-
Para que agentes de IA prioricen estos componentes en proyectos cliente, crea un archivo de instrucciones (`.cursorrules`, `AGENTS.md` o `copilot-instructions.md`) en ese proyecto:
|
|
87
|
-
|
|
88
|
-
```markdown
|
|
89
|
-
# Priorizar flysoft-react-ui
|
|
90
|
-
|
|
91
|
-
SIEMPRE usa los componentes de flysoft-react-ui antes de crear nuevos:
|
|
92
|
-
|
|
93
|
-
## Componentes Disponibles:
|
|
94
|
-
|
|
95
|
-
- Layouts: AppLayout, DashboardLayout, SidebarLayout, Card, Menu, TabsGroup
|
|
96
|
-
- Forms: Button, Input, AutocompleteInput, DatePicker, Checkbox
|
|
97
|
-
- Data: DataTable, DataField, Pagination
|
|
98
|
-
- Templates: LoginForm, RegistrationForm, ContactForm
|
|
99
|
-
|
|
100
|
-
## Para formularios:
|
|
101
|
-
|
|
102
|
-
- SIEMPRE usar Input y Button de flysoft-react-ui
|
|
103
|
-
- SIEMPRE usar Card como contenedor
|
|
104
|
-
- SIEMPRE usar FontAwesome 5 para iconos (fa fa-\*)
|
|
105
|
-
|
|
106
|
-
## Importación requerida:
|
|
107
|
-
|
|
108
|
-
import "flysoft-react-ui/styles";
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Ver [INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md) y [AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md) para configuración completa.
|
|
112
|
-
|
|
113
|
-
## 🔧 Configuración
|
|
114
|
-
|
|
115
|
-
### Tailwind CSS
|
|
116
|
-
|
|
117
|
-
Asegúrate de que Tailwind CSS esté configurado en tu proyecto:
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
npm install -D tailwindcss postcss autoprefixer
|
|
121
|
-
npx tailwindcss init -p
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### FontAwesome
|
|
125
|
-
|
|
126
|
-
La librería incluye FontAwesome 5. Si quieres usar tu propia instalación, puedes sobrescribir los estilos.
|
|
127
|
-
|
|
128
|
-
## 🎨 Sistema de Temas
|
|
129
|
-
|
|
130
|
-
Flysoft React UI incluye un sistema completo de temas personalizables que permite cambiar dinámicamente la apariencia de todos los componentes.
|
|
131
|
-
|
|
132
|
-
### Configuración Básica
|
|
133
|
-
|
|
134
|
-
```tsx
|
|
135
|
-
import { ThemeProvider } from "flysoft-react-ui";
|
|
136
|
-
|
|
137
|
-
function App() {
|
|
138
|
-
return (
|
|
139
|
-
<ThemeProvider initialTheme="light">
|
|
140
|
-
{/* Tu aplicación aquí */}
|
|
141
|
-
</ThemeProvider>
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Uso del Hook useTheme
|
|
147
|
-
|
|
148
|
-
```tsx
|
|
149
|
-
import { useTheme } from "flysoft-react-ui";
|
|
150
|
-
|
|
151
|
-
function MyComponent() {
|
|
152
|
-
const { theme, setTheme, currentThemeName, isDark } = useTheme();
|
|
153
|
-
|
|
154
|
-
return (
|
|
155
|
-
<div>
|
|
156
|
-
<p>Tema actual: {currentThemeName}</p>
|
|
157
|
-
<button onClick={() => setTheme("dark")}>Cambiar a Dark</button>
|
|
158
|
-
</div>
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Temas Predefinidos
|
|
164
|
-
|
|
165
|
-
- **Light**: Tema claro por defecto
|
|
166
|
-
- **Dark**: Tema oscuro elegante
|
|
167
|
-
- **Blue**: Variación azul profesional
|
|
168
|
-
- **Green**: Variación verde natural
|
|
169
|
-
|
|
170
|
-
###
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
<
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
- `
|
|
328
|
-
- `
|
|
329
|
-
- `
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
- `
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
<
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
- `
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
1
|
+
# Flysoft React UI
|
|
2
|
+
|
|
3
|
+
Una biblioteca de componentes React moderna y accesible construida con TypeScript, Tailwind CSS y FontAwesome 5. Incluye formularios, layouts, temas y templates para desarrollo rápido.
|
|
4
|
+
|
|
5
|
+
## 🚀 Características
|
|
6
|
+
|
|
7
|
+
- **TypeScript First**: Completamente tipado con TypeScript
|
|
8
|
+
- **Tailwind CSS**: Utiliza Tailwind CSS para estilos consistentes y personalizables
|
|
9
|
+
- **FontAwesome 5**: Iconos vectoriales de alta calidad integrados
|
|
10
|
+
- **Accesible**: Componentes que siguen las mejores prácticas de accesibilidad
|
|
11
|
+
- **Personalizable**: Fácil de personalizar con clases de Tailwind
|
|
12
|
+
- **Tree-shakable**: Solo importa los componentes que uses
|
|
13
|
+
- **🎨 Sistema de Temas**: Sistema completo de temas personalizables con Context API
|
|
14
|
+
- **📋 Templates Listos**: Formularios y layouts pre-construidos
|
|
15
|
+
- **🤖 Cursor AI Ready**: Optimizado para uso con Cursor AI
|
|
16
|
+
- **📦 Publicación limpia**: Los archivos de `src/docs` son solo para demo local y no forman parte de la API pública
|
|
17
|
+
|
|
18
|
+
## 📦 Instalación
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install flysoft-react-ui
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## ⚡ Quick Start
|
|
25
|
+
|
|
26
|
+
### 1. Configuración Básica
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { ThemeProvider } from "flysoft-react-ui";
|
|
30
|
+
import "flysoft-react-ui/styles";
|
|
31
|
+
|
|
32
|
+
function App() {
|
|
33
|
+
return (
|
|
34
|
+
<ThemeProvider initialTheme="light">
|
|
35
|
+
{/* Tu aplicación aquí */}
|
|
36
|
+
</ThemeProvider>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Formulario de Login Rápido
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { LoginForm } from "flysoft-react-ui";
|
|
45
|
+
|
|
46
|
+
function LoginPage() {
|
|
47
|
+
const handleLogin = (data) => {
|
|
48
|
+
console.log("Login data:", data);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return <LoginForm onSubmit={handleLogin} />;
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Dashboard Básico
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import { DashboardLayout } from "flysoft-react-ui";
|
|
59
|
+
|
|
60
|
+
function Dashboard() {
|
|
61
|
+
const stats = [
|
|
62
|
+
{
|
|
63
|
+
title: "Usuarios",
|
|
64
|
+
value: "1,234",
|
|
65
|
+
change: "+12%",
|
|
66
|
+
changeType: "positive",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
title: "Ventas",
|
|
70
|
+
value: "$45,678",
|
|
71
|
+
change: "+8%",
|
|
72
|
+
changeType: "positive",
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<DashboardLayout title="Mi Dashboard" stats={stats}>
|
|
78
|
+
<div>Contenido del dashboard</div>
|
|
79
|
+
</DashboardLayout>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 4. Integración con IA (proyectos cliente)
|
|
85
|
+
|
|
86
|
+
Para que agentes de IA prioricen estos componentes en proyectos cliente, crea un archivo de instrucciones (`.cursorrules`, `AGENTS.md` o `copilot-instructions.md`) en ese proyecto:
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
# Priorizar flysoft-react-ui
|
|
90
|
+
|
|
91
|
+
SIEMPRE usa los componentes de flysoft-react-ui antes de crear nuevos:
|
|
92
|
+
|
|
93
|
+
## Componentes Disponibles:
|
|
94
|
+
|
|
95
|
+
- Layouts: AppLayout, DashboardLayout, SidebarLayout, Card, Menu, TabsGroup
|
|
96
|
+
- Forms: Button, Input, AutocompleteInput, DatePicker, Checkbox
|
|
97
|
+
- Data: DataTable, DataField, Pagination
|
|
98
|
+
- Templates: LoginForm, RegistrationForm, ContactForm
|
|
99
|
+
|
|
100
|
+
## Para formularios:
|
|
101
|
+
|
|
102
|
+
- SIEMPRE usar Input y Button de flysoft-react-ui
|
|
103
|
+
- SIEMPRE usar Card como contenedor
|
|
104
|
+
- SIEMPRE usar FontAwesome 5 para iconos (fa fa-\*)
|
|
105
|
+
|
|
106
|
+
## Importación requerida:
|
|
107
|
+
|
|
108
|
+
import "flysoft-react-ui/styles";
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Ver [INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md) y [AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md) para configuración completa.
|
|
112
|
+
|
|
113
|
+
## 🔧 Configuración
|
|
114
|
+
|
|
115
|
+
### Tailwind CSS
|
|
116
|
+
|
|
117
|
+
Asegúrate de que Tailwind CSS esté configurado en tu proyecto:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install -D tailwindcss postcss autoprefixer
|
|
121
|
+
npx tailwindcss init -p
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### FontAwesome
|
|
125
|
+
|
|
126
|
+
La librería incluye FontAwesome 5. Si quieres usar tu propia instalación, puedes sobrescribir los estilos.
|
|
127
|
+
|
|
128
|
+
## 🎨 Sistema de Temas
|
|
129
|
+
|
|
130
|
+
Flysoft React UI incluye un sistema completo de temas personalizables que permite cambiar dinámicamente la apariencia de todos los componentes.
|
|
131
|
+
|
|
132
|
+
### Configuración Básica
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
import { ThemeProvider } from "flysoft-react-ui";
|
|
136
|
+
|
|
137
|
+
function App() {
|
|
138
|
+
return (
|
|
139
|
+
<ThemeProvider initialTheme="light">
|
|
140
|
+
{/* Tu aplicación aquí */}
|
|
141
|
+
</ThemeProvider>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Uso del Hook useTheme
|
|
147
|
+
|
|
148
|
+
```tsx
|
|
149
|
+
import { useTheme } from "flysoft-react-ui";
|
|
150
|
+
|
|
151
|
+
function MyComponent() {
|
|
152
|
+
const { theme, setTheme, currentThemeName, isDark } = useTheme();
|
|
153
|
+
|
|
154
|
+
return (
|
|
155
|
+
<div>
|
|
156
|
+
<p>Tema actual: {currentThemeName}</p>
|
|
157
|
+
<button onClick={() => setTheme("dark")}>Cambiar a Dark</button>
|
|
158
|
+
</div>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Temas Predefinidos
|
|
164
|
+
|
|
165
|
+
- **Light**: Tema claro por defecto
|
|
166
|
+
- **Dark**: Tema oscuro elegante
|
|
167
|
+
- **Blue**: Variación azul profesional
|
|
168
|
+
- **Green**: Variación verde natural
|
|
169
|
+
|
|
170
|
+
### Densidad Global
|
|
171
|
+
|
|
172
|
+
El `ThemeProvider` acepta una prop opcional `density` (`"comfortable"` | `"compact"` | `"dense"`)
|
|
173
|
+
que ajusta paddings, gaps, tipografía y alturas de controles globalmente vía
|
|
174
|
+
variables CSS `--flysoft-density-*`. Default: `"comfortable"`.
|
|
175
|
+
|
|
176
|
+
```tsx
|
|
177
|
+
// Útil para CRUDs, dashboards y pantallas con mucha información
|
|
178
|
+
<ThemeProvider initialTheme="light" density="dense">
|
|
179
|
+
<App />
|
|
180
|
+
</ThemeProvider>
|
|
181
|
+
|
|
182
|
+
// Cambiar en runtime
|
|
183
|
+
const { density, setDensity } = useTheme();
|
|
184
|
+
setDensity("compact");
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Los props locales `compact` y `size` de cada componente siguen funcionando como
|
|
188
|
+
override por componente.
|
|
189
|
+
|
|
190
|
+
### Override de Variables CSS
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
import { useThemeOverride } from "flysoft-react-ui";
|
|
194
|
+
|
|
195
|
+
function MyComponent() {
|
|
196
|
+
const { applyOverride, revertOverride } = useThemeOverride();
|
|
197
|
+
|
|
198
|
+
const handleHover = () => {
|
|
199
|
+
applyOverride({ primary: "#ff0000" });
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const handleLeave = () => {
|
|
203
|
+
revertOverride(["primary"]);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
return (
|
|
207
|
+
<div onMouseEnter={handleHover} onMouseLeave={handleLeave}>
|
|
208
|
+
Hover me!
|
|
209
|
+
</div>
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Variables CSS Disponibles
|
|
215
|
+
|
|
216
|
+
El sistema proporciona variables CSS con prefijo `--flysoft-`:
|
|
217
|
+
|
|
218
|
+
```css
|
|
219
|
+
--flysoft-primary /* Color primario */
|
|
220
|
+
--flysoft-secondary /* Color secundario */
|
|
221
|
+
--flysoft-success /* Color de éxito */
|
|
222
|
+
--flysoft-warning /* Color de advertencia */
|
|
223
|
+
--flysoft-danger /* Color de peligro */
|
|
224
|
+
--flysoft-bg-default /* Fondo por defecto */
|
|
225
|
+
--flysoft-text-primary /* Texto principal */
|
|
226
|
+
--flysoft-border-default /* Borde por defecto */
|
|
227
|
+
--flysoft-shadow-md /* Sombra mediana */
|
|
228
|
+
--flysoft-radius-md /* Radio de borde mediano */
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Para más detalles sobre el sistema de temas, consulta [THEME_SYSTEM.md](./THEME_SYSTEM.md).
|
|
232
|
+
|
|
233
|
+
## 📚 Uso
|
|
234
|
+
|
|
235
|
+
### Importar componentes
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
import { Button, Input, Card, Badge } from "flysoft-react-ui";
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Importar estilos
|
|
242
|
+
|
|
243
|
+
```tsx
|
|
244
|
+
import "flysoft-react-ui/styles";
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Ejemplo básico
|
|
248
|
+
|
|
249
|
+
```tsx
|
|
250
|
+
import React from "react";
|
|
251
|
+
import { Button, Input, Card } from "flysoft-react-ui";
|
|
252
|
+
import "flysoft-react-ui/styles";
|
|
253
|
+
|
|
254
|
+
function App() {
|
|
255
|
+
return (
|
|
256
|
+
<div className="p-8">
|
|
257
|
+
<Card title="Mi Formulario" subtitle="Ejemplo de uso">
|
|
258
|
+
<div className="space-y-4">
|
|
259
|
+
<Input label="Nombre" placeholder="Tu nombre" icon="fa-user" />
|
|
260
|
+
<Button variant="primary" icon="fa-save">
|
|
261
|
+
Guardar
|
|
262
|
+
</Button>
|
|
263
|
+
</div>
|
|
264
|
+
</Card>
|
|
265
|
+
</div>
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## 📋 Templates Disponibles
|
|
271
|
+
|
|
272
|
+
### Formularios
|
|
273
|
+
|
|
274
|
+
- **LoginForm**: Formulario de login completo con validación
|
|
275
|
+
- **RegistrationForm**: Formulario de registro con validación de contraseñas
|
|
276
|
+
- **ContactForm**: Formulario de contacto con textarea y validación
|
|
277
|
+
|
|
278
|
+
### Layouts
|
|
279
|
+
|
|
280
|
+
- **DashboardLayout**: Layout de dashboard con estadísticas y métricas
|
|
281
|
+
- **SidebarLayout**: Layout con sidebar de navegación y contenido principal
|
|
282
|
+
|
|
283
|
+
### Patrones
|
|
284
|
+
|
|
285
|
+
- **FormPattern**: Patrón reutilizable para cualquier formulario
|
|
286
|
+
|
|
287
|
+
### Ejemplo de Uso de Templates
|
|
288
|
+
|
|
289
|
+
```tsx
|
|
290
|
+
import { LoginForm, DashboardLayout, SidebarLayout } from "flysoft-react-ui";
|
|
291
|
+
|
|
292
|
+
// Formulario de login
|
|
293
|
+
<LoginForm onSubmit={handleLogin} loading={isLoading} />
|
|
294
|
+
|
|
295
|
+
// Dashboard con estadísticas
|
|
296
|
+
<DashboardLayout title="Mi App" stats={stats}>
|
|
297
|
+
<div>Contenido del dashboard</div>
|
|
298
|
+
</DashboardLayout>
|
|
299
|
+
|
|
300
|
+
// Layout con sidebar
|
|
301
|
+
<SidebarLayout
|
|
302
|
+
title="Mi App"
|
|
303
|
+
menuItems={menuItems}
|
|
304
|
+
user={user}
|
|
305
|
+
>
|
|
306
|
+
<div>Contenido principal</div>
|
|
307
|
+
</SidebarLayout>
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## 🧩 Componentes
|
|
311
|
+
|
|
312
|
+
### Button
|
|
313
|
+
|
|
314
|
+
Botón personalizable con múltiples variantes, tamaños y soporte para iconos.
|
|
315
|
+
|
|
316
|
+
```tsx
|
|
317
|
+
<Button variant="primary" size="md" icon="fa-heart" loading={false}>
|
|
318
|
+
Me gusta
|
|
319
|
+
</Button>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Props:**
|
|
323
|
+
|
|
324
|
+
- `variant`: 'primary' | 'secondary' | 'outline' | 'ghost'
|
|
325
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
326
|
+
- `icon`: Clase de FontAwesome (ej: 'fa-heart')
|
|
327
|
+
- `iconPosition`: 'left' | 'right'
|
|
328
|
+
- `loading`: Estado de carga
|
|
329
|
+
- `disabled`: Estado deshabilitado
|
|
330
|
+
|
|
331
|
+
### Input
|
|
332
|
+
|
|
333
|
+
Campo de entrada con soporte para labels, iconos y estados de error.
|
|
334
|
+
|
|
335
|
+
```tsx
|
|
336
|
+
<Input
|
|
337
|
+
label="Email"
|
|
338
|
+
type="email"
|
|
339
|
+
placeholder="tu@email.com"
|
|
340
|
+
icon="fa-envelope"
|
|
341
|
+
error="Email inválido"
|
|
342
|
+
/>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Props:**
|
|
346
|
+
|
|
347
|
+
- `label`: Texto del label
|
|
348
|
+
- `error`: Mensaje de error
|
|
349
|
+
- `icon`: Clase de FontAwesome
|
|
350
|
+
- `iconPosition`: 'left' | 'right'
|
|
351
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
352
|
+
|
|
353
|
+
### Card
|
|
354
|
+
|
|
355
|
+
Contenedor de tarjeta con header, contenido y footer opcionales.
|
|
356
|
+
|
|
357
|
+
```tsx
|
|
358
|
+
<Card
|
|
359
|
+
title="Título"
|
|
360
|
+
subtitle="Subtítulo"
|
|
361
|
+
variant="elevated"
|
|
362
|
+
headerActions={<Button>Acción</Button>}
|
|
363
|
+
footer={<div>Footer</div>}
|
|
364
|
+
>
|
|
365
|
+
Contenido de la tarjeta
|
|
366
|
+
</Card>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Props:**
|
|
370
|
+
|
|
371
|
+
- `title`: Título del header
|
|
372
|
+
- `subtitle`: Subtítulo del header
|
|
373
|
+
- `variant`: 'default' | 'elevated' | 'outlined'
|
|
374
|
+
- `headerActions`: Elementos de acción en el header
|
|
375
|
+
- `footer`: Contenido del footer
|
|
376
|
+
|
|
377
|
+
### Badge
|
|
378
|
+
|
|
379
|
+
Etiqueta pequeña para mostrar estados o categorías.
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
<Badge variant="success" size="md" rounded>
|
|
383
|
+
Activo
|
|
384
|
+
</Badge>
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**Props:**
|
|
388
|
+
|
|
389
|
+
- `variant`: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'
|
|
390
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
391
|
+
- `rounded`: Aplicar bordes redondeados
|
|
392
|
+
|
|
393
|
+
## 🎨 Personalización
|
|
394
|
+
|
|
395
|
+
### Colores
|
|
396
|
+
|
|
397
|
+
Puedes personalizar los colores sobrescribiendo las clases de Tailwind CSS:
|
|
398
|
+
|
|
399
|
+
```css
|
|
400
|
+
/* En tu CSS */
|
|
401
|
+
.btn-primary {
|
|
402
|
+
@apply bg-purple-600 hover:bg-purple-700;
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Tema
|
|
407
|
+
|
|
408
|
+
La librería incluye un tema personalizado con colores primarios y animaciones. Puedes extenderlo en tu configuración de Tailwind:
|
|
409
|
+
|
|
410
|
+
```js
|
|
411
|
+
// tailwind.config.js
|
|
412
|
+
module.exports = {
|
|
413
|
+
theme: {
|
|
414
|
+
extend: {
|
|
415
|
+
colors: {
|
|
416
|
+
primary: {
|
|
417
|
+
500: "#your-color",
|
|
418
|
+
// ... más variantes
|
|
419
|
+
},
|
|
420
|
+
},
|
|
421
|
+
},
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## 🚀 Desarrollo
|
|
427
|
+
|
|
428
|
+
### Instalar dependencias
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
npm install
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Ejecutar en modo desarrollo
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
npm run dev
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Construir librería
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
npm run build
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### Generar tipos TypeScript
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
npm run build:types
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
## 📝 Licencia
|
|
453
|
+
|
|
454
|
+
MIT
|
|
455
|
+
|
|
456
|
+
## 🤝 Contribuir
|
|
457
|
+
|
|
458
|
+
Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request.
|
|
459
|
+
|
|
460
|
+
## 📚 Recursos Adicionales
|
|
461
|
+
|
|
462
|
+
- **[INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md)**: Guía completa de integración con Cursor AI
|
|
463
|
+
- **[AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md)**: Prompt base para agentes en proyectos cliente
|
|
464
|
+
- **[THEME_SYSTEM.md](./THEME_SYSTEM.md)**: Documentación detallada del sistema de temas
|
|
465
|
+
- **[examples/common-patterns.tsx](./examples/common-patterns.tsx)**: Ejemplos completos de uso
|
|
466
|
+
- **[flysoft-ui.config.ts](./flysoft-ui.config.ts)**: Configuración centralizada de la librería
|
|
467
|
+
- **[docs/component-metadata.json](./docs/component-metadata.json)**: Metadatos de todos los componentes
|
|
468
|
+
|
|
469
|
+
## 🔧 Scripts de Mantenimiento
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
# Actualizar documentación automáticamente
|
|
473
|
+
npm run update-docs
|
|
474
|
+
|
|
475
|
+
# Validar que toda la documentación esté sincronizada
|
|
476
|
+
npm run validate-docs
|
|
477
|
+
|
|
478
|
+
# Ver ejemplos completos
|
|
479
|
+
npm run dev
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
## 📞 Soporte
|
|
483
|
+
|
|
484
|
+
Si tienes alguna pregunta o necesitas ayuda, abre un issue en el repositorio.
|