You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Instalar la biblioteca
npm install @opendex-origon/icons
# O con yarn
yarn add @opendex-origon/icons
# O con pnpm
pnpm add @opendex-origon/icons
🎯 Uso Básico
importReactfrom'react';import{User,Check,Settings,Star}from'@opendex-origon/icons';functionBasicExample(){return(<divclassName="icon-examples">{/* Tamaño con número (píxeles) */}<Usersize={24}/>{/* Tamaño con string (unidades CSS) */}<Checksize="1.5rem"color="green"/>{/* Color personalizado */}<Settingssize={32}color="blue"/>{/* Con className para estilos */}<Starsize={20}className="icon-glow"/></div>);}
🎨 Diferentes Estilos
importReactfrom'react';import{ArrowUpRegular,ArrowUpLight,ArrowUpFilled,ArrowUpDuotone,ArrowUpDuotoneLine}from'@opendex-origon/icons/Arrows';functionStyleExamples(){return(<divclassName="style-examples"><h3>Diferentes Estilos del Mismo Icono</h3><divclassName="icon-grid"><divclassName="icon-item"><ArrowUpRegularsize={32}/><span>Regular</span></div><divclassName="icon-item"><ArrowUpLightsize={32}/><span>Light</span></div><divclassName="icon-item"><ArrowUpFilledsize={32}/><span>Filled</span></div><divclassName="icon-item"><ArrowUpDuotonesize={32}/><span>Duotone</span></div><divclassName="icon-item"><ArrowUpDuotoneLinesize={32}/><span>Duotone Line</span></div></div></div>);}
🎨 Componentes de UI
🔘 Botones con Iconos
importReactfrom'react';import{Download,Upload,Trash,Edit,Share,Heart}from'@opendex-origon/icons';functionIconButtons(){return(<divclassName="icon-buttons">{/* Botón primario con icono */}<buttonclassName="btn btn-primary"><Downloadsize={16}/><span>Descargar</span></button>{/* Botón secundario con icono */}<buttonclassName="btn btn-secondary"><Uploadsize={16}/><span>Subir</span></button>{/* Botón de peligro */}<buttonclassName="btn btn-danger"><Trashsize={16}/><span>Eliminar</span></button>{/* Botón de edición */}<buttonclassName="btn btn-edit"><Editsize={16}/><span>Editar</span></button>{/* Botón de compartir */}<buttonclassName="btn btn-share"><Sharesize={16}/><span>Compartir</span></button>{/* Botón de like */}<buttonclassName="btn btn-like"><Heartsize={16}/><span>Me gusta</span></button></div>);}
importReactfrom'react';import{Phone,Tablet,Laptop,Desktop,Monitor}from'@opendex-origon/icons';functionResponsiveIcons(){return(<divclassName="responsive-icons"><h3>Iconos que se Adaptan al Tamaño</h3><divclassName="device-icons">{/* Iconos que cambian según el breakpoint */}<divclassName="device-icon mobile"><Phonesize="clamp(16px, 4vw, 32px)"/><span>Móvil</span></div><divclassName="device-icon tablet"><Tabletsize="clamp(20px, 5vw, 40px)"/><span>Tablet</span></div><divclassName="device-icon laptop"><Laptopsize="clamp(24px, 6vw, 48px)"/><span>Laptop</span></div><divclassName="device-icon desktop"><Desktopsize="clamp(28px, 7vw, 56px)"/><span>Desktop</span></div><divclassName="device-icon monitor"><Monitorsize="clamp(32px, 8vw, 64px)"/><span>Monitor</span></div></div></div>);}
🎭 Temas y Estilos
🌙 Toggle de Tema
importReact,{useState}from'react';import{Sun,Moon}from'@opendex-origon/icons';functionThemeToggle(){const[isDark,setIsDark]=useState(false);consttoggleTheme=()=>{setIsDark(!isDark);document.body.classList.toggle('dark-theme');};return(<buttonclassName="theme-toggle"onClick={toggleTheme}aria-label={isDark ? 'Cambiar a tema claro' : 'Cambiar a tema oscuro'}>{isDark ? (<Sunsize={24}color="yellow"/>) : (<Moonsize={24}color="blue"/>)}</button>);}
🎨 Iconos con CSS Variables
importReactfrom'react';import{Heart,Star,ThumbsUp,Award,Crown}from'@opendex-origon/icons';functionCSSVariableIcons(){return(<divclassName="css-variable-icons"><h3>Iconos con Variables CSS</h3><divclassName="icon-grid"><divclassName="icon-item primary"><Heartsize={32}/><span>Primario</span></div><divclassName="icon-item secondary"><Starsize={32}/><span>Secundario</span></div><divclassName="icon-item success"><ThumbsUpsize={32}/><span>Éxito</span></div><divclassName="icon-item warning"><Awardsize={32}/><span>Advertencia</span></div><divclassName="icon-item danger"><Crownsize={32}/><span>Peligro</span></div></div></div>);}
🎯 Iconos con Gradientes
importReactfrom'react';import{Fire,Lightning,Sparkles,Rainbow,Crystal}from'@opendex-origon/icons';functionGradientIcons(){return(<divclassName="gradient-icons"><h3>Iconos con Gradientes</h3><divclassName="gradient-grid"><divclassName="gradient-icon fire"><Firesize={40}/></div><divclassName="gradient-icon lightning"><Lightningsize={40}/></div><divclassName="gradient-icon sparkles"><Sparklessize={40}/></div><divclassName="gradient-icon rainbow"><Rainbowsize={40}/></div><divclassName="gradient-icon crystal"><Crystalsize={40}/></div></div></div>);}
⚡ Optimización
🚀 Lazy Loading de Iconos
importReact,{lazy,Suspense}from'react';// Lazy loading de iconosconstUserIcon=lazy(()=>import('@opendex-origon/icons').then(module=>({default: module.User})));constSettingsIcon=lazy(()=>import('@opendex-origon/icons').then(module=>({default: module.Settings})));functionLazyLoadedIcons(){return(<divclassName="lazy-icons"><Suspensefallback={<divclassName="icon-skeleton"/>}><UserIconsize={24}/></Suspense><Suspensefallback={<divclassName="icon-skeleton"/>}><SettingsIconsize={24}/></Suspense></div>);}
📦 Memoización de Iconos
importReact,{memo}from'react';import{User,Settings,Bell}from'@opendex-origon/icons';// Icono memoizado para evitar re-renders innecesariosconstMemoizedUserIcon=memo(({ size, color }: {size: number;color: string})=>(<Usersize={size}color={color}/>));constMemoizedSettingsIcon=memo(({ size, color }: {size: number;color: string})=>(<Settingssize={size}color={color}/>));constMemoizedBellIcon=memo(({ size, color }: {size: number;color: string})=>(<Bellsize={size}color={color}/>));functionOptimizedIcons(){return(<divclassName="optimized-icons"><MemoizedUserIconsize={24}color="blue"/><MemoizedSettingsIconsize={24}color="gray"/><MemoizedBellIconsize={24}color="red"/></div>);}
🎯 Importación Selectiva
// ✅ Optimizado - Solo importa lo que necesitaimport{User,Settings,Bell}from'@opendex-origon/icons';// ❌ No optimizado - Importa todo// import * as Icons from '@opendex-origon/icons';functionSelectiveImports(){return(<divclassName="selective-imports"><Usersize={24}/><Settingssize={24}/><Bellsize={24}/></div>);}
importReact,{useState}from'react';import{Bell,Check,X,Info,AlertTriangle}from'@opendex-origon/icons';interfaceNotification{id: string;type: 'success'|'error'|'info'|'warning';message: string;icon: React.ComponentType<any>;}functionNotificationSystem(){const[notifications,setNotifications]=useState<Notification[]>([{id: '1',type: 'success',message: 'Operación completada exitosamente',icon: Check},{id: '2',type: 'error',message: 'Error al procesar la solicitud',icon: X},{id: '3',type: 'info',message: 'Nueva actualización disponible',icon: Info},{id: '4',type: 'warning',message: 'Espacio en disco bajo',icon: AlertTriangle},]);constremoveNotification=(id: string)=>{setNotifications(prev=>prev.filter(n=>n.id!==id));};return(<divclassName="notification-system"><divclassName="notification-header"><Bellsize={20}/><span>Notificaciones ({notifications.length})</span></div><divclassName="notification-list">{notifications.map((notification)=>(<divkey={notification.id}className={`notification-item ${notification.type}`}><notification.iconsize={16}/><spanclassName="notification-message">{notification.message}</span><buttonclassName="notification-close"onClick={()=>removeNotification(notification.id)}><Xsize={12}/></button></div>))}</div></div>);}
🎯 Patrones de Diseño
🎨 Icono con Badge
importReactfrom'react';import{Bell,Mail,Heart,ShoppingCart}from'@opendex-origon/icons';interfaceIconWithBadgeProps{icon: React.ComponentType<any>;count: number;size?: number;color?: string;}functionIconWithBadge({icon: Icon, count, size =24, color ='currentColor'}: IconWithBadgeProps){return(<divclassName="icon-with-badge"><Iconsize={size}color={color}/>{count>0&&(<spanclassName="badge">{count>99 ? '99+' : count}</span>)}</div>);}functionBadgeExample(){return(<divclassName="badge-example"><h3>Iconos con Badges</h3><divclassName="badge-grid"><IconWithBadgeicon={Bell}count={5}/><IconWithBadgeicon={Mail}count={12}/><IconWithBadgeicon={Heart}count={0}/><IconWithBadgeicon={ShoppingCart}count={3}/></div></div>);}
🎭 Icono con Tooltip
importReact,{useState}from'react';import{Info,Help,Settings,User}from'@opendex-origon/icons';interfaceIconWithTooltipProps{icon: React.ComponentType<any>;tooltip: string;size?: number;color?: string;}functionIconWithTooltip({icon: Icon,
tooltip,
size =20,
color ='currentColor'}: IconWithTooltipProps){const[showTooltip,setShowTooltip]=useState(false);return(<divclassName="icon-with-tooltip"onMouseEnter={()=>setShowTooltip(true)}onMouseLeave={()=>setShowTooltip(false)}><Iconsize={size}color={color}/>{showTooltip&&(<divclassName="tooltip">{tooltip}</div>)}</div>);}functionTooltipExample(){return(<divclassName="tooltip-example"><h3>Iconos con Tooltips</h3><divclassName="tooltip-grid"><IconWithTooltipicon={Info}tooltip="Información adicional"/><IconWithTooltipicon={Help}tooltip="Ayuda y soporte"/><IconWithTooltipicon={Settings}tooltip="Configuración del sistema"/><IconWithTooltipicon={User}tooltip="Perfil de usuario"/></div></div>);}