flysoft-react-ui 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +310 -0
- package/dist/index.css +1 -0
- package/dist/index.js +673 -0
- package/dist/index.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# Flysoft React UI
|
|
2
|
+
|
|
3
|
+
Una biblioteca de componentes React moderna y accesible construida con TypeScript, Tailwind CSS y FontAwesome.
|
|
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
|
+
|
|
15
|
+
## 📦 Instalación
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install flysoft-react-ui
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🔧 Configuración
|
|
22
|
+
|
|
23
|
+
### Tailwind CSS
|
|
24
|
+
|
|
25
|
+
Asegúrate de que Tailwind CSS esté configurado en tu proyecto:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install -D tailwindcss postcss autoprefixer
|
|
29
|
+
npx tailwindcss init -p
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### FontAwesome
|
|
33
|
+
|
|
34
|
+
La librería incluye FontAwesome 5. Si quieres usar tu propia instalación, puedes sobrescribir los estilos.
|
|
35
|
+
|
|
36
|
+
## 🎨 Sistema de Temas
|
|
37
|
+
|
|
38
|
+
Flysoft React UI incluye un sistema completo de temas personalizables que permite cambiar dinámicamente la apariencia de todos los componentes.
|
|
39
|
+
|
|
40
|
+
### Configuración Básica
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import { ThemeProvider } from "flysoft-react-ui";
|
|
44
|
+
|
|
45
|
+
function App() {
|
|
46
|
+
return (
|
|
47
|
+
<ThemeProvider initialTheme="light">
|
|
48
|
+
{/* Tu aplicación aquí */}
|
|
49
|
+
</ThemeProvider>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Uso del Hook useTheme
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { useTheme } from "flysoft-react-ui";
|
|
58
|
+
|
|
59
|
+
function MyComponent() {
|
|
60
|
+
const { theme, setTheme, currentThemeName, isDark } = useTheme();
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div>
|
|
64
|
+
<p>Tema actual: {currentThemeName}</p>
|
|
65
|
+
<button onClick={() => setTheme("dark")}>Cambiar a Dark</button>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Temas Predefinidos
|
|
72
|
+
|
|
73
|
+
- **Light**: Tema claro por defecto
|
|
74
|
+
- **Dark**: Tema oscuro elegante
|
|
75
|
+
- **Blue**: Variación azul profesional
|
|
76
|
+
- **Green**: Variación verde natural
|
|
77
|
+
|
|
78
|
+
### Override de Variables CSS
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
import { useThemeOverride } from "flysoft-react-ui";
|
|
82
|
+
|
|
83
|
+
function MyComponent() {
|
|
84
|
+
const { applyOverride, revertOverride } = useThemeOverride();
|
|
85
|
+
|
|
86
|
+
const handleHover = () => {
|
|
87
|
+
applyOverride({ primary: "#ff0000" });
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const handleLeave = () => {
|
|
91
|
+
revertOverride(["primary"]);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<div onMouseEnter={handleHover} onMouseLeave={handleLeave}>
|
|
96
|
+
Hover me!
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Variables CSS Disponibles
|
|
103
|
+
|
|
104
|
+
El sistema proporciona variables CSS con prefijo `--flysoft-`:
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
--flysoft-primary /* Color primario */
|
|
108
|
+
--flysoft-secondary /* Color secundario */
|
|
109
|
+
--flysoft-success /* Color de éxito */
|
|
110
|
+
--flysoft-warning /* Color de advertencia */
|
|
111
|
+
--flysoft-danger /* Color de peligro */
|
|
112
|
+
--flysoft-bg-default /* Fondo por defecto */
|
|
113
|
+
--flysoft-text-primary /* Texto principal */
|
|
114
|
+
--flysoft-border-default /* Borde por defecto */
|
|
115
|
+
--flysoft-shadow-md /* Sombra mediana */
|
|
116
|
+
--flysoft-radius-md /* Radio de borde mediano */
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Para más detalles sobre el sistema de temas, consulta [THEME_SYSTEM.md](./THEME_SYSTEM.md).
|
|
120
|
+
|
|
121
|
+
## 📚 Uso
|
|
122
|
+
|
|
123
|
+
### Importar componentes
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
import { Button, Input, Card, Badge } from "flysoft-react-ui";
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Importar estilos
|
|
130
|
+
|
|
131
|
+
```tsx
|
|
132
|
+
import "flysoft-react-ui/styles";
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Ejemplo básico
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
import React from "react";
|
|
139
|
+
import { Button, Input, Card } from "flysoft-react-ui";
|
|
140
|
+
import "flysoft-react-ui/styles";
|
|
141
|
+
|
|
142
|
+
function App() {
|
|
143
|
+
return (
|
|
144
|
+
<div className="p-8">
|
|
145
|
+
<Card title="Mi Formulario" subtitle="Ejemplo de uso">
|
|
146
|
+
<div className="space-y-4">
|
|
147
|
+
<Input label="Nombre" placeholder="Tu nombre" icon="fa-user" />
|
|
148
|
+
<Button variant="primary" icon="fa-save">
|
|
149
|
+
Guardar
|
|
150
|
+
</Button>
|
|
151
|
+
</div>
|
|
152
|
+
</Card>
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 🧩 Componentes
|
|
159
|
+
|
|
160
|
+
### Button
|
|
161
|
+
|
|
162
|
+
Botón personalizable con múltiples variantes, tamaños y soporte para iconos.
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
<Button variant="primary" size="md" icon="fa-heart" loading={false}>
|
|
166
|
+
Me gusta
|
|
167
|
+
</Button>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Props:**
|
|
171
|
+
|
|
172
|
+
- `variant`: 'primary' | 'secondary' | 'outline' | 'ghost'
|
|
173
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
174
|
+
- `icon`: Clase de FontAwesome (ej: 'fa-heart')
|
|
175
|
+
- `iconPosition`: 'left' | 'right'
|
|
176
|
+
- `loading`: Estado de carga
|
|
177
|
+
- `disabled`: Estado deshabilitado
|
|
178
|
+
|
|
179
|
+
### Input
|
|
180
|
+
|
|
181
|
+
Campo de entrada con soporte para labels, iconos y estados de error.
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
<Input
|
|
185
|
+
label="Email"
|
|
186
|
+
type="email"
|
|
187
|
+
placeholder="tu@email.com"
|
|
188
|
+
icon="fa-envelope"
|
|
189
|
+
error="Email inválido"
|
|
190
|
+
/>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Props:**
|
|
194
|
+
|
|
195
|
+
- `label`: Texto del label
|
|
196
|
+
- `error`: Mensaje de error
|
|
197
|
+
- `icon`: Clase de FontAwesome
|
|
198
|
+
- `iconPosition`: 'left' | 'right'
|
|
199
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
200
|
+
|
|
201
|
+
### Card
|
|
202
|
+
|
|
203
|
+
Contenedor de tarjeta con header, contenido y footer opcionales.
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
<Card
|
|
207
|
+
title="Título"
|
|
208
|
+
subtitle="Subtítulo"
|
|
209
|
+
variant="elevated"
|
|
210
|
+
headerActions={<Button>Acción</Button>}
|
|
211
|
+
footer={<div>Footer</div>}
|
|
212
|
+
>
|
|
213
|
+
Contenido de la tarjeta
|
|
214
|
+
</Card>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Props:**
|
|
218
|
+
|
|
219
|
+
- `title`: Título del header
|
|
220
|
+
- `subtitle`: Subtítulo del header
|
|
221
|
+
- `variant`: 'default' | 'elevated' | 'outlined'
|
|
222
|
+
- `headerActions`: Elementos de acción en el header
|
|
223
|
+
- `footer`: Contenido del footer
|
|
224
|
+
|
|
225
|
+
### Badge
|
|
226
|
+
|
|
227
|
+
Etiqueta pequeña para mostrar estados o categorías.
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
<Badge variant="success" size="md" rounded>
|
|
231
|
+
Activo
|
|
232
|
+
</Badge>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Props:**
|
|
236
|
+
|
|
237
|
+
- `variant`: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'
|
|
238
|
+
- `size`: 'sm' | 'md' | 'lg'
|
|
239
|
+
- `rounded`: Aplicar bordes redondeados
|
|
240
|
+
|
|
241
|
+
## 🎨 Personalización
|
|
242
|
+
|
|
243
|
+
### Colores
|
|
244
|
+
|
|
245
|
+
Puedes personalizar los colores sobrescribiendo las clases de Tailwind CSS:
|
|
246
|
+
|
|
247
|
+
```css
|
|
248
|
+
/* En tu CSS */
|
|
249
|
+
.btn-primary {
|
|
250
|
+
@apply bg-purple-600 hover:bg-purple-700;
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Tema
|
|
255
|
+
|
|
256
|
+
La librería incluye un tema personalizado con colores primarios y animaciones. Puedes extenderlo en tu configuración de Tailwind:
|
|
257
|
+
|
|
258
|
+
```js
|
|
259
|
+
// tailwind.config.js
|
|
260
|
+
module.exports = {
|
|
261
|
+
theme: {
|
|
262
|
+
extend: {
|
|
263
|
+
colors: {
|
|
264
|
+
primary: {
|
|
265
|
+
500: "#your-color",
|
|
266
|
+
// ... más variantes
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 🚀 Desarrollo
|
|
275
|
+
|
|
276
|
+
### Instalar dependencias
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
npm install
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Ejecutar en modo desarrollo
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
npm run dev
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Construir librería
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
npm run build
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Generar tipos TypeScript
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
npm run build:types
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## 📝 Licencia
|
|
301
|
+
|
|
302
|
+
MIT
|
|
303
|
+
|
|
304
|
+
## 🤝 Contribuir
|
|
305
|
+
|
|
306
|
+
Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request.
|
|
307
|
+
|
|
308
|
+
## 📞 Soporte
|
|
309
|
+
|
|
310
|
+
Si tienes alguna pregunta o necesitas ayuda, abre un issue en el repositorio.
|