flysoft-react-ui 1.2.10 → 1.3.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.
Files changed (46) hide show
  1. package/AI_CONTEXT.md +1533 -1401
  2. package/AI_INTEGRATION_GUIDE.md +358 -343
  3. package/README.md +498 -464
  4. package/dist/components/form-controls/Button.d.ts.map +1 -1
  5. package/dist/components/form-controls/Checkbox.d.ts.map +1 -1
  6. package/dist/components/form-controls/CurrencyInput.d.ts.map +1 -1
  7. package/dist/components/form-controls/DatePicker.d.ts.map +1 -1
  8. package/dist/components/form-controls/Input.d.ts.map +1 -1
  9. package/dist/components/form-controls/LinkButton.d.ts.map +1 -1
  10. package/dist/components/form-controls/Pagination.d.ts.map +1 -1
  11. package/dist/components/form-controls/RadioButtonGroup.d.ts.map +1 -1
  12. package/dist/components/layout/Accordion.d.ts +8 -0
  13. package/dist/components/layout/Accordion.d.ts.map +1 -1
  14. package/dist/components/layout/Card.d.ts +5 -0
  15. package/dist/components/layout/Card.d.ts.map +1 -1
  16. package/dist/components/layout/Collection.d.ts +17 -1
  17. package/dist/components/layout/Collection.d.ts.map +1 -1
  18. package/dist/components/layout/DataField.d.ts +19 -0
  19. package/dist/components/layout/DataField.d.ts.map +1 -1
  20. package/dist/components/layout/DataTable.d.ts.map +1 -1
  21. package/dist/components/layout/DropdownMenu.d.ts.map +1 -1
  22. package/dist/components/layout/DropdownPanel.d.ts.map +1 -1
  23. package/dist/components/layout/Filter.d.ts +8 -0
  24. package/dist/components/layout/Filter.d.ts.map +1 -1
  25. package/dist/components/layout/Menu.d.ts.map +1 -1
  26. package/dist/components/layout/TabsGroup.d.ts.map +1 -1
  27. package/dist/components/utils/Avatar.d.ts.map +1 -1
  28. package/dist/components/utils/Badge.d.ts.map +1 -1
  29. package/dist/components/utils/Dialog.d.ts.map +1 -1
  30. package/dist/components/utils/Loader.d.ts.map +1 -1
  31. package/dist/components/utils/RoadMap.d.ts.map +1 -1
  32. package/dist/components/utils/Snackbar.d.ts.map +1 -1
  33. package/dist/contexts/AppLayoutContext.d.ts +5 -1
  34. package/dist/contexts/AppLayoutContext.d.ts.map +1 -1
  35. package/dist/contexts/ThemeContext.d.ts +11 -1
  36. package/dist/contexts/ThemeContext.d.ts.map +1 -1
  37. package/dist/contexts/index.d.ts +2 -2
  38. package/dist/contexts/index.d.ts.map +1 -1
  39. package/dist/contexts/presets.d.ts +5 -1
  40. package/dist/contexts/presets.d.ts.map +1 -1
  41. package/dist/contexts/types.d.ts +51 -0
  42. package/dist/contexts/types.d.ts.map +1 -1
  43. package/dist/index.css +1 -1
  44. package/dist/index.js +8020 -7426
  45. package/dist/index.js.map +1 -1
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -1,464 +1,498 @@
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
- ### Override de Variables CSS
171
-
172
- ```tsx
173
- import { useThemeOverride } from "flysoft-react-ui";
174
-
175
- function MyComponent() {
176
- const { applyOverride, revertOverride } = useThemeOverride();
177
-
178
- const handleHover = () => {
179
- applyOverride({ primary: "#ff0000" });
180
- };
181
-
182
- const handleLeave = () => {
183
- revertOverride(["primary"]);
184
- };
185
-
186
- return (
187
- <div onMouseEnter={handleHover} onMouseLeave={handleLeave}>
188
- Hover me!
189
- </div>
190
- );
191
- }
192
- ```
193
-
194
- ### Variables CSS Disponibles
195
-
196
- El sistema proporciona variables CSS con prefijo `--flysoft-`:
197
-
198
- ```css
199
- --flysoft-primary /* Color primario */
200
- --flysoft-secondary /* Color secundario */
201
- --flysoft-success /* Color de éxito */
202
- --flysoft-warning /* Color de advertencia */
203
- --flysoft-danger /* Color de peligro */
204
- --flysoft-bg-default /* Fondo por defecto */
205
- --flysoft-text-primary /* Texto principal */
206
- --flysoft-border-default /* Borde por defecto */
207
- --flysoft-shadow-md /* Sombra mediana */
208
- --flysoft-radius-md /* Radio de borde mediano */
209
- ```
210
-
211
- Para más detalles sobre el sistema de temas, consulta [THEME_SYSTEM.md](./THEME_SYSTEM.md).
212
-
213
- ## 📚 Uso
214
-
215
- ### Importar componentes
216
-
217
- ```tsx
218
- import { Button, Input, Card, Badge } from "flysoft-react-ui";
219
- ```
220
-
221
- ### Importar estilos
222
-
223
- ```tsx
224
- import "flysoft-react-ui/styles";
225
- ```
226
-
227
- ### Ejemplo básico
228
-
229
- ```tsx
230
- import React from "react";
231
- import { Button, Input, Card } from "flysoft-react-ui";
232
- import "flysoft-react-ui/styles";
233
-
234
- function App() {
235
- return (
236
- <div className="p-8">
237
- <Card title="Mi Formulario" subtitle="Ejemplo de uso">
238
- <div className="space-y-4">
239
- <Input label="Nombre" placeholder="Tu nombre" icon="fa-user" />
240
- <Button variant="primary" icon="fa-save">
241
- Guardar
242
- </Button>
243
- </div>
244
- </Card>
245
- </div>
246
- );
247
- }
248
- ```
249
-
250
- ## 📋 Templates Disponibles
251
-
252
- ### Formularios
253
-
254
- - **LoginForm**: Formulario de login completo con validación
255
- - **RegistrationForm**: Formulario de registro con validación de contraseñas
256
- - **ContactForm**: Formulario de contacto con textarea y validación
257
-
258
- ### Layouts
259
-
260
- - **DashboardLayout**: Layout de dashboard con estadísticas y métricas
261
- - **SidebarLayout**: Layout con sidebar de navegación y contenido principal
262
-
263
- ### Patrones
264
-
265
- - **FormPattern**: Patrón reutilizable para cualquier formulario
266
-
267
- ### Ejemplo de Uso de Templates
268
-
269
- ```tsx
270
- import { LoginForm, DashboardLayout, SidebarLayout } from "flysoft-react-ui";
271
-
272
- // Formulario de login
273
- <LoginForm onSubmit={handleLogin} loading={isLoading} />
274
-
275
- // Dashboard con estadísticas
276
- <DashboardLayout title="Mi App" stats={stats}>
277
- <div>Contenido del dashboard</div>
278
- </DashboardLayout>
279
-
280
- // Layout con sidebar
281
- <SidebarLayout
282
- title="Mi App"
283
- menuItems={menuItems}
284
- user={user}
285
- >
286
- <div>Contenido principal</div>
287
- </SidebarLayout>
288
- ```
289
-
290
- ## 🧩 Componentes
291
-
292
- ### Button
293
-
294
- Botón personalizable con múltiples variantes, tamaños y soporte para iconos.
295
-
296
- ```tsx
297
- <Button variant="primary" size="md" icon="fa-heart" loading={false}>
298
- Me gusta
299
- </Button>
300
- ```
301
-
302
- **Props:**
303
-
304
- - `variant`: 'primary' | 'secondary' | 'outline' | 'ghost'
305
- - `size`: 'sm' | 'md' | 'lg'
306
- - `icon`: Clase de FontAwesome (ej: 'fa-heart')
307
- - `iconPosition`: 'left' | 'right'
308
- - `loading`: Estado de carga
309
- - `disabled`: Estado deshabilitado
310
-
311
- ### Input
312
-
313
- Campo de entrada con soporte para labels, iconos y estados de error.
314
-
315
- ```tsx
316
- <Input
317
- label="Email"
318
- type="email"
319
- placeholder="tu@email.com"
320
- icon="fa-envelope"
321
- error="Email inválido"
322
- />
323
- ```
324
-
325
- **Props:**
326
-
327
- - `label`: Texto del label
328
- - `error`: Mensaje de error
329
- - `icon`: Clase de FontAwesome
330
- - `iconPosition`: 'left' | 'right'
331
- - `size`: 'sm' | 'md' | 'lg'
332
-
333
- ### Card
334
-
335
- Contenedor de tarjeta con header, contenido y footer opcionales.
336
-
337
- ```tsx
338
- <Card
339
- title="Título"
340
- subtitle="Subtítulo"
341
- variant="elevated"
342
- headerActions={<Button>Acción</Button>}
343
- footer={<div>Footer</div>}
344
- >
345
- Contenido de la tarjeta
346
- </Card>
347
- ```
348
-
349
- **Props:**
350
-
351
- - `title`: Título del header
352
- - `subtitle`: Subtítulo del header
353
- - `variant`: 'default' | 'elevated' | 'outlined'
354
- - `headerActions`: Elementos de acción en el header
355
- - `footer`: Contenido del footer
356
-
357
- ### Badge
358
-
359
- Etiqueta pequeña para mostrar estados o categorías.
360
-
361
- ```tsx
362
- <Badge variant="success" size="md" rounded>
363
- Activo
364
- </Badge>
365
- ```
366
-
367
- **Props:**
368
-
369
- - `variant`: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'
370
- - `size`: 'sm' | 'md' | 'lg'
371
- - `rounded`: Aplicar bordes redondeados
372
-
373
- ## 🎨 Personalización
374
-
375
- ### Colores
376
-
377
- Puedes personalizar los colores sobrescribiendo las clases de Tailwind CSS:
378
-
379
- ```css
380
- /* En tu CSS */
381
- .btn-primary {
382
- @apply bg-purple-600 hover:bg-purple-700;
383
- }
384
- ```
385
-
386
- ### Tema
387
-
388
- La librería incluye un tema personalizado con colores primarios y animaciones. Puedes extenderlo en tu configuración de Tailwind:
389
-
390
- ```js
391
- // tailwind.config.js
392
- module.exports = {
393
- theme: {
394
- extend: {
395
- colors: {
396
- primary: {
397
- 500: "#your-color",
398
- // ... más variantes
399
- },
400
- },
401
- },
402
- },
403
- };
404
- ```
405
-
406
- ## 🚀 Desarrollo
407
-
408
- ### Instalar dependencias
409
-
410
- ```bash
411
- npm install
412
- ```
413
-
414
- ### Ejecutar en modo desarrollo
415
-
416
- ```bash
417
- npm run dev
418
- ```
419
-
420
- ### Construir librería
421
-
422
- ```bash
423
- npm run build
424
- ```
425
-
426
- ### Generar tipos TypeScript
427
-
428
- ```bash
429
- npm run build:types
430
- ```
431
-
432
- ## 📝 Licencia
433
-
434
- MIT
435
-
436
- ## 🤝 Contribuir
437
-
438
- Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request.
439
-
440
- ## 📚 Recursos Adicionales
441
-
442
- - **[INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md)**: Guía completa de integración con Cursor AI
443
- - **[AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md)**: Prompt base para agentes en proyectos cliente
444
- - **[THEME_SYSTEM.md](./THEME_SYSTEM.md)**: Documentación detallada del sistema de temas
445
- - **[examples/common-patterns.tsx](./examples/common-patterns.tsx)**: Ejemplos completos de uso
446
- - **[flysoft-ui.config.ts](./flysoft-ui.config.ts)**: Configuración centralizada de la librería
447
- - **[docs/component-metadata.json](./docs/component-metadata.json)**: Metadatos de todos los componentes
448
-
449
- ## 🔧 Scripts de Mantenimiento
450
-
451
- ```bash
452
- # Actualizar documentación automáticamente
453
- npm run update-docs
454
-
455
- # Validar que toda la documentación esté sincronizada
456
- npm run validate-docs
457
-
458
- # Ver ejemplos completos
459
- npm run dev
460
- ```
461
-
462
- ## 📞 Soporte
463
-
464
- Si tienes alguna pregunta o necesitas ayuda, abre un issue en el repositorio.
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
+ ### Fondo de form-controls y filtros
396
+
397
+ El fondo por defecto de los form-controls es `var(--color-bg-default)`. Cuando un control queda sobre una superficie del mismo color (por ej. dentro de una `Card` blanca) podés cambiarlo:
398
+
399
+ ```tsx
400
+ // Form-controls: pasá un bg-* por className (se combinan con twMerge y pisan el default)
401
+ <Input className="bg-[var(--color-bg-secondary)]" />
402
+ <CurrencyInput className="bg-[#f5f5f5]" />
403
+ <DateInput className="bg-[var(--color-bg-secondary)]" />
404
+
405
+ // Filter: usá la prop bgColor (cambia el badge y el input interno)
406
+ <Filter filterType="text" paramName="nombre" label="Nombre" bgColor="var(--color-bg-secondary)" />
407
+ ```
408
+
409
+ ### Colores
410
+
411
+ Puedes personalizar los colores sobrescribiendo las clases de Tailwind CSS:
412
+
413
+ ```css
414
+ /* En tu CSS */
415
+ .btn-primary {
416
+ @apply bg-purple-600 hover:bg-purple-700;
417
+ }
418
+ ```
419
+
420
+ ### Tema
421
+
422
+ La librería incluye un tema personalizado con colores primarios y animaciones. Puedes extenderlo en tu configuración de Tailwind:
423
+
424
+ ```js
425
+ // tailwind.config.js
426
+ module.exports = {
427
+ theme: {
428
+ extend: {
429
+ colors: {
430
+ primary: {
431
+ 500: "#your-color",
432
+ // ... más variantes
433
+ },
434
+ },
435
+ },
436
+ },
437
+ };
438
+ ```
439
+
440
+ ## 🚀 Desarrollo
441
+
442
+ ### Instalar dependencias
443
+
444
+ ```bash
445
+ npm install
446
+ ```
447
+
448
+ ### Ejecutar en modo desarrollo
449
+
450
+ ```bash
451
+ npm run dev
452
+ ```
453
+
454
+ ### Construir librería
455
+
456
+ ```bash
457
+ npm run build
458
+ ```
459
+
460
+ ### Generar tipos TypeScript
461
+
462
+ ```bash
463
+ npm run build:types
464
+ ```
465
+
466
+ ## 📝 Licencia
467
+
468
+ MIT
469
+
470
+ ## 🤝 Contribuir
471
+
472
+ Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request.
473
+
474
+ ## 📚 Recursos Adicionales
475
+
476
+ - **[INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md)**: Guía completa de integración con Cursor AI
477
+ - **[AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md)**: Prompt base para agentes en proyectos cliente
478
+ - **[THEME_SYSTEM.md](./THEME_SYSTEM.md)**: Documentación detallada del sistema de temas
479
+ - **[examples/common-patterns.tsx](./examples/common-patterns.tsx)**: Ejemplos completos de uso
480
+ - **[flysoft-ui.config.ts](./flysoft-ui.config.ts)**: Configuración centralizada de la librería
481
+ - **[docs/component-metadata.json](./docs/component-metadata.json)**: Metadatos de todos los componentes
482
+
483
+ ## 🔧 Scripts de Mantenimiento
484
+
485
+ ```bash
486
+ # Actualizar documentación automáticamente
487
+ npm run update-docs
488
+
489
+ # Validar que toda la documentación esté sincronizada
490
+ npm run validate-docs
491
+
492
+ # Ver ejemplos completos
493
+ npm run dev
494
+ ```
495
+
496
+ ## 📞 Soporte
497
+
498
+ Si tienes alguna pregunta o necesitas ayuda, abre un issue en el repositorio.