UNPKG

flysoft-react-ui

Version:

A modern React UI component library with Tailwind CSS, TypeScript, and FontAwesome 5. Includes forms, layouts, themes, and templates for rapid development.

462 lines (337 loc) 10.1 kB
# Flysoft React UI 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. ## 🚀 Características - **TypeScript First**: Completamente tipado con TypeScript - **Tailwind CSS**: Utiliza Tailwind CSS para estilos consistentes y personalizables - **FontAwesome 5**: Iconos vectoriales de alta calidad integrados - **Accesible**: Componentes que siguen las mejores prácticas de accesibilidad - **Personalizable**: Fácil de personalizar con clases de Tailwind - **Tree-shakable**: Solo importa los componentes que uses - **🎨 Sistema de Temas**: Sistema completo de temas personalizables con Context API - **📋 Templates Listos**: Formularios y layouts pre-construidos - **🤖 Cursor AI Ready**: Optimizado para uso con Cursor AI ## 📦 Instalación ```bash npm install flysoft-react-ui ``` ## ⚡ Quick Start ### 1. Configuración Básica ```tsx import { ThemeProvider } from "flysoft-react-ui"; import "flysoft-react-ui/styles"; function App() { return ( <ThemeProvider initialTheme="light"> {/* Tu aplicación aquí */} </ThemeProvider> ); } ``` ### 2. Formulario de Login Rápido ```tsx import { LoginForm } from "flysoft-react-ui"; function LoginPage() { const handleLogin = (data) => { console.log("Login data:", data); }; return <LoginForm onSubmit={handleLogin} />; } ``` ### 3. Dashboard Básico ```tsx import { DashboardLayout } from "flysoft-react-ui"; function Dashboard() { const stats = [ { title: "Usuarios", value: "1,234", change: "+12%", changeType: "positive", }, { title: "Ventas", value: "$45,678", change: "+8%", changeType: "positive", }, ]; return ( <DashboardLayout title="Mi Dashboard" stats={stats}> <div>Contenido del dashboard</div> </DashboardLayout> ); } ``` ### 4. Integración con Cursor AI Para que Cursor AI priorice automáticamente estos componentes, crea un archivo `.cursorrules` en tu proyecto: ```markdown # Priorizar flysoft-react-ui SIEMPRE usa los componentes de flysoft-react-ui antes de crear nuevos: ## Componentes Disponibles: - Button, Input, Card, Badge, ThemeSwitcher - LoginForm, RegistrationForm, ContactForm - DashboardLayout, SidebarLayout, FormPattern ## Para formularios: - SIEMPRE usar Input y Button de flysoft-react-ui - SIEMPRE usar Card como contenedor - SIEMPRE usar FontAwesome 5 para iconos (fa fa-\*) ## Importación requerida: import "flysoft-react-ui/styles"; ``` Ver [INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md) para configuración completa. ## 🔧 Configuración ### Tailwind CSS Asegúrate de que Tailwind CSS esté configurado en tu proyecto: ```bash npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p ``` ### FontAwesome La librería incluye FontAwesome 5. Si quieres usar tu propia instalación, puedes sobrescribir los estilos. ## 🎨 Sistema de Temas Flysoft React UI incluye un sistema completo de temas personalizables que permite cambiar dinámicamente la apariencia de todos los componentes. ### Configuración Básica ```tsx import { ThemeProvider } from "flysoft-react-ui"; function App() { return ( <ThemeProvider initialTheme="light"> {/* Tu aplicación aquí */} </ThemeProvider> ); } ``` ### Uso del Hook useTheme ```tsx import { useTheme } from "flysoft-react-ui"; function MyComponent() { const { theme, setTheme, currentThemeName, isDark } = useTheme(); return ( <div> <p>Tema actual: {currentThemeName}</p> <button onClick={() => setTheme("dark")}>Cambiar a Dark</button> </div> ); } ``` ### Temas Predefinidos - **Light**: Tema claro por defecto - **Dark**: Tema oscuro elegante - **Blue**: Variación azul profesional - **Green**: Variación verde natural ### Override de Variables CSS ```tsx import { useThemeOverride } from "flysoft-react-ui"; function MyComponent() { const { applyOverride, revertOverride } = useThemeOverride(); const handleHover = () => { applyOverride({ primary: "#ff0000" }); }; const handleLeave = () => { revertOverride(["primary"]); }; return ( <div onMouseEnter={handleHover} onMouseLeave={handleLeave}> Hover me! </div> ); } ``` ### Variables CSS Disponibles El sistema proporciona variables CSS con prefijo `--flysoft-`: ```css --flysoft-primary /* Color primario */ --flysoft-secondary /* Color secundario */ --flysoft-success /* Color de éxito */ --flysoft-warning /* Color de advertencia */ --flysoft-danger /* Color de peligro */ --flysoft-bg-default /* Fondo por defecto */ --flysoft-text-primary /* Texto principal */ --flysoft-border-default /* Borde por defecto */ --flysoft-shadow-md /* Sombra mediana */ --flysoft-radius-md /* Radio de borde mediano */ ``` Para más detalles sobre el sistema de temas, consulta [THEME_SYSTEM.md](./THEME_SYSTEM.md). ## 📚 Uso ### Importar componentes ```tsx import { Button, Input, Card, Badge } from "flysoft-react-ui"; ``` ### Importar estilos ```tsx import "flysoft-react-ui/styles"; ``` ### Ejemplo básico ```tsx import React from "react"; import { Button, Input, Card } from "flysoft-react-ui"; import "flysoft-react-ui/styles"; function App() { return ( <div className="p-8"> <Card title="Mi Formulario" subtitle="Ejemplo de uso"> <div className="space-y-4"> <Input label="Nombre" placeholder="Tu nombre" icon="fa-user" /> <Button variant="primary" icon="fa-save"> Guardar </Button> </div> </Card> </div> ); } ``` ## 📋 Templates Disponibles ### Formularios - **LoginForm**: Formulario de login completo con validación - **RegistrationForm**: Formulario de registro con validación de contraseñas - **ContactForm**: Formulario de contacto con textarea y validación ### Layouts - **DashboardLayout**: Layout de dashboard con estadísticas y métricas - **SidebarLayout**: Layout con sidebar de navegación y contenido principal ### Patrones - **FormPattern**: Patrón reutilizable para cualquier formulario ### Ejemplo de Uso de Templates ```tsx import { LoginForm, DashboardLayout, SidebarLayout } from "flysoft-react-ui"; // Formulario de login <LoginForm onSubmit={handleLogin} loading={isLoading} /> // Dashboard con estadísticas <DashboardLayout title="Mi App" stats={stats}> <div>Contenido del dashboard</div> </DashboardLayout> // Layout con sidebar <SidebarLayout title="Mi App" menuItems={menuItems} user={user} > <div>Contenido principal</div> </SidebarLayout> ``` ## 🧩 Componentes ### Button Botón personalizable con múltiples variantes, tamaños y soporte para iconos. ```tsx <Button variant="primary" size="md" icon="fa-heart" loading={false}> Me gusta </Button> ``` **Props:** - `variant`: 'primary' | 'secondary' | 'outline' | 'ghost' - `size`: 'sm' | 'md' | 'lg' - `icon`: Clase de FontAwesome (ej: 'fa-heart') - `iconPosition`: 'left' | 'right' - `loading`: Estado de carga - `disabled`: Estado deshabilitado ### Input Campo de entrada con soporte para labels, iconos y estados de error. ```tsx <Input label="Email" type="email" placeholder="tu@email.com" icon="fa-envelope" error="Email inválido" /> ``` **Props:** - `label`: Texto del label - `error`: Mensaje de error - `icon`: Clase de FontAwesome - `iconPosition`: 'left' | 'right' - `size`: 'sm' | 'md' | 'lg' ### Card Contenedor de tarjeta con header, contenido y footer opcionales. ```tsx <Card title="Título" subtitle="Subtítulo" variant="elevated" headerActions={<Button>Acción</Button>} footer={<div>Footer</div>} > Contenido de la tarjeta </Card> ``` **Props:** - `title`: Título del header - `subtitle`: Subtítulo del header - `variant`: 'default' | 'elevated' | 'outlined' - `headerActions`: Elementos de acción en el header - `footer`: Contenido del footer ### Badge Etiqueta pequeña para mostrar estados o categorías. ```tsx <Badge variant="success" size="md" rounded> Activo </Badge> ``` **Props:** - `variant`: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' - `size`: 'sm' | 'md' | 'lg' - `rounded`: Aplicar bordes redondeados ## 🎨 Personalización ### Colores Puedes personalizar los colores sobrescribiendo las clases de Tailwind CSS: ```css /* En tu CSS */ .btn-primary { @apply bg-purple-600 hover:bg-purple-700; } ``` ### Tema La librería incluye un tema personalizado con colores primarios y animaciones. Puedes extenderlo en tu configuración de Tailwind: ```js // tailwind.config.js module.exports = { theme: { extend: { colors: { primary: { 500: "#your-color", // ... más variantes }, }, }, }, }; ``` ## 🚀 Desarrollo ### Instalar dependencias ```bash npm install ``` ### Ejecutar en modo desarrollo ```bash npm run dev ``` ### Construir librería ```bash npm run build ``` ### Generar tipos TypeScript ```bash npm run build:types ``` ## 📝 Licencia MIT ## 🤝 Contribuir Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request. ## 📚 Recursos Adicionales - **[INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md)**: Guía completa de integración con Cursor AI - **[THEME_SYSTEM.md](./THEME_SYSTEM.md)**: Documentación detallada del sistema de temas - **[examples/common-patterns.tsx](./examples/common-patterns.tsx)**: Ejemplos completos de uso - **[flysoft-ui.config.ts](./flysoft-ui.config.ts)**: Configuración centralizada de la librería - **[docs/component-metadata.json](./docs/component-metadata.json)**: Metadatos de todos los componentes ## 🔧 Scripts de Mantenimiento ```bash # Actualizar documentación automáticamente npm run update-docs # Validar que toda la documentación esté sincronizada npm run validate-docs # Ver ejemplos completos npm run dev ``` ## 📞 Soporte Si tienes alguna pregunta o necesitas ayuda, abre un issue en el repositorio.