import type { ReactNode } from 'react'; import type { DropdownItemCollapsibleChildProps } from '../DropdownItemCollapsible/DropdownItemCollapsible.types'; /** * Props de la sección de items dentro del NavigationRailPanel */ export interface NavigationRailPanelSectionProps { /** * Encabezado de la sección (label del heading) * Ejemplo: "Categorías", "Departamentos", "Opciones" */ heading?: string; /** * Items que se muestran en la sección * Pueden ser items simples o items colapsables */ items: NavigationRailPanelItemProps[]; /** * Si mostrar divisor después de esta sección * @default true */ showDivider?: boolean; /** * Clases CSS adicionales */ className?: string; } /** * Props de un item individual dentro del NavigationRailPanel */ export interface NavigationRailPanelItemProps { /** * Texto o contenido principal del item * Ejemplo: "Users", "Settings", "Help" */ label: string; /** * Icono a mostrar antes del texto (izquierda) * Recomendado: 16x16px */ icon?: ReactNode; /** * Si el item es colapsable (muestra items anidados) * @default false */ isCollapsible?: boolean; /** * Items anidados que se muestran cuando el item está expandido * Se usa solo cuando isCollapsible es true */ children?: DropdownItemCollapsibleChildProps[]; /** * Si el item está expandido inicialmente (para items colapsables) * @default false */ defaultOpen?: boolean; /** * Si el item está deshabilitado * @default false */ disabled?: boolean; /** * Callback cuando se hace click en el item */ onClick?: (e: React.MouseEvent) => void; /** * Callback cuando el item colapsable se expande/contrae * @param open - nuevo estado de expansión */ onOpenChange?: (open: boolean) => void; /** * Clases CSS adicionales */ className?: string; } /** * Props del componente NavigationRailPanel * * @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6134-34415 */ export interface NavigationRailPanelProps { /** * Altura del panel en píxeles * Se usa para el contenedor principal * Ejemplo: 600, 800, 900 * @default 900 */ height?: number | string; /** * Ancho del panel en píxeles * Ancho estándar: 248px (con padding incluido) * @default 248 */ width?: number | string; /** * Encabezado del panel con icono, label, descripción y acción * Ejemplo: { label: "Settings", description: "Configure your preferences" } */ heading?: { label: string; description?: string; showDescription?: boolean; iconName?: string; actionLabel?: string; showAction?: boolean; onActionClick?: () => void; }; /** * Si mostrar el encabezado (DropdownItemHeading) * @default true */ showHeading?: boolean; /** * Configuración del input de búsqueda */ search?: { /** * Placeholder del input * @default "Buscar módulo" */ placeholder?: string; /** * Valor actual del input */ value?: string; /** * Callback cuando cambia el valor del input */ onChange?: (value: string) => void; }; /** * Si mostrar el input de búsqueda * @default true */ showSearch?: boolean; /** * Secciones de items dentro del panel * Cada sección puede tener un encabezado y múltiples items */ sections?: NavigationRailPanelSectionProps[]; /** * Alternativa a sections: items simples sin agrupar * Se usan cuando no necesitas secciones */ items?: NavigationRailPanelItemProps[]; /** * Clases CSS adicionales para el contenedor principal */ className?: string; /** * Clases CSS adicionales para el panel interno */ panelClassName?: string; } //# sourceMappingURL=NavigationRailPanel.types.d.ts.map