import { BadgeProps } from '../Badge/Badge'; import { IconComponent } from '../../Icons/types'; import { ReactNode } from 'react'; export interface NavItemHandler { toggle: () => void; setIsCollapsed: (collapsed: boolean) => void; isCollapsed: boolean; isDrawerCollapsed: boolean; toggleDrawerCollapse?: () => void; subscribeToCollapse?: (listener: (collapsed: boolean) => void) => () => void; } export type SubLinksRender = (sublinks: PyrionTertiaryEntry[], controls: NavItemHandler) => ReactNode; export interface PyrionNavLink { type?: "link"; id?: string; title: string; path: string; relatedPaths?: string[]; badge?: BadgeProps; isView?: boolean | (() => boolean); disabled?: boolean; tooltipText?: string; selectorCss?: string; /** * Si es `true`, este path no forma parte de los prefijos del módulo contenedor * al decidir qué módulo está activo (atajos a rutas de otro módulo). * El link sigue navegando y resaltándose a sí mismo con normalidad. */ excludeFromActiveModuleResolution?: boolean; } export interface PyrionNavAction { type: "action"; id: string; title: string; badge?: BadgeProps; isView?: boolean | (() => boolean); disabled?: boolean; tooltipText?: string; selectorCss?: string; } export interface PyrionNavDivider { type: "divider"; } export type PyrionRailModuleLink = Omit & { id: string; icon: IconComponent; /** Ruta navegable del módulo. Opcional para módulos organizadores sin página propia. */ path?: string; links?: PyrionSidebarEntry[]; footerLinks?: PyrionSidebarEntry[]; }; export type PyrionRailEntry = PyrionRailModuleLink | (PyrionNavAction & { icon: IconComponent; }) | PyrionNavDivider; export type PyrionSidebarEntry = (PyrionNavLink & { icon?: IconComponent; sublinks?: PyrionTertiaryEntry[]; subLinksRender?: SubLinksRender; }) | (PyrionNavAction & { icon?: IconComponent; }) | PyrionNavDivider; export type PyrionTertiaryEntry = PyrionNavLink | PyrionNavDivider; export declare const isPyrionNavDivider: (entry: { type?: string; }) => entry is PyrionNavDivider; export declare const isPyrionNavAction: (entry: { type?: string; }) => entry is PyrionNavAction; export declare const isPyrionNavLink: (entry: T) => entry is T & PyrionNavLink; export declare const isRailModuleLink: (entry: PyrionRailEntry) => entry is PyrionRailModuleLink; /** @deprecated Use PyrionNavDivider */ export type PyrionLayoutNavDivider = PyrionNavDivider; /** @deprecated Use PyrionSidebarEntry */ export type PyrionLayoutNavEntry = PyrionSidebarEntry; /** @deprecated Use isPyrionNavDivider */ export declare const isPyrionLayoutNavDivider: (entry: { type?: string; }) => entry is PyrionNavDivider; /** @deprecated Use PyrionRailModuleLink */ export type PyrionLayoutModuleProps = PyrionRailModuleLink;