import type { ReactNode } from 'react'; /** * Props para NavigationRailItem * * Componente independiente para items individuales de NavigationRail. * Implementación pixel-perfect según Figma (node 4294-22931). * * **Estados:** * - `Enabled`: Estado normal del item * - `Hover`: Overlay de color en el icon container * - `Selected`: Background con overlay según Figma * - `Focus`: Focus ring de 4px (#60b6fa) con offset de 2px (#dbeefe) * - `Disabled`: Opacity 55% con pointer-events-none * * **Especificaciones de Figma:** * - Ancho: 56px (w-14) * - Altura: auto (flex-col) * - Gap: 4px entre icon y label * - Padding: 2px horizontal, 0px vertical (px-0.5) * - Border radius: 9999px (rounded-full) en icon container * - Tipografía label: Label XXSmall (10px Bold, leading 12px) * - Icono: 16x16px * * @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4294-22931 * @see docs/colors.md - Sistema de colores * @see docs/typography.md - Sistema tipográfico (Label XXSmall) * @see docs/spacing.md - Sistema de espaciado * @see docs/shadows.md - Sistema de sombras (focus ring) */ export interface NavigationRailItemProps { /** * Icono a mostrar en el item * Tamaño recomendado: 16x16px * Tipos compatibles: ReactNode, SVG, Heroicons, etc. * * @example * ```tsx * import { HomeIcon } from '@heroicons/react/24/outline'; * } /> * ``` */ icon: ReactNode; /** * Label/texto del item de navegación * Se muestra debajo del icono en tipografía Label XXSmall * * @example * */ label: string; /** * Si el item está seleccionado actualmente * * Estado visual: * - Background: bg-primary-100 (#dbeefe) con overlay rgba(0,0,0,0.024) * - Icono: text-primary-600 (#0e79fd) * - Label: text-content-primary * * @default false */ selected?: boolean; /** * Si el item está deshabilitado * * Estado visual: * - Opacity: 55% * - Cursor: not-allowed * - Pointer-events: none * * @default false */ disabled?: boolean; /** * Mostrar badge de notificación (dot rojo) * * El badge se posiciona en la esquina superior derecha del icon container. * Tamaño: 13x13px * Color: #b91c1c (red-700) * Posición: left-[34px], top-[-3px] * * @default false */ badge?: boolean; /** * Número a mostrar en el badge (reemplaza el dot simple) * * Si el número es mayor a 99, muestra "99+" * Tipografía: 10px Bold * Color: white (#ffffff) * * @example * // Muestra: 5 * // Muestra: 99+ */ badgeCount?: number; /** * Handler para evento click del item * * Se ejecuta cuando el usuario hace click en el item, * incluso si está en estado selected. */ onClick?: () => void; /** * Handler para evento mouse enter del item * * Se ejecuta cuando el cursor entra en el área del item. * Útil para mostrar paneles o menús contextuales. */ onMouseEnter?: () => void; /** * Handler para evento mouse leave del item * * Se ejecuta cuando el cursor sale del área del item. * Útil para ocultar paneles o menús contextuales. */ onMouseLeave?: () => void; /** * Label para accesibilidad (ARIA-label) * * Si no se proporciona, usa el valor de `label` * * @example * */ ariaLabel?: string; /** * ID único del item * * Usado para identificar el item en callbacks y para navegación. * Se añade como atributo data-item-id en el elemento DOM. * * @example * */ id?: string; /** * Mostrar el label del texto * * Si es false, solo se muestra el icono * * @default true */ showLabelText?: boolean; /** * Mostrar icono * * Si es false, solo se muestra el label * * @default true */ showIcon?: boolean; /** * Clases CSS adicionales personalizadas * * Se aplican al contenedor principal (button) */ className?: string; } /** * Estados posibles del componente según Figma * * - `Enabled`: Estado normal, sin interacción * - `Hover`: Mouse over el item * - `Selected`: Item actualmente seleccionado * - `Focus`: Keyboard focus (accesibilidad) * - `Disabled`: Item deshabilitado, no interactivo */ export type NavigationRailItemState = 'Enabled' | 'Hover' | 'Selected' | 'Focus' | 'Disabled'; //# sourceMappingURL=NavigationRailItem.types.d.ts.map