sysrotcore
Version:
CLI de nueva generación para proyectos Next.js 14+ con IA multi-modelo, Web3 integration, internacionalización completa y roadmap realista 2025-2026
473 lines (402 loc) • 12 kB
text/mdx
---
title: "Guía Completa: Componentes Avanzados en SysrotCore"
description: "Aprende a utilizar los 50+ componentes incluidos en SysrotCore para crear interfaces profesionales con ejemplos prácticos y código reutilizable."
date: "2025-06-16"
author: "María González, Senior UI Developer"
tags: ["componentes", "ui", "tailwindcss", "react", "design-system"]
image: "https://images.unsplash.com/photo-1555066931-4365d14bab8c?ixlib=rb-4.0.3&auto=format&fit=crop&w=1200&q=80"
readingTime: "8 min"
featured: false
---
# Guía Completa: Componentes Avanzados en SysrotCore
Los componentes son el **corazón** de cualquier aplicación moderna. SysrotCore incluye más de **50 componentes production-ready** organizados en 7 categorías, cada uno diseñado con las mejores prácticas de UX y accesibilidad.
## 🎯 Filosofía de Diseño
Nuestros componentes siguen tres principios fundamentales:
### 1. **Accesibilidad Primero**
Todos los componentes incluyen:
- ARIA labels completos
- Navegación por teclado
- Soporte para screen readers
- High contrast mode compatible
### 2. **Performance Optimizada**
- Lazy loading automático
- Code splitting inteligente
- Minimal re-renders
- GPU acceleration donde corresponde
### 3. **Flexibilidad Total**
- Props customizables
- Theming system integrado
- Variants preconstruidos
- Extensibilidad garantizada
## 📋 Categorías de Componentes
### 🎯 Básicos (12 componentes)
Los foundation components que usarás en cada proyecto:
#### Botones Premium
```tsx
// Botón con gradiente animado
<Button variant="gradient" size="lg" className="group">
<span className="relative z-10">Acción Principal</span>
<div className="absolute inset-0 bg-gradient-to-r from-blue-500 to-purple-600 opacity-75 group-hover:opacity-100 transition-opacity" />
</Button>
// Botón con loading state
<Button loading={isSubmitting} disabled={isSubmitting}>
{isSubmitting ? 'Procesando...' : 'Enviar'}
</Button>
// Floating Action Button
<Button variant="fab" className="fixed bottom-6 right-6">
<PlusIcon className="w-6 h-6" />
</Button>
```
#### Cards Interactivas
```tsx
// Pricing Card
<Card className="pricing-card group hover:scale-105 transition-transform">
<CardHeader className="bg-gradient-to-r from-blue-500 to-purple-600">
<CardTitle className="text-white">Plan Pro</CardTitle>
<div className="text-3xl font-bold text-white">
$29<span className="text-sm opacity-75">/mes</span>
</div>
</CardHeader>
<CardContent className="p-6">
<ul className="space-y-3">
{features.map((feature, index) => (
<li key={index} className="flex items-center gap-2">
<CheckIcon className="w-5 h-5 text-green-500" />
<span>{feature}</span>
</li>
))}
</ul>
</CardContent>
<CardFooter>
<Button className="w-full">Comenzar Ahora</Button>
</CardFooter>
</Card>
```
### 📝 Formularios (10 componentes)
Formularios que los usuarios **aman** usar:
#### Input con Floating Label
```tsx
<div className="floating-input-group">
<Input
id="email"
type="email"
placeholder=" "
className="peer"
/>
<Label
htmlFor="email"
className="floating-label peer-placeholder-shown:translate-y-4 peer-focus:-translate-y-2 peer-focus:text-blue-500"
>
Correo Electrónico
</Label>
</div>
```
#### Multi-Step Form
```tsx
const steps = [
{ id: 'personal', title: 'Información Personal', icon: UserIcon },
{ id: 'company', title: 'Empresa', icon: BuildingIcon },
{ id: 'preferences', title: 'Preferencias', icon: CogIcon }
];
<MultiStepForm
steps={steps}
onComplete={handleSubmit}
validation={zodSchema}
>
<FormStep id="personal">
<PersonalInfoFields />
</FormStep>
<FormStep id="company">
<CompanyInfoFields />
</FormStep>
<FormStep id="preferences">
<PreferencesFields />
</FormStep>
</MultiStepForm>
```
### 🧭 Navegación (8 componentes)
Navegación intuitiva y responsive:
#### Breadcrumbs Inteligentes
```tsx
<Breadcrumbs
items={[
{ label: 'Dashboard', href: '/dashboard' },
{ label: 'Proyectos', href: '/proyectos' },
{ label: 'Proyecto Alpha', href: '/proyectos/alpha' },
{ label: 'Configuración' } // Current page
]}
separator={<ChevronRightIcon className="w-4 h-4" />}
maxItems={4}
showHome={true}
/>
```
#### Sidebar Adaptativo
```tsx
<Sidebar
collapsed={isMobile}
collapsible={true}
className="h-screen"
>
<SidebarHeader>
<Logo />
</SidebarHeader>
<SidebarContent>
<NavigationMenu>
<NavigationItem icon={DashboardIcon} href="/dashboard">
Dashboard
</NavigationItem>
<NavigationItem icon={ProjectsIcon} href="/projects">
Proyectos
</NavigationItem>
<NavigationItem icon={SettingsIcon} href="/settings">
Configuración
</NavigationItem>
</NavigationMenu>
</SidebarContent>
<SidebarFooter>
<UserProfile />
</SidebarFooter>
</Sidebar>
```
### 💬 Feedback (8 componentes)
Comunicación clara con los usuarios:
#### Toast Notifications
```tsx
// Basic toast
toast.success('¡Proyecto creado exitosamente!');
// Custom toast with actions
toast.custom(
<div className="flex items-center gap-4">
<CheckCircleIcon className="w-6 h-6 text-green-500" />
<div>
<h4 className="font-semibold">Proyecto guardado</h4>
<p className="text-sm text-gray-600">Todos los cambios han sido guardados automáticamente.</p>
</div>
<Button size="sm" onClick={() => window.open('/project/123')}>
Ver Proyecto
</Button>
</div>,
{ duration: 5000 }
);
// Promise toast (loading → success/error)
toast.promise(
apiCall(),
{
loading: 'Guardando proyecto...',
success: '¡Proyecto guardado!',
error: 'Error al guardar el proyecto'
}
);
```
#### Modal System
```tsx
<Modal
isOpen={showModal}
onClose={() => setShowModal(false)}
size="lg"
closeOnOverlayClick={true}
showCloseButton={true}
>
<ModalHeader>
<h2 className="text-2xl font-bold">Crear Nuevo Proyecto</h2>
</ModalHeader>
<ModalBody>
<ProjectForm onSubmit={handleCreateProject} />
</ModalBody>
<ModalFooter>
<Button variant="outline" onClick={() => setShowModal(false)}>
Cancelar
</Button>
<Button onClick={handleSubmit}>
Crear Proyecto
</Button>
</ModalFooter>
</Modal>
```
## 🎨 Sistema de Temas
### Dark Mode Automático
```tsx
// Automáticamente detecta preferencias del usuario
<ThemeProvider defaultTheme="system" enableSystem>
<App />
</ThemeProvider>
// Manual theme switching
const { theme, setTheme } = useTheme();
<Button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>
{theme === 'dark' ? <SunIcon /> : <MoonIcon />}
</Button>
```
### Customización de Colores
```css
/* CSS Variables para theming */
:root {
--primary: 220 100% 50%;
--secondary: 210 40% 50%;
--accent: 210 40% 50%;
--destructive: 0 85% 60%;
}
[data-theme="dark"] {
--primary: 220 100% 60%;
--secondary: 210 40% 60%;
/* ... */
}
```
## 🚀 Performance Tips
### 1. Lazy Loading
```tsx
// Componentes pesados con lazy loading
const DataTable = lazy(() => import('@/components/DataTable'));
const Charts = lazy(() => import('@/components/Charts'));
<Suspense fallback={<ComponentSkeleton />}>
<DataTable data={data} />
</Suspense>
```
### 2. Memoización Inteligente
```tsx
// Componentes memoizados automáticamente
const ExpensiveComponent = memo(({ data, onUpdate }) => {
const processedData = useMemo(() => {
return data.map(item => heavyProcessing(item));
}, [data]);
return <ComplexVisualization data={processedData} />;
});
```
### 3. Virtual Scrolling
```tsx
// Para listas grandes (1000+ elementos)
<VirtualizedList
items={massiveDataset}
itemHeight={60}
containerHeight={400}
renderItem={({ item, index }) => (
<ListItem key={item.id} data={item} />
)}
/>
```
## 🎯 Ejemplos Prácticos
### Dashboard Completo
```tsx
function Dashboard() {
return (
<div className="dashboard-layout">
<Sidebar>
<Navigation />
</Sidebar>
<main className="dashboard-main">
<Header>
<Breadcrumbs />
<UserMenu />
</Header>
<div className="dashboard-content">
<StatsCards data={statsData} />
<ChartsSection charts={chartsData} />
<RecentActivity activities={activities} />
</div>
</main>
</div>
);
}
```
### E-commerce Card
```tsx
<ProductCard className="group">
<ProductImage
src={product.image}
alt={product.name}
className="group-hover:scale-105 transition-transform"
/>
<ProductInfo>
<ProductName>{product.name}</ProductName>
<ProductPrice>
<span className="text-2xl font-bold">${product.price}</span>
{product.originalPrice && (
<span className="text-sm line-through text-gray-500">
${product.originalPrice}
</span>
)}
</ProductPrice>
<ProductRating rating={product.rating} reviews={product.reviews} />
</ProductInfo>
<ProductActions>
<Button variant="outline" size="sm">
<HeartIcon className="w-4 h-4" />
</Button>
<Button size="sm" className="flex-1">
Agregar al Carrito
</Button>
</ProductActions>
</ProductCard>
```
## 🔧 Mejores Prácticas
### 1. Composition Pattern
```tsx
// ❌ Monolithic component
<ComplexForm
showTitle={true}
showDescription={true}
fields={fields}
submitButton="Guardar"
cancelButton="Cancelar"
/>
// ✅ Composable components
<Form onSubmit={handleSubmit}>
<FormHeader>
<FormTitle>Crear Proyecto</FormTitle>
<FormDescription>Complete los datos del nuevo proyecto</FormDescription>
</FormHeader>
<FormContent>
<FormFields fields={fields} />
</FormContent>
<FormFooter>
<Button variant="outline">Cancelar</Button>
<Button type="submit">Guardar</Button>
</FormFooter>
</Form>
```
### 2. TypeScript First
```tsx
// Tipos estrictos para mejor DX
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'default' | 'outline' | 'ghost' | 'gradient';
size?: 'sm' | 'md' | 'lg';
loading?: boolean;
leftIcon?: React.ReactNode;
rightIcon?: React.ReactNode;
}
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ variant = 'default', size = 'md', loading, children, ...props }, ref) => {
return (
<button
ref={ref}
className={buttonVariants({ variant, size })}
disabled={loading || props.disabled}
{...props}
>
{loading && <Spinner className="mr-2" />}
{children}
</button>
);
}
);
```
### 3. Accessibility
```tsx
// ARIA labels automáticos
<Button
aria-label="Eliminar proyecto Alpha"
aria-describedby="delete-warning"
>
<TrashIcon className="w-4 h-4" />
</Button>
<div id="delete-warning" className="sr-only">
Esta acción no se puede deshacer
</div>
```
## 🎯 Próximos Pasos
1. **Explora los ejemplos** - Ve a `/ejemplos/componentes` en tu proyecto
2. **Personaliza el theme** - Modifica las CSS variables
3. **Crea componentes custom** - Extiende la biblioteca base
4. **Contribuye** - Comparte tus componentes con la comunidad
---
Con estos componentes en tu arsenal, puedes crear interfaces profesionales que deleiten a tus usuarios y aceleren tu desarrollo. ¡El límite es tu creatividad!
**¿Listo para crear tu próxima interfaz extraordinaria?**