import type { ReactNode } from 'react';
import type { DropdownItemProps } from '../Dropdown/Dropdown.types';
import type { ButtonProps } from '../Button/Button.types';
/**
* Variante de dispositivo del Navbar
* - `responsive`: Se adapta automáticamente al viewport (por defecto)
* - `desktop`: Versión completa (≥1024px) con todos los elementos
* - `tablet`: Versión tablet (≥768px) con elementos reducidos
* - `mobile`: Versión simplificada (<768px) con logo icono y avatar circular
*
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4278-18626
*/
export type NavbarVariant = 'responsive' | 'desktop' | 'tablet' | 'mobile';
/**
* Datos del dropdown de usuario
*
* @example
* ```tsx
* const userDropdown: UserDropdownProps = {
* avatar: '/path/to/avatar.jpg',
* name: 'Juan Pérez',
* email: 'juan@ejemplo.com',
* menuItems: [
* { children: 'Account', icon: , onClick: () => {} },
* { children: 'Settings', icon: , onClick: () => {} },
* { isDivider: true },
* { children: 'Sign Out', onClick: () => {} },
* ],
* };
* ```
*/
export interface UserDropdownProps {
/**
* URL del avatar del usuario
* Recomendado: mínimo 80x80px para retina
*/
avatar: string;
/**
* Nombre del usuario (se muestra en desktop/tablet)
*/
name: string;
/**
* Email del usuario (se muestra en desktop/tablet)
*/
email?: string;
/**
* Rol del usuario (alternativa a email, ej: "Administrador")
*/
role?: string;
/**
* Items del menú dropdown de usuario
* Si no se proporciona, se usa un menú por defecto con Account, Notifications, Billing, Dark mode y Sign Out
*/
menuItems?: DropdownItemProps[];
/**
* Handler para click en el dropdown de usuario
* @deprecated Usar menuItems con onClick individuales en su lugar
*/
onMenuClick?: () => void;
/**
* Handler para la opción "Account" del menú por defecto
*/
onAccountClick?: () => void;
/**
* Handler para la opción "Notifications" del menú por defecto
*/
onNotificationsClick?: () => void;
/**
* Handler para la opción "Billing" del menú por defecto
*/
onBillingClick?: () => void;
/**
* Handler para la opción "Dark mode" del menú por defecto
*/
onDarkModeClick?: () => void;
/**
* Handler para la opción "Sign Out" del menú por defecto
*/
onSignOutClick?: () => void;
}
/**
* Configuración de badges de notificación
*
* @example
* ```tsx
* const notifications: NotificationsProps = {
* cart: 15, // Muestra badge con "15"
* bell: true, // Muestra dot de notificación
* };
* ```
*/
export interface NotificationsProps {
/**
* Número de items en el carrito
* Si es > 99, muestra "+99"
*/
cart?: number;
/**
* Muestra dot de notificación en la campana
*/
bell?: boolean;
}
/**
* Descriptor de un microfrontend para el menú de aplicaciones
*/
export interface MicrofrontendDescriptor {
/**
* Nombre del microfrontend (se mostrará en el label)
*/
name: string;
/**
* URL base del microfrontend (ej: "/inventory")
*/
baseUrl: string;
/**
* Icono opcional para el menú
*/
icon?: ReactNode;
}
/**
* Props del componente Navbar
*
* Barra de navegación principal con soporte completo para responsive design y dark mode.
* Incluye logo, nombre de producto, badge de ambiente, botones de acción y dropdown de usuario.
*
* **Mejores prácticas implementadas:**
* - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
* - Dark mode con estrategia 'class' (darkMode: 'class')
* - Tokens de color consistentes con la documentación
* - Focus rings adaptativos para light y dark mode
* - Tipografía del sistema: Heading/Tiny (20px Bold), Paragraph/Small (14px), Paragraph/Tiny (12px)
* - Spacing del sistema: 4px, 8px, 12px, 16px, 32px
*
* @see docs/colors.md - Sistema de colores y tokens dark mode
* @see docs/typography.md - Sistema tipográfico (Heading, Paragraph)
* @see docs/spacing.md - Sistema de espaciado
* @see docs/shadows.md - Sistema de sombras (button-inset)
*/
export interface NavbarProps {
/**
* Indica si el Navbar se usa en contexto de AppShell
* Habilita el menú de aplicaciones y el breadcrumb dinámico
*
* @default false
*/
isAppShell?: boolean;
/**
* Lista de microfrontends disponibles en el menú de aplicaciones
* Solo visible si isAppShell es true
*/
microfrontends?: MicrofrontendDescriptor[];
/**
* Handler para personalizar la navegación al seleccionar un microfrontend
* Si no se proporciona, por defecto hace window.location.href = mfe.baseUrl
*/
onMicrofrontendClick?: (mfe: MicrofrontendDescriptor) => void;
/**
* Nombre del microfrontend activo inicialmente
* Si se proporciona, se muestra en el label al cargar
*/
activeMicrofrontendName?: string;
/**
* Logo del negocio/cliente (componente o imagen)
* Solo visible en desktop/tablet
*
* @default Logo por defecto de la carpeta public
*/
logo?: ReactNode;
/**
* Logo del negocio/cliente para modo oscuro
* Si se proporciona, se alternará automáticamente con 'logo' según el tema activo.
* Solo visible en desktop/tablet
*/
darkLogo?: ReactNode;
/**
* Logo de Siesa personalizado
* Si no se proporciona, usa el logo por defecto según variante
*
* @default Logo Siesa de la carpeta public
*/
siesaLogo?: ReactNode;
/**
* Nombre del producto que aparece después del logo
* Solo visible en desktop/tablet (se oculta en mobile)
*
* @default 'Nombre Producto'
*/
productName?: string;
/**
* Badge de ambiente/entorno (ej: "Ambiente de Pruebas")
* En mobile muestra versión corta ("Pruebas")
*/
environmentBadge?: string;
/**
* Contenido del dropdown de usuario
*/
userDropdown?: UserDropdownProps;
/**
* Elementos de acción adicionales en la barra (botones, iconos, etc.)
* Se muestran a la derecha después del dropdown de usuario
*/
actions?: ReactNode;
/**
* Configuración de badges de notificación para los botones
*/
notifications?: NotificationsProps;
/**
* Clases CSS adicionales para el contenedor del navbar
*/
className?: string;
/**
* Modo de visualización del navbar
* - `responsive`: Se adapta automáticamente al viewport
* - `desktop`: Versión completa (1360x64px)
* - `tablet`: Versión tablet (1024x64px)
* - `mobile`: Versión compacta (428x40px)
*
* @default 'responsive'
*/
variant?: NavbarVariant;
/**
* Ocultar botones de acción (carrito, notificaciones, búsqueda)
*
* @default false
*/
hideActionButtons?: boolean;
/**
* Mostrar el botón de navegación en el leading (lado izquierdo)
* Solo visible en desktop/tablet
*
* @default false
*/
showNavigationButton?: boolean;
/**
* Props adicionales para el botón de navegación
* Permite personalizar el botón usando las props del componente Button
*/
navigationButtonProps?: Partial;
/**
* Elemento leading personalizado (reemplaza el botón de navegación por defecto)
* Solo visible en desktop/tablet
*/
leadingAction?: ReactNode;
/**
* Mostrar Business Logo en el leading (lado izquierdo)
* Solo visible en desktop/tablet
*
* @default false
*/
showBusinessLogo?: boolean;
/**
* Mostrar Logo de Siesa en el leading (lado izquierdo)
* Solo visible en desktop/tablet (en mobile siempre muestra el icono)
*
* @default true
*/
showSiesaLogoLeading?: boolean;
/**
* Mostrar Logo de Siesa en el trailing (lado derecho)
* Solo visible en desktop/tablet
*
* @default false
*/
showSiesaLogoTrailing?: boolean;
/**
* Handler para click en el botón de navegación (flecha izquierda)
* Solo visible en desktop/tablet cuando no hay leadingAction
*/
onNavigationClick?: () => void;
/**
* Handler para click en el botón de búsqueda
* Solo visible en mobile
*/
onSearchClick?: () => void;
/**
* Handler para click en el botón de carrito
*/
onCartClick?: () => void;
/**
* Handler para click en el botón de notificaciones
*/
onNotificationsClick?: () => void;
/**
* Muestra el selector de idioma en el menú de usuario.
* Si es true (por defecto), inserta el LanguageSelector con variante 'menu-item'.
* También puede recibir un elemento React personalizado.
*
* @default true
*/
languageSelector?: boolean | ReactNode;
/**
* Función de traducción personalizada (inyectada por el padre)
*/
t?: (key: string, defaultValue?: string) => string;
}
//# sourceMappingURL=Navbar.types.d.ts.map