# Avanza UI
Sistema de componentes UI independiente para AvanzaCast - Sin dependencias de Tailwind CSS
## 🎯 Componentes Disponibles
### Componentes Básicos
- ✅ **Button** - Botones con múltiples variantes y tamaños
- ✅ **Card** - Tarjetas con header, body y footer
- ✅ **Input** - Campos de entrada con validación
- ✅ **Badge** - Insignias y etiquetas
- ✅ **Avatar** - Avatares con soporte de imágenes e iniciales
- ✅ **Spinner** - Indicadores de carga
### Componentes de Feedback
- ✅ **Alert** - Mensajes de alerta (success, warning, danger, info)
- ✅ **Tooltip** - Tooltips posicionables
- ✅ **Modal** - Modales con header, body y footer
### Componentes de Navegación
- ✅ **Dropdown** - Menús desplegables con items y dividers
## 📦 Instalación
```bash
# Desde el workspace (monorepo)
npm install avanza-ui@file:../ui-components
# O crear link simbólico
cd packages/ui-components
npm link
cd ../tu-proyecto
npm link avanza-ui
```
## 🚀 Uso Rápido
```tsx
import {
Button,
Card,
CardHeader,
CardBody,
Input,
Alert,
Avatar,
Badge,
Spinner,
Modal,
ModalHeader,
ModalBody,
ModalFooter,
Dropdown,
DropdownItem,
Tooltip
} from 'avanza-ui';
// Importar estilos globales
import 'avanza-ui/dist/index.css';
function App() {
const [isModalOpen, setIsModalOpen] = React.useState(false);
return (
{/* Alert */}
{/* Card con componentes */}
{/* Dropdown */}
Opciones}>
👤}>Mi Perfil
⚙️}>Configuración
🚪}>Cerrar Sesión
{/* Modal */}
setIsModalOpen(false)} size="md">
setIsModalOpen(false)} />
Contenido del modal
{/* Spinner */}
{loading &&
}
);
}
```
## 🎨 Personalización de Temas
```tsx
// Cambiar tema programáticamente
document.documentElement.setAttribute('data-theme', 'dark'); // o 'light'
// Personalizar variables CSS
const customStyles = `
:root {
--au-primary-600: #your-color;
--au-spacing-4: 1.5rem;
}
`;
```
## 📖 API de Componentes
### Button
```tsx
}
rightIcon={}
onClick={() => {}}
>
Texto del Botón
```
### Avatar
```tsx
```
### Badge
```tsx
Texto
```
### Alert
```tsx
{}}
/>
```
## 🎯 Variables CSS Disponibles
### Colores
- `--au-primary-*` (50-950)
- `--au-gray-*` (50-950)
- `--au-success-*`
- `--au-warning-*`
- `--au-danger-*`
- `--au-info-*`
### Espaciado
- `--au-spacing-0` a `--au-spacing-24`
### Tipografía
- `--au-text-xs` a `--au-text-4xl`
- `--au-font-normal`, `--au-font-medium`, `--au-font-semibold`, `--au-font-bold`
### Bordes
- `--au-radius-none` a `--au-radius-full`
### Sombras
- `--au-shadow-sm` a `--au-shadow-xl`
## 🛠️ Utilidades
```tsx
import { cn, debounce, throttle, generateId } from 'avanza-ui';
// Combinar clases
const className = cn('base-class', condition && 'conditional-class');
// Debounce
const debouncedFn = debounce((value) => console.log(value), 300);
// Throttle
const throttledFn = throttle(() => console.log('scroll'), 100);
// Generar ID único
const id = generateId('component'); // 'component-a1b2c3d4'
```
## 📄 Licencia
MIT
---
**Avanza UI** v1.0.0 - Sistema de componentes para AvanzaCast