import type { ReactNode, ReactElement } from 'react'; import type { BadgeColor } from '../../components/Badge/Badge.types'; import type { UserDropdownProps, NotificationsProps } from '../../components/Navbar/Navbar.types'; import type { NavigationRailGroupMenuItem } from '../../components/NavigationRailGroup/NavigationRailGroup.types'; import type { TableColumn, SortDirection, PaginationProps as TablePaginationProps } from '../../components/Table/Table.types'; import type { ButtonType } from '../../components/Button/Button.types'; /** * Interfaz para los filtros rápidos (badges en la barra de navegación) */ export interface ListViewQuickFilter { /** ID único del filtro */ id: string; /** Label del filtro */ label: string; /** Color del badge */ color: BadgeColor; /** Icono del filtro */ icon?: ReactElement; /** Si el filtro está activo */ active?: boolean; /** Handler de click */ onClick?: () => void; } /** * Interfaz para los botones de acción */ export interface ListViewActionButton { /** ID del botón */ id: string; /** Label del botón */ label: string; /** Icono del botón */ leftIcon?: ReactNode; /** Handler del click */ onClick: () => void; /** Tipo del botón */ type?: ButtonType; } /** * Dirección de ordenamiento (re-exportar del tipo de Table) */ export type ListViewSortDirection = SortDirection; /** * Interfaz para las columnas de la tabla (re-exportar del tipo de Table) */ export interface ListViewColumn extends TableColumn { } /** * Props del componente ListView */ export interface ListViewProps { /** Título de la vista */ title?: string; /** Nombre del producto en el navbar */ navbarProductName?: string; /** Título de la tabla */ tableTitle?: string; /** Columnas de la tabla */ columns: ListViewColumn[]; /** Datos de la tabla */ data: T[]; /** Items de navegación lateral */ navigationItems?: NavigationRailGroupMenuItem[]; /** Filtros rápidos */ quickFilters?: ListViewQuickFilter[]; /** Botones de acción */ actionButtons?: ListViewActionButton[]; /** Dropdown del usuario */ userDropdown?: UserDropdownProps; /** Notificaciones */ notifications?: NotificationsProps; /** Badge de ambiente */ environmentBadge?: string; /** Si mostrar el NavigationRail */ showNavigationRail?: boolean; /** Estado del NavigationRailGroup */ navigationRailState?: 'collapsed' | 'expanded' | 'hover' | 'searcher'; /** Handler para cambio de estado del NavigationRailGroup */ onNavigationRailStateChange?: (state: 'collapsed' | 'expanded' | 'hover' | 'searcher' | undefined) => void; /** Handler para click en item de navegación */ onNavItemClick?: (item: NavigationRailGroupMenuItem) => void; /** Handler de búsqueda */ onSearch?: (query: string) => void; /** Placeholder del buscador */ searchPlaceholder?: string; /** Handler de ordenamiento */ onSort?: (column: keyof T | string, direction: SortDirection) => void; /** Columna de ordenamiento actual */ sortColumn?: keyof T | string; /** Dirección de ordenamiento actual */ sortDirection?: SortDirection; /** Props de paginación */ pagination?: TablePaginationProps; /** Si está cargando */ loading?: boolean; /** Número de filas skeleton */ loadingRows?: number; /** Mensaje cuando no hay datos */ emptyMessage?: string; /** Clases adicionales */ className?: string; /** Handler click en notificaciones */ onNotificationsClick?: () => void; /** Opciones del dropdown de vista */ viewOptions?: Array<{ id: string; label: string; }>; /** Opción de vista seleccionada */ selectedViewOption?: string; /** Handler de cambio de opción de vista */ onViewOptionChange?: (id: string) => void; } //# sourceMappingURL=ListView.types.d.ts.map